1.8 KiB
1.8 KiB
| name | description |
|---|---|
| sub_agent_network_permission | 当需要理解或调整子智能体在受限网络下的行为时,应该索引本记忆 |
子智能体进程网络权限设计
问题
当用户把「网络权限」设置为受限(HOST_SANDBOX_NETWORK_PERMISSION=restricted)时,创建子智能体会失败,子智能体进程内报 fetch failed (ENOTFOUND)。原因是子智能体进程本身也被加上了与工具命令相同的宿主机沙箱,导致它无法解析模型 API 域名、无法调用模型接口。
解决方案
子智能体进程使用独立的网络权限配置 SUB_AGENT_HOST_NETWORK_PERMISSION(默认 full),与工具级 HOST_SANDBOX_NETWORK_PERMISSION 解耦。
- 子智能体本身需要调用模型 API,因此默认拥有完整网络,避免在受限网络下直接无法启动。
- 主进程对普通
run_command/terminal_input等命令单独施加HOST_SANDBOX_NETWORK_PERMISSION沙箱,这部分限制不受影响。 - 子智能体内部执行的
run_command目前不额外加沙箱(macOS 的sandbox-exec不支持嵌套沙箱,无法在同一个子智能体进程内再套一层)。
配置项
config/sub_agent.py新增SUB_AGENT_HOST_NETWORK_PERMISSION,可通过环境变量覆盖,默认full。modules/sub_agent_manager.py在构建宿主机沙箱启动计划时使用该配置,而不是直接使用HOST_SANDBOX_NETWORK_PERMISSION。
注意事项
- 若未来需要在子智能体内部也对命令做网络限制,必须采用非嵌套方案(例如由主进程提供本地代理/执行服务,或让子智能体通过 localhost 调用主进程代理后再外出)。不能简单在子智能体里再次调用
sandbox-exec。 - 在 Docker/容器模式下,网络由容器自身策略控制,上述配置不影响容器行为。