🦞 OpenClaw

Clique em qualquer componente para expandir e entender em profundidade

OpenClaw LLM Provider Channels Storage Fronteira API
🦞 OpenClaw β€” Plataforma de Agentes
Gateway :18789
Agentes
ReAct Loop
Tools (~25)
Skills
Cron Engine
Sessions
Memory
Compaction

🌐 Gateway OPENCLAW

Processo Node.js central. WebSocket server na porta 18789. Tudo passa por ele β€” mensagens, tool calls, crons, health checks. Γ‰ o control plane ΓΊnico.

Componentes internos:

  • Session Router β€” recebe mensagem β†’ decide qual agente responde (via routing bindings)
  • Channel Adapters β€” Baileys (WhatsApp), grammY (Telegram), discord.js, Slack SDK, +40 canais
  • Auth & Device Pairing β€” Ed25519 challenge-response. Dispositivos se autenticam via assinatura criptogrΓ‘fica.
  • Event Bus β€” tick a cada 15s, presence, health monitor
  • Cron Scheduler β€” executa jobs registrados
  • Health Monitor β€” verifica canais a cada 5 min, auto-restart atΓ© 10x/hora
Protocolo WebSocket:
1. Gateway envia: connect.challenge (nonce + timestamp)
2. Cliente envia: connect (role, scope, assinatura Ed25519)
3. Gateway responde: hello-ok (protocol, policies, tick 15s)

Frame types:
  req  β†’ client para server (method + params)
  res  β†’ server para client (payload | error)
  event β†’ push assΓ­ncrono (agent, presence, health)

Bind modes: loopback | lan | tailnet | auto | custom
Auth modes: token | password | trusted-proxy | none

O LLM NÃO interage com o gateway. O gateway chama o LLM via API HTTP. O LLM não sabe que o gateway existe.

πŸ€– Agentes OPENCLAW

Cada agente = contexto de execuΓ§Γ£o 100% isolado: workspace prΓ³prio, auth prΓ³pria, sessions prΓ³prias, tool permissions prΓ³prias.

Soul-Based System β€” arquivos que definem o agente:

workspace/
β”œβ”€β”€ AGENTS.md      # Regras operacionais (alta prioridade no prompt)
β”œβ”€β”€ SOUL.md        # Personalidade, tom, idioma
β”œβ”€β”€ IDENTITY.md    # Nome, emoji, avatar
β”œβ”€β”€ USER.md        # Perfil do humano (nome, timezone)
β”œβ”€β”€ TOOLS.md       # Notas sobre tools locais
β”œβ”€β”€ MEMORY.md      # MemΓ³ria curada de longo prazo
β”œβ”€β”€ HEARTBEAT.md   # Tarefas periΓ³dicas (cron-like leve)
└── BOOTSTRAP.md   # Guia inicial (1x, auto-deleta)

ComposiΓ§Γ£o do system prompt:

PI Core (base) β†’ AGENTS.md β†’ SOUL.md β†’ Skills β†’ Memory β†’ Tool defs

O OpenClaw monta tudo isso como um prompt gigante
e envia ao LLM. O LLM "Γ©" o agente porque leu
essas instruΓ§Γ΅es β€” mas se trocar o SOUL.md,
a personalidade muda, mesmo com o mesmo LLM.

Routing de mensagens (quem responde):

  • 1. Peer match exato (DM/grupo/canal ID)
  • 2. Guild + role (Discord)
  • 3. Channel wildcard
  • 4. Default agent (fallback) β€” recebe tudo que nΓ£o tem match

Multi-agent: vΓ‘rios agentes no mesmo gateway. Cada um responde por routing bindings. Isolamento total β€” um nΓ£o vΓͺ as sessions do outro.

πŸ”„ ReAct Loop OPENCLAW orquestra β†’ LLM raciocina

O loop principal de execuΓ§Γ£o do agente. O LLM raciocina, chama tools, observa resultados, repete.

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                 ReAct Loop                    β”‚
β”‚                                              β”‚
β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”β”‚
β”‚   β”‚ πŸ’­ REASON │───→│ ⚑ ACT    │───→│ πŸ‘€ OBS β”‚β”‚
β”‚   β”‚  (LLM)   β”‚    β”‚ (tool)   β”‚    β”‚(result)β”‚β”‚
β”‚   β””β”€β”€β”€β”€β–²β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”¬β”€β”€β”€β”€β”˜β”‚
β”‚        β”‚                              β”‚      β”‚
β”‚        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜      β”‚
β”‚              repete atΓ© concluir             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Quem faz o quΓͺ:
  REASON  β†’ LLM decide o que fazer (inferΓͺncia)
  ACT     β†’ OpenClaw intercepta tool call, executa no host
  OBSERVE β†’ OpenClaw devolve resultado ao LLM
  REPEAT  β†’ OpenClaw verifica se LLM quer outra tool call

O OpenClaw Γ© o "maestro". O LLM Γ© o "mΓΊsico".

Exemplo concreto (youtube-summary):

  • REASON: "Preciso extrair metadata do vΓ­deo"
  • ACT: exec("yt-dlp --dump-single-json URL")
  • OBSERVE: JSON com tΓ­tulo, canal, duraΓ§Γ£o, legendas
  • REASON: "Agora preciso baixar legendas em pt-BR"
  • ACT: exec("yt-dlp --write-auto-subs --skip-download...")
  • OBSERVE: arquivo .vtt salvo
  • REASON: "Vou ler e sumarizar"
  • ACT: read("/tmp/subs.vtt")
  • REASON: "Pronto, vou gerar o resumo em portuguΓͺs"
  • β†’ Resposta final enviada ao usuΓ‘rio

πŸ› οΈ Tools (~25 built-in) OPENCLAW

Capacidades que o agente pode usar. O OpenClaw intercepta tool calls do LLM e executa no host. O LLM pede, o OpenClaw faz.

Shell:      bash, exec
Filesystem: read, write, edit, apply_patch
Browser:    browser_* (Playwright/Chrome CDP)
Web:        web_search (Brave), web_fetch
Media:      image, tts
Control:    gateway, cron, message
Sessions:   sessions_list, sessions_send, sessions_history, sessions_spawn
Memory:     memory_search
Outros:     nodes, canvas, elevated

Tool Permissions (narrowing β€” sΓ³ restringe, nunca expande):

Tool Profile β†’ Global Policy β†’ Agent Policy β†’ Sandbox Policy

Cada camada pode REMOVER acesso, nunca adicionar.

Profiles:
  coding       β†’ ler, escrever, executar
  analysis     β†’ ler, explorar (nΓ£o escreve)
  verification β†’ ler, executar (nΓ£o escreve)
  messaging    β†’ set restrito para assistentes

O LLM vΓͺ: uma lista de tools disponΓ­veis no prompt. Ele "chama" uma tool gerando JSON com name + args. O OpenClaw intercepta, executa, e devolve o resultado como a prΓ³xima mensagem.

πŸ“‹ Skills OPENCLAW

SKILL.md = runbooks em Markdown. NΓ£o sΓ£o plugins executΓ‘veis. SΓ£o instruΓ§Γ΅es que ensinam o LLM a orquestrar tools para uma tarefa.

PrecedΓͺncia (alta β†’ baixa):
1. Workspace: <workspace>/skills/     (maior)
2. Managed:   ~/.openclaw/skills/
3. Bundled:   dentro do pacote OpenClaw
4. Extra:     via skills.load.extraDirs

Lazy-loading: O prompt inclui apenas um registry compacto (nome + descriΓ§Γ£o). O SKILL.md completo sΓ³ Γ© lido quando o LLM decide usar a skill (via tool read).

Formato SKILL.md:

---
name: youtube-summary
description: Resumo de vΓ­deos YouTube
user-invocable: true
metadata: {"openclaw":{"emoji":"▢️","os":["linux"]}}
---
## What it does
## Inputs needed
## Workflow (passos numerados)
## Output format
## Guardrails
## Failure handling

Token impact: ~24 tokens por skill no registry. Skills com always: true sΓ£o sempre injetadas.

⏱️ Cron Engine OPENCLAW

Agendador de jobs built-in no gateway. Dispara sessΓ΅es de agente em schedule.

openclaw cron add --name "job" --agent <id> \
  --every 5m --session isolated \
  --timeout-seconds 600 --message "prompt"

openclaw cron list          # Ver jobs ativos
openclaw cron delete --id X # Remover job
openclaw cron run --id X    # ForΓ§ar execuΓ§Γ£o

Como funciona:

  • Jobs armazenados em ~/.openclaw/cron/jobs.json
  • Gateway scheduler verifica a cada minuto
  • Quando dispara: spawna sessΓ£o isolada do agente com o prompt do job
  • SessΓ£o roda, completa, e termina
  • --session isolated = sessΓ£o descartΓ‘vel (sem histΓ³rico)

O LLM nΓ£o sabe que crons existem β€” ele sΓ³ recebe uma sessΓ£o nova com um prompt. NΓ£o sabe se veio de cron, WhatsApp ou CLI.

πŸ“Ό Sessions OPENCLAW

HistΓ³rico de conversa persistido em disco. JSONL append-only. O OpenClaw carrega no prompt para dar continuidade. O LLM Γ© stateless β€” sessions sΓ£o a "memΓ³ria de curto prazo".

Formato: ~/.openclaw/agents/<id>/sessions/<key>.jsonl

Session keys (encode security boundaries):
  agent:main:main                    β†’ sessΓ£o principal
  agent:main:dm:whatsapp:+5561...    β†’ DM WhatsApp
  agent:main:group:discord:123       β†’ grupo Discord

Cada linha JSONL = um turno:
  user message | agent thought | tool call | tool result | response

dmScope (isolamento):
  main              β†’ todos DMs na mesma sessΓ£o
  per-peer          β†’ isolado por sender
  per-channel-peer  β†’ isolado por canal + sender (recomendado)

Maintenance:

  • Reset: daily (reset Γ s 4h), idle (apΓ³s N min), manual
  • Pruning: remove tool results antigos in-memory (nΓ£o altera disco)
  • Rotation: rotateBytes: "10mb" β€” arquivo novo quando grande
  • Retention: pruneAfter: "7d" β€” remove sessions velhas

🧠 Memory System OPENCLAW

O LLM Γ© stateless. Toda memΓ³ria persistente Γ© gerenciada pelo OpenClaw. 4 camadas, da mais efΓͺmera Γ  mais permanente.

CAMADA 4 β€” Git History (permanente)
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Versionamento do workspace (.git/)      β”‚
β”‚ Tudo que Γ© escrito em arquivo tem       β”‚
β”‚ histΓ³rico. Nunca perde.                 β”‚
β”‚ Dono: OpenClaw                          β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

CAMADA 3 β€” MEMORY.md (longo prazo curada)
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Arquivo Markdown no workspace           β”‚
β”‚ O agente escreve o que quer lembrar     β”‚
β”‚ Carregado apenas na sessΓ£o principal    β”‚
│ NÃO carregado em grupo/DM sandboxed    │
β”‚ Dono: OpenClaw (persiste e carrega)     β”‚
β”‚ Quem escreve: LLM (via tool write)     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

CAMADA 2 β€” Notas DiΓ‘rias (mΓ©dio prazo)
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ memory/YYYY-MM-DD.md                    β”‚
β”‚ Auto-load: hoje + ontem no inΓ­cio       β”‚
β”‚ AcessΓ­veis via memory_search            β”‚
β”‚ Dono: OpenClaw                          β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

CAMADA 1 β€” Session Transcript (curto prazo)
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ sessions/*.jsonl                        β”‚
β”‚ Carregado inteiro no prompt             β”‚
β”‚ Compactado quando contexto enche        β”‚
β”‚ Dono: OpenClaw                          β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Vector Embeddings (busca semΓ’ntica):

DB: ~/.openclaw/memory/<agentId>.sqlite

GeraΓ§Γ£o: OpenClaw envia texto β†’ LLM provider retorna vetor
         (cascata: local β†’ OpenAI β†’ Gemini β†’ disabled)
IndexaΓ§Γ£o: file watcher com 1.5s debounce (auto-reindex)

Busca HΓ­brida (2 algoritmos):
  BM25 (keyword)   β†’ match textual exato
  Vector (semΓ’ntico) β†’ match por significado
  Post-processing:
    - MMR diversity re-ranking
    - Temporal decay (recentes pesam mais)

Ciclo de Vida:

1. CRIAÇÃO    β†’ LLM chama write("MEMORY.md", ...)
2. PERSISTÊNCIA β†’ OpenClaw grava no disco
3. INDEXAÇÃO   β†’ File watcher β†’ embeddings β†’ SQLite
4. RETRIEVAL   β†’ Auto-load (MEMORY.md + hoje/ontem)
                  ou memory_search (vector + BM25)
5. INJEÇÃO     β†’ OpenClaw coloca no prompt do LLM
6. USO         β†’ LLM "lΓͺ" como se soubesse

O LLM NΓƒO "lembra". Ele "lΓͺ" o que o OpenClaw colocou.
Se nΓ£o foi escrito em arquivo, estΓ‘ perdido.

πŸ—œοΈ Compaction OPENCLAW orquestra β†’ LLM sumariza

Quando o contexto enche, OpenClaw sumariza a conversa antiga para liberar espaΓ§o. Permite conversas infinitas.

PASSO A PASSO:

1. DETECÇÃO (OpenClaw)
   Tokens se aproximam do limite do modelo
   Ex: 120k de 128k usados

2. MEMORY FLUSH (OpenClaw β†’ LLM) β€” turno invisΓ­vel
   OpenClaw: "Antes de compactar, salve notas
   importantes em MEMORY.md"
   LLM escreve o que acha relevante (NO_REPLY)
   Isso preserva info crΓ­tica antes de sumarizar

3. SUMARIZAÇÃO (OpenClaw β†’ LLM)
   OpenClaw: "Sumarize esta conversa preservando
   informaΓ§Γ΅es crΓ­ticas e identificadores"
   LLM gera resumo compacto

4. SUBSTITUIÇÃO (OpenClaw)
   HistΓ³rico antigo β†’ substituΓ­do pelo sumΓ‘rio
   Marker de compaction gravado no JSONL
   Contexto volta a ter espaΓ§o (~70% liberado)

5. CONTINUAÇÃO
   PrΓ³xima mensagem: [sumΓ‘rio] + [msgs recentes]
   Continuidade semΓ’ntica mantida
   O LLM NÃO sabe que foi compactado

identifierPolicy:
  "strict"  β†’ preserva IDs opacos no sumΓ‘rio (default)
  "off"     β†’ nΓ£o preserva
  "custom"  β†’ instruΓ§Γ΅es customizadas
↓ monta prompt e envia via API HTTP ↓
⚑ FRONTEIRA API β€” OpenClaw faz chamada HTTP/streaming ao LLM provider. O LLM nΓ£o sabe que o OpenClaw existe.
🧠 LLM Provider β€” O Modelo de IA (OpenAI / Anthropic / ...)
Modelo (GPT/Claude)
InferΓͺncia
Tool Calls
Context Window

πŸ€– Modelo LLM PROVIDER

O "cΓ©rebro". O ΓΊnico componente que nΓ£o Γ© do OpenClaw. Pode ser trocado a qualquer momento β€” a plataforma Γ© agnΓ³stica.

Providers suportados (20+):

  • OpenAI: GPT-5.4, GPT-5.4-codex (via ChatGPT subscription OAuth)
  • Anthropic: Claude Opus, Sonnet, Haiku
  • Google: Gemini Pro, Ultra
  • Mistral: Large, Medium
  • Local: Ollama, vLLM, sglang
  • Proxy: OpenRouter, LiteLLM, AI Gateway

Fallback: Se o primary falhar, OpenClaw tenta o prΓ³ximo da lista automaticamente.

O modelo NΓƒO sabe: que Γ© um "agente", que existe WhatsApp, que tem ferramentas reais, que tem memΓ³ria persistente. Ele sΓ³ vΓͺ um prompt enorme e responde.

⚑ InferΓͺncia LLM PROVIDER

O LLM recebe um prompt montado pelo OpenClaw e gera uma resposta. Stateless β€” cada chamada Γ© independente. NΓ£o existe "sessΓ£o" no LLM.

Chamada tΓ­pica (simplificada):

POST https://api.openai.com/v1/chat/completions
{
  "model": "gpt-5.4",
  "messages": [
    {"role": "system", "content": "[PROMPT GIGANTE DO OPENCLAW]"},
    {"role": "user", "content": "Resuma este vΓ­deo..."},
    {"role": "assistant", "content": "Vou executar yt-dlp...",
     "tool_calls": [{"function":{"name":"exec","arguments":"..."}}]},
    {"role": "tool", "content": "[resultado do exec]"},
    ...
  ],
  "tools": [...lista de tools...],
  "stream": true
}

O OpenClaw constrΓ³i TODA a lista de messages. O LLM sΓ³ processa e responde. NΓ£o gerencia estado.

πŸ”§ Tool Calls LLM decide β†’ OPENCLAW executa

O LLM pode "pedir" para executar uma ferramenta. Ele gera um JSON com nome + argumentos. O OpenClaw intercepta, executa no host, e devolve o resultado.

1. LLM gera na resposta:
   {"tool_calls": [{
     "function": {
       "name": "exec",
       "arguments": "{\"command\": \"free -h\"}"
     }
   }]}

2. OpenClaw intercepta (NÃO vai pro usuÑrio)
3. OpenClaw verifica permissΓ΅es (tool policy)
4. OpenClaw executa no host: free -h
5. OpenClaw devolve resultado ao LLM como nova mensagem:
   {"role": "tool", "content": "total: 7.8Gi  used: 1.1Gi..."}

6. LLM continua raciocinando com o resultado

O LLM NÃO executa nada. Ele só diz "quero rodar X".
O OpenClaw decide se pode e executa.

πŸ“¦ Context Window OPENCLAW monta β†’ LLM processa

Tudo que o LLM "vΓͺ" a cada chamada. 100% montado pelo OpenClaw. O LLM nΓ£o escolhe o que entra.

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚           CONTEXT WINDOW DO LLM             β”‚
β”‚                                             β”‚
β”‚  β”Œβ”€β”€ System Prompt (OpenClaw) ─────────────┐│
β”‚  β”‚  β€’ Tool definitions (~25 tools)         β”‚β”‚
β”‚  β”‚  β€’ Skills registry (nome+desc only)     β”‚β”‚
β”‚  β”‚  β€’ Runtime metadata (host, OS, hora)    β”‚β”‚
β”‚  β”‚  β€’ AGENTS.md (regras operacionais)      β”‚β”‚
β”‚  β”‚  β€’ SOUL.md (personalidade)              β”‚β”‚
β”‚  β”‚  β€’ MEMORY.md (memΓ³ria curada)           β”‚β”‚
β”‚  β”‚  β€’ Notas de hoje + ontem                β”‚β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β”‚
β”‚                                             β”‚
β”‚  β”Œβ”€β”€ HistΓ³rico de conversa ────────────────┐│
β”‚  β”‚  user β†’ assistant β†’ tool β†’ result β†’ ... β”‚β”‚
β”‚  β”‚  (ou sumΓ‘rio pΓ³s-compaction)            β”‚β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β”‚
β”‚                                             β”‚
β”‚  β”Œβ”€β”€ Mensagem atual ───────────────────────┐│
β”‚  β”‚  "Resuma este vΓ­deo: https://..."       β”‚β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β”‚
β”‚                                             β”‚
β”‚  Bootstrap cap: 150k chars total            β”‚
β”‚  Per-file limit: 20k chars                  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

O QUE O LLM NΓƒO VÊ:
  ❌ Qual canal (WhatsApp, Telegram...)
  ❌ Outros agentes no gateway
  ❌ Cron jobs em background
  ❌ Sessions de outros usuÑrios
  ❌ Memória não injetada no prompt
  ❌ Conversas anteriores (se não estão no histórico)
  ❌ OAuth tokens, API keys, credentials
O LLM é stateless. NÃO tem memória. Tudo vem do prompt montado pelo OpenClaw.
πŸ“± Channels β€” 100% OpenClaw
WhatsApp
Telegram
40+ canais

πŸ’¬ WhatsApp OPENCLAW

Via Baileys (implementaΓ§Γ£o WhatsApp Web em Node.js). Single-device por host β€” apenas 1 gateway por conta.

  • Pairing: QR code ou pairing code (openclaw channels login --channel whatsapp)
  • DM Policy: pairing (default) β€” desconhecidos recebem cΓ³digo de 6 dΓ­gitos, expira em 1h
  • Grupo: requireMention: true β€” sΓ³ responde se mencionado
  • Media: atΓ© 50MB (mediaMaxMb)
  • Health: auto-restart se desconectar (atΓ© 10x/hora)

O LLM nΓ£o sabe que WhatsApp existe. Ele recebe uma mensagem formatada pelo OpenClaw: [WhatsApp +5561... 16:01 UTC] Resuma este vΓ­deo...

✈️ Telegram OPENCLAW

Via grammY framework. Bot token. Suporta grupos com mention patterns customizΓ‘veis.

  • Auth: Bot token (TELEGRAM_BOT_TOKEN)
  • Grupos: mention patterns: ["@bot", "bot"]
  • Inline: suporta inline queries e callbacks

🌐 40+ Canais OPENCLAW

Cada canal tem adapter prΓ³prio, auth especΓ­fica, e polΓ­ticas configurΓ‘veis. O LLM nΓ£o sabe qual canal estΓ‘ sendo usado.

WhatsApp  β†’ Baileys         Signal    β†’ signal-cli
Telegram  β†’ grammY          iMessage  β†’ imsg (macOS)
Discord   β†’ discord.js      Matrix    β†’ matrix-js-sdk
Slack     β†’ Slack SDK        Google Chat β†’ Google API
MS Teams  β†’ Bot Framework   + muitos outros

Routing: Cada canal pode ser roteado para um agente diferente via bindings.

πŸ’Ύ Storage β€” 100% OpenClaw (disco local)
openclaw.json
DiretΓ³rios
Credentials

βš™οΈ openclaw.json OPENCLAW

ConfiguraΓ§Γ£o principal. JSON5 (suporta comentΓ‘rios). Hot-reload β€” mudanΓ§as seguras aplicadas sem restart.

Root-level keys:
  agents    β†’ defaults, lista, model, workspace, concurrency
  channels  β†’ WhatsApp, Telegram, Discord, Slack...
  gateway   β†’ port, bind, auth, reload
  session   β†’ dmScope, reset, pruning, maintenance
  cron      β†’ jobs, retention, concurrency
  tools     β†’ permissions, exec, fs, elevated, sandbox
  skills    β†’ entries, load, extra dirs
  browser   β†’ headless, SSRF policy
  env       β†’ vars, secrets, shell env

Hot-reload modes:
  hybrid  β†’ hot-apply seguras, restart para crΓ­ticas (default)
  hot     β†’ apenas seguras
  restart β†’ restart para tudo
  off     β†’ manual

πŸ“ DiretΓ³rios OPENCLAW

~/.openclaw/
β”œβ”€β”€ openclaw.json                  # Config principal
β”œβ”€β”€ agents/<id>/agent/             # Auth por agente
β”‚   β”œβ”€β”€ auth-profiles.json         # OAuth tokens
β”‚   └── models.json                # Model overrides
β”œβ”€β”€ workspace/                     # Workspace main (git repo)
β”‚   β”œβ”€β”€ AGENTS.md / SOUL.md / ...  # Soul-based files
β”‚   β”œβ”€β”€ memory/                    # Notas diΓ‘rias
β”‚   └── skills/                    # Skills (maior precedΓͺncia)
β”œβ”€β”€ workspaces/                    # Workspaces adicionais
β”œβ”€β”€ skills/                        # Skills gerenciadas
β”œβ”€β”€ memory/<id>.sqlite             # Vector embeddings
β”œβ”€β”€ cron/jobs.json                 # Cron jobs
β”œβ”€β”€ credentials/                   # Secrets (0600)
β”œβ”€β”€ browser/                       # Perfil Chrome
β”œβ”€β”€ identity/device.json           # Ed25519 keypair
└── logs/ media/ devices/          # Auxiliares

πŸ” Credentials OPENCLAW

OAuth tokens, API keys, secrets. PermissΓ£o 0600. Nunca compartilhar entre agentes.

  • auth-profiles.json: { access, refresh, expires, accountId }
  • OAuth auto-refresh: quando access expira, usa refresh_token (sob file lock)
  • Se refresh falhar: openclaw models auth login --provider openai-codex (TTY interativo)
  • Secret refs: {"source":"env","id":"VAR"} ou {"source":"file","id":"/path"}

O LLM nunca vΓͺ credentials. O OpenClaw injeta auth nos headers da API call. Secrets sΓ£o redacted nos logs.