Agentes ACP
Sessões de Agent Client Protocol (ACP) permitem que o OpenClaw execute harnesses externos de coding (por exemplo Pi, Claude Code, Codex, Cursor, Copilot, OpenClaw ACP, OpenCode, Gemini CLI e outros harnesses ACPX compatíveis) por meio de um plugin de backend ACP. Se você pedir ao OpenClaw em linguagem natural para “executar isso no Codex” ou “iniciar Claude Code em uma thread”, o OpenClaw deve encaminhar essa solicitação para o runtime ACP (não para o runtime nativo de subagente). Cada spawn de sessão ACP é rastreado como uma tarefa em segundo plano. Se você quiser que Codex ou Claude Code se conectem diretamente como um cliente MCP externo a conversas de canal existentes do OpenClaw, useopenclaw mcp serve em vez de ACP.
Qual página eu quero?
Há três superfícies próximas que são fáceis de confundir:| Você quer… | Use isto | Observações |
|---|---|---|
| Executar Codex, Claude Code, Gemini CLI ou outro harness externo por meio do OpenClaw | Esta página: agentes ACP | Sessões vinculadas ao chat, /acp spawn, sessions_spawn({ runtime: "acp" }), tarefas em segundo plano, controles de runtime |
| Expor uma sessão do Gateway OpenClaw como um servidor ACP para um editor ou cliente | openclaw acp | Modo bridge. O IDE/cliente fala ACP com o OpenClaw por stdio/WebSocket |
| Reutilizar uma CLI local de IA como modelo de fallback somente de texto | CLI Backends | Não é ACP. Sem tools do OpenClaw, sem controles ACP, sem runtime de harness |
Isso funciona pronto para uso?
Normalmente, sim.- Instalações novas agora já vêm com o plugin de runtime integrado
acpxhabilitado por padrão. - O plugin integrado
acpxprefere seu binárioacpxfixado localmente no plugin. - Na inicialização, o OpenClaw sonda esse binário e faz autorreparo se necessário.
- Comece com
/acp doctorse quiser uma verificação rápida de prontidão.
- Um adapter do harness de destino pode ser buscado sob demanda com
npxna primeira vez em que você usar esse harness. - A autenticação do fornecedor ainda precisa existir no host para esse harness.
- Se o host não tiver acesso a npm/rede, buscas de adapter na primeira execução podem falhar até que os caches sejam pré-aquecidos ou o adapter seja instalado de outra forma.
/acp spawn codex: o OpenClaw deve estar pronto para inicializaracpx, mas o adapter ACP do Codex ainda pode precisar de uma busca na primeira execução./acp spawn claude: a mesma situação para o adapter ACP do Claude, além da autenticação do lado do Claude nesse host.
Fluxo rápido para operadores
Use isto quando você quiser um runbook prático de/acp:
- Gere uma sessão:
/acp spawn codex --bind here/acp spawn codex --mode persistent --thread auto
- Trabalhe na conversa ou thread vinculada (ou direcione explicitamente para essa session key).
- Verifique o estado do runtime:
/acp status
- Ajuste opções do runtime conforme necessário:
/acp model <provider/model>/acp permissions <profile>/acp timeout <seconds>
- Dê uma orientação a uma sessão ativa sem substituir o contexto:
/acp steer tighten logging and continue
- Pare o trabalho:
/acp cancel(interrompe o turno atual), ou/acp close(fecha a sessão + remove bindings)
Início rápido para pessoas
Exemplos de solicitações naturais:- “Vincule este canal do Discord ao Codex.”
- “Inicie uma sessão Codex persistente em uma thread aqui e mantenha o foco.”
- “Execute isso como uma sessão ACP one-shot do Claude Code e resuma o resultado.”
- “Vincule este chat do iMessage ao Codex e mantenha os acompanhamentos no mesmo workspace.”
- “Use Gemini CLI para esta tarefa em uma thread e depois mantenha os acompanhamentos nessa mesma thread.”
- Escolher
runtime: "acp". - Resolver o destino de harness solicitado (
agentId, por exemplocodex). - Se for solicitado binding na conversa atual e o canal ativo oferecer suporte, vincular a sessão ACP a essa conversa.
- Caso contrário, se for solicitado binding em thread e o canal atual oferecer suporte, vincular a sessão ACP à thread.
- Encaminhar mensagens vinculadas de acompanhamento para essa mesma sessão ACP até perder foco/ser fechada/expirar.
ACP versus subagentes
Use ACP quando quiser um runtime de harness externo. 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 |
| Session key | agent:<agentId>:acp:<uuid> | agent:<agentId>:subagent:<uuid> |
| Comandos principais | /acp ... | /subagents ... |
| Tool de spawn | sessions_spawn com runtime:"acp" | sessions_spawn (runtime padrão) |
Como o ACP executa Claude Code
Para Claude Code por meio de ACP, a pilha é:- Plano de controle da sessão ACP do OpenClaw
- plugin de runtime integrado
acpx - adapter ACP do Claude
- maquinário de runtime/sessão do lado do Claude
- Claude em ACP não é a mesma coisa que o runtime de fallback direto
claude-cli/.... - Claude em ACP é uma sessão de harness com controles ACP, retomada de sessão, rastreamento de tarefa em segundo plano e binding opcional de conversa/thread.
claude-cli/...é um backend de CLI local somente de texto. Consulte CLI Backends.
- quer
/acp spawn, sessões vinculáveis, controles de runtime ou trabalho persistente em harness: use ACP - quer um fallback simples de texto local pela CLI bruta: use backends CLI
Sessões vinculadas
Bindings da conversa atual
Use/acp spawn <harness> --bind here quando quiser que a conversa atual se torne um workspace ACP durável sem criar uma thread filha.
Comportamento:
- O OpenClaw continua sendo dono do transporte do canal, autenticação, segurança e entrega.
- A conversa atual é fixada na session key ACP gerada.
- Mensagens de acompanhamento nessa conversa são encaminhadas para a mesma sessão ACP.
/newe/resetredefinem a mesma sessão ACP vinculada no mesmo lugar./acp closefecha a sessão e remove o binding da conversa atual.
--bind heremantém a mesma superfície de chat. No Discord, o canal atual continua sendo o canal atual.--bind hereainda pode criar uma nova sessão ACP se você estiver gerando trabalho novo. O binding anexa essa sessão à conversa atual.--bind herenão cria por si só uma thread filha do Discord nem um tópico do Telegram.- O runtime ACP ainda pode ter seu próprio diretório de trabalho (
cwd) ou workspace em disco gerenciado pelo backend. Esse workspace do runtime é separado da superfície de chat e não implica uma nova thread de mensagens. - Se você gerar para um agente ACP diferente e não passar
--cwd, o OpenClaw herda por padrão o workspace do agente de destino, não o do solicitante. - Se esse caminho de workspace herdado estiver ausente (
ENOENT/ENOTDIR), o OpenClaw usa como fallback ocwdpadrão do backend em vez de reutilizar silenciosamente a árvore errada. - Se o workspace herdado existir, mas não puder ser acessado (por exemplo
EACCES), o spawn retorna o erro real de acesso em vez de descartarcwd.
- superfície de chat: onde as pessoas continuam conversando (
canal do Discord,tópico do Telegram,chat do iMessage) - sessão ACP: o estado durável de runtime de Codex/Claude/Gemini para o qual o OpenClaw encaminha
- thread/tópico filho: uma superfície extra opcional de mensagens criada apenas por
--thread ... - workspace de runtime: o local no sistema de arquivos onde o harness roda (
cwd, checkout do repositório, workspace do backend)
/acp spawn codex --bind here: mantenha este chat, gere ou anexe uma sessão ACP do Codex e encaminhe mensagens futuras daqui para ela/acp spawn codex --thread auto: o OpenClaw pode criar uma thread/tópico filho e vincular a sessão ACP lá/acp spawn codex --bind here --cwd /workspace/repo: mesmo binding de chat acima, mas o Codex roda em/workspace/repo
- Canais de chat/mensagem que anunciam suporte a binding da conversa atual podem usar
--bind herepelo caminho compartilhado de binding de conversa. - Canais com semântica customizada de thread/tópico ainda podem fornecer canonicalização específica do canal por trás da mesma interface compartilhada.
--bind heresempre significa “vincular a conversa atual no mesmo lugar”.- Bindings genéricos da conversa atual usam o armazenamento compartilhado de bindings do OpenClaw e sobrevivem a reinicializações normais do gateway.
--bind heree--thread ...são mutuamente exclusivos em/acp spawn.- No Discord,
--bind herevincula o canal ou thread atual no mesmo lugar.spawnAcpSessionssó é necessário quando o OpenClaw precisa criar uma thread filha para--thread auto|here. - Se o canal ativo não expuser bindings ACP da conversa atual, o OpenClaw retorna uma mensagem clara de não compatibilidade.
resumee perguntas de “nova sessão” são questões da sessão ACP, não do canal. Você pode reutilizar ou substituir o estado do runtime sem mudar a superfície de chat atual.
Sessões vinculadas à thread
Quando bindings de thread estão habilitados para um adapter de canal, sessões ACP podem ser vinculadas a threads:- O OpenClaw vincula uma thread a uma sessão ACP de destino.
- Mensagens de acompanhamento nessa thread são encaminhadas para a sessão ACP vinculada.
- A saída ACP é entregue de volta à mesma thread.
- Perda de foco/fechamento/arquivamento/timeout por inatividade ou expiração por idade máxima removem o binding.
acp.enabled=trueacp.dispatch.enabledvem ativado por padrão (definafalsepara pausar o despacho ACP)- Flag de spawn ACP em thread do adapter de canal habilitada (específica do adapter)
- Discord:
channels.discord.threadBindings.spawnAcpSessions=true - Telegram:
channels.telegram.threadBindings.spawnAcpSessions=true
- Discord:
Canais compatíveis com thread
- Qualquer adapter de canal que exponha capacidade de binding 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 pela mesma interface de binding.
Configurações específicas de canal
Para fluxos não efêmeros, configure bindings ACP persistentes em entradasbindings[] de nível superior.
Modelo de binding
bindings[].type="acp"marca um binding persistente de conversa ACP.bindings[].matchidentifica a conversa de destino:- Canal ou thread do Discord:
match.channel="discord"+match.peer.id="<channelOrThreadId>" - Tópico de fórum do Telegram:
match.channel="telegram"+match.peer.id="<chatId>:topic:<topicId>" - Chat DM/em grupo do BlueBubbles:
match.channel="bluebubbles"+match.peer.id="<handle|chat_id:*|chat_guid:*|chat_identifier:*>". Prefirachat_id:*ouchat_identifier:*para bindings estáveis de grupos. - Chat DM/em grupo do iMessage:
match.channel="imessage"+match.peer.id="<handle|chat_id:*|chat_guid:*|chat_identifier:*>". Prefirachat_id:*para bindings estáveis de grupos.
- Canal ou thread do Discord:
bindings[].agentIdé o id do agente OpenClaw proprietário.- Overrides opcionais de ACP ficam em
bindings[].acp:mode(persistentouoneshot)labelcwdbackend
Padrões de runtime por agente
Useagents.list[].runtime para definir padrões ACP uma vez por agente:
agents.list[].runtime.type="acp"agents.list[].runtime.acp.agent(id do harness, por exemplocodexouclaude)agents.list[].runtime.acp.backendagents.list[].runtime.acp.modeagents.list[].runtime.acp.cwd
bindings[].acp.*agents.list[].runtime.acp.*- padrões globais de ACP (por exemplo
acp.backend)
- O OpenClaw garante que a sessão ACP configurada exista antes do uso.
- Mensagens nesse canal ou tópico são encaminhadas para a sessão ACP configurada.
- Em conversas vinculadas,
/newe/resetredefinem a mesma session key ACP no mesmo lugar. - Bindings temporários de runtime (por exemplo criados por fluxos de foco em thread) continuam valendo quando presentes.
- Para spawns ACP entre agentes sem
cwdexplícito, o OpenClaw herda o workspace do agente de destino a partir da configuração do agente. - Caminhos herdados de workspace ausentes usam como fallback o
cwdpadrão do backend; falhas reais de acesso em caminhos existentes aparecem como erros de spawn.
Iniciar sessões ACP (interfaces)
A partir de sessions_spawn
Use runtime: "acp" para iniciar uma sessão ACP a partir de um turno de agente ou chamada de tool.
runtimeassumesubagentpor padrão, então definaruntime: "acp"explicitamente para sessões ACP.- Se
agentIdfor omitido, o OpenClaw usaacp.defaultAgentquando configurado. mode: "session"exigethread: truepara manter uma conversa persistente vinculada.
task(obrigatório): prompt inicial enviado à sessão ACP.runtime(obrigatório para ACP): deve ser"acp".agentId(opcional): id do harness ACP de destino. Usaacp.defaultAgentcomo fallback se estiver definido.thread(opcional, padrãofalse): solicita fluxo de binding de thread quando compatível.mode(opcional):run(one-shot) ousession(persistente).- o padrão é
run - se
thread: trueemodefor omitido, o OpenClaw pode assumir comportamento persistente por caminho de runtime mode: "session"exigethread: true
- o padrão é
cwd(opcional): diretório de trabalho solicitado para o runtime (validado pela política do backend/runtime). Se omitido, o spawn ACP herda o workspace do agente de destino quando configurado; caminhos herdados ausentes usam como fallback os padrões do backend, enquanto erros reais de acesso são retornados.label(opcional): rótulo voltado ao operador usado em texto de sessão/banner.resumeSessionId(opcional): retoma uma sessão ACP existente em vez de criar uma nova. O agente reproduz seu histórico de conversa viasession/load. Exigeruntime: "acp".streamTo(opcional):"parent"transmite resumos de progresso da execução ACP inicial de volta para a sessão solicitante como eventos de sistema.- Quando disponível, as respostas aceitas incluem
streamLogPathapontando para um log JSONL com escopo de sessão (<sessionId>.acp-stream.jsonl) que você pode acompanhar para ver o histórico completo de retransmissão.
- Quando disponível, as respostas aceitas incluem
Retomar uma sessão existente
UseresumeSessionId 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 contexto completo do que veio antes.
- Transferir uma sessão Codex do laptop para o telefone — pedir ao agente para continuar de onde parou
- Continuar uma sessão de coding iniciada interativamente na CLI, agora de forma headless por meio do agente
- Retomar um trabalho interrompido por reinicialização do gateway ou timeout por inatividade
resumeSessionIdexigeruntime: "acp"— retorna erro se usado com o runtime de subagente.resumeSessionIdrestaura o histórico da conversa ACP no upstream;threademodecontinuam valendo normalmente para a nova sessão OpenClaw que você está criando, entãomode: "session"ainda exigethread: true.- O agente de destino precisa oferecer suporte a
session/load(Codex e Claude Code oferecem). - Se o id da sessão não for encontrado, o spawn falha com um erro claro — não há fallback silencioso para uma nova sessão.
Smoke test para operadores
Use isto após um deploy do gateway quando quiser uma verificação rápida em produção de que o spawn ACP está realmente funcionando de ponta a ponta, e não apenas passando em testes unitários. Gate recomendado:- Verifique a versão/commit do gateway implantado no host de destino.
- Confirme que o código-fonte implantado inclui a aceitação de linhagem ACP em
src/gateway/sessions-patch.ts(subagent:* or acp:* sessions). - Abra uma sessão bridge ACPX temporária para um agente ativo (por exemplo
razor(main)emjpclawhq). - Peça a esse agente para chamar
sessions_spawncom:runtime: "acp"agentId: "codex"mode: "run"- task:
Reply with exactly LIVE-ACP-SPAWN-OK
- Verifique se o agente relata:
accepted=yes- um
childSessionKeyreal - nenhum erro de validador
- Limpe a sessão bridge ACPX temporária.
- Mantenha esse smoke test em
mode: "run"a menos que você esteja testando intencionalmente sessões ACP persistentes vinculadas a thread. - Não exija
streamTo: "parent"para o gate básico. Esse caminho depende de capacidades da sessão/solicitante e é uma verificação de integração separada. - Trate o teste de
mode: "session"vinculado a thread como uma segunda etapa mais rica de integração a partir de uma thread real do Discord ou tópico do Telegram.
Compatibilidade com sandbox
Atualmente, sessões ACP 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, spawns ACP serão bloqueados tanto para
sessions_spawn({ runtime: "acp" })quanto para/acp spawn.- Erro:
Sandboxed sessions cannot spawn ACP sessions because runtime="acp" runs on the host. Use runtime="subagent" from sandboxed sessions.
- Erro:
sessions_spawncomruntime: "acp"não oferece suporte asandbox: "require".- Erro:
sessions_spawn sandbox="require" is unsupported for runtime="acp" because ACP sessions run outside the sandbox. Use runtime="subagent" or sandbox="inherit".
- Erro:
runtime: "subagent" quando precisar de execução com sandbox forçado.
A partir do comando /acp
Use /acp spawn para controle explícito do operador via chat quando necessário.
--mode persistent|oneshot--bind here|off--thread auto|here|off--cwd <absolute-path>--label <name>
Resolução de alvo de sessão
A maioria das ações/acp aceita um alvo de sessão opcional (session-key, session-id ou session-label).
Ordem de resolução:
- Argumento explícito de alvo (ou
--sessionpara/acp steer)- tenta key
- depois session id em formato UUID
- depois label
- Binding da thread atual (se esta conversa/thread estiver vinculada a uma sessão ACP)
- Fallback para a sessão atual do solicitante
Unable to resolve session target: ...).
Modos de bind no spawn
/acp spawn oferece suporte a --bind here|off.
| Modo | Comportamento |
|---|---|
here | Vincula a conversa ativa atual no mesmo lugar; falha se nenhuma estiver ativa. |
off | Não cria binding da conversa atual. |
--bind hereé o caminho mais simples para operadores para “fazer este canal ou chat ser apoiado por Codex”.--bind herenão cria uma thread filha.--bind hereestá disponível apenas em canais que expõem suporte a binding da conversa atual.--binde--threadnão podem ser combinados na mesma chamada de/acp spawn.
Modos de thread no spawn
/acp spawn oferece suporte a --thread auto|here|off.
| Modo | Comportamento |
|---|---|
auto | Em uma thread ativa: vincula essa thread. Fora de uma thread: cria/vincula uma thread filha quando compatível. |
here | Exige thread ativa atual; falha se não estiver em uma. |
off | Sem binding. A sessão é iniciada desvinculada. |
- Em superfícies sem suporte a binding de thread, o comportamento padrão é efetivamente
off. - Spawn vinculado a thread exige suporte da política do canal:
- Discord:
channels.discord.threadBindings.spawnAcpSessions=true - Telegram:
channels.telegram.threadBindings.spawnAcpSessions=true
- Discord:
- Use
--bind herequando quiser fixar a conversa atual sem criar uma thread filha.
Controles ACP
Família de comandos disponível:/acp spawn/acp cancel/acp steer/acp close/acp status/acp set-mode/acp set/acp cwd/acp permissions/acp timeout/acp model/acp reset-options/acp sessions/acp doctor/acp install
/acp status mostra as opções efetivas de runtime e, quando disponíveis, os identificadores de sessão tanto no nível do runtime quanto no nível do backend.
Alguns controles dependem das capacidades do backend. Se um backend não oferecer suporte a um controle, o OpenClaw retorna um erro claro de controle não compatível.
Cookbook de comandos ACP
| Comando | O que faz | Exemplo |
|---|---|---|
/acp spawn | Cria sessão ACP; binding opcional da conversa atual ou da thread. | /acp spawn codex --bind here --cwd /repo |
/acp cancel | Cancela turno em andamento da sessão de destino. | /acp cancel agent:codex:acp:<uuid> |
/acp steer | Envia instrução de direcionamento para a sessão em execução. | /acp steer --session support inbox prioritize failing tests |
/acp close | Fecha a sessão e desvincula alvos de thread. | /acp close |
/acp status | Mostra backend, modo, estado, opções de runtime, capacidades. | /acp status |
/acp set-mode | Define o modo de runtime para a sessão de destino. | /acp set-mode plan |
/acp set | Escrita genérica de opção de configuração do runtime. | /acp set model openai/gpt-5.4 |
/acp cwd | Define override do diretório de trabalho do runtime. | /acp cwd /Users/user/Projects/repo |
/acp permissions | Define o perfil de política de aprovação. | /acp permissions strict |
/acp timeout | Define o timeout do runtime (segundos). | /acp timeout 120 |
/acp model | Define o override de modelo do runtime. | /acp model anthropic/claude-opus-4-6 |
/acp reset-options | Remove overrides de opções de runtime da sessão. | /acp reset-options |
/acp sessions | Lista sessões ACP recentes do armazenamento. | /acp sessions |
/acp doctor | Integridade do backend, capacidades, correções acionáveis. | /acp doctor |
/acp install | Imprime etapas determinísticas de instalação e habilitação. | /acp install |
/acp sessions lê o armazenamento para a sessão atual vinculada ou a sessão atual do solicitante. Comandos que aceitam tokens session-key, session-id ou session-label resolvem alvos por descoberta de sessão do gateway, incluindo raízes customizadas de session.store por agente.
Mapeamento de opções de runtime
/acp tem comandos de conveniência e um setter genérico.
Operações equivalentes:
/acp model <id>mapeia para a chave de configuração de runtimemodel./acp permissions <profile>mapeia para a chave de configuração de runtimeapproval_policy./acp timeout <seconds>mapeia para a chave de configuração de runtimetimeout./acp cwd <path>atualiza diretamente o override de cwd do runtime./acp set <key> <value>é o caminho genérico.- Caso especial:
key=cwdusa o caminho de override de cwd.
- Caso especial:
/acp reset-optionslimpa todos os overrides de runtime da sessão de destino.
Suporte a harnesses acpx (atual)
Aliases integrados atuais de harness no acpx:claudecodexcopilotcursor(Cursor CLI:cursor-agent acp)droidgeminiiflowkilocodekimikiroopenclawopencodepiqwen
agentId, a menos que sua configuração do acpx defina aliases personalizados de agente.
Se sua instalação local do Cursor ainda expuser ACP como agent acp, sobrescreva o comando do agente cursor na sua configuração do acpx em vez de alterar o padrão integrado.
O uso direto da CLI do acpx também pode direcionar para adapters arbitrários por meio de --agent <command>, mas essa rota de escape bruta é um recurso da CLI do acpx (não do caminho normal agentId do OpenClaw).
Configuração necessária
Linha de base do ACP no core:- Discord:
channels.discord.threadBindings.spawnAcpSessions=true
Configuração de plugin para backend acpx
Instalações novas já vêm com o plugin de runtime integradoacpx habilitado por padrão, então o ACP
normalmente funciona sem uma etapa manual de instalação de plugin.
Comece com:
acpx, negou-o via plugins.allow / plugins.deny ou quiser
alternar para um checkout local de desenvolvimento, use o caminho explícito do plugin:
Configuração de comando e versão do acpx
Por padrão, o plugin de backend integrado acpx (acpx) usa o binário fixado localmente no plugin:
- O comando usa por padrão
node_modules/.bin/acpxlocal ao plugin dentro do pacote do plugin ACPX. - A versão esperada usa por padrão o pin da extensão.
- A inicialização registra imediatamente o backend ACP como não pronto.
- Um job de verificação em segundo plano valida
acpx --version. - Se o binário local ao plugin estiver ausente ou incompatível, ele executa:
npm install --omit=dev --no-save acpx@<pinned>e valida novamente.
commandaceita caminho absoluto, caminho relativo ou nome de comando (acpx).- Caminhos relativos são resolvidos a partir do diretório de workspace do OpenClaw.
expectedVersion: "any"desabilita a correspondência estrita de versão.- Quando
commandaponta para um binário/caminho personalizado, a instalação automática local ao plugin é desabilitada. - A inicialização do OpenClaw continua sem bloqueio enquanto a verificação de integridade do backend é executada.
Instalação automática de dependências
Quando você instala o OpenClaw globalmente comnpm install -g openclaw, as
dependências de runtime do acpx (binários específicos da plataforma) são instaladas automaticamente
por meio de um hook de postinstall. Se a instalação automática falhar, o gateway ainda inicia
normalmente e relata a dependência ausente por meio de openclaw acp doctor.
Bridge MCP de tools de plugin
Por padrão, sessões ACPX não expõem tools registradas por plugins do OpenClaw para o harness ACP. Se você quiser que agentes ACP como Codex ou Claude Code chamem tools instaladas de plugins do OpenClaw, como recuperação/armazenamento de memória, habilite a bridge dedicada:- Injeta um servidor MCP integrado chamado
openclaw-plugin-toolsno bootstrap da sessão ACPX. - Expõe tools de plugin já registradas por plugins OpenClaw instalados e habilitados.
- Mantém o recurso explícito e desativado por padrão.
- Isso expande a superfície de tools do harness ACP.
- Agentes ACP obtêm acesso apenas a tools de plugin já ativas no gateway.
- Trate isso como o mesmo limite de confiança que permitir que esses plugins executem no próprio OpenClaw.
- Revise os plugins instalados antes de habilitar.
mcpServers personalizados continuam funcionando como antes. A bridge integrada de plugin-tools é uma conveniência adicional opcional, não uma substituição para a configuração genérica de servidor MCP.
Configuração de permissões
Sessões ACP são executadas sem interação — não há TTY para aprovar ou negar prompts de permissão para escrita em arquivos e execução de shell. O plugin acpx fornece duas chaves de configuração que controlam como as permissões são tratadas: Essas permissões de harness ACPX são separadas das aprovações de execução do OpenClaw e separadas de flags de bypass específicas de fornecedor para backends CLI, como--permission-mode bypassPermissions da Claude CLI. approve-all do ACPX é a chave de emergência no nível do harness para sessões ACP.
permissionMode
Controla quais operações o agente do harness pode executar sem solicitar aprovação.
| Valor | Comportamento |
|---|---|
approve-all | Aprova automaticamente todas as escritas em arquivos e comandos de shell. |
approve-reads | Aprova automaticamente apenas leituras; escritas e exec exigem prompts. |
deny-all | Nega todos os prompts de permissão. |
nonInteractivePermissions
Controla o que acontece quando um prompt de permissão seria exibido, mas não há TTY interativo disponível (o que sempre acontece em sessões ACP).
| Valor | Comportamento |
|---|---|
fail | Aborta a sessão com AcpRuntimeError. (padrão) |
deny | Nega silenciosamente a permissão e continua (degradação elegante). |
Configuração
Defina via configuração de plugin:Importante: Atualmente, o OpenClaw usa por padrãopermissionMode=approve-readsenonInteractivePermissions=fail. Em sessões ACP sem interação, qualquer escrita ou exec que dispare um prompt de permissão pode falhar comAcpRuntimeError: Permission prompt unavailable in non-interactive mode. Se você precisar restringir permissões, definanonInteractivePermissionscomodenypara que as sessões degradem de forma elegante em vez de falhar.
Solução de problemas
| Sintoma | Causa provável | Correção |
|---|---|---|
ACP runtime backend is not configured | Plugin de backend ausente ou desabilitado. | Instale e habilite o plugin de backend, depois 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) | O despacho a partir de mensagens normais em thread está desabilitado. | Defina acp.dispatch.enabled=true. |
ACP agent "<id>" is not allowed by policy | Agente não está na allowlist. | Use um agentId permitido ou atualize acp.allowedAgents. |
Unable to resolve session target: ... | Token de key/id/label inválido. | Execute /acp sessions, copie a key/label exata e tente novamente. |
--bind here requires running /acp spawn inside an active ... conversation | --bind here foi usado sem uma conversa ativa vinculável. | Vá para o chat/canal de destino e tente novamente, ou use spawn sem binding. |
Conversation bindings are unavailable for <channel>. | O adapter não tem capacidade de binding ACP da conversa atual. | Use /acp spawn ... --thread ... onde 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 foi 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 é dono do alvo de binding ativo. | Refaça o binding como proprietário ou use uma conversa ou thread diferente. |
Thread bindings are unavailable for <channel>. | O adapter não tem capacidade de binding de thread. | Use --thread off ou vá para um adapter/canal compatível. |
Sandboxed sessions cannot spawn ACP sessions ... | O runtime ACP roda no host; a sessão solicitante está em sandbox. | Use runtime="subagent" a partir de 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" foi solicitado para runtime ACP. | Use runtime="subagent" para sandbox obrigatório ou use ACP com sandbox="inherit" a partir de uma sessão sem sandbox. |
| Metadados ACP ausentes para a sessão vinculada | Metadados ACP obsoletos/excluídos. | Recrie com /acp spawn e depois refaça o binding/foco da thread. |
AcpRuntimeError: Permission prompt unavailable in non-interactive mode | permissionMode bloqueia escritas/exec em sessão ACP sem interação. | Defina plugins.entries.acpx.config.permissionMode como approve-all e reinicie o gateway. Consulte Configuração de permissões. |
| A sessão ACP falha cedo com pouca saída | Prompts de permissão estão bloqueados por permissionMode/nonInteractivePermissions. | Verifique os logs do gateway em busca de AcpRuntimeError. Para permissões completas, defina permissionMode=approve-all; para degradação elegante, defina nonInteractivePermissions=deny. |
| A sessão ACP fica travada indefinidamente após concluir o trabalho | O processo do harness terminou, mas a sessão ACP não informou conclusão. | Monitore com ps aux | grep acpx; finalize manualmente processos obsoletos. |