逆向深扒Claude Code源码我发现了什么
一句话概括
通过逆向工程深入分析 Claude Code 的 TypeScript 源码,揭示其 Agent 循环、工具调度、System Prompt 动态组装、权限管控和上下文管理等核心实现机制,为理解现代 AI Coding Agent 的工程实践提供源码级参考。
实践内容
注意:原文位于微信公众号,因反爬机制无法自动抓取。以下为基于 Claude Code 公开源码(npm 包
@anthropic-ai/claude-code)的架构要点整理,与原文内容可能存在差异。
Claude Code 核心架构(TypeScript CLI)
Claude Code 是 Anthropic 官方的命令行 AI 编程助手,基于 TypeScript 实现,核心文件位于 src/ 目录:
src/
├── QueryEngine.ts # 主入口,编排 LLM 调用
├── constants/
│ ├── prompts.ts # System Prompt 构建
│ └── systemPromptSections.ts # 缓存友好的分块
├── services/
│ ├── compact/ # 三层上下文压缩
│ │ ├── microCompact.ts
│ │ ├── compact.ts # Full LLM Compact
│ │ └── smCompact.ts # Session Memory Compact
│ └── tools/ # 工具注册与执行
├── utils/
│ └── systemPrompt.ts # Prompt 优先级决策
├── context.ts # Git 状态 + CLAUDE.md 加载
└── memdir/ # 结构化记忆系统
Agent 循环(ReAct 模式)
Claude Code 采用 ReAct(Reasoning + Acting)循环:
- 用户输入 → 构建 System Prompt + 用户消息
- 调用 Anthropic API(streaming)
- 解析响应:文本回复 or 工具调用
- 执行工具 → 将结果追加到对话历史
- 循环直到模型返回最终文本回复(无工具调用)
关键参数:MAX_RUN_LOOP_ITERATIONS 控制最大循环次数。
工具系统
Claude Code 内置工具包括:
- Read —— 读取文件(支持图片、PDF、Jupyter notebook)
- Write —— 写入文件(覆盖式)
- Edit —— 精确字符串替换编辑
- Bash —— 执行 shell 命令
- Grep —— 基于 ripgrep 的内容搜索
- Glob —— 文件模式匹配
- WebFetch —— 抓取网页内容
- WebSearch —— 网络搜索
工具输出遵循 token 限制,过长输出会被截断。
System Prompt 动态组装
System Prompt 由多个部分动态组装:
- 静态部分 —— 角色定义、工具使用规范、安全约束
- 动态边界 ——
SYSTEM_PROMPT_DYNAMIC_BOUNDARY分隔符 - 动态部分 —— Git 状态、当前日期、CLAUDE.md 内容
优先级(从高到低):
overrideSystemPrompt > Coordinator > Agent > customSystemPrompt > defaultSystemPrompt
CLAUDE.md 四级注入
~/.claude/CLAUDE.md # 个人全局偏好
项目根目录/CLAUDE.md # 项目共享规范(提交到 Git)
项目根目录/CLAUDE.local.md # 个人私有指令(不提交)
.claude/rules/*.md # 文件类型特定规则
三层上下文压缩
MicroCompact(规则驱动,无 LLM)
- 白名单:Bash、Read、Grep、Glob 的输出可压缩
- Edit/Write 的状态变更完整保留
Session Memory Compact(会话记忆替换)
- 触发条件:context token ≥ 10,000 且消息数 ≥ 5
- 用之前的会话记忆摘要替换旧消息
Full LLM Compact(LLM 生成结构化摘要)
- 强制 9 段模板:请求意图、技术概念、文件代码、错误修复、问题解决、用户消息、待办任务、当前工作、下一步
- 隐式 CoT:
<analysis>标签内推理,剥离后只保留<summary>
摘录
Claude Code 的源码揭示了一个精心设计的 Agent 系统:它不是简单的”把用户问题发给 LLM”,而是一个包含动态 Prompt 组装、多层上下文压缩、权限管控、工具调度和记忆管理的完整工程体系。每一层都在解决一个具体问题——Prompt 层解决”如何让模型理解角色”,Context 层解决”如何在有限窗口内保留关键信息”,Harness 层解决”如何让 Agent 在生产环境中稳定运行”。
逆向分析 Claude Code 源码最大的收获是理解了”上下文工程”的真正含义:不是把所有信息都塞进 prompt,而是构建一个动态、分层、成本感知的系统,在正确的时间以正确的成本向模型提供恰当的信息。三层渐进式压缩体系(MicroCompact → Session Memory Compact → Full LLM Compact)体现了这一思想的工程落地。
涉及实体
- Claude-Code —— 本文的核心逆向分析对象,Anthropic 官方 AI Coding Agent CLI 工具
- Claude-Sonnet —— Claude Code 中用于 Memdir 语义检索的模型
- Claude-Opus —— Claude Code 的主力推理模型
涉及主题
- Agent架构演进-主题 —— Claude Code 的 ReAct 循环、工具系统、子 Agent 架构是 Agent 工程化的典型实现
- Harness-Engineering-主题 —— System Prompt 动态组装、CLAUDE.md 四级注入、上下文压缩体系是 Harness Engineering 的实践范例