Claude Code 源码解密
当你输入一条消息,背后究竟发生了什么?
代理循环、40+ 工具、多代理编排、权限系统、提示词缓存优化、未发布的隐藏功能……全部从 npm 包反编译的 TypeScript 源码中逐行解读。
代理循环
从按键到渲染响应,逐步追踪源码。
观看 Claude Code 如何排查一个 API 500 错误
用户在终端输入消息,Ink 的 TextInput 组件捕获键盘事件
架构全景
click to explore source files
工具系统
Claude Code 可以调用的每一个内置工具,按功能分类。
命令大全
Claude Code 中可用的 94 个斜杠命令,按功能分类。
独特设计模式
things no other coding agent does
投机性权限分类器
当 Claude 想执行 Bash 命令时,系统在弹出权限对话框的同时启动 ML 分类器。分类器与用户赛跑——如果它先完成且置信度足够高,直接自动批准。
延迟工具加载 (ToolSearch)
不把所有工具 Schema 塞进系统提示词。标记为 shouldDefer 的工具只列名称,需要时通过 ToolSearch 按需加载完整定义。
双层提示词缓存
系统提示词中有一个隐形边界标记 __SYSTEM_PROMPT_DYNAMIC_BOUNDARY__,将提示词分为全局共享缓存层和会话特定层。
上下文修改器
工具返回值不只是数据——还包含 contextModifier 函数来变换后续执行上下文。修改器通过闭包链式组合,避免共享状态竞争。
Fork 子代理缓存对齐
生成子代理时,克隆父进程完整历史,但将所有工具结果替换为同一个占位字符串。N 个子代理共享 1 份缓存。
压缩时学习
上下文压缩不只是总结后丢弃。在压缩过程中提取洞察写入持久记忆,供未来会话使用。上下文淘汰变成学习机会。
术语表
源码中的 47 个关键概念、代号和专有名词。
Spinner 动词
等待 API 响应时终端随机显示的 109个加载文案。从 Sautéing 到 Flibbertigibbeting。
src/constants/spinnerVerbs.ts
settings.json 中自定义:"spinnerVerbs": { "mode": "append", "verbs": ["摸鱼中", "划水中"] }