多智能体系统
Claude Code 的 AgentTool 是最复杂的工具之一 — 它可以生成自主的子 Agent,每个 Agent 有独立的工具池、权限模式和系统提示。
Agent 系统架构
只读工具
只读工具
完整工具
独立分支
内置 Agent 类型
| Agent 类型 | 用途 | 可用工具 | 模型 |
|---|---|---|---|
| general-purpose | 通用多步骤任务处理,搜索代码,执行复杂操作 | 全部工具 (除受限工具) | 继承父级 |
| Explore | 快速代码库探索,文件搜索,关键词搜索 | 只读:Glob, Grep, Read, WebFetch, WebSearch (无 Agent, Edit, Write) | 继承父级 |
| Plan | 设计实现方案,识别关键文件,权衡架构 | 只读:同 Explore (无 Agent, Edit, Write) | 继承父级 |
| code-reviewer | 代码审查,发现问题 | 只读工具 | 继承父级 |
| verification | 验证任务完成情况 | 只读工具 | 继承父级 |
| claude-code-guide | 回答 Claude Code 使用问题 | Glob, Grep, Read, WebFetch, WebSearch | 继承父级 |
| statusline-setup | 配置状态行设置 | Read, Edit | 继承父级 |
Agent 生成流程
调用 AgentTool
主 Agent 决定需要子 Agent 帮助,调用 AgentTool,指定 subagent_type、prompt、description。
Agent 定义解析
从内置定义 + 用户配置 + 插件中加载 Agent 定义。验证 Agent 存在且未被权限拒绝。
工具池组装
resolveAgentTools() → filterToolsForAgent():根据 Agent 的 allowlist/denylist 过滤工具。初始化 Agent 专属的 MCP Server。
System Prompt 构建
Agent 的 getSystemPrompt() 注入专属系统提示 + 环境上下文。
query() 循环执行
调用 runAgent() → 内部启动独立的 query() 循环。Agent 自主执行,通过 yield 流式返回事件。
结果返回
同步 Agent:结果流式累积到消息历史。
异步 Agent:结果持久化到 sidechain 文件,稍后读取。
隔离机制
Agent 可以在不同级别的隔离环境中运行:
进程内 (默认)
与父 Agent 共享进程和工作目录。最轻量级,适合快速子任务。
Worktree 隔离
创建 Git Worktree,独立分支和工作副本。node_modules 符号链接到父目录节省磁盘。无修改时自动清理。
Remote 隔离
远程 CCR 环境执行。始终后台运行,返回 task ID 和 session URL。Anthropic 内部功能。
Bridge 隔离
通过 Bridge 协议远程会话(src/bridge/ 34 文件)。支持多会话并发 (默认 32)、JWT 认证、Worktree + same-dir 模式。由 BRIDGE_MODE flag 控制。详见 Ch13。
// Worktree 隔离的创建过程 async function createAgentWorktree(agentId: string) { // 1. 创建新分支 const branch = `agent-${agentId}`; await git.worktreeAdd(worktreePath, branch); // 2. 符号链接 node_modules (节省磁盘) await symlink(parentNodeModules, worktreeNodeModules); // 3. 返回隔离的工作目录 return { path: worktreePath, branch }; }
Fork 子 Agent
Fork 是一种特殊的 Agent 生成模式 — 子 Agent 继承父 Agent 的完整对话上下文:
- 触发条件:
isForkSubagentEnabled()为 true 且未指定subagent_type - 上下文继承:
buildForkedMessages()创建合成用户消息,包含父级的工具结果 + 指令 - 防递归: 检测
FORK_BOILERPLATE_TAG,阻止 Fork 的 Fork - 权限冒泡:
permissionMode: 'bubble'— 权限提示冒泡到父会话终端 - Prompt 缓存: 字节精确传递父的渲染 System Prompt,利用缓存
Team Swarm 多 Agent 协作
Team 系统允许创建多个并行协作的 Agent:
// Team 创建流程 const team = await TeamCreateTool.call({ team_name: "refactor-auth", description: "重构认证模块", agent_type: "lead" }); // 团队结构 Team { name: "refactor-auth" lead: Agent // Team Lead (协调者) teammates: Agent[] // 工作 Agent 列表 taskList: TaskList // 隔离的任务列表 } // Agent 间通信 SendMessageTool({ to: "teammate-1", // 点对点 to: "*", // 广播 message: "完成后端 API 修改" });
工具过滤策略
| Agent 类型 | 允许的工具 | 禁止的工具 |
|---|---|---|
| 内置 Agent | 根据定义的 allowlist | EnterWorktree, ExitWorktree, 插件工具 |
| 自定义 Agent | 根据定义的 allowlist | Agent, SkillTool, RemoteAgent (更严格) |
| 异步 Agent | Bash, Read, Write, WebSearch, Glob, Grep, Agent, Skill, SendMessage | 其他所有工具 |
| 进程内队友 | IN_PROCESS_TEAMMATE_ALLOWED_TOOLS (专属列表) | 其他所有工具 |
| Fork Agent | 全部工具 (tools: ['*']) |
无 (但不能再次 Fork) |