Claude Code Source Notes

Claude Code 源码阅读系列

这个系列先从一次普通任务的运行主线开始:入口、队列、REPL、query loop、模型流、工具执行和恢复记录先串起来, 再逐篇拆 Memory、上下文、工具、权限、MCP、subagent、hooks、transcript、resume 和 prompt cache。

源码依据为公开镜像的 2026-03-31 固定快照,不能代表当前发行版。每篇区分快照内可见的客户端机制、当前官方文档合同与未公开实现。

源码阅读 · 第一篇 先跟一次任务走完 Claude Code 的运行主线

不先钻某个机制,而是沿 CLI、REPL、队列、query()、模型调用、工具执行、 messages、transcript 和 resume 建立源码阅读路线。

源码阅读 · 第二篇 Memory 不是聊天记录,而是长期指令层

沿 CLAUDE.md 与各类 memory 文件,区分缓存读取、失效重载和不同请求入口;文件写入不等于下一次请求立即更新。

源码阅读 · 第三篇 上下文快爆了,Claude Code 不是直接总结

从 context.ts、query.ts、microcompact、auto compact 和 prompt cache 入口出发,拆开 Claude Code 如何把一长串工作会话变成下一次模型请求。

源码阅读 · 第四篇 工具调用先检查,再执行

模型给出的 tool_use 只是一张申请单。沿 ToolUseContext、 runTools() 和 runToolUse(),看 runtime 怎样找到工具、 校验参数、检查权限,再把 tool_result 送回下一轮请求。

源码阅读 · 第五篇 权限不是弹窗,而是副作用刹车

沿 ToolPermissionContext、permission modes、allow/deny/ask 规则、 PreToolUse、PermissionRequest 和拒绝回填,说明本地操作怎样被允许、拒绝或交给用户决定。

源码阅读 · 第六篇 命令、Skills 与 MCP,能力是怎样进上下文的

沿 getCommands()、slash command、SkillTool、MCP 连接和 assembleToolPool(),拆开扩展能力怎样进入本轮命令表与工具池。

源码阅读 · 第七篇 Subagent 不是另一个聊天窗口,而是隔离的工具上下文

沿 AgentTool、runAgent()、fork path、worker tool pool 和 createSubagentContext(),比较普通 subagent 的隔离状态与 fork 的缓存前缀复用。

源码阅读 · 第八篇 Hooks 不是脚本回调,而是运行时关口

沿 HOOK_EVENTS、getMatchingHooks()、executeHooks()、 PreToolUse、SessionStart、Stop 和 compact hooks, 说明 hooks 在哪些步骤运行、收到什么输入,又能改变哪些结果。

源码阅读 · 第九篇 Resume 不是续聊天,而是重建运行时状态

沿 recordTranscript()、loadConversationForResume()、 processResumedConversation() 和 REPL /resume, 拆开旧会话怎样恢复成可继续执行的 runtime。

源码阅读 · 第十篇 Prompt cache 不是开关,速度来自请求形状

沿 cache_control、稳定前缀、动态工具避让、fork cache-safe params、 cached microcompact 和 cache break detection,说明为什么稳定的请求前缀才会带来缓存复用。