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

486 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 代码库全景:从顶层到最深处
> 这篇文档是一个**递归的导游**。我们从顶层文件开始,逐层深入每个重要的目录,直到粒度太细而没有学习价值为止。每个章节都注明关键文件,你可以随时打开源代码对照。
---
## 顶层:核心文件
`/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.tsx``query.ts``Tool.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 解释权限决定
└── ... (其他辅助)
```
**核心 pipeline**mode → 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只深入 `useCanUseTool``useTypeahead`
---
## `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% 的系统复杂性