Agent coordination
agentes ACP
Agent Client Protocol (ACP) sessões permitem que o OpenClaw execute harnesses de codificação externos (por exemplo Claude Code, Cursor, Copilot, Droid, OpenClaw ACP, OpenCode, Gemini CLI e outros harnesses ACPX compatíveis) por meio de um plugin de backend ACP.
Cada criação de sessão ACP é rastreada como uma tarefa em segundo plano.
Qual página eu quero?
| Você quer… | Use isto | Observações |
|---|---|---|
| Vincular ou controlar Codex na conversa atual | /codex bind, /codex threads |
Caminho nativo do servidor de app Codex quando o plugin codex está habilitado; inclui respostas de chat vinculadas, encaminhamento de imagens, modelo/rápido/permissões, parar e controles de direção. ACP é um fallback explícito |
| Executar Claude Code, Gemini CLI, Codex ACP explícito ou outro harness externo por meio do OpenClaw | Esta página | Sessões vinculadas ao chat, /acp spawn, sessions_spawn({ runtime: "acp" }), tarefas em segundo plano, controles de runtime |
| Expor uma sessão do OpenClaw Gateway como um servidor ACP para um editor ou cliente | openclaw acp |
Modo bridge. IDE/cliente fala ACP com o OpenClaw por stdio/WebSocket |
| Reutilizar uma CLI de IA local como modelo fallback somente de texto | Backends de CLI | Não é ACP. Sem ferramentas do OpenClaw, sem controles ACP, sem runtime de harness |
Isso funciona sem configuração extra?
Sim, depois de instalar o plugin oficial de runtime ACP:
openclaw plugins install @openclaw/acpxopenclaw config set plugins.entries.acpx.enabled trueCheckouts do código-fonte podem usar o plugin local do workspace extensions/acpx depois de
pnpm install. Execute /acp doctor para uma verificação de prontidão.
O OpenClaw só ensina agentes sobre criação ACP quando o ACP está realmente
utilizável: o ACP deve estar habilitado, o dispatch não pode estar desabilitado, a sessão
atual não pode estar bloqueada por sandbox e um backend de runtime deve estar
carregado. Se essas condições não forem atendidas, as Skills do plugin ACP e a
orientação de ACP em sessions_spawn permanecem ocultas para que o agente não sugira
um backend indisponível.
Armadilhas da primeira execução
- Se
plugins.allowestiver definido, ele é um inventário restritivo de plugins e deve incluiracpx; caso contrário, o backend ACP instalado será bloqueado intencionalmente e/acp doctorreportará a entrada ausente na lista de permissões. - O adaptador ACP do Codex é preparado com o plugin
acpxe iniciado localmente quando possível. - Codex ACP é executado com um
CODEX_HOMEisolado; o OpenClaw copia entradas de projeto confiáveis e configuração segura de roteamento de modelo/provedor da configuração do Codex no host, enquanto autenticação, notificações e hooks permanecem na configuração do host. - Outros adaptadores de harness de destino ainda podem ser buscados sob demanda com
npxna primeira vez que você os usa. - A autenticação do fornecedor ainda precisa existir no host para esse harness.
- Se o host não tiver npm ou acesso à rede, as buscas de adaptador na primeira execução falham até que os caches sejam pré-aquecidos ou o adaptador seja instalado de outra forma.
Pré-requisitos de runtime
O ACP inicia um processo real de harness externo. O OpenClaw é responsável por roteamento, estado de tarefa em segundo plano, entrega, vínculos e política; o harness é responsável por seu login de provedor, catálogo de modelos, comportamento do sistema de arquivos e ferramentas nativas.
Antes de culpar o OpenClaw, verifique:
/acp doctorreporta um backend habilitado e saudável.- O id de destino é permitido por
acp.allowedAgentsquando essa lista de permissões está definida. - O comando do harness consegue iniciar no host Gateway.
- A autenticação do provedor está presente para esse harness (
claude,codex,gemini,opencode,droid, etc.). - O modelo selecionado existe para esse harness - ids de modelo não são portáveis entre harnesses.
- O
cwdsolicitado existe e está acessível, ou omitacwde deixe o backend usar seu padrão. - O modo de permissão corresponde ao trabalho. Sessões não interativas não conseguem clicar em prompts nativos de permissão, portanto execuções de codificação com muita escrita/execução geralmente precisam de um perfil de permissão ACPX que possa prosseguir sem interação.
Ferramentas de plugin do OpenClaw e ferramentas integradas do OpenClaw não são expostas a harnesses ACP por padrão. Habilite as bridges MCP explícitas em Agentes ACP - configuração somente quando o harness deve chamar essas ferramentas diretamente.
Destinos de harness compatíveis
Com o backend acpx, use estes ids de harness como destinos de /acp spawn <id>
ou sessions_spawn({ runtime: "acp", agentId: "<id>" }):
| Id do harness | Backend típico | Observações |
|---|---|---|
claude |
Adaptador ACP do Claude Code | Requer autenticação do Claude Code no host. |
codex |
Adaptador ACP do Codex | Fallback ACP explícito somente quando /codex nativo está indisponível ou ACP é solicitado. |
copilot |
Adaptador ACP do GitHub Copilot | Requer autenticação da CLI/runtime do Copilot. |
cursor |
ACP da Cursor CLI (cursor-agent acp) |
Substitua o comando acpx se uma instalação local expuser um ponto de entrada ACP diferente. |
droid |
Factory Droid CLI | Requer autenticação Factory/Droid ou FACTORY_API_KEY no ambiente do harness. |
gemini |
Adaptador ACP do Gemini CLI | Requer autenticação do Gemini CLI ou configuração de chave de API. |
iflow |
iFlow CLI | A disponibilidade do adaptador e o controle de modelo dependem da CLI instalada. |
kilocode |
Kilo Code CLI | A disponibilidade do adaptador e o controle de modelo dependem da CLI instalada. |
kimi |
Kimi/Moonshot CLI | Requer autenticação Kimi/Moonshot no host. |
kiro |
Kiro CLI | A disponibilidade do adaptador e o controle de modelo dependem da CLI instalada. |
opencode |
Adaptador ACP do OpenCode | Requer autenticação da CLI/provedor do OpenCode. |
openclaw |
Bridge do OpenClaw Gateway por meio de openclaw acp |
Permite que um harness compatível com ACP fale de volta com uma sessão do OpenClaw Gateway. |
qwen |
Qwen Code / Qwen CLI | Requer autenticação compatível com Qwen no host. |
Aliases personalizados de agente acpx podem ser configurados no próprio acpx, mas a política do OpenClaw
ainda verifica acp.allowedAgents e qualquer mapeamento
agents.list[].runtime.acp.agent antes do dispatch.
Runbook do operador
Fluxo rápido de /acp pelo chat:
Criar
/acp spawn claude --bind here,
/acp spawn gemini --mode persistent --thread auto, ou explicitamente
/acp spawn codex --bind here.
Trabalhar
Continue na conversa ou thread vinculada (ou direcione a chave da sessão explicitamente).
Verificar estado
/acp status
Ajustar
/acp model <provider/model>,
/acp permissions <profile>,
/acp timeout <seconds>.
Direcionar
Sem substituir o contexto: /acp steer tighten logging and continue.
Parar
/acp cancel (turno atual) ou /acp close (sessão + vínculos).
Detalhes do ciclo de vida
- Criar inicia ou retoma uma sessão de runtime ACP, registra metadados ACP no armazenamento de sessões do OpenClaw e pode criar uma tarefa em segundo plano quando a execução pertence ao pai.
- Sessões ACP pertencentes ao pai são tratadas como trabalho em segundo plano mesmo quando a sessão de runtime é persistente; a conclusão e a entrega entre superfícies passam pelo notificador da tarefa pai, em vez de agir como uma sessão de chat normal voltada ao usuário.
- A manutenção de tarefas fecha sessões ACP one-shot pertencentes ao pai que estejam terminais ou órfãs. Sessões ACP persistentes são preservadas enquanto permanecer um vínculo de conversa ativo; sessões persistentes obsoletas sem vínculo ativo são fechadas para que não possam ser retomadas silenciosamente depois que a tarefa proprietária termina ou seu registro de tarefa desaparece.
- Mensagens de acompanhamento vinculadas vão diretamente para a sessão ACP até que o vínculo seja fechado, desfocado, redefinido ou expire.
- Comandos Gateway permanecem locais.
/acp ...,/statuse/unfocusnunca são enviados como texto de prompt normal para um harness ACP vinculado. cancelaborta o turno ativo quando o backend oferece suporte a cancelamento; ele não exclui o vínculo nem os metadados da sessão.closeencerra a sessão ACP do ponto de vista do OpenClaw e remove o vínculo. Um harness ainda pode manter seu próprio histórico upstream se oferecer suporte a retomada.- O plugin acpx limpa árvores de processos de wrapper e adaptador pertencentes ao OpenClaw após
closee coleta órfãos ACPX obsoletos pertencentes ao OpenClaw durante a inicialização do Gateway. - Workers de runtime ociosos ficam elegíveis para limpeza após
acp.runtime.ttlMinutes; metadados de sessão armazenados permanecem disponíveis para/acp sessions.
Regras de roteamento nativo do Codex
Gatilhos em linguagem natural que devem ser roteados para o plugin nativo do Codex quando ele está habilitado:
- "Vincule este canal do Discord ao Codex."
- "Anexe este chat à thread Codex
<id>." - "Mostre as threads do Codex e então vincule esta."
A vinculação de conversa nativa do Codex é o caminho padrão de controle por chat.
As ferramentas dinâmicas do OpenClaw ainda são executadas por meio do OpenClaw, enquanto
ferramentas nativas do Codex, como shell/apply-patch, são executadas dentro do Codex.
Para eventos de ferramentas nativas do Codex, o OpenClaw injeta um relay de hook nativo
por turno para que hooks de Plugin possam bloquear before_tool_call, observar
after_tool_call e rotear eventos PermissionRequest do Codex
pelas aprovações do OpenClaw. Hooks Stop do Codex são repassados para
before_agent_finalize do OpenClaw, onde Plugins podem solicitar mais uma
passagem do modelo antes de o Codex finalizar sua resposta. O relay permanece
deliberadamente conservador: ele não altera argumentos de ferramentas nativas
do Codex nem reescreve registros de thread do Codex. Use ACP explícito somente
quando quiser o modelo de runtime/sessão ACP. O limite de suporte do Codex
incorporado está documentado no
contrato de suporte do harness Codex v1.
Resumo de seleção de modelo / provedor / runtime
- refs legadas de modelo Codex - rota legada de modelo OAuth/assinatura do Codex reparada pelo doctor.
openai/*- runtime incorporado nativo de app-server do Codex para turnos de agente OpenAI./codex ...- controle de conversa nativo do Codex./acp ...ouruntime: "acp"- controle ACP/acpx explícito.
Gatilhos em linguagem natural para roteamento por ACP
Gatilhos que devem rotear para o runtime ACP:
- "Execute isto como uma sessão ACP Claude Code avulsa e resuma o resultado."
- "Use Gemini CLI para esta tarefa em uma thread, depois mantenha os acompanhamentos nessa mesma thread."
- "Execute Codex por meio de ACP em uma thread em segundo plano."
O OpenClaw escolhe runtime: "acp", resolve o agentId do harness,
vincula à conversa ou thread atual quando houver suporte e
roteia acompanhamentos para essa sessão até o fechamento/expiração. O Codex só
segue esse caminho quando ACP/acpx é explícito ou o Plugin nativo do Codex
está indisponível para a operação solicitada.
Para sessions_spawn, runtime: "acp" é anunciado somente quando ACP
está habilitado, o solicitante não está em sandbox e um backend de runtime
ACP está carregado. acp.dispatch.enabled=false pausa o despacho automático
de threads ACP, mas não oculta nem bloqueia chamadas explícitas
sessions_spawn({ runtime: "acp" }). Ele direciona ids de harness ACP como codex,
claude, droid, gemini ou opencode. Não passe um id normal de agente
de configuração do OpenClaw de agents_list, a menos que essa entrada esteja
explicitamente configurada com agents.list[].runtime.type="acp";
caso contrário, use o runtime padrão de subagente. Quando um agente OpenClaw
é configurado com runtime.type="acp", o OpenClaw usa
runtime.acp.agent como o id de harness subjacente.
ACP versus subagentes
Use ACP quando quiser um runtime de harness externo. Use app-server nativo do Codex
para vinculação/controle de conversa do Codex quando o Plugin codex
estiver habilitado. Use subagentes quando quiser execuções delegadas
nativas do OpenClaw.
| Área | Sessão ACP | Execução de subagente |
|---|---|---|
| Runtime | Plugin de backend ACP (por exemplo acpx) | Runtime nativo de subagente do OpenClaw |
| Chave da sessão | agent:<agentId>:acp:<uuid> |
agent:<agentId>:subagent:<uuid> |
| Comandos principais | /acp ... |
/subagents ... |
| Ferramenta de spawn | sessions_spawn com runtime:"acp" |
sessions_spawn (runtime padrão) |
Veja também Subagentes.
Como ACP executa Claude Code
Para Claude Code por meio de ACP, a pilha é:
- Plano de controle de sessão ACP do OpenClaw.
- Plugin oficial de runtime
@openclaw/acpx. - Adaptador ACP do Claude.
- Maquinário de runtime/sessão no lado do Claude.
ACP Claude é uma sessão de harness com controles ACP, retomada de sessão, rastreamento de tarefas em segundo plano e vinculação opcional de conversa/thread.
Backends CLI são runtimes locais de fallback separados, somente texto - veja Backends CLI.
Para operadores, a regra prática é:
- Quer
/acp spawn, sessões vinculáveis, controles de runtime ou trabalho persistente de harness? Use ACP. - Quer fallback simples de texto local pela CLI bruta? Use backends CLI.
Sessões vinculadas
Modelo mental
- Superfície de chat - onde as pessoas continuam conversando (canal Discord, tópico Telegram, chat iMessage).
- Sessão ACP - o estado durável de runtime Codex/Claude/Gemini para o qual o OpenClaw roteia.
- Thread/tópico filho - uma superfície de mensagens extra opcional criada somente por
--thread .... - Workspace de runtime - o local do sistema de arquivos (
cwd, checkout do repo, workspace do backend) onde o harness executa. Independente da superfície de chat.
Vinculações da conversa atual
/acp spawn <harness> --bind here fixa a conversa atual à
sessão ACP criada - sem thread filha, mesma superfície de chat. O OpenClaw continua
dono do transporte, autenticação, segurança e entrega. Mensagens de acompanhamento nessa
conversa são roteadas para a mesma sessão; /new e /reset redefinem a
sessão no local; /acp close remove a vinculação.
Exemplos:
/codex bind # vinculação nativa do Codex, rotear mensagens futuras aqui/codex model gpt-5.4 # ajustar a thread nativa vinculada do Codex/codex stop # controlar o turno nativo ativo do Codex/acp spawn codex --bind here # fallback ACP explícito para Codex/acp spawn codex --thread auto # pode criar uma thread/tópico filho e vincular lá/acp spawn codex --bind here --cwd /workspace/repo # mesma vinculação de chat, Codex executa em /workspace/repoRegras de vinculação e exclusividade
--bind heree--thread ...são mutuamente exclusivos.--bind herefunciona apenas em canais que anunciam vinculação da conversa atual; caso contrário, o OpenClaw retorna uma mensagem clara de sem suporte. Vinculações persistem após reinicializações do Gateway.- No Discord,
spawnSessionscontrola a criação de threads filhas para--thread auto|here- não--bind here. - Se você criar uma sessão para um agente ACP diferente sem
--cwd, o OpenClaw herda por padrão o workspace do agente de destino. Caminhos herdados ausentes (ENOENT/ENOTDIR) fazem fallback para o padrão do backend; outros erros de acesso (por exemplo,EACCES) aparecem como erros de spawn. - Comandos de gerenciamento do Gateway permanecem locais em conversas vinculadas - comandos
/acp ...são tratados pelo OpenClaw mesmo quando texto normal de acompanhamento é roteado para a sessão ACP vinculada;/statuse/unfocustambém permanecem locais sempre que o tratamento de comandos está habilitado para essa superfície.
Sessões vinculadas a thread
Quando vinculações de thread estão habilitadas para um adaptador de canal:
- O OpenClaw vincula uma thread a uma sessão ACP de destino.
- Mensagens de acompanhamento nessa thread são roteadas para a sessão ACP vinculada.
- A saída do ACP é entregue de volta à mesma thread.
- Desfocar/fechar/arquivar/tempo limite de inatividade ou expiração por idade máxima remove a vinculação.
/acp close,/acp cancel,/acp status,/statuse/unfocussão comandos do Gateway, não prompts para o harness ACP.
Flags de recurso necessárias para ACP vinculado a thread:
acp.enabled=trueacp.dispatch.enabledfica ativado por padrão (definafalsepara pausar o despacho automático de threads ACP; chamadas explícitassessions_spawn({ runtime: "acp" })ainda funcionam).- Spawns de sessão de thread do adaptador de canal habilitados (padrão:
true):- Discord:
channels.discord.threadBindings.spawnSessions=true - Telegram:
channels.telegram.threadBindings.spawnSessions=true
- Discord:
O suporte a vinculação de thread é específico do adaptador. Se o adaptador de canal ativo não oferecer suporte a vinculações de thread, o OpenClaw retorna uma mensagem clara de sem suporte/indisponível.
Canais com suporte a thread
- Qualquer adaptador de canal que exponha capacidade de vinculação de sessão/thread.
- Suporte integrado atual: threads/canais do Discord, tópicos do Telegram (tópicos de fórum em grupos/supergrupos e tópicos de DM).
- Canais de Plugin podem adicionar suporte por meio da mesma interface de vinculação.
Vinculações persistentes de canal
Para fluxos de trabalho não efêmeros, configure vinculações ACP persistentes em
entradas bindings[] de nível superior.
Modelo de vinculação
bindings[].type"acp"Marca uma vinculação persistente de conversa ACP.
bindings[].matchobjectIdentifica a conversa de destino. Formatos por canal:
- Canal/thread do Discord:
match.channel="discord"+match.peer.id="<channelOrThreadId>" - Canal/DM do Slack:
match.channel="slack"+match.peer.id="<channelId|channel:<channelId>|#<channelId>|userId|user:<userId>|slack:<userId>|<@userId>>". Prefira ids estáveis do Slack; vinculações de canal também correspondem a respostas dentro das threads desse canal. - Tópico de fórum do Telegram:
match.channel="telegram"+match.peer.id="<chatId>:topic:<topicId>" - DM/grupo do WhatsApp:
match.channel="whatsapp"+match.peer.id="<E.164|group JID>". Use números E.164 como+15555550123para chats diretos e JIDs de grupo do WhatsApp como120363424282127706@g.uspara grupos. - DM/grupo do iMessage:
match.channel="imessage"+match.peer.id="<handle|chat_id:*|chat_guid:*|chat_identifier:*>". Prefirachat_id:*para vinculações estáveis de grupo.
bindings[].agentIdstringO id do agente OpenClaw proprietário.
bindings[].acp.mode"persistent" | "oneshot"Sobrescrita ACP opcional.
bindings[].acp.labelstringRótulo opcional voltado ao operador.
bindings[].acp.cwdstringDiretório de trabalho opcional do runtime.
bindings[].acp.backendstringSobrescrita opcional de backend.
Padrões de runtime por agente
Use agents.list[].runtime para definir padrões ACP uma vez por agente:
agents.list[].runtime.type="acp"agents.list[].runtime.acp.agent(id de harness, por exemplocodexouclaude)agents.list[].runtime.acp.backendagents.list[].runtime.acp.modeagents.list[].runtime.acp.cwd
Precedência de sobrescrita para sessões ACP vinculadas:
bindings[].acp.*agents.list[].runtime.acp.*- Padrões globais de ACP (por exemplo,
acp.backend)
Exemplo
{ agents: { list: [ { id: "codex", runtime: { type: "acp", acp: { agent: "codex", backend: "acpx", mode: "persistent", cwd: "/workspace/openclaw", }, }, }, { id: "claude", runtime: { type: "acp", acp: { agent: "claude", backend: "acpx", mode: "persistent" }, }, }, ], }, bindings: [ { type: "acp", agentId: "codex", match: { channel: "discord", accountId: "default", peer: { kind: "channel", id: "222222222222222222" }, }, acp: { label: "codex-main" }, }, { type: "acp", agentId: "claude", match: { channel: "telegram", accountId: "default", peer: { kind: "group", id: "-1001234567890:topic:42" }, }, acp: { cwd: "/workspace/repo-b" }, }, { type: "route", agentId: "main", match: { channel: "discord", accountId: "default" }, }, { type: "route", agentId: "main", match: { channel: "telegram", accountId: "default" }, }, ], channels: { discord: { guilds: { "111111111111111111": { channels: { "222222222222222222": { requireMention: false }, }, }, }, }, telegram: { groups: { "-1001234567890": { topics: { "42": { requireMention: false } }, }, }, }, },}Comportamento
- O OpenClaw garante que a sessão ACP configurada exista após a admissão específica do canal e antes do uso.
- Mensagens nesse canal, tópico ou chat são roteadas para a sessão ACP configurada.
- Bindings ACP configurados são donos da rota da própria sessão. A distribuição por broadcast do canal não substitui a sessão ACP configurada para um binding correspondente.
- Em conversas vinculadas,
/newe/resetredefinem a mesma chave de sessão ACP no lugar. - Bindings temporários de runtime (por exemplo, criados por fluxos de foco em thread) ainda se aplicam quando presentes.
- Para spawns ACP entre agentes sem um
cwdexplícito, o OpenClaw herda o workspace do agente de destino da configuração do agente. - Caminhos de workspace herdados ausentes voltam para o cwd padrão do backend; falhas de acesso não ausentes aparecem como erros de spawn.
Iniciar sessões ACP
Duas formas de iniciar uma sessão ACP:
De sessions_spawn
Use runtime: "acp" para iniciar uma sessão ACP a partir de um turno de agente ou
chamada de ferramenta.
{ "task": "Open the repo and summarize failing tests", "runtime": "acp", "agentId": "codex", "thread": true, "mode": "session"}De comando /acp
Use /acp spawn para controle explícito do operador pelo chat.
/acp spawn codex --mode persistent --thread auto/acp spawn codex --mode oneshot --thread off/acp spawn codex --bind here/acp spawn codex --thread hereFlags principais:
--mode persistent|oneshot--bind here|off--thread auto|here|off--cwd <absolute-path>--label <name>
Consulte Comandos slash.
Parâmetros de sessions_spawn
taskstringrequiredPrompt inicial enviado para a sessão ACP.
runtime"acp"requiredDeve ser "acp" para sessões ACP.
agentIdstringID do harness ACP de destino. Volta para acp.defaultAgent se definido.
threadbooleandefault: falseSolicita fluxo de binding de thread quando houver suporte.
mode"run" | "session"default: run"run" é de execução única; "session" é persistente. Se thread: true e
mode for omitido, o OpenClaw pode usar comportamento persistente por padrão conforme o
caminho de runtime. mode: "session" exige thread: true.
cwdstringDiretório de trabalho de runtime solicitado (validado pela política do backend/runtime). Se omitido, o spawn ACP herda o workspace do agente de destino quando configurado; caminhos herdados ausentes voltam para os padrões do backend, enquanto erros reais de acesso são retornados.
labelstringRótulo visível ao operador usado no texto da sessão/banner.
resumeSessionIdstringRetoma uma sessão ACP existente em vez de criar uma nova. O agente reproduz
o histórico da conversa via session/load. Exige runtime: "acp".
streamTo"parent""parent" transmite resumos de progresso da execução ACP inicial de volta para a
sessão solicitante como eventos de sistema. Respostas aceitas incluem
streamLogPath apontando para um log JSONL com escopo de sessão
(<sessionId>.acp-stream.jsonl) que você pode acompanhar para obter o histórico completo de retransmissão.
Fluxos de progresso do pai mostram comentários do assistente e progresso de status ACP por
padrão, a menos que streaming.progress.commentary=false. O Discord também define por padrão
prévias do pai para o modo de progresso quando nenhum modo de stream está configurado. O progresso de
status ainda respeita acp.stream.tagVisibility, então tags como plan
permanecem ocultas a menos que sejam habilitadas explicitamente.
Execuções ACP de sessions_spawn usam agents.defaults.subagents.runTimeoutSeconds para
o limite padrão de turno filho. A ferramenta não aceita sobrescritas de timeout por chamada.
modelstringSobrescrita explícita de modelo para a sessão ACP filha. Spawns ACP do Codex
normalizam refs da OpenAI como openai/gpt-5.4 para a configuração de inicialização do Codex ACP
antes de session/new; formas slash como openai/gpt-5.4/high
também definem o esforço de raciocínio do Codex ACP.
Quando omitido, sessions_spawn({ runtime: "acp" }) usa padrões existentes
de modelo de subagente (agents.defaults.subagents.model ou
agents.list[].subagents.model) quando configurados; caso contrário, deixa o
harness ACP usar o próprio modelo padrão.
Outros harnesses devem anunciar ACP models e oferecer suporte a
session/set_model; caso contrário, OpenClaw/acpx falha claramente em vez de
voltar silenciosamente para o padrão do agente de destino.
thinkingstringEsforço explícito de pensamento/raciocínio. Para Codex ACP, minimal mapeia para
esforço baixo, low/medium/high/xhigh mapeiam diretamente, e off
omite a sobrescrita de inicialização de esforço de raciocínio.
Quando omitido, spawns ACP usam os padrões existentes de thinking de subagente e
agents.defaults.models["provider/model"].params.thinking por modelo
para o modelo selecionado.
Modos de spawn com binding e thread
--bind here|off
| Modo | Comportamento |
|---|---|
here |
Vincula a conversa ativa atual no local; falha se nenhuma estiver ativa. |
off |
Não cria uma vinculação de conversa atual. |
Observações:
--bind hereé o caminho de operador mais simples para "tornar este canal ou chat apoiado por Codex."--bind herenão cria uma thread filha.--bind heresó está disponível em canais que expõem suporte à vinculação de conversa atual.--binde--threadnão podem ser combinados na mesma chamada/acp spawn.
--thread auto|here|off
| Modo | Comportamento |
|---|---|
auto |
Em uma thread ativa: vincula essa thread. Fora de uma thread: cria/vincula uma thread filha quando houver suporte. |
here |
Exige a thread ativa atual; falha se não estiver em uma. |
off |
Sem vinculação. A sessão começa desvinculada. |
Observações:
- Em superfícies de vinculação sem threads, o comportamento padrão é efetivamente
off. - A geração vinculada a thread exige suporte da política do canal:
- Discord:
channels.discord.threadBindings.spawnSessions=true - Telegram:
channels.telegram.threadBindings.spawnSessions=true
- Discord:
- Use
--bind herequando quiser fixar a conversa atual sem criar uma thread filha.
Modelo de entrega
Sessões ACP podem ser workspaces interativos ou trabalho em segundo plano pertencente ao pai. O caminho de entrega depende desse formato.
Sessões ACP interativas
Sessões interativas são destinadas a manter a conversa em uma superfície de chat visível:
/acp spawn ... --bind herevincula a conversa atual à sessão ACP./acp spawn ... --thread ...vincula uma thread/tópico do canal à sessão ACP.bindings[].type="acp"configuradas persistentes roteiam conversas correspondentes para a mesma sessão ACP.
Mensagens de acompanhamento na conversa vinculada são roteadas diretamente para a sessão ACP, e a saída ACP é entregue de volta ao mesmo canal/thread/tópico.
O que o OpenClaw envia ao harness:
- Acompanhamentos vinculados normais são enviados como texto de prompt, mais anexos somente quando o harness/backend oferece suporte a eles.
- Comandos de gerenciamento
/acpe comandos locais do Gateway são interceptados antes do envio ACP. - Eventos de conclusão gerados pelo runtime são materializados por destino. Agentes OpenClaw recebem o envelope interno de contexto de runtime do OpenClaw; harnesses ACP externos recebem um prompt simples com o resultado filho e a instrução. O envelope bruto
<<<BEGIN_OPENCLAW_INTERNAL_CONTEXT>>>nunca deve ser enviado para harnesses externos nem persistido como texto de transcrição de usuário ACP. - Entradas de transcrição ACP usam o texto de acionamento visível ao usuário ou o prompt simples de conclusão. Metadados de evento internos permanecem estruturados no OpenClaw quando possível e não são tratados como conteúdo de chat de autoria do usuário.
Sessões ACP one-shot pertencentes ao pai
Sessões ACP one-shot geradas por outra execução de agente são filhas em segundo plano, semelhantes a subagentes:
- O pai solicita trabalho com
sessions_spawn({ runtime: "acp", mode: "run" }). - O filho executa em sua própria sessão de harness ACP.
- Turnos do filho executam na mesma faixa em segundo plano usada por gerações de subagentes nativos, então um harness ACP lento não bloqueia trabalho não relacionado da sessão principal.
- Relatórios de conclusão retornam pelo caminho de anúncio de conclusão de tarefa. O OpenClaw converte metadados internos de conclusão em um prompt ACP simples antes de enviá-lo a um harness externo, para que harnesses não vejam marcadores de contexto de runtime exclusivos do OpenClaw.
- O pai reescreve o resultado do filho em voz normal de assistente quando uma resposta voltada ao usuário é útil.
Não trate este caminho como um chat ponto a ponto entre pai e filho. O filho já tem um canal de conclusão de volta para o pai.
sessions_send e entrega A2A
sessions_send pode direcionar outra sessão após a geração. Para sessões
pares normais, o OpenClaw usa um caminho de acompanhamento agente-para-agente (A2A)
depois de injetar a mensagem:
- Aguarda a resposta da sessão de destino.
- Opcionalmente permite que solicitante e destino troquem um número limitado de turnos de acompanhamento.
- Solicita que o destino produza uma mensagem de anúncio.
- Entrega esse anúncio ao canal ou thread visível.
Esse caminho A2A é um fallback para envios entre pares quando o remetente precisa de um
acompanhamento visível. Ele permanece habilitado quando uma sessão não relacionada pode
ver e enviar mensagem a um destino ACP, por exemplo, sob configurações amplas de
tools.sessions.visibility.
OpenClaw pula o acompanhamento A2A somente quando o solicitante é o
pai de seu próprio filho ACP de uso único pertencente ao pai. Nesse caso,
executar A2A sobre a conclusão da tarefa pode acordar o pai com o
resultado do filho, encaminhar a resposta do pai de volta ao filho e
criar um loop de eco pai/filho. O resultado de sessions_send informa
delivery.status="skipped" para esse caso de filho pertencente porque o
caminho de conclusão já é responsável pelo resultado.
Retomar uma sessão existente
Use resumeSessionId para continuar uma sessão ACP anterior em vez de
começar do zero. O agente reproduz seu histórico de conversa via
session/load, então retoma com o contexto completo do que veio antes.
{ "task": "Continue where we left off - fix the remaining test failures", "runtime": "acp", "agentId": "codex", "resumeSessionId": "<previous-session-id>"}Casos de uso comuns:
- Passe uma sessão Codex do seu laptop para o seu telefone - diga ao seu agente para retomar de onde você parou.
- Continue uma sessão de codificação que você iniciou interativamente na CLI, agora de forma headless por meio do seu agente.
- Retome um trabalho que foi interrompido por uma reinicialização do gateway ou tempo limite de inatividade.
Observações:
resumeSessionIdsó se aplica quandoruntime: "acp"; o runtime padrão de subagente ignora esse campo exclusivo de ACP.streamTosó se aplica quandoruntime: "acp"; o runtime padrão de subagente ignora esse campo exclusivo de ACP.resumeSessionIdé um id de retomada ACP/harness local ao host, não uma chave de sessão de canal do OpenClaw; o OpenClaw ainda verifica a política de criação ACP e a política do agente de destino antes do despacho, enquanto o backend ou harness ACP controla a autorização para carregar esse id upstream.resumeSessionIdrestaura o histórico de conversa ACP upstream;threademodeainda se aplicam normalmente à nova sessão do OpenClaw que você está criando, entãomode: "session"ainda exigethread: true.- O agente de destino deve oferecer suporte a
session/load(Codex e Claude Code oferecem). - Se o id de sessão não for encontrado, a criação falha com um erro claro - sem fallback silencioso para uma nova sessão.
Teste de fumaça pós-deploy
Depois de um deploy do Gateway, execute uma verificação ponta a ponta ao vivo em vez de confiar em testes unitários:
- Verifique a versão e o commit do Gateway implantado no host de destino.
- Abra uma sessão temporária de ponte ACPX para um agente ao vivo.
- Peça a esse agente para chamar
sessions_spawncomruntime: "acp",agentId: "codex",mode: "run"e a tarefaReply with exactly LIVE-ACP-SPAWN-OK. - Verifique
accepted=yes, umchildSessionKeyreal e nenhum erro de validador. - Limpe a sessão temporária de ponte.
Mantenha a porta em mode: "run" e pule streamTo: "parent" -
mode: "session" vinculado a thread e caminhos de retransmissão de stream são
passes de integração mais ricos separados.
Compatibilidade de sandbox
Sessões ACP atualmente são executadas no runtime do host, não dentro do sandbox do OpenClaw.
Limitações atuais:
- Se a sessão solicitante estiver em sandbox, criações ACP serão bloqueadas tanto para
sessions_spawn({ runtime: "acp" })quanto para/acp spawn. sessions_spawncomruntime: "acp"não oferece suporte asandbox: "require".
Resolução de destino de sessão
A maioria das ações /acp aceita um destino de sessão opcional (session-key,
session-id ou session-label).
Ordem de resolução:
- Argumento de destino explícito (ou
--sessionpara/acp steer)- tenta a chave
- depois o id de sessão em formato UUID
- depois o rótulo
- Vínculo da thread atual (se esta conversa/thread estiver vinculada a uma sessão ACP).
- Fallback para a sessão solicitante atual.
Vínculos da conversa atual e vínculos de thread participam ambos na etapa 2.
Se nenhum destino for resolvido, o OpenClaw retorna um erro claro
(Unable to resolve session target: ...).
Controles ACP
| Comando | O que faz | Exemplo |
|---|---|---|
/acp spawn |
Cria sessão ACP; vínculo atual ou de thread opcional. | /acp spawn codex --bind here --cwd /repo |
/acp cancel |
Cancela turno em andamento para a sessão de destino. | /acp cancel agent:codex:acp:<uuid> |
/acp steer |
Envia instrução de orientação para sessão em execução. | /acp steer --session support inbox prioritize failing tests |
/acp close |
Fecha sessão e desvincula destinos de thread. | /acp close |
/acp status |
Mostra backend, modo, estado, opções de runtime, recursos. | /acp status |
/acp set-mode |
Define o modo de runtime para a sessão de destino. | /acp set-mode plan |
/acp set |
Grava opção genérica de configuração de runtime. | /acp set model openai/gpt-5.4 |
/acp cwd |
Define substituição do diretório de trabalho do runtime. | /acp cwd /Users/user/Projects/repo |
/acp permissions |
Define perfil de política de aprovação. | /acp permissions strict |
/acp timeout |
Define tempo limite do runtime (segundos). | /acp timeout 120 |
/acp model |
Define substituição de modelo do runtime. | /acp model anthropic/claude-opus-4-6 |
/acp reset-options |
Remove substituições de opções de runtime da sessão. | /acp reset-options |
/acp sessions |
Lista sessões ACP recentes do armazenamento. | /acp sessions |
/acp doctor |
Saúde do backend, recursos, correções acionáveis. | /acp doctor |
/acp install |
Imprime etapas determinísticas de instalação e habilitação. | /acp install |
Controles de runtime (spawn, cancel, steer, close, status, set-mode,
set, cwd, permissions, timeout, model e reset-options) exigem
identidade de proprietário de canais externos e operator.admin de clientes
internos do Gateway. Remetentes autorizados que não são proprietários ainda podem usar sessions, doctor,
install e help.
/acp status mostra as opções de runtime efetivas, além de identificadores de sessão
em nível de runtime e de backend. Erros de controle sem suporte aparecem
claramente quando um backend não tem um recurso. /acp sessions lê o
armazenamento para a sessão vinculada atual ou solicitante; tokens de destino
(session-key, session-id ou session-label) são resolvidos por meio da
descoberta de sessão do Gateway, incluindo raízes session.store
personalizadas por agente.
Mapeamento de opções de runtime
/acp tem comandos de conveniência e um setter genérico. Operações
equivalentes:
| Comando | Mapeia para | Observações |
|---|---|---|
/acp model <id> |
chave de configuração de runtime model |
Para Codex ACP, o OpenClaw normaliza openai/<model> para o id de modelo do adaptador e mapeia sufixos de raciocínio com barra, como openai/gpt-5.4/high, para reasoning_effort. |
/acp set thinking <level> |
opção canônica thinking |
O OpenClaw envia o equivalente anunciado pelo backend quando presente, preferindo thinking, depois effort, reasoning_effort ou thought_level. Para Codex ACP, o adaptador mapeia valores para reasoning_effort. |
/acp permissions <profile> |
opção canônica permissionProfile |
O OpenClaw envia o equivalente anunciado pelo backend quando presente, como approval_policy, permission_profile, permissions ou permission_mode. |
/acp timeout <seconds> |
opção canônica timeoutSeconds |
O OpenClaw envia o equivalente anunciado pelo backend quando presente, como timeout ou timeout_seconds. |
/acp cwd <path> |
substituição de cwd do runtime | Atualização direta. |
/acp set <key> <value> |
genérico | key=cwd usa o caminho de substituição de cwd. |
/acp reset-options |
limpa todas as substituições de runtime | - |
Harness acpx, configuração de Plugin e permissões
Para configuração do harness acpx (aliases Claude Code / Codex / Gemini CLI), as pontes MCP plugin-tools e OpenClaw-tools, e modos de permissão ACP, consulte Agentes ACP - configuração.
Solução de problemas
| Sintoma | Causa provável | Correção |
|---|---|---|
ACP runtime backend is not configured |
Plugin de backend ausente, desabilitado ou bloqueado por plugins.allow. |
Instale e habilite o Plugin de backend, inclua acpx em plugins.allow quando essa allowlist estiver definida e, em seguida, execute /acp doctor. |
ACP is disabled by policy (acp.enabled=false) |
ACP desabilitado globalmente. | Defina acp.enabled=true. |
ACP dispatch is disabled by policy (acp.dispatch.enabled=false) |
Despacho automático a partir de mensagens normais de thread desabilitado. | Defina acp.dispatch.enabled=true para retomar o roteamento automático de threads; chamadas explícitas a sessions_spawn({ runtime: "acp" }) ainda funcionam. |
ACP agent "<id>" is not allowed by policy |
Agente não está na allowlist. | Use um agentId permitido ou atualize acp.allowedAgents. |
/acp doctor reports backend not ready right after startup |
Plugin de backend ausente, desabilitado, bloqueado por política de permissão/negação ou seu executável configurado está indisponível. | Instale/habilite o Plugin de backend, execute /acp doctor novamente e inspecione o erro de instalação ou política do backend se ele continuar não íntegro. |
| Comando do harness não encontrado | A CLI do adaptador não está instalada, o Plugin externo está ausente ou a busca de primeira execução com npx falhou para um adaptador que não é Codex. |
Execute /acp doctor, instale/preaqueça o adaptador no host do Gateway ou configure explicitamente o comando do agente acpx. |
| Modelo não encontrado pelo harness | O id do modelo é válido para outro provedor/harness, mas não para este destino ACP. | Use um modelo listado por esse harness, configure o modelo no harness ou omita a sobrescrita. |
| Erro de autenticação do fornecedor pelo harness | OpenClaw está íntegro, mas a CLI/provedor de destino não está autenticado. | Faça login ou forneça a chave de provedor necessária no ambiente do host do Gateway. |
Unable to resolve session target: ... |
Token de chave/id/rótulo inválido. | Execute /acp sessions, copie a chave/rótulo exato e tente novamente. |
--bind here requires running /acp spawn inside an active ... conversation |
--bind here usado sem uma conversa ativa que possa ser vinculada. |
Vá para o chat/canal de destino e tente novamente, ou use spawn sem vínculo. |
Conversation bindings are unavailable for <channel>. |
O adaptador não tem capacidade de vinculação ACP para a conversa atual. | Use /acp spawn ... --thread ... quando houver suporte, configure bindings[] de nível superior ou vá para um canal compatível. |
--thread here requires running /acp spawn inside an active ... thread |
--thread here usado fora de um contexto de thread. |
Vá para a thread de destino ou use --thread auto/off. |
Only <user-id> can rebind this channel/conversation/thread. |
Outro usuário é proprietário do destino de vinculação ativo. | Faça o rebind como proprietário ou use outra conversa ou thread. |
Thread bindings are unavailable for <channel>. |
O adaptador não tem capacidade de vinculação de thread. | Use --thread off ou vá para um adaptador/canal compatível. |
Sandboxed sessions cannot spawn ACP sessions ... |
O runtime ACP fica no lado do host; a sessão solicitante está em sandbox. | Use runtime="subagent" em sessões em sandbox ou execute o spawn ACP a partir de uma sessão sem sandbox. |
sessions_spawn sandbox="require" is unsupported for runtime="acp" ... |
sandbox="require" solicitado para o runtime ACP. |
Use runtime="subagent" para exigir sandboxing ou use ACP com sandbox="inherit" a partir de uma sessão sem sandbox. |
Cannot apply --model ... did not advertise model support |
O harness de destino não expõe troca genérica de modelo ACP. | Use um harness que anuncie models/session/set_model de ACP, use refs de modelo ACP do Codex ou configure o modelo diretamente no harness se ele tiver sua própria flag de inicialização. |
| Metadados ACP ausentes para sessão vinculada | Metadados de sessão ACP obsoletos/excluídos. | Recrie com /acp spawn e então faça rebind/foque a thread. |
AcpRuntimeError: Permission prompt unavailable in non-interactive mode |
permissionMode bloqueia escritas/exec em uma sessão ACP não interativa. |
Defina plugins.entries.acpx.config.permissionMode como approve-all e reinicie o gateway. Consulte Configuração de permissões. |
| Sessão ACP falha cedo com pouca saída | Prompts de permissão são bloqueados por permissionMode/nonInteractivePermissions. |
Verifique os logs do gateway para AcpRuntimeError. Para permissões completas, defina permissionMode=approve-all; para degradação graciosa, defina nonInteractivePermissions=deny. |
| Sessão ACP fica parada indefinidamente após concluir o trabalho | O processo do harness terminou, mas a sessão ACP não informou conclusão. | Atualize o OpenClaw; a limpeza atual do acpx colhe processos obsoletos de wrapper e adaptador pertencentes ao OpenClaw no fechamento e na inicialização do Gateway. |
Harness vê <<<BEGIN_OPENCLAW_INTERNAL_CONTEXT>>> |
Envelope de evento interno vazou pela fronteira ACP. | Atualize o OpenClaw e execute novamente o fluxo de conclusão; harnesses externos devem receber apenas prompts simples de conclusão. |