CC

ClaudeCode Source Analysis

面向工程学习者的终端智能体源码导读

总览

核心不是“会聊天”,而是“如何把终端智能体做成一个长期运行的产品内核”

当前可见源码显示,这个仓库把启动、REPL、命令、工具、权限、任务、扩展、远程和状态治理全部放进同一套终端运行时。最关键的判断是:query() 才是真正共享的执行内核;REPL 和 SDK/headless 只是进入它的两条不同壳层。

你会在这里学到什么

分析边界

事实边界:当前目录不是完整 Git 仓库,只能确认 src/ 源码树与我们生成的分析产物。根级依赖、CI、完整测试结构、发布脚本在当前快照中不可见。
  • 已确认使用 TypeScript / TSX、Bun、React/Ink、Zod、Anthropic SDK、MCP SDK。
  • 已确认 REPL 交互路径直接调用 query(),而 QueryEngine 更偏 SDK/headless façade。
  • 已确认存在命令系统、工具系统、任务系统、权限系统、插件、skills、MCP、远程会话。
  • 未确认完整构建命令、完整测试组织、完整 CI 流水线。

系统轮廓

最重要的不是文件夹,而是这四条支撑性判断:

  • main.tsxsetup.tsinit.ts 共同定义启动边界,而不是单一入口函数包办一切。
  • query.ts 是共享执行内核;QueryEngine 和 REPL 只是两种进入方式。
  • toolExecution.tsuseCanUseTool.tsx 说明工具调用本质上是“可审批的执行协议”。
  • AppStateToolUseContext 是系统最关键的两个跨层粘合抽象。
  • pluginLoader.tsmcp/client.tsloadSkillsDir.ts 不是同类机制,而是三条扩展轴。

建议优先回答的五个问题

1. 程序为什么要拆成 main.tsxsetup.tsentrypoints/init.ts 三段启动?
2. 为什么 REPL 不走 QueryEngine,而是直接调用 query()
3. ToolUseContext 为什么会变成一个重量级应用协议,而不是轻量参数对象?
4. 为什么权限系统必须跨 settings、tool execution、hooks、classifier 和 UI 多层协作?
5. 插件、MCP、skills 为什么必须分三条扩展通路,而不是并进一个统一插件接口?

从哪里开始