---
name: sub_agent_network_permission
description: 当需要理解或调整子智能体在受限网络下的行为时，应该索引本记忆
---

# 子智能体进程网络权限设计

## 问题
当用户把「网络权限」设置为受限（`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/容器模式下，网络由容器自身策略控制，上述配置不影响容器行为。
