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
This commit is contained in:
Claude 2026-03-31 16:07:29 +00:00
parent 0cf2fa2edb
commit 808d5a61b3
No known key found for this signature in database
8 changed files with 2697 additions and 0 deletions

View file

@ -0,0 +1,486 @@
# 代码库全景:从顶层到最深处
> 这篇文档是一个**递归的导游**。我们从顶层文件开始,逐层深入每个重要的目录,直到粒度太细而没有学习价值为止。每个章节都注明关键文件,你可以随时打开源代码对照。
---
## 顶层:核心文件
`/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% 的系统复杂性。