Claude Code Source Notes

Claude Code 源码阅读系列

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

源码证据来自公开镜像,产品契约来自 Claude Code 与 Anthropic 官方文档。每篇只描述当前公开代码可见的客户端机制。

源码阅读 · 第一篇 先跟一次任务走完整条运行主线

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

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

沿 CLAUDE.md、auto memory、session memory、agent memory 和 prependUserContext(),拆开长期规则怎样投影到下一轮模型请求。

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

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

源码阅读 · 第四篇 工具调用不是执行命令,而是运行时合约

ToolUseContextquery()runTools()runToolUse() 出发,拆开模型提出 tool_use 后, runtime 怎样校验、调度、过权限闸并回填 tool_result

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

沿 ToolPermissionContext、permission modes、allow/deny/ask 规则、 PreToolUse、PermissionRequest 和拒绝回填,拆开副作用怎样被运行时收口。

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

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

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

沿 AgentToolrunAgent()、fork path、worker tool pool 和 createSubagentContext(),拆开子代理怎样重建一份可控上下文。

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

沿 HOOK_EVENTSgetMatchingHooks()executeHooks()PreToolUseSessionStartStop 和 compact hooks, 拆开 hooks 怎样接入运行时边界。

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

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

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

沿 cache_control、稳定前缀、动态工具避让、fork cache-safe params、 cached microcompact 和 cache break detection,拆开性能为什么来自请求形状。