🇨🇳 中文版 🇺🇸 English

🔍 Claude Code v2.1.88

深度源码分析报告 | Deep Code Analysis Report

生成日期: 2026-04-01 | 分析工具: Claude Code Analysis Framework

📁
1,884
源码文件数
📝
512K
代码行数
🔧
43
内置工具
⚡
101
斜杠命令
📦
~12MB
打包大小
💾
29MB
源码总大小

📊代码分布统计

🏗️系统架构

🚀 入口层 (ENTRY LAYER)
cli.tsx
main.tsx (4,683 行)
REPL.tsx
QueryEngine.ts
⚙️ 查询引擎 (QUERY ENGINE)
submitMessage()
fetchSystemPromptParts()
query() 主循环
StreamingToolExecutor
autoCompact()
🔧 核心系统 (CORE SYSTEMS)
工具系统 (40+ Tools)
服务层 (Services)
状态管理 (State)
MCP 协议

🛠️工具系统

📁 文件操作

FileRead FileEdit FileWrite NotebookEdit

🔍 搜索发现

Glob Grep ToolSearch

⚡ 执行环境

Bash PowerShell LSP

🌐 Web 访问

WebFetch WebSearch

🤖 代理协作

Agent SendMessage TeamCreate TeamDelete

📋 任务管理

TaskCreate TaskUpdate TaskList TaskGet TaskStop

📝 计划模式

EnterPlanMode ExitPlanMode TodoWrite

🔌 MCP 协议

MCPTool ListMcpResources ReadMcpResource

💬 用户交互

AskUserQuestion Brief

⚙️ 系统

Config Skill Sleep

🧠上下文管理系统

Claude Code 采用三层压缩策略来管理长对话中的上下文窗口

📊

autoCompact - 自动总结

当接近token限制时,自动将旧消息总结为紧凑的摘要,保留关键信息的同时节省空间

触发条件: 使用量 > 80%
压缩比: 约 70% 空间节省
✂️

snipCompact - 智能修剪

移除僵尸消息和过时标记,清理不再需要的中间状态和临时数据

触发条件: HISTORY_SNIP 标志
清理对象: 僵尸消息、陈旧标记
🔄

contextCollapse - 结构重构

重构上下文结构以提高效率,重新组织消息顺序和分组

触发条件: CONTEXT_COLLAPSE 标志
优化目标: 提高检索效率

上下文窗口预算分配

系统提示 (工具定义 + 权限规则 + CLAUDE.md) 20-30%
对话历史 (压缩后 + compact_boundary 标记) 50-60%
当前轮次 (用户消息 + 助手响应) 10-20%

🤖多代理系统

支持四种代理模式,从简单任务到复杂协作场景

代理模式对比

模式 进程 消息 用途
default 进程内 共享 简单任务
fork 子进程 独立 上下文隔离
worktree 子进程 独立 Git 工作树
remote Bridge 会话 独立 容器/远程

团队通信协议

SendMessage - 点对点消息
直接向特定队友发送消息,支持同步和异步响应
Task Board - 共享任务板
所有队友可见的任务列表,支持自动声明和状态更新
Idle Cycle - 空闲循环
队友在空闲时自动扫描可用任务并声明
👥
4
代理模式
💬
3
通信方式
🔄
自动
任务声明
🌳
Git
工作树隔离

🛠️工具分类详解

Claude Code 的 43+ 内置工具分为 9 大类别,每个类别都有特定的用途和行为模式

📁

文件操作 (4)

File Operations
FileRead FileEdit FileWrite NotebookEdit
关键特性:
• 原子性写入保证数据安全
• NotebookEdit 支持 Jupyter/IPYNB
• 自动路径解析和验证
🔍

搜索发现 (3)

Search & Discovery
Glob Grep ToolSearch
关键特性:
• Glob 支持通配符模式匹配
• Grep 使用 ripgrep 高性能引擎
• ToolSearch 快速定位工具功能
⚡

执行环境 (3)

Execution Environment
Bash PowerShell LSP
关键特性:
• 跨平台 Shell 支持
• LSP 实时代码补全和跳转
• 后台任务执行能力
🌐

Web 访问 (2)

Web Access
WebFetch WebSearch
关键特性:
• WebFetch 支持内容提取
• WebSearch 实时信息检索
• 自动内容清理和格式化
🤖

代理协作 (6)

Agent Collaboration
Agent SendMessage TeamCreate TeamDelete EnterWorktree ExitWorktree
关键特性:
• 支持 Fork/In-Process/Remote/Worktree
• 自动任务声明和分配
• Git 工作树隔离
📋

任务管理 (5)

Task Management
TaskCreate TaskUpdate TaskList TaskGet TaskStop
关键特性:
• 基于文件的任务持久化
• 支持 blocks/blockedBy 依赖
• 自动状态追踪

工具权限检查流程

validateInput()
输入验证
→
PreToolUse Hooks
用户钩子
→
Permission Rules
规则匹配
→
checkPermissions()
工具检查
→
EXECUTE
执行工具

🎯12 层渐进式绑定机制

Claude Code 演示了生产级 AI 代理需要的 12 层机制,每层建立在前一层之上

THE LOOP - 基础循环

query.ts 的 while-true 循环,调用 Claude API,检查 stop_reason,执行工具

"一个循环和 Bash 就够了"

TOOL DISPATCH - 工具分发

Tool.ts + tools.ts,每个工具注册到调度映射,循环保持不变

"添加工具 = 添加一个处理程序"

PLANNING - 计划模式

EnterPlanMode + TodoWrite,先列出步骤再执行,完成率翻倍

"没有计划的代理会漂移"

SUB-AGENTS - 子代理

AgentTool + fork,每个子任务有干净的上下文

"分解大任务;每个子任务有干净的上下文"

KNOWLEDGE ON DEMAND - 按需知识

SkillTool + memdir,通过 tool_result 注入而非系统提示

"需要时加载知识"

CONTEXT COMPRESSION - 上下文压缩

三层策略: autoCompact + snipCompact + contextCollapse

"上下文填满;腾出空间"

PERSISTENT TASKS - 持久化任务

TaskCreate/Update/Get/List,基于文件的任务图

"大目标 → 小任务 → 磁盘"

BACKGROUND TASKS - 后台任务

DreamTask + LocalShellTask,守护进程运行命令

"慢操作后台;代理继续思考"

AGENT TEAMS - 代理团队

TeamCreate/Delete + InProcessTeammateTask,持久化队友

"太大无法单人 → 委托给队友"

TEAM PROTOCOLS - 团队协议

SendMessageTool,请求-响应模式驱动所有谈判

"共享通信规则"

AUTONOMOUS AGENTS - 自主代理

coordinator/coordinatorMode,空闲循环 + 自动声明

"队友自动扫描和声明任务"

WORKTREE ISOLATION - 工作树隔离

EnterWorktree/ExitWorktree,任务管理目标,工作树管理目录

"每个在自己的目录中工作"

✨核心特性

🔄

流式处理

从 Claude API 到 UI 的全链路流式传输,使用 AsyncGenerator 实现

🔒

权限系统

多层防护: 输入验证 → 钩子 → 规则引擎 → 交互确认 → 工具检查

🧩

MCP 协议

支持 stdio/sse/http/ws/sdk 五种传输类型,OAuth 2.0 认证

🤖

多代理系统

支持 Fork/In-Process/Remote/Worktree 四种代理模式

📦

上下文压缩

三层压缩策略: autoCompact (总结) + snipCompact (修剪) + contextCollapse (重构)

💾

会话持久化

JSONL 格式存储,支持 resume/continue/fork-session

🎨

React UI

基于 Ink 的终端 UI,组件化设计,支持主题

🔌

插件系统

支持自定义插件和技能,可扩展性强

🔄查询生命周期数据流

👤 用户输入
prompt 或 /命令
⚙️ 预处理
processUserInput()
解析命令,构建消息
📋 系统提示构建
fetchSystemPromptParts()
工具定义、权限规则、CLAUDE.md
🌐 Claude API 调用
流式响应
text + tool_use 事件
📝 文本输出
60%
🔧 工具调用
40%
🔒 权限检查
canUseTool()
钩子 → 规则 → 用户确认
⚡ 工具执行
StreamingToolExecutor
并行或串行执行
💾 结果返回
tool_result
追加到消息数组
🔄 循环继续
返回 API
直到 stop_reason != "tool_use"
✅ 最终输出
完整响应
包含使用量、成本统计

🛠️技术栈

📘
TypeScript
主要开发语言 (95%)
⚛️
React
UI 组件 (85%)
🖥️
Ink
终端渲染框架
🟢
Node.js
运行时环境
🥟
Bun
构建工具
📦
Commander.js
CLI 框架
🎨
Chalk
终端颜色
🔌
MCP
扩展协议 (80%)

🔮未来路线图

📅 当前 - Capybara v8

Capybara (v8) 是当前版本代号,已正式发布

🔬 内部 - Tengu

功能标志系统,内部使用中

内部测试

🚀 开发中 - Numbat

下一代主要版本,代号已确认

活跃开发

🤖 计划中 - KAIROS

完全自主代理模式,支持心跳、推送通知、PR 订阅

概念验证

🎤 就绪 - 语音模式

按键通话语音模式已就绪,等待门控发布

等待发布

🆕 新模型 - Opus 4.7 / Sonnet 4.8

新一代 Claude 模型正在开发中

训练中

📊代码质量指标

🔐安全审计报告

全面的安全审计和漏洞分析,评估 Claude Code 的安全态势

🛡️
MATURE
安全态势评分: 4/5
🔴
0
严重漏洞
🟠
3
高危漏洞
🟡
8
中危漏洞
🟢
12
低危问题

🎯 核心安全优势

🔒

多层权限系统

alwaysAllow/alwaysDeny/alwaysAsk 规则,fail-closed 默认设置

🛡️

Sandbox 集成

与 @anthropic-ai/sandbox-runtime 深度集成,文件系统隔离

✅

Bash 命令验证

全面的命令验证和清理,防止命令注入

🔐

OAuth 2.0 PKCE

标准 OAuth 2.0 流程,PKCE 防止授权码拦截

📊

安全日志

全面的安全检查日志和遥测

🚫

路径遍历保护

路径遍历检测和文件系统访问控制

⚠️ 高优先级发现 (30天内修复)

🔴 HIGH: Heredoc 验证竞态条件
文件: /src/tools/BashTool/bashSecurity.ts:439-457
风险: 嵌套 heredoc 检测可能被重叠范围绕过
建议: 添加深度跟踪防止任何嵌套 >1 级,验证 heredoc 分隔符不出现在未引用位置
🔴 HIGH: 环境变量解析命令注入
文件: /src/tools/BashTool/bashPermissions.ts:93-188
风险: 环境变量赋名剥离可能被精心设计的变量名绕过
建议: 白名单方法处理环境变量名 (仅 ASCII 字母数字 + 下划线)
🔴 HIGH: OAuth State 参数验证弱点
文件: /src/services/mcp/auth.ts
风险: State 参数验证未在审查代码中明确显示
建议: 验证 state 参数包含加密随机值,在令牌交换前添加显式验证

📋 中优先级发现 (90天内修复)

权限规则持久化
权限更新缺乏原子事务,实现文件级锁定
分析数据清理
类型断言绕过安全检查,实现运行时验证
大小写规范化
平台特定路径规范化,仅在不区分大小写文件系统上规范化
Sandbox 排除验证
记录解析失败并将其视为需要沙箱
Hook 环境变量清理
实现安全环境变量白名单,阻止包含 shell 元字符的变量
工作目录 TOCTOU
在权限检查时捕获工作目录,在文件访问时验证

📊 OWASP Top 10 (2021) 覆盖率

A01:2021 – 访问控制失效
✓ 已缓解
A02:2021 – 加密失败
✓ 已缓解
A03:2021 – 注入
✓ 已缓解
A04:2021 – 不安全设计
⚠ 部分覆盖
A05:2021 – 安全配置错误
✓ 良好
A06:2021 – 易受攻击组件
✓ 已缓解
A07:2021 – 身份验证失败
✓ 已缓解
A08:2021 – 数据完整性失败
✓ 良好
A09:2021 – 日志失败
⚠ 部分覆盖
A10:2021 – SSRF
✓ 已缓解

💡 安全建议

🔒 代码质量改进

  • • 减少安全关键代码中的类型断言 (as)
  • • 为安全验证添加集成测试
  • • 实现安全重点的 lint 规则

🧪 测试增强

  • • CI/CD 管道中的安全测试
  • • 依赖漏洞扫描
  • • 静态应用安全测试 (SAST)
  • • 定期渗透测试

📚 文档改进

  • • Hook 和 MCP 开发者安全文档
  • • 安全最佳实践指南
  • • 威胁建模文档

✅ 安全审计结论

Claude Code 代码库展示了成熟的安全实践, 拥有多层保护机制。权限系统、Sandbox 集成和命令验证特别强大。 识别的问题主要是边缘情况和加固机会,而非根本性漏洞。

🎯
生产就绪
🔐
安全成熟度 4/5
📅
下次审计: 2026-10

🔐深度安全分析

Claude Code 实现多层防御安全架构,涵盖认证、授权、沙箱隔离、输入验证、MCP 安全和密钥管理

🔑 认证与授权系统

OAuth 2.0 PKCE 流程

核心文件: src/utils/auth.ts (2003 行)

  • ✅ PKCE (Proof Key for Code Exchange)
  • ✅ 多凭证来源 (环境变量/文件描述符/钥匙串)
  • ✅ File descriptor 安全传递
  • ✅ macOS Keychain 集成

分布式令牌刷新锁定

防止并发刷新竞争条件

  • ✅ fcntl(2) 文件锁
  • ✅ Double-check 模式
  • ✅ 自动清理机制
  • ✅ 进程间协调

工作区信任验证

项目设置访问保护

  • ✅ 工作区信任检查
  • ✅ 组织成员验证
  • ✅ 加密签名验证
  • ✅ 权限边界强制
// OAuth 2.0 PKCE Implementation (src/utils/auth.ts)
export async function getAnthropicApiKeyWithSource(): Promise<{
  apiKey: string
  source: AuthTokenSource
}> {
  // 优先级: 环境变量 > 文件描述符 > macOS钥匙串 > 配置文件
  const envKey = process.env.ANTHROPIC_API_KEY
  if (envKey) return { apiKey: envKey, source: 'env' }

  const fdKey = await getApiKeyFromApiKeyHelper()  // 安全IPC
  if (fdKey) return { apiKey: fdKey, source: 'api-key-helper' }

  if (process.platform === 'darwin') {
    const keychainKey = await getApiKeyFromKeychain()
    if (keychainKey) return { apiKey: keychainKey, source: 'keychain' }
  }

  return { apiKey: await getApiKeyFromConfig(), source: 'config' }
}

🛡️ 沙箱隔离系统

Bubblewrap/Firecracker microVM

网络隔离
只读模式、允许主机列表
文件系统
只读挂载、写入路径限制
资源限制
内存、CPU、超时控制
安全加固
NoNewPrivs、Seccomp

沙箱路径模式

模式 解析为 用途
//path 绝对路径 系统目录
/path 设置相对 项目配置
~/path 用户目录 用户文件
path 工作目录相对 默认路径

受保护路径 (禁止写入)

~/.claude/settings.json ~/.claude/skills .git/ (裸仓库) .git/ (工作树允许)

🔧 工具权限系统

权限检查流程

工具调用请求
Tool Call Request
只读?
允许
危险工具?
检查信任
工具特定检查
checkPermissions()
需要批准?
用户确认
并发安全?
检查运行中
允许工具执行
Execute Tool

⛔ 默认拒绝 (Fail-Closed)

  • • isConcurrencySafe: false
  • • isReadOnly: false
  • • checkPermissions: DENY_ALL

🛡️ 危险工具

  • • Bash (需要工作区信任)
  • • Write (需要工作区信任)
  • • Edit (需要工作区信任)
  • • TaskStop (需要工作区信任)

⚠️ 危险模式检测

  • • 路径遍历 (../)
  • • 命令注入 (|rm, curl)
  • • SSRF (file://, 元数据)
  • • AWS/GCP 元数据端点

🔌 MCP 安全机制

Elicitation 协议

  • ✅ Allow/Deny 列表过滤
  • ✅ Schema 验证
  • ✅ 工具清单安全检查
  • ✅ 自动跳过无效工具

OAuth 认证

  • ✅ PKCE 代码验证器
  • ✅ S256 挑战方法
  • ✅ Token 交换
  • ✅ Scope 授权

资源访问控制

  • ✅ URI ACL 黑名单
  • ✅ URI ACL 白名单
  • ✅ Glob 模式匹配
  • ✅ 默认拒绝策略

🔐 密钥管理

平台安全存储

  • 🍎 macOS: Keychain
  • 🐧 Linux: Secret Service
  • 🪟 Windows: Credential Manager
  • 📁 Fallback: 加密文件

云 STS 集成

  • ☁️ AWS STS: 临时凭证
  • 🔵 GCP OIDC: ID Token
  • ⏱️ 1小时有效期
  • 🔄 自动刷新

凭证轮换

  • 📅 30天轮换周期
  • 🆕 自动生成新密钥
  • 🗑️ 旧密钥失效
  • 💾 多位置同步

⚙️核心机制深度解析

Claude Code 12层渐进式Agent Harness的核心实现细节

🔄 QueryEngine: 核心循环

AsyncGenerator 流式模式

// QueryEngine.ts - 主入口点
async *submitMessage(
  prompt: string | ContentBlockParam[],
  options?: SubmitMessageOptions
): AsyncGenerator {
  // 1. 处理用户输入
  const processed = await this.processUserInput(prompt, options)

  // 2. 获取系统提示
  const systemPrompt = await this.fetchSystemPrompt()

  // 3. 进入查询循环
  for await (const event of this.queryLoop(processed, systemPrompt, options)) {
    // 流式返回SDK消息到客户端
    yield event
  }
}

消息生命周期

用户输入
processUserInput()
系统提示
fetchSystemPrompt()
构建对话
buildConversation()
查询循环
queryLoop() ──→ 记录/崩溃恢复
流式响应
AsyncGenerator yield

Compact Boundary 内存管理

触发条件
  • • Token 数 > maxTokens
  • • 会话时间限制
  • • 手动压缩请求
保留策略
  • • 保留最近N条消息
  • • 持久化存储旧消息
  • • 可重置边界
内存效率
  • • O(1) 单消息处理
  • • 立即流式传递
  • • 低首token延迟

🤖 多代理协调机制

身份解析优先级

优先级 1
AsyncLocalStorage
进程内队友
getTeammateContext() - 同进程内的队友上下文隔离
优先级 2
CLI Args
Tmux 队友
dynamicTeamContext - 通过CLI参数传递的队友身份

SendMessage 通信协议

type: 'text' | 'shutdown_request' | 'shutdown_response' | 'plan_approval_request' | 'plan_approval_response'
to: string (队友名称) | '*' (广播)
text/request_id/reason: 消息特定内容

双后端架构

特性 进程内 (AsyncLocalStorage) Tmux (CLI参数)
隔离 上下文隔离 进程隔离
开销 低 (同进程) 高 (子进程)
用途 快速任务 隔离任务
崩溃 影响主进程 独立崩溃

🧠 上下文管理

文件状态缓存

  • 📁 Path: 文件路径
  • 📊 Size: 文件大小
  • 🕐 Mtime: 修改时间
  • 🔐 Hash: 内容哈希

知识注入

  • 📚 SkillTool 懒加载
  • 🔌 按需加载技能
  • 🏷️ 元数据解析
  • 📄 内容缓存

压缩策略

  • 🗑️ 移除冗余系统提示
  • 📝 总结旧工具结果
  • 🔄 去重消息
  • 📊 Token 预算优化

上下文窗口预算分配

系统提示 (工具定义 + 权限规则 + CLAUDE.md) 20-30%
对话历史 (压缩后 + compact_boundary 标记) 50-60%
当前轮次 (用户消息 + 助手响应) 10-20%

🌳 Git Worktree 隔离

Worktree 检测

检测 .git 文件

  • ✅ .git 是文件 (非目录)
  • ✅ 包含 gitdir: 引用
  • ✅ 解析主 git 目录路径

沙箱配置

主 git 目录挂载

  • ✅ 挂载 /.git 到主仓库
  • ✅ 允许 git 写操作
  • ✅ 保持 git 操作一致性

并发隔离

  • 🌳 每个 worktree 独立
  • 🔒 共享主 git 目录
  • 🤝 支持 git 操作
  • 🚀 并发安全