08-Thinking-与推理控制
第 8 篇:Thinking 与推理控制 — 让模型”想”多少 本篇是《深入 Claude Code 源码》系列的第 8 篇。我们将深入分析 Claude Code 如何精细控制模型的推理深度——从 Extended Thinking 的三种模式、Effort 级别系统、ultrathink 关键词触发,到 Advisor 这一”更强模型审阅”机制。 这些机制共同回答了一个核心问题:在速度、质量和成本之间,如何给用户最大的控制权? 为什么需要推理控制?大语言模型的推理能力不是免费的。当模型”想得更深”时,它消耗更多的 token、花费更多的时间、产生更高的成本。但并非所有任务都需要深度推理——重命名一个变量和重构整个模块的架构,需要的思考量天差地别。 Claude Code 面对的工程挑战是:如何让用户(和系统)灵活地在”快速响应”和”深度思考”之间切换,同时确保不同模型版本的行为一致性? 源码中围绕这个问题构建了四个相互关联的子系统: ThinkingConfig — 控制模型是否开启 Extended Thinking 及其模式 Effort — 控制模型的推理努力程度(...
07-Prompt-Cache
第 7 篇:Prompt Cache — 跨模块的缓存策略如何降低 API 成本 本篇是《深入 Claude Code 源码》系列的第 7 篇。我们将从一个横切视角,解析 Prompt Cache 机制如何贯穿 System Prompt、对话循环、上下文管理三大模块,以及 Fork Agent 如何通过精密的参数对齐实现跨进程缓存共享。 为什么需要理解 Prompt Cache?调用大模型 API 最大的成本来自 input tokens。在一个典型的 Claude Code 交互式会话中,每次用户提问都会把完整的 System Prompt(约 2 万 token)、工具定义(几千 token)、以及之前所有的对话历史一起发送给 API。如果对话进行了 50 轮,每轮平均 5 万 input tokens,那一个会话就消耗 250 万 input tokens。 Anthropic 的 Prompt Caching 机制可以将 重复前缀 的成本降低 90%。服务端会缓存请求前缀(System Prompt + 工具定义 + 消息历史前缀),只要下次请求的前缀字节完全一致,就...
06-上下文管理
第 6 篇:上下文管理 — 无限对话的秘密 本篇是《深入 Claude Code 源码》系列的第 6 篇。我们将深入分析 Claude Code 如何在有限的 context window 内支撑无限长度的对话——从 token 预算管理、多级压缩策略,到文件状态缓存与 compact 后恢复的设计。 范围说明:上下文的”构建”(System Prompt 组装、CLAUDE.md 注入、git status 获取)已在第 4 篇中覆盖,缓存策略的横切视角将在第 7 篇中展开。本篇聚焦于上下文构建完成后的压缩、清理与恢复——即当 context window 不够用时,Claude Code 如何在不中断对话的情况下释放空间并重建必要的工作上下文。 为什么上下文管理如此重要?LLM 的 context window 是有限的。Claude 的模型通常有 200K token 的窗口(部分模型支持 1M),看起来很大,但在实际使用中消耗极快: 一次 System Prompt 可能占 5K-15K token 用户附带的 CLAUDE.md 文件可能占 3K-10K token...
05-对话循环
第 5 篇:对话循环 — query.ts 如何驱动一次完整的 AI 交互 本篇是《深入 Claude Code 源码》系列的第 5 篇。我们将深入 query.ts 这个 1729 行的核心文件,揭示一次完整的 AI 对话是如何被驱动的——从消息组装、API 调用、工具执行到错误恢复,理解这个 Agent 运行时的”心跳”。 为什么需要理解对话循环?如果把 Claude Code 比作一个人体,那 query.ts 就是它的心脏——对话循环的编排入口。当然,心脏需要血管系统才能工作:重试逻辑在 services/api/withRetry.ts,工具执行在 services/tools/,停止钩子在 query/stopHooks.ts,环境配置在 query/config.ts。本篇会覆盖这个完整的”循环系统”,而不仅仅是 query.ts 一个文件。每一次用户提问,都会触发这个循环: 1用户输入 → 组装消息 → 调用 API → 模型返回 → 执行工具 → 结果回传 → 模型继续... 这个循环看似简单,但实际的工程复杂度远超预期。一个生产级的 AI 对话循环需要处理...
04-System-Prompt-工程
第 4 篇:System Prompt 工程 — 精密控制模型行为的提示词体系 本篇是《深入 Claude Code 源码》系列的第 4 篇。我们将深入 constants/prompts.ts(约 915 行)这个核心文件,揭示 Claude Code 如何通过精心设计的 System Prompt 架构,在「精确控制模型行为」和「最大化 Prompt Cache 命中率」之间取得平衡。 为什么 System Prompt 值得单独一篇?在大多数 AI 应用中,System Prompt 就是一段硬编码的字符串。但在 Claude Code 这样的生产级 AI Agent 中,System Prompt 是一个工程系统: 它不是一段话,而是十几个独立模块的组装结果 — 每个模块有独立的生命周期和缓存策略 它直接影响 API 成本 — Anthropic 的 Prompt Cache 机制可以大幅降低重复 token 的费用,但前提是 prompt 前缀保持稳定 它是模型行为的根基 — 代码风格约束、安全指令、工具使用优先级、输出格式,全部编码在这里 它有内外版差异 — 通过...
03-状态管理
第 3 篇:状态管理 — React 与非 React 世界的状态桥接 本篇是《深入 Claude Code 源码》系列的第 3 篇。我们将深入分析 Claude Code 如何用一个 35 行的极简 Store 实现,桥接 React UI 与非 React 业务逻辑之间的状态管理,并理解三层状态架构的设计哲学。 为什么状态管理值得单独一篇?Claude Code 面临一个独特的状态管理难题:它既是一个 React 应用,又不完全是。 终端 UI 用 Ink(React for CLI)渲染,组件需要响应式的状态更新。但核心业务逻辑 —— API 调用、工具执行、Agent 编排 —— 运行在 React 树之外。一次工具调用的结果需要同时: 更新 React 组件(显示在终端 UI 上) 被非 React 的 query.ts 对话循环读取 被 Agent 子系统使用(可能运行在隔离的上下文中) 如果用 Redux/Zustand 这类库?太重了。React 内置的 useState/useReducer?无法从 React 树外部访问。模块级全局变...
02-启动优化
第 2 篇:启动优化 – 毫秒级 CLI 启动的工程艺术 本篇是《深入 Claude Code 源码》系列的第 2 篇。我们将深入 cli.tsx 和 main.tsx 的启动路径,揭示 Claude Code 团队如何将 CLI 启动时间优化到毫秒级别。 为什么启动速度如此重要?CLI 工具的第一印象就是启动速度。用户在终端输入 claude 并回车的那一刻,心理预期是”即时响应”。如果启动需要 2 秒,用户会觉得卡顿;如果需要 5 秒,用户会开始怀疑是不是命令输错了。 对于 Claude Code 这样一个重量级应用——近 1900 个 TypeScript 文件、依赖 React/Ink/Yoga 渲染引擎、需要连接 MCP 服务器和 Anthropic API——要做到毫秒级启动,绝非易事。 本篇将揭示 Claude Code 采用的 6 大启动优化策略: 快速路径(Fast Path):对简单命令实现零 import 返回 侧效果前置(Side-Effect Hoisting):利用模块求值时间并行执行 I/O API 预连接(Prec...
01-项目全景
第 1 篇:项目全景 — 一个 AI CLI 产品的技术蓝图 本篇是《深入 Claude Code 源码》系列的开篇。我们将从技术栈选型、启动链路、模块依赖三个维度,建立对整个项目的全局认知。 为什么要从全景开始?当你面对一个约 1900 个源码文件(其中 TypeScript 文件约 1884 个)、核心文件超过 4000 行的大型项目时,最大的挑战不是读懂某个函数,而是不知道从哪里开始读。 Claude Code 是 Anthropic 公司开发的 AI 驱动命令行编程助手。它不是一个简单的 API wrapper —— 它是一个完整的 AI Agent 运行时,包含了从终端 UI 渲染、多 Agent 编排、工具系统、权限安全到 Prompt 工程的全技术栈。理解它的全貌,等于理解了一个生产级 AI 产品的完整架构。 本篇将回答三个核心问题: 为什么选择这些技术? — Bun + TypeScript + Ink + Commander.js 的技术栈选型逻辑 程序是怎么启动的? — 从 cli.tsx 到 REPL 的启动链路 代码是怎么组织的? — 约 1900 个...
legal-and-compliance
法律和合规 Claude Code 的法律协议、合规认证和安全信息。 Starting June 15, 2026, Agent SDK and `claude -p` usage on subscription plans will draw from a new monthly Agent SDK credit, separate from your interactive usage limits. See [Use the Claude Agent SDK with your Claude plan](https://support.claude.com/en/articles/15036540-use-the-claude-agent-sdk-with-your-claude-plan) for details. 法律协议许可证您对 Claude Code 的使用受以下条款约束: 商业条款 - 适用于 Team、Enterprise 和 Claude API 用户 消费者服务条款 - 适用于 Free、Pro 和 Max 用户 商业协议无论您是直接使用 ...
jetbrains
JetBrains IDEs 在 JetBrains IDE(包括 IntelliJ、PyCharm、WebStorm 等)中使用 Claude Code Claude Code 通过专用插件与 JetBrains IDE 集成,提供交互式差异查看、选择上下文共享等功能。 支持的 IDEClaude Code 插件适用于大多数 JetBrains IDE,包括: IntelliJ IDEA PyCharm Android Studio WebStorm PhpStorm GoLand 功能 快速启动:使用 Cmd+Esc(Mac)或 Ctrl+Esc(Windows/Linux)直接从编辑器打开 Claude Code,或点击 UI 中的 Claude Code 按钮 差异查看:代码更改可以直接在 IDE 差异查看器中显示,而不是在终端中显示 选择上下文:IDE 中的当前选择或标签页会自动与 Claude Code 共享。Read 拒绝规则会阻止对匹配文件的此共享 文件引用快捷方式:使用 Cmd+Option+K(Mac)或 Alt+Ctrl+K(Linux...