Ko‘p agentli sandbox va vositalarni sozlash
Umumiy ko‘rinish
Ko‘p agentli sozlamada har bir agent endi quyidagilarga ega bo‘lishi mumkin:- Sandbox konfiguratsiyasi (
agents.list[].sandboxagents.defaults.sandboxni bekor qiladi) - Vosita cheklovlari (
tools.allow/tools.deny, shuningdekagents.list[].tools)
- To‘liq kirish huquqiga ega shaxsiy yordamchi
- Cheklangan vositalarga ega oila/ish agentlari
- Sandboxlarda joylashgan ommaga ochiq agentlar
setupCommand sandbox.docker ostida (global yoki har bir agent uchun) joylashadi va konteyner yaratilganda bir marta ishga tushadi.
Autentifikatsiya har bir agent uchun alohida: har bir agent o‘zining agentDir autentifikatsiya omboridan quyidagi manzilda o‘qiydi:
agentDir ni qayta ishlatmang.
Agar hisob ma’lumotlarini ulashmoqchi bo‘lsangiz, auth-profiles.json ni boshqa agentning agentDir ichiga nusxalang.
Sandboxing ish vaqtida qanday tutishini bilish uchun Sandboxing ga qarang.
“Nega bu bloklangan?” ni nosozliklarni tuzatish uchun Sandbox vs Tool Policy vs Elevated va openclaw sandbox explain ga qarang.
Konfiguratsiya misollari
1-misol: Shaxsiy + cheklangan oila agenti
mainagent: Xostda ishlaydi, barcha vositalarga to‘liq kirishfamilyagent: Docker’da ishlaydi (har bir agent uchun bitta konteyner), faqatreadvositasi
2-misol: Umumiy sandboxga ega ish agenti
2b-misol: Global kodlash profili + faqat xabar almashish agenti
- standart agentlar kodlash vositalarini oladi
supportagent faqat xabar almashish uchun (+ Slack vositasi)
3-misol: Har bir agent uchun turli sandbox rejimlari
Konfiguratsiya ustuvorligi
Global (agents.defaults.*) va agentga xos (agents.list[].*) konfiguratsiyalar mavjud bo‘lganda:
Sandbox konfiguratsiyasi
Agentga xos sozlamalar global sozlamalarni bekor qiladi:agents.list[].sandbox.{docker,browser,prune}.*ushbu agent uchunagents.defaults.sandbox.{docker,browser,prune}.*ni bekor qiladi (sandbox scope"shared"ga yechilganda e’tiborga olinmaydi).
Vosita cheklovlari
Filtrlash tartibi quyidagicha:- Vosita profili (
tools.profileyokiagents.list[].tools.profile) - Provayder vosita profili (
tools.byProvider[provider].profileyokiagents.list[].tools.byProvider[provider].profile) - Global vosita siyosati (
tools.allow/tools.deny) - Provayder vosita siyosati (
tools.byProvider[provider].allow/deny) - Agentga xos vosita siyosati (
agents.list[].tools.allow/deny) - Agent provayderi siyosati (
agents.list[].tools.byProvider[provider].allow/deny) - Sandbox vosita siyosati (
tools.sandbox.toolsoragents.list[].tools.sandbox.tools) - Subagent vosita siyosati (
tools.subagents.tools, agar mavjud bo‘lsa)
agents.list[].tools.sandbox.tools is set, it replaces tools.sandbox.tools for that agent.
If agents.list[].tools.profile is set, it overrides tools.profile for that agent.
Provider tool keys accept either provider (e.g. google-antigravity) or provider/model (e.g. openai/gpt-5.2).
Tool groups (shorthands)
Tool policies (global, agent, sandbox) supportgroup:* entries that expand to multiple concrete tools:
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: all built-in OpenClaw tools (excludes provider plugins)
Elevated Mode
tools.elevated is the global baseline (sender-based allowlist). agents.list[].tools.elevated can further restrict elevated for specific agents (both must allow).
Mitigation patterns:
- Deny
execfor untrusted agents (agents.list[].tools.deny: ["exec"]) - Avoid allowlisting senders that route to restricted agents
- Disable elevated globally (
tools.elevated.enabled: false) if you only want sandboxed execution - Disable elevated per agent (
agents.list[].tools.elevated.enabled: false) for sensitive profiles
Migration from Single Agent
Before (single agent):agent.* configs are migrated by openclaw doctor; prefer agents.defaults + agents.list going forward.
Tool Restriction Examples
Read-only Agent
Safe Execution Agent (no file modifications)
Communication-only Agent
Common Pitfall: “non-main”
agents.defaults.sandbox.mode: "non-main" is based on session.mainKey (default "main"),
not the agent id. Group/channel sessions always get their own keys, so they
are treated as non-main and will be sandboxed. If you want an agent to never
sandbox, set agents.list[].sandbox.mode: "off".
Testing
After configuring multi-agent sandbox and tools:-
Check agent resolution:
-
Verify sandbox containers:
-
Test tool restrictions:
- Send a message requiring restricted tools
- Verify the agent cannot use denied tools
-
Monitor logs:
Troubleshooting
Agent not sandboxed despite mode: "all"
- Check if there’s a global
agents.defaults.sandbox.modethat overrides it - Agent-specific config takes precedence, so set
agents.list[].sandbox.mode: "all"
Tools still available despite deny list
- Check tool filtering order: global → agent → sandbox → subagent
- Each level can only further restrict, not grant back
- Verify with logs:
[tools] filtering tools for agent:${agentId}
Container not isolated per agent
- Set
scope: "agent"in agent-specific sandbox config - Default is
"session"which creates one container per session