claude-code/docs/agentic-design/00-codebase-tour.md
Claude 808d5a61b3
docs: Add comprehensive agentic design documentation (2.5-hour learning session)
新增 docs/agentic-design/ 教育文档,全中文+英文技术术语,覆盖:

- README.md: 总索引,整体架构图,阅读指南
- 00-codebase-tour.md: 代码库全景,递归覆盖所有重要目录
- 01-agent-loop.md: Query loop 状态机,token budget,compaction
- 02-tool-system.md: Tool interface,权限检查,并发执行,sibling abort
- 03-multi-agent-coordination.md: Agent 类型,coordinator 4 阶段,XML 通信
- 04-permission-system.md: Permission mode,rule system,YOLO 分类器,denial tracking
- 05-context-and-memory.md: System prompt 分层,compaction,auto-dream 后台巩固
- 06-feature-gating.md: Compile-time feature,runtime flags,Bun dead-code elimination

总计 ~2.5 小时阅读,每篇含 Design Decision 专栏和常见误解纠正

https://claude.ai/code/session_017Vdqo9B8eTXiEDcqnv9DxM
2026-03-31 16:07:29 +00:00

15 KiB
Raw Blame History

代码库全景:从顶层到最深处

这篇文档是一个递归的导游。我们从顶层文件开始,逐层深入每个重要的目录,直到粒度太细而没有学习价值为止。每个章节都注明关键文件,你可以随时打开源代码对照。


顶层:核心文件

/home/user/claude-code/ 的根目录下,以下文件是系统的脊梁:

文件 行数 用途
main.tsx ~4700 CLI 入口React + Ink 终端渲染器
query.ts ~1700 Query loop 状态机的完整实现
QueryEngine.ts 核心 Query 执行的编排引擎
Tool.ts 核心 Tool 的类型定义和接口规范
tools.ts 核心 Tool 注册与初始化
context.ts 核心 System prompt 和 context 的组装
commands.ts ~700 所有 slash command 的中央路由

学习路线main.tsxquery.tsTool.ts 可以了解 agent loop 的完整流程。


entrypoints/ — 入口层

系统支持多种启动方式:

子目录/文件 用途
cli.tsx 标准 CLI 入口React 组件树的根feature detection
sdk/ Anthropic SDK 集成(给程序员用)
mcp.ts MCP (Model Context Protocol) 服务器
init.ts 初始化逻辑,首次运行配置
sandboxTypes.ts 沙箱相关的类型定义

关键点cli.tsx 做 feature flag 检测,决定如何初始化全局状态。


query/ — Query Loop 配置和支撑

这个目录下的文件都是 query.ts 的辅助组件:

文件 用途
config.ts Query 配置构建器,参数组合
tokenBudget.ts Token budget 追踪和强制执行
stopHooks.ts Stop/interrupt 处理
deps.ts Query 依赖注入

最重要的tokenBudget.ts 控制着"超限时触发 compaction"的逻辑。


tools/ — 所有 Tool 实现40+ 个)

这个目录有 40 多个子目录,每个代表一个 Tool。核心的几个

必读:

Tool 文件 用途
AgentTool/ 子 agent 的产卵和管理 核心,递归往下
FileReadTool/ 读文件 基础
FileEditTool/ 编辑文件 基础
FileWriteTool/ 写文件 基础
BashTool/ 执行 shell 命令 基础
GlobTool/ 文件匹配 基础
GrepTool/ 内容搜索 基础
WebFetchTool/ 获取网页 基础
AskUserQuestionTool/ 询问用户 权限边界
TodoWriteTool/ 写 todo list 后台任务

AgentTool/ — 深递归

这是最复杂的 Tool用来 spawn 子 agent

AgentTool/
├── AgentTool.tsx          [233 KB] 主逻辑agent 生命周期
├── runAgent.ts            执行 agent 的主函数
├── forkSubagent.ts        fork 一个新 agent
├── resumeAgent.ts         恢复之前的 agent
├── loadAgentsDir.ts       从 ~/.agents/ 加载 agent 定义
├── built-in/              内置 agent
│   ├── generalPurposeAgent.ts
│   ├── planAgent.ts
│   ├── exploreAgent.ts
│   └── ... (其他 5 个)
├── agentMemory.ts         Agent 记忆快照
├── agentColorManager.ts   Agent 的颜色分配(便于输出区分)
└── ... (其他支撑文件)

关键概念Agent 可以是 local (in-process) 或 remote (CCR),使用 AsyncLocalStorage 隔离上下文。


services/ — 业务逻辑服务

这个目录是 Claude Code 的"心脏"

tools/ — Tool 执行编排

services/tools/
├── StreamingToolExecutor.ts    [核心] 并发 tool 执行,结果缓冲
├── toolOrchestration.ts        Tool 调度和权限检查
├── toolExecution.ts            单个 tool 调用的执行
├── toolHooks.ts                Tool 执行前/后的 hook
└── ...

最重要StreamingToolExecutor.ts 实现了"并发执行但顺序输出结果"的逻辑。

autoDream/ — 自动记忆压缩

services/autoDream/
├── autoDream.ts                [11 KB] Dream 流程3 个触发门 + 4 个阶段
├── consolidationPrompt.ts      [核心] 告诉 Claude 怎么压缩 memory
├── consolidationLock.ts        防并发的 lock 机制
└── config.ts                   Dream 参数配置

关键点Dream 有三个触发条件门24h 时间 + 5+ 个 session + 拿到 lock。

其他重要服务

目录 用途
api/ Claude API 调用token 计算usage 追踪
mcp/ MCP 协议服务器的实现
analytics/ 事件上报、GrowthBook feature flags
plugins/ 插件系统

utils/permissions/ — 权限系统(深递归)

这是整个 agent sandbox 的防线,共 20+ 个文件,总计 300+ KB

utils/permissions/
├── permissions.ts              [52 KB] 核心决策逻辑
├── yoloClassifier.ts           [52 KB] ML 自动审批分类器
├── filesystem.ts               [62 KB] 文件系统安全规则
├── PermissionMode.ts           Permission mode 枚举
├── denialTracking.ts           追踪拒绝次数circuit breaker
├── pathValidation.ts           路径安全Unicode normalization 等)
├── permissionRuleParser.ts     解析 "Bash(git *)" 这样的规则
├── classifierDecision.ts       分类器决策包装
├── bashClassifier.ts           Bash 命令的特殊规则
├── permissionExplainer.ts      用 LLM 解释权限决定
└── ... (其他辅助)

核心 pipelinemode → rules → YOLO classifier → prompt user


utils/ — 其他公用工具(部分列举)

utils/
├── permissions/                [见上面的深递归]
├── messages/
│   ├── mappers.ts             SDK 消息格式转换
│   ├── systemInit.ts          系统初始化消息构建
│   └── ...
├── settings/                   设置加载和应用
├── queryHelpers.ts             Query 辅助函数
├── undercover.ts               隐藏内部代号Capybara, Tengu 等)
├── abortController.ts          Abort signal 管理
├── agentContext.ts             Agent 上下文 getter
├── api.ts                       API 工具函数
├── hooks/                       React hooks (不是本目录)
├── ... (数十个其他)

学习重点permissions/ 最复杂,其次是 messages/settings/


coordinator/ — 多 Agent 协调

coordinator/
└── coordinatorMode.ts          [19 KB] 唯一的文件,包含完整 coordinator 系统提示

功能:启用 CLAUDE_CODE_COORDINATOR_MODE=1 时激活,引入 4 个阶段:
  research → synthesis → implementation → verification

关键点Worker 通过 <task-notification> XML 向 coordinator 报告进度。


tasks/ — 后台任务管理

tasks/
├── LocalAgentTask/             本地 agent 任务追踪
├── RemoteAgentTask/            远程 agent 任务追踪CCR
├── LocalMainSessionTask.ts     主 session 的任务
├── LocalShellTask/             Shell 任务tmux/iTerm2
├── InProcessTeammateTask/      In-process teammate 任务
├── DreamTask/                  Memory dream 任务
├── stopTask.ts                 停止任务的逻辑
├── types.ts                    Task 的类型定义
└── pillLabel.ts                任务标签UI 展示)

核心概念:每个后台任务都有生命周期追踪。


state/ — React 状态管理

state/
├── AppState.tsx                React 状态类型定义
├── AppStateStore.ts            [21 KB] Zustand-like 状态存储
├── onChangeAppState.ts         状态变化的 handler
├── selectors.ts                状态选择器
├── store.ts                    存储初始化
└── teammateViewHelpers.ts      Teammate 视图辅助

模式:这是 Claude Code 的全局状态树UI 所有数据都来自这里。


hooks/ — 80+ 个 React Hook

重要的:

Hook 用途
useCanUseTool.tsx [40 KB] 权限检查 Hook频繁调用
useGlobalKeybindings.tsx [31 KB] 全局键盘快捷键
useTypeahead.tsx [212 KB] 自动补全建议
useVoice.ts [45 KB] 语音输入集成
useInboxPoller.ts [34 KB] 后台轮询消息
useArrowKeyHistory.tsx [34 KB] 历史导航(上/下箭头)
useReplBridge.ts [115 KB] REPL 集成

学习策略:跳过大部分 hook只深入 useCanUseTooluseTypeahead


bootstrap/state.ts — 全局启动状态

bootstrap/
└── state.ts                    [56 KB]

内容:

  • 当前 session ID 和持久化 flag
  • 用户类型ant/public
  • Feature flag 缓存
  • KAIROS mode 检测
  • 全局配置状态

作用:在 App 启动的最早时刻初始化所有全局状态。


cli/ — 终端输出和格式化

cli/
├── print.ts                    [212 KB] 终端渲染引擎
├── structuredIO.ts            NDJSON 和结构化输出
├── handlers/                   命令特定的输出 handler
├── transports/                 多种输出后端stdout, HTTP 等)
├── remoteIO.ts                远程 IO
└── ... (其他)

关键print.ts 是整个 Claude Code 的"输出黑洞",所有文本最终都通过这里。


context/ — React Context Provider

context/
├── QueuedMessageContext.tsx    消息队列
├── mailbox.tsx                Agent 邮箱inter-agent 消息)
├── modalContext.tsx            Modal 对话框
├── notifications.tsx           通知系统
├── overlayContext.tsx          浮层上下文
├── promptOverlayContext.tsx    提示浮层
├── stats.tsx                   统计数据
└── voice.tsx                   语音上下文

作用:提供 React component tree 范围内的全局上下文。


memdir/ — 用户 Memory 管理

memdir/
├── memdir.ts                   [21 KB] 核心 memory 目录管理
├── memoryScan.ts              扫描 memory 文件
├── memoryTypes.ts             Memory 文件的类型
├── memoryAge.ts               Memory 的年龄计算
├── paths.ts                    Memory 文件路径管理
├── teamMemPaths.ts            Team memory 路径multi-agent
└── findRelevantMemories.ts    查找相关 memory

用途:管理 ~/.claude/memory/ 目录,存储用户的持久化知识。


constant/ — 常量和系统提示

constant/ (也被称为 constants/)
├── system.ts                   Base system prompt
├── systemPromptSections.ts    System prompt 的可组装部分
├── cyberRiskInstruction.ts    安全指导Safeguards team 维护)
├── betas.ts                    API beta features 列表
├── messages.ts                 常见消息文本
├── prompts.ts                  各种 prompt 模板
└── ... (其他常量)

关键System prompt 是模块化的,不同 feature 会添加不同的部分。


bridge/ — 与 claude.ai 的 JWT 连接

bridge/
├── bridgeApi.ts               与 claude.ai 的通信
├── bridgeMessaging.ts         消息协议
├── remoteBridgeCore.ts        远程 bridge 核心
├── createSession.ts           创建远程 session
├── jwtUtils.ts                JWT 令牌工具
├── trustedDevice.ts           受信设备管理
└── ... (10+ 个其他)

用途BRIDGE_MODE 时CLI 可以通过 claude.ai 的 WebUI 远程控制。


remote/ — 远程 Session 管理

remote/
├── RemoteSessionManager.ts    远程 session 生命周期
├── SessionsWebSocket.ts       WebSocket 连接管理
├── remotePermissionBridge.ts  权限同步
├── sdkMessageAdapter.ts       SDK 消息适配
└── ... (其他)

用途:支持多个远程客户端同时连接到同一个服务。


entrypoints/sdk/ — SDK 集成

entrypoints/sdk/
├── agentSdkTypes.ts           给外部程序使用的类型
└── (其他 SDK 特定代码)

用途:让程序员可以用代码调用 Claude Code而不只是 CLI。


components/ — React UI 组件

components/
├── App.tsx                     顶层 app 组件
├── AgentProgressLine.tsx       Agent 进度显示
├── BaseTextInput.tsx           文本输入基础
├── ... (100+ 个其他组件)

特点:使用 Ink 库在终端中渲染 React 组件。


commands/ — Slash 命令88 个)

commands/
├── commit.ts / commit-push-pr.ts    Git 相关命令
├── agent.ts                         Agent 管理命令
├── task.ts, tasks.ts                任务管理
├── config.ts                        配置命令
├── memory.ts, memory-dream.ts       Memory 管理
├── session.ts                       Session 管理
├── autofix-pr.ts                    PR 自动修复
├── ... (80+ 个其他)

特点:每个 command 都可以定制输出格式,支持 structured output (NDJSON)。


递归粒度停止条件

以下类型的文件不再递归深入:

  • 单功能工具函数 (<100 行,做一件明确的事):如 array.ts, api.ts 的某些导出
  • 简单 enum/type 定义:如 types.ts, *.d.ts
  • 单个小的 React Hook:如 useAfterFirstRender.ts
  • Utility 映射和适配器:如 message format converter

这些文件的学习价值在于"知道它存在",而不是理解其内部细节。


学习路线建议

  1. 快速扫描:从 README 开始,看一眼这个全景。
  2. 焦点学习:根据你的兴趣选择深入:
    • 想理解 agent loop? → query.ts, QueryEngine.ts
    • 想理解 tool 系统? → Tool.ts, tools/, services/tools/
    • 想理解权限? → utils/permissions/
    • 想理解多 agent? → tools/AgentTool/, coordinator/
  3. 对照原文:打开相应的源文件,参照本文的路线图逐个浏览。

核心数据流

User Input
    ↓
entrypoints/cli.tsx (React 初始化)
    ↓
query.ts (Query Loop: QUERY → TOOL_USE → RESULT)
    ↓
Tool.ts & services/tools/ (Tool 执行)
    ↓
utils/permissions/ (权限检查) + BashTool/FileEditTool/... (实际执行)
    ↓
queryHelpers + messages (结果处理)
    ↓
state/ (状态更新)
    ↓
components/ + cli/print.ts (UI 渲染)
    ↓
User sees output

关键文件大小排名

Top 15 largest files (最值得读):

1. query.ts                 ~1700 行
2. services/tools/StreamingToolExecutor.ts
3. utils/permissions/permissions.ts    ~52 KB
4. utils/permissions/yoloClassifier.ts ~52 KB
5. utils/permissions/filesystem.ts     ~62 KB
6. hooks/useTypeahead.tsx             ~212 KB
7. cli/print.ts                       ~212 KB
8. tools/AgentTool/AgentTool.tsx      ~233 KB
9. bootstrap/state.ts                 ~56 KB
10. state/AppStateStore.ts             ~21 KB
11. services/autoDream/autoDream.ts    ~11 KB
12. coordinator/coordinatorMode.ts     ~19 KB
13. hooks/useCanUseTool.tsx            ~40 KB
14. hooks/useGlobalKeybindings.tsx     ~31 KB
15. hooks/useInboxPoller.ts            ~34 KB

先读前 5 个,会 cover 80% 的系统复杂性。