深度源码分析报告 | Deep Code Analysis Report
生成日期: 2026-04-01 | 分析工具: Claude Code Analysis Framework
Claude Code 采用三层压缩策略来管理长对话中的上下文窗口
当接近token限制时,自动将旧消息总结为紧凑的摘要,保留关键信息的同时节省空间
移除僵尸消息和过时标记,清理不再需要的中间状态和临时数据
重构上下文结构以提高效率,重新组织消息顺序和分组
支持四种代理模式,从简单任务到复杂协作场景
| 模式 | 进程 | 消息 | 用途 |
|---|---|---|---|
| default | 进程内 | 共享 | 简单任务 |
| fork | 子进程 | 独立 | 上下文隔离 |
| worktree | 子进程 | 独立 | Git 工作树 |
| remote | Bridge 会话 | 独立 | 容器/远程 |
Claude Code 的 43+ 内置工具分为 9 大类别,每个类别都有特定的用途和行为模式
Claude Code 演示了生产级 AI 代理需要的 12 层机制,每层建立在前一层之上
query.ts 的 while-true 循环,调用 Claude API,检查 stop_reason,执行工具
"一个循环和 Bash 就够了"
Tool.ts + tools.ts,每个工具注册到调度映射,循环保持不变
"添加工具 = 添加一个处理程序"
EnterPlanMode + TodoWrite,先列出步骤再执行,完成率翻倍
"没有计划的代理会漂移"
AgentTool + fork,每个子任务有干净的上下文
"分解大任务;每个子任务有干净的上下文"
SkillTool + memdir,通过 tool_result 注入而非系统提示
"需要时加载知识"
三层策略: autoCompact + snipCompact + contextCollapse
"上下文填满;腾出空间"
TaskCreate/Update/Get/List,基于文件的任务图
"大目标 → 小任务 → 磁盘"
DreamTask + LocalShellTask,守护进程运行命令
"慢操作后台;代理继续思考"
TeamCreate/Delete + InProcessTeammateTask,持久化队友
"太大无法单人 → 委托给队友"
SendMessageTool,请求-响应模式驱动所有谈判
"共享通信规则"
coordinator/coordinatorMode,空闲循环 + 自动声明
"队友自动扫描和声明任务"
EnterWorktree/ExitWorktree,任务管理目标,工作树管理目录
"每个在自己的目录中工作"
从 Claude API 到 UI 的全链路流式传输,使用 AsyncGenerator 实现
多层防护: 输入验证 → 钩子 → 规则引擎 → 交互确认 → 工具检查
支持 stdio/sse/http/ws/sdk 五种传输类型,OAuth 2.0 认证
支持 Fork/In-Process/Remote/Worktree 四种代理模式
三层压缩策略: autoCompact (总结) + snipCompact (修剪) + contextCollapse (重构)
JSONL 格式存储,支持 resume/continue/fork-session
基于 Ink 的终端 UI,组件化设计,支持主题
支持自定义插件和技能,可扩展性强
Capybara (v8) 是当前版本代号,已正式发布
功能标志系统,内部使用中
内部测试下一代主要版本,代号已确认
活跃开发完全自主代理模式,支持心跳、推送通知、PR 订阅
概念验证按键通话语音模式已就绪,等待门控发布
等待发布新一代 Claude 模型正在开发中
训练中全面的安全审计和漏洞分析,评估 Claude Code 的安全态势
alwaysAllow/alwaysDeny/alwaysAsk 规则,fail-closed 默认设置
与 @anthropic-ai/sandbox-runtime 深度集成,文件系统隔离
全面的命令验证和清理,防止命令注入
标准 OAuth 2.0 流程,PKCE 防止授权码拦截
全面的安全检查日志和遥测
路径遍历检测和文件系统访问控制
Claude Code 代码库展示了成熟的安全实践, 拥有多层保护机制。权限系统、Sandbox 集成和命令验证特别强大。 识别的问题主要是边缘情况和加固机会,而非根本性漏洞。
Claude Code 实现多层防御安全架构,涵盖认证、授权、沙箱隔离、输入验证、MCP 安全和密钥管理
核心文件: src/utils/auth.ts (2003 行)
防止并发刷新竞争条件
项目设置访问保护
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' }
}
| 模式 | 解析为 | 用途 |
|---|---|---|
//path |
绝对路径 | 系统目录 |
/path |
设置相对 | 项目配置 |
~/path |
用户目录 | 用户文件 |
path |
工作目录相对 | 默认路径 |
Claude Code 12层渐进式Agent Harness的核心实现细节
// 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
}
}
| 特性 | 进程内 (AsyncLocalStorage) | Tmux (CLI参数) |
|---|---|---|
| 隔离 | 上下文隔离 | 进程隔离 |
| 开销 | 低 (同进程) | 高 (子进程) |
| 用途 | 快速任务 | 隔离任务 |
| 崩溃 | 影响主进程 | 独立崩溃 |
检测 .git 文件
主 git 目录挂载