Subagent 权限与工具
理解父模式优先级、Auto 继承、bubble 审批和工具执行范围。
Subagent 的角色提示、审批模式和工具集合是不同层次。正文写“只读”是行为指令;要缩小可执行操作,还应明确提供哪些工具,并核对父会话的实际模式。
父会话如何影响模式
官方专章列出 default、plan、auto-edit、yolo、bubble。当前 Agent 实现还明确处理 auto 的继承:
| 场景 | 模式选择 |
|---|---|
| 父级为 yolo、auto-edit 或 auto | 优先继承父级模式,即使定义写了更严格模式 |
| 其他父模式且定义显式指定模式 | 进入定义模式的解析与信任检查 |
| 没有显式模式,父级为 plan | 保留 plan |
| 没有显式模式,可信目录内的 default 父级 | 使用 auto-edit |
| 不可信目录要求自动授权模式 | 不接受该定义提权,回退父模式 |
因此在 Auto 父会话下,子级仍接受分类器审批,而不是自动退回每次手动询问。approvalMode: plan 也不能单独作为跨父模式的只读保证。审批规则、工具可用性及其他运行时限制仍会继续生效;不要用委派尝试绕过主会话的分析范围。
bubble 用于把后台工具审批交给父会话,底层按需要确认的行为运行;它不是跳过审批的别名。模式细节见审批模式。
用白名单表达任务边界
tools:
- read_file
- grep_search
- glob声明 tools 时只保留列出的工具;省略时继承父级可用工具。disallowedTools 在白名单之后进一步剔除,permissions.deny 也仍然有效。仅列出某工具,不会绕过 subagent 控制类工具的排除规则。
如果要继承其余工具但排除某类能力,可使用 disallowedTools。只排除文件写入工具而保留 shell 或可写 MCP,不应被称为全面只读。
延迟工具与 Code Mode
普通延迟工具的白名单同时约束直接声明和 tool_search / tool_call 桥接目标。需要桥接发现与调用时,应显式列出两个桥接工具以及允许的目标;只列普通工具不会自动得到桥接工具。
普通已列出的延迟目标可以直接声明,但被 tools.eager 降为隐藏的目标仍可能需要其他显式展示规则。目标即使隐藏,也必须在白名单中才能通过桥接调用。
Code Mode,即 tools.codeModeOnly,使用另一条路径:没有 tool_call;若 agent 获准使用可从 exec 调用的工具,会自动获得 tool_search,除非 disallowedTools 明确禁用它。被 tools.eager 隐藏的工具仍可从 exec 调用。因此减少声明不等于禁止执行。
MCP 工具
没有 tools 列表时继承父会话 MCP 工具;显式列表则只包含其中明确列出的 MCP 工具。阻止规则可以针对单项 mcp__server__tool_name,或针对整个服务器 mcp__server。
disallowedTools:
- mcp__slack工具权限不代替进程隔离;需要文件系统或网络边界时,结合沙箱核对具体执行路径。