乐于分享
好东西不私藏

Claude Code 源码深度解析(下):多 Agent 编排与创新设计

Claude Code 源码深度解析(下):多 Agent 编排与创新设计

上篇我们分析了架构分层、QueryEngine 核心引擎和工具系统。本篇深入最核心的创新——多 Agent 系统、记忆管理、高级模式,以及那些让 Claude Code 不同于其他 AI 编码工具的设计。

模块关联图

一、多 Agent 系统:Claude Code 的灵魂

1.1 AgentTool 全景架构

AgentTool 是 Claude Code 最复杂的工具,包含 14 个核心子模块 + 6 个内置 Agent

tools/AgentTool/
├── AgentTool.tsx             # 主入口 —— Agent 的"大门"
├── UI.tsx                    # Agent 执行状态 UI 组件
├── agentColorManager.ts      # 颜色管理 —— 每个 Agent 分配唯一颜色
├── agentDisplay.ts           # 实时显示 Agent 执行状态
├── agentMemory.ts            # Agent 级别的记忆管理
├── agentMemorySnapshot.ts    # 记忆快照 —— 持久化到磁盘
├── agentToolUtils.ts         # Agent 工具辅助函数
├── builtInAgents.ts          # 内置 Agent 注册表
├── constants.ts              # Agent 相关常量
├── forkSubagent.ts           # 子 Agent 派生 —— 核心操作
├── loadAgentsDir.ts          # 加载用户自定义 Agent 目录
├── prompt.ts                 # Agent 系统的 Prompt 模板
├── resumeAgent.ts            # 恢复暂停的 Agent
└── runAgent.ts               # Agent 执行入口

1.2 六种内置 Agent 详解

tools/AgentTool/built-in/
├── claudeCodeGuideAgent.ts   # Claude Code 使用指南
├── exploreAgent.ts           # 代码库探索 Agent
├── generalPurposeAgent.ts    # 通用任务 Agent
├── planAgent.ts              # 规划 Agent
├── statuslineSetup.ts        # 状态栏配置 Agent
└── verificationAgent.ts      # 验证测试 Agent

       

         
           
           
         

Agent 职责 适用场景
exploreAgent 智能搜索代码库 需要了解项目结构、查找代码时
planAgent 分解任务为步骤 复杂任务需要先规划再执行
verificationAgent 执行验证和测试 代码修改后需要确认正确性
generalPurposeAgent 执行任意任务 标准的子任务处理
claudeCodeGuideAgent 提供使用帮助 用户不熟悉某个功能时
statuslineSetup 配置状态栏 IDE 状态栏集成

       

     

每种 Agent 有独立的 Prompt 模板、工具集和执行策略。例如 exploreAgent 会优先使用 GlobTool 和 GrepTool 进行代码搜索,而 verificationAgent 会优先使用 BashTool 运行测试。

1.3 Agent 生命周期管理

派生(forkSubagent) → 执行(runAgent) → [运行中]
                                        ├── 暂停(pause)
                                        ├── 恢复(resumeAgent)
                                        ├── 记忆累积(agentMemory)
                                        ├── 快照保存(agentMemorySnapshot)
                                        └── 完成(返回结果给父Agent)

forkSubagent — 子 Agent 派生是核心操作。派生时创建一个全新的 Agent 实例,拥有:

  • • 独立的上下文窗口
  • • 独立的工具集
  • • 独立的颜色标识(通过 agentColorManager
  • • 独立的记忆空间(通过 agentMemory

agentColorManager — 在终端 UI 中为每个 Agent 分配独特颜色。当多个 Agent 同时运行时,用户可以通过颜色区分不同 Agent 的输出。实现方式可能是维护一个颜色池:

Agent A → 青色 #00d4ff
Agent B → 品红 #ff00ff
Agent C → 绿色 #00ff88
...

agentDisplay — 实时显示每个 Agent 的状态:运行中/暂停/完成/出错。在 389 个 UI 组件中有专门的 AgentProgressLine.tsx 来渲染 Agent 进度。

loadAgentsDir — 支持从用户目录加载自定义 Agent 定义。这意味着 Agent 是可扩展的——用户可以创建自己的专属 Agent。

1.4 多 Agent 并发 —— spawnMultiAgent

tools/shared/spawnMultiAgent.ts

spawnMultiAgent 放在 tools/shared/ 目录下(而不是 AgentTool 内部),说明它是跨工具共享的能力。

并发执行模型:

主 Agent 接收到复杂任务
  │
  ├── spawn Agent A (exploreAgent) → 并行搜索代码
  ├── spawn Agent B (planAgent)    → 并行制定计划
  └── spawn Agent C (generalPurposeAgent) → 并行执行子任务
      │
      ↓
  Coordinator 汇总所有 Agent 的结果
      │
      ↓
  AgentSummary 生成结构化摘要
      │
      ↓
  主 Agent 基于摘要做最终决策

1.5 Agent 摘要系统

services/AgentSummary/
└── agentSummary.ts

当子 Agent 完成后,agentSummary 自动生成结构化摘要。这是信息传递的关键设计——避免将子 Agent 的全部输出塞入主 Agent 的上下文窗口(那样会浪费大量 Token)。

摘要可能包含:

  • • 任务完成状态
  • • 关键发现/结果
  • • 遇到的问题
  • • 建议的下一步

1.6 团队协作 —— TeamCreateTool / TeamDeleteTool

tools/TeamCreateTool/
├── TeamCreateTool.ts    # 创建 Agent 团队
├── UI.tsx               # 团队创建 UI
├── constants.ts         # 团队常量
└── prompt.ts            # 团队 Prompt

tools/TeamDeleteTool/
├── TeamDeleteTool.ts    # 解散 Agent 团队
├── UI.tsx               # 确认 UI
├── constants.ts
└── prompt.ts

Team 是多 Agent 协作的高层抽象。不再是简单的”派生-执行-返回”,而是持久化的团队结构:

  • • 团队成员共享上下文
  • • 团队有统一的目标
  • • 成员间可以通信协作

1.7 动态工具发现 —— ToolSearchTool

tools/ToolSearchTool/
├── ToolSearchTool.ts    # 动态搜索可用工具
├── constants.ts         # 搜索常量
└── prompt.ts            # 搜索 Prompt

这是一个”元工具”——Agent 可以用它来搜索自己需要的工具。实现了自适应行为:Agent 不需要预先知道所有 184 个工具,它可以按需发现。

1.8 TodoWriteTool —— 任务追踪

tools/TodoWriteTool/
├── TodoWriteTool.ts
├── constants.ts
└── prompt.ts

TODO 列表是 Agent 自我管理的关键——在复杂任务中,Agent 维护一个 TODO 列表来跟踪进度,确保不遗漏步骤。

二、任务管理完整工具链

tools/TaskCreateTool/   → 创建任务
  ├── TaskCreateTool.ts
  ├── constants.ts
  └── prompt.ts

tools/TaskGetTool/      → 获取单个任务
  ├── TaskGetTool.ts
  ├── constants.ts
  └── prompt.ts

tools/TaskListTool/     → 列出所有活跃任务
  ├── TaskListTool.ts
  ├── constants.ts
  └── prompt.ts

tools/TaskUpdateTool/   → 更新任务状态(进度、优先级等)
  ├── TaskUpdateTool.ts
  ├── constants.ts
  └── prompt.ts

tools/TaskStopTool/     → 停止任务执行
  ├── TaskStopTool.ts
  ├── UI.tsx            # 停止确认 UI
  └── prompt.ts

tools/TaskOutputTool/   → 获取任务的输出结果
  ├── TaskOutputTool.tsx
  └── constants.ts

六个工具覆盖了任务的完整生命周期。注意每个都有独立的 prompt.ts——这确保 LLM 知道如何正确使用每个工具。

配合根级文件:

# task.py
@dataclass

class
 PortingTask:
    task_id: str
    description: str

# tasks.py

def
 default_tasks():
    return
 [
        PortingTask('root-module-parity', 'Mirror root module surface'),
        PortingTask('directory-parity', 'Mirror top-level subsystem names'),
        PortingTask('parity-audit', 'Continuously measure parity'),
    ]

三、记忆三层架构

Agent架构图

3.1 第一层:文件级记忆 — memdir/(8 个模块)

memdir/
├── findRelevantMemories.ts   # 语义搜索相关记忆
├── memdir.ts                 # 记忆目录管理核心
├── memoryAge.ts              # 记忆时效性评估
├── memoryScan.ts             # 记忆文件扫描
├── memoryTypes.ts            # 记忆类型定义
├── paths.ts                  # 记忆文件路径管理
├── teamMemPaths.ts           # 团队共享记忆路径
└── teamMemPrompts.ts         # 团队记忆 Prompt 模板

8 个文件实现了一个完整的文件级记忆系统。关键设计:

  • 时效性衰减memoryAge.ts:不是所有记忆都同等重要。三个月前的记忆和今天的记忆,相关性不同。系统会根据时间衰减权重。
  • 语义搜索findRelevantMemories.ts:不是关键字匹配,而是语义级别的搜索。当前对话的主题是”性能优化”时,会找出之前关于性能的记忆。
  • 团队共享teamMemPaths.ts + teamMemPrompts.ts:Agent 团队的成员可以共享记忆。一个 Agent 学到的内容,团队成员都能访问。
  • 文件格式

  • — 记忆以 Markdown 文件存储。这意味着:
    • • 人类可读(可以直接编辑)
    • • Agent 可写(通过 FileWriteTool)
    • • 版本可控(可以 Git 追踪)

3.2 第二层:会话记忆 — services/SessionMemory/

services/SessionMemory/
├── sessionMemory.ts          # 跨会话记忆持久化
├── sessionMemoryUtils.ts     # 记忆操作工具
└── prompts.ts                # 记忆注入 Prompt

会话记忆在对话之间持久化。上一次会话学到的”用户偏好 React 而不是 Vue”,下一次会话仍然可以利用。

prompts.ts 负责将记忆以合适的格式注入到系统提示中——记忆不是原始文本,而是经过整理后注入的。

3.3 第三层:Agent 级记忆

tools/AgentTool/
├── agentMemory.ts            # Agent 实例级记忆
└── agentMemorySnapshot.ts    # 记忆快照持久化

最细粒度的记忆——每个 Agent 实例有自己的记忆空间。agentMemorySnapshot 支持将记忆保存为快照文件,确保即使 Agent 重启也能恢复。

3.4 三层协作

┌─────────────────────────────────────────┐
│  Agent 级记忆 (agentMemory)             │ ← 短期:当前 Agent 实例
│  单 Agent 的临时工作记忆                  │    生命周期:一次执行
├─────────────────────────────────────────┤
│  会话记忆 (SessionMemory)               │ ← 中期:跨对话
│  跨会话的偏好和上下文保持                 │    生命周期:多次对话
├─────────────────────────────────────────┤
│  文件级记忆 (memdir)                    │ ← 长期:项目级知识
│  基于文件的长期知识存储                   │    生命周期:永久
└─────────────────────────────────────────┘

设计背景:为什么记忆要分三层而不是一个大记忆池?

这源于 LLM 的上下文窗口限制。即使 GPT-4 有 128K Token,也无法把所有历史信息塞进去。三层记忆本质上是信息压缩和检索策略

  • 短期记忆(Agent 级)— 存在内存中,速度快,Agent 死了就没了。适合临时工作数据
  • 中期记忆(会话级)— 存在数据库/文件中,跨会话持久化。适合用户偏好、项目上下文
  • 长期记忆(文件级)— 存在 Markdown 文件中,人类可编辑可审查。适合项目知识、架构决策

关键创新在于 memoryAge 时效性衰减 — 不是所有记忆都同等重要。三个月前的构建配置可能已经过时,但上个月做的架构决策仍然有效。这种”遗忘机制”让 Agent 的记忆更接近人类。

另一个关键设计是 语义搜索 vs 关键字搜索findRelevantMemories.ts 不做简单的字符串匹配,而是语义级别的匹配——当你在讨论”性能优化”时,它会找出之前关于”数据库查询优化”的记忆,即使两个词完全不同。

四、Plan Mode:思考与执行分离

tools/EnterPlanModeTool/
├── EnterPlanModeTool.ts     # 进入规划模式
├── UI.tsx                   # 规划模式 UI
├── constants.ts
└── prompt.ts

tools/ExitPlanModeTool/
├── ExitPlanModeV2Tool.ts    # 退出规划(V2 版本)
├── UI.tsx
├── constants.ts
└── prompt.ts

Plan Mode 将 Agent 从”执行者”切换为”规划者”:

  • 进入规划模式 — Agent 只生成计划,不执行任何工具
  • 用户审查 — 用户可以查看、修改计划
  • 退出规划模式 — Agent 按照确认后的计划执行

ExitPlanModeV2Tool 的 V2 后缀说明这个功能经过了迭代——说明规划模式的退出逻辑比较复杂,需要处理:

  • • 计划是否被修改
  • • 哪些步骤需要跳过
  • • 执行顺序的调整

配合命令层:

commands/plan/
├── plan.tsx             # /plan 命令
└── index.ts

commands/ultraplan.tsx   # /ultraplan 深度规划命令

ultraplan 是 Plan Mode 的增强版,可能支持:

  • • 多层次规划(大目标 → 子目标 → 步骤)
  • • 条件分支(如果 A 则执行 B,否则执行 C)
  • • 依赖关系管理

五、Thinkback:思考回溯与回放

commands/thinkback/
├── thinkback.tsx                # 查看当前思考过程
└── index.ts

commands/thinkback-play/
├── thinkback-play.ts            # 回放历史思考过程
└── index.ts

Thinkback 是一个极其独特的设计。两个命令:

  • — 查看当前或最近一次 Agent 思考的完整过程
  • — 回放历史思考过程,像录像机一样逐步重现

这对以下场景极其有价值:

  1. 1. 理解 Agent 为什么做了某个决策
  2. 2. 调试 Agent 行为——哪一步走偏了?
  3. 3. 学习 AI 的推理方式
  4. 4. 代码审查——理解 AI 生成的每一行代码的原因

六、Coordinator Mode:多 Agent 编排

coordinator/coordinatorMode.ts
hooks/toolPermission/handlers/coordinatorHandler.ts
components/CoordinatorAgentStatus.tsx

三个文件实现协调模式:

  • coordinatorMode.ts — 协调模式的核心逻辑。决定如何分配任务给子 Agent、如何汇总结果、如何处理冲突。
  • coordinatorHandler.ts — 协调模式下的权限处理器。与交互模式不同——协调模式中,主 Agent 可以代表用户做部分决策,不需要每个工具调用都等待用户确认。
  • CoordinatorAgentStatus.tsx — UI 组件,实时显示所有活跃 Agent 的状态。在终端中可能是这样的:
[Agent A ● 青色] 正在搜索代码... ████████░░ 80%
[Agent B ● 品红] 正在制定计划... ████░░░░░░ 40%
[Agent C ● 绿色] 等待中...

七、Auto Mode 与 Effort Control

7.1 Auto Mode

cli/handlers/autoMode.ts
components/AutoModeOptInDialog.tsx
hooks/notifs/useAutoModeUnavailableNotification.tsx

Auto Mode = 无需人工确认的连续执行。三个文件:

  • autoMode.ts — 自动模式逻辑
  • AutoModeOptInDialog.tsx — 明确确认对话框(用户必须主动选择启用)
  • useAutoModeUnavailableNotification.tsx — 当自动模式不可用时的通知

安全设计:默认不启用,必须通过 AutoModeOptInDialog 确认。

7.2 Effort Control

commands/effort/
├── effort.tsx
└── index.ts

/effort 控制思考深度——类比 LLM 的 reasoning_effort 参数:

  • 低 effort → 快速响应,适合简单查询
  • 中 effort → 平衡模式
  • 高 effort → 深度思考,适合复杂推理

八、Context Visualization:透明化 Agent 视野

components/ContextVisualization.tsx
commands/context/
├── context.tsx                # 交互式上下文查看
├── context-noninteractive.ts  # 非交互式导出
└── index.ts

上下文可视化让用户看到 Agent “看到了什么”:

  • • 哪些文件被包含在上下文中
  • • 哪些记忆被激活
  • • 对话历史有多长
  • • Token 用量多少

context-noninteractive.ts 支持非交互式导出——用于自动化场景。

九、MCP 深度集成

tools/MCPTool/
├── MCPTool.ts               # MCP 工具调用入口
├── UI.tsx                   # MCP 结果 UI
├── classifyForCollapse.ts   # 折叠分类器
└── prompt.ts

tools/McpAuthTool/
├── McpAuthTool.ts           # MCP 认证工具

tools/ListMcpResourcesTool/
├── ListMcpResourcesTool.ts  # 列出 MCP 资源
├── UI.tsx
└── prompt.ts

tools/ReadMcpResourceTool/
├── ReadMcpResourceTool.ts   # 读取 MCP 资源
├── UI.tsx
└── prompt.ts

四个 MCP 工具覆盖完整生命周期:

  • MCPTool — 调用 MCP 工具
  • McpAuthTool — 处理认证(OAuth 等)
  • ListMcpResourcesTool — 列出可用资源
  • ReadMcpResourceTool — 读取资源内容

classifyForCollapse.ts — 当 MCP 服务器暴露大量工具时,自动分类折叠。例如一个 MCP 服务器返回 50 个工具,UI 会折叠为一个可展开的分组。

配合命令层:

commands/mcp/
├── mcp.tsx                  # MCP 管理界面
├── addCommand.ts            # 添加 MCP 服务器
├── xaaIdpCommand.ts         # 企业级 IDP 认证
└── index.ts

以及技能层:

skills/mcpSkillBuilders.ts   # 自动将 MCP 能力包装为技能

十、技能系统:16 个内置技能

skills/
├── bundled/
│   ├── batch.ts                # 批量操作
│   ├── claudeApi.ts            # Claude API 直接调用
│   ├── claudeApiContent.ts     # API 内容处理
│   ├── claudeInChrome.ts       # Chrome 浏览器集成
│   ├── debug.ts                # 调试
│   ├── keybindings.ts          # 快捷键
│   ├── loop.ts                 # 循环执行
│   ├── loremIpsum.ts           # Lorem Ipsum 生成
│   ├── remember.ts             # 记忆管理
│   ├── scheduleRemoteAgents.ts # 远程 Agent 调度
│   ├── simplify.ts             # 简化
│   ├── skillify.ts             # 用技能创建技能!
│   ├── stuck.ts                # 卡住恢复
│   ├── updateConfig.ts         # 配置更新
│   ├── verify.ts               # 验证
│   └── verifyContent.ts        # 内容验证
├── bundledSkills.ts            # 内置技能注册
├── loadSkillsDir.ts            # 加载用户技能目录
└── mcpSkillBuilders.ts         # MCP 技能构建器

最有创意的技能:

  • skillify — 元编程:用技能创建技能。用户描述”我希望有一个技能可以自动格式化 Python 代码”,skillify 会自动创建这个技能。
  • scheduleRemoteAgents — 远程调度:在远程环境启动 Agent。这意味着你可以在本地触发一个在云端执行的 Agent。
  • stuck — 卡住恢复:当 Agent 陷入循环或无法继续时,自动尝试恢复策略(回退、换方向、请求帮助)。
  • claudeInChrome — 浏览器集成:Agent 可以与 Chrome 浏览器交互,读取网页内容、填写表单。

十一、Buddy 向导系统

buddy/
├── CompanionSprite.tsx       # 陪伴精灵渲染组件
├── companion.ts              # 陪伴角色核心逻辑
├── prompt.ts                 # 角色人设 Prompt
├── sprites.ts                # 精灵图定义(多帧动画)
├── types.ts                  # 类型定义
└── useBuddyNotification.tsx  # 通知 Hook

Buddy 系统在终端中显示一个陪伴角色(Companion Sprite),有多个帧的动画(sprites.ts)。角色有自己的人设(prompt.ts),会在适当的时候发出通知(useBuddyNotification)。

这不仅是装饰——它是降低 AI 工具心理门槛的 UX 设计。一个”有性格的伙伴”比一个冷冰冰的 CLI 更容易被接受。

十二、常量系统中的隐藏设计

constants/
├── apiLimits.ts              # API 调用频率限制
├── betas.ts                  # Beta 功能开关
├── common.ts                 # 公共常量
├── cyberRiskInstruction.ts   # 网络安全风险指令
├── errorIds.ts               # 错误 ID 映射
├── figures.ts                # 终端图形字符
├── files.ts                  # 文件相关常量
├── github-app.ts             # GitHub App 配置
├── keys.ts                   # 快捷键定义
├── messages.ts               # 系统消息模板
├── oauth.ts                  # OAuth 配置
├── outputStyles.ts           # 输出样式
├── product.ts                # 产品信息
├── prompts.ts                # 全局 Prompt 模板
├── spinnerVerbs.ts           # 加载动画动词
├── system.ts                 # 系统级常量
├── systemPromptSections.ts   # 系统 Prompt 分节管理
├── toolLimits.ts             # 每个工具的使用限制
├── tools.ts                  # 工具定义常量
├── turnCompletionVerbs.ts    # 完成状态动词
└── xml.ts                    # XML 解析常量

几个特别值得关注的:

  • systemPromptSections.ts — 系统 Prompt 是模块化组装的。不同场景注入不同的 Prompt 片段。这比一个超长的固定 System Prompt 更灵活。
  • cyberRiskInstruction.ts — 内置网络安全指令。即使不在沙箱中,Agent 也会遵循安全准则,拒绝生成恶意代码。
  • toolLimits.ts — 每个工具有独立的使用限制。BashTool 可能限制为每 Turn 最多 10 次调用,FileWriteTool 可能限制为最多 5 次写入。
  • spinnerVerbs.ts + turnCompletionVerbs.ts — UX 细节中的细节:加载时随机选择不同的动词(”思考中…”、”分析中…”、”生成中…”),完成时显示不同的状态词。这让终端界面更生动。

十三、Bridge 系统(31 个模块)

bridge/
├── bridgeApi.ts                    # API 定义
├── bridgeConfig.ts                 # 配置管理
├── bridgeDebug.ts                  # 调试工具
├── bridgeEnabled.ts                # 启用检查
├── bridgeMain.ts                   # 主入口
├── bridgeMessaging.ts              # 消息传递
├── bridgePermissionCallbacks.ts    # 权限回调
├── bridgePointer.ts                # 指针操作
├── bridgeStatusUtil.ts             # 状态工具
├── bridgeUI.ts                     # UI
├── capacityWake.ts                 # 容量感知唤醒
├── codeSessionApi.ts               # 代码会话 API
├── createSession.ts                # 创建会话
├── debugUtils.ts                   # 调试工具
├── envLessBridgeConfig.ts          # 环境无关配置
├── flushGate.ts                    # 刷新门控
├── inboundAttachments.ts           # 入站附件
├── inboundMessages.ts              # 入站消息
├── initReplBridge.ts              # REPL Bridge 初始化
├── jwtUtils.ts                     # JWT 认证
├── pollConfig.ts                   # 轮询配置
├── pollConfigDefaults.ts           # 默认轮询配置
├── remoteBridgeCore.ts             # 远程核心
├── replBridge.ts                   # REPL Bridge
└── replBridgeHandle.ts             # Bridge 句柄

关键设计模式:

  • JWT 认证 — Bridge 通信使用 JWT Token,确保只有授权的 IDE/浏览器可以连接
  • flushGate — 门控机制,防止消息洪泛。当消息产生速度超过处理速度时,Gate 会批量合并
  • capacityWake — 容量感知唤醒。当系统资源不足时,不会唤醒所有等待的任务,而是根据容量逐步唤醒
  • inboundAttachments — 处理从 IDE 传入的附件(文件、图片等)

十四、远程会话与多传输协议

remote/
├── RemoteSessionManager.ts   # 远程会话生命周期
├── SessionsWebSocket.ts      # WebSocket 通信
├── remotePermissionBridge.ts # 远程权限桥接
└── sdkMessageAdapter.ts      # SDK 消息适配

cli/transports/
├── HybridTransport.ts            # HTTP + WS 混合
├── SSETransport.ts               # Server-Sent Events
├── WebSocketTransport.ts         # 纯 WebSocket
├── SerialBatchEventUploader.ts   # 批量上传
├── WorkerStateUploader.ts        # 状态上报
├── ccrClient.ts                  # CCR 客户端
└── transportUtils.ts             # 工具函数

四种传输协议:

  • WebSocket — 实时双向通信
  • SSE — 服务端推送(单向)
  • Hybrid — HTTP 请求 + WebSocket 实时推送的智能组合
  • SerialBatch — 批量事件上传(网络不稳定时)

十五、服务器与直连

server/
├── createDirectConnectSession.ts  # 创建直连会话
├── directConnectManager.ts        # 直连管理器
└── types.ts                       # 类型定义

Server 层支持直连模式——不经过 Bridge,直接建立本地通信。这对于 IDE 插件集成特别重要。

十六、Prompt Suggestion 推测性预加载

services/PromptSuggestion/
├── promptSuggestion.ts       # 提示建议引擎
└── speculation.ts            # 推测性预加载

speculation.ts 实现了一个非常先进的功能——推测性预加载。在用户还在输入时,系统推测可能的下一个问题,并提前准备相关的上下文和工具。这可以显著减少用户等待时间。

十七、架构设计哲学总结

17.1 一切皆工具

从 BashTool 到 EnterPlanModeTool,从 AskUserQuestionTool 到 ToolSearchTool——”提问”和”搜索工具”本身也是工具。这种自举式设计使得系统极其可扩展。

17.2 三层权限防线

工具池动态组装 → 权限上下文过滤 → 场景化权限处理器
(简单模式/完整模式) (名称/前缀拒绝) (交互/协调/群集)

17.3 记忆驱动智能

三层记忆(短期 Agent → 中期会话 → 长期文件)配合时效性衰减和语义搜索,让 Agent 拥有了类似人类的记忆管理能力。

17.4 完整的可观测性

  • • Thinkback — 思考回溯
  • • Context Visualization — 上下文可视化
  • • Coordinator Agent Status — 多 Agent 状态
  • • Cost Tracker — 成本追踪
  • • History Log — 会话历史

17.5 安全优先

五道防线:

  1. 1. 沙箱系统(shouldUseSandbox)
  2. 2. 危险命令预警(destructiveCommandWarning)
  3. 3. 路径安全校验(pathValidation)
  4. 4. 网络安全指令(cyberRiskInstruction)
  5. 5. 权限二次确认(BypassPermissionsModeDialog)

17.6 规模数据

       

         
           
           
         

维度 数量
TS/TSX 文件 1,902
顶层子系统 35
命令模块 207
工具模块 184
UI 组件 389
服务模块 130
Bridge 模块 31
React Hooks 104
内置技能 16
内置 Agent 6
Vim 模块 5
常量模块 21
传输协议 4 种

       

     


Claude Code 的源码揭示了一个成熟的 AI Agent 运行时应有的样子:强大的工具系统、精细的权限控制、分层记忆管理、多 Agent 编排,以及对可观测性和安全性的极致追求。这些设计模式值得每一个构建 AI Agent 系统的团队学习和借鉴。