Configuração de Sandbox e Ferramentas Multiagente
Visão geral
Cada agente em uma configuração multiagente agora pode ter seu próprio:- Configuração de sandbox (
agents.list[].sandboxsubstituiagents.defaults.sandbox) - Restrições de ferramentas (
tools.allow/tools.deny, além deagents.list[].tools)
- Assistente pessoal com acesso total
- Agentes de família/trabalho com ferramentas restritas
- Agentes voltados ao público em sandboxes
setupCommand pertence a sandbox.docker (global ou por agente) e é executado uma vez
quando o contêiner é criado.
A autenticação é por agente: cada agente lê de seu próprio repositório de autenticação agentDir em:
agentDir entre agentes.
Se você quiser compartilhar credenciais, copie auth-profiles.json para o agentDir do outro agente.
Para entender como o sandboxing se comporta em tempo de execução, veja Sandboxing.
Para depurar “por que isso está bloqueado?”, veja Sandbox vs Tool Policy vs Elevated e openclaw sandbox explain.
Exemplos de configuração
Exemplo 1: Agente pessoal + agente familiar restrito
- Agente
main: executa no host, acesso total às ferramentas - Agente
family: executa no Docker (um contêiner por agente), apenas a ferramentaread
Exemplo 2: Agente de trabalho com sandbox compartilhado
Exemplo 2b: Perfil global de programação + agente apenas de mensagens
- agentes padrão recebem ferramentas de programação
- agente
supporté apenas de mensagens (+ ferramenta Slack)
Exemplo 3: Diferentes modos de sandbox por agente
Precedência de configuração
Quando existem configurações globais (agents.defaults.*) e específicas do agente (agents.list[].*):
Configuração de sandbox
As configurações específicas do agente substituem as globais:agents.list[].sandbox.{docker,browser,prune}.*substituiagents.defaults.sandbox.{docker,browser,prune}.*para esse agente (ignorado quando o escopo do sandbox resolve para"shared").
Restrições de ferramentas
A ordem de filtragem é:- Perfil de ferramentas (
tools.profileouagents.list[].tools.profile) - Perfil de ferramentas do provedor (
tools.byProvider[provider].profileouagents.list[].tools.byProvider[provider].profile) - Política global de ferramentas (
tools.allow/tools.deny) - Política de ferramentas do provedor (
tools.byProvider[provider].allow/deny) - Política de ferramentas específica do agente (
agents.list[].tools.allow/deny) - Política do provedor do agente (
agents.list[].tools.byProvider[provider].allow/deny) - Política de ferramentas do sandbox (
tools.sandbox.toolsouagents.list[].tools.sandbox.tools) - Política de ferramentas de subagente (
tools.subagents.tools, se aplicável)
agents.list[].tools.sandbox.tools estiver definido, ele substitui tools.sandbox.tools para esse agente.
Se agents.list[].tools.profile estiver definido, ele substitui tools.profile para esse agente.
As chaves de ferramentas do provedor aceitam provider (por exemplo, google-antigravity) ou provider/model (por exemplo, openai/gpt-5.2).
Grupos de ferramentas (atalhos)
Políticas de ferramentas (globais, por agente, de sandbox) oferecem suporte a entradasgroup:* que se expandem para várias ferramentas concretas:
group:runtime:exec,bash,processgroup:fs:read,write,edit,apply_patchgroup:sessions:sessions_list,sessions_history,sessions_send,sessions_spawn,session_statusgroup:memory:memory_search,memory_getgroup:ui:browser,canvasgroup:automation:cron,gatewaygroup:messaging:messagegroup:nodes:nodesgroup:openclaw: todas as ferramentas OpenClaw integradas (exclui plugins de provedores)
Modo Elevated
tools.elevated é a linha de base global (lista de permissões baseada no remetente). agents.list[].tools.elevated pode restringir ainda mais o elevated para agentes específicos (ambos devem permitir).
Padrões de mitigação:
- Negar
execpara agentes não confiáveis (agents.list[].tools.deny: ["exec"]) - Evitar permitir remetentes que roteiam para agentes restritos
- Desativar elevated globalmente (
tools.elevated.enabled: false) se você quiser apenas execução em sandbox - Desativar elevated por agente (
agents.list[].tools.elevated.enabled: false) para perfis sensíveis
Migração a partir de agente único
Antes (agente único):agent.* são migradas por openclaw doctor; prefira agents.defaults + agents.list daqui para frente.
Exemplos de restrição de ferramentas
Agente somente leitura
Agente de execução segura (sem modificações de arquivos)
Agente apenas de comunicação
Armadilha comum: “non-main”
agents.defaults.sandbox.mode: "non-main" é baseado em session.mainKey (padrão "main"),
não no id do agente. Sessões de grupo/canal sempre recebem suas próprias chaves, então
são tratadas como non-main e serão colocadas em sandbox. Se você quiser que um agente nunca
use sandbox, defina agents.list[].sandbox.mode: "off".
Testes
Após configurar sandbox e ferramentas multiagente:-
Verifique a resolução do agente:
-
Verifique os contêineres de sandbox:
-
Teste as restrições de ferramentas:
- Envie uma mensagem que exija ferramentas restritas
- Verifique se o agente não consegue usar ferramentas negadas
-
Monitore os logs:
Solução de problemas
Agente não está em sandbox apesar de mode: "all"
- Verifique se há um
agents.defaults.sandbox.modeglobal que o substitui - A configuração específica do agente tem precedência, então defina
agents.list[].sandbox.mode: "all"
Ferramentas ainda disponíveis apesar da lista de negação
- Verifique a ordem de filtragem de ferramentas: global → agente → sandbox → subagente
- Cada nível só pode restringir ainda mais, não conceder novamente
- Verifique nos logs:
[tools] filtering tools for agent:${agentId}
Contêiner não isolado por agente
- Defina
scope: "agent"na configuração de sandbox específica do agente - O padrão é
"session", que cria um contêiner por sessão