第三十二章:现在的文档体系还缺什么
把当前文档体系真正还缺的章节、源码证据和下一轮最值钱的选题列清楚。
1. 先说结论
前面这批文档,已经把 Claude Code 最核心的 agent runtime 主骨架拆出来了:
- 启动与模式分流
- turn loop / query 状态机
- 工具运行时与权限
- 本地文件工具、搜索工具、Web 工具
- agent / skill / task / MCP / LSP / REPL
- transcript / resume / compact / overflow recovery
- remote / managed settings / policy / settings sync
- 第一版 C# runtime blueprint
如果目标只是“看懂 Claude Code 大体怎么工作”,现在这套文档已经够了。
但如果目标是:
尽可能把这份源码里能迁到 C#、能复用到别的 agent runtime、能指导产品化的价值继续榨出来,
那当时还差几块很关键的横切系统。
它们的共同特点是:
- 不是某一个具体工具
- 也不是单个 feature
- 而是会影响整个 runtime 边界和产品能力的底层组织方式
2. 这一轮补齐了什么
2026-04-07 这轮已经把当时最值得补的七块横切系统补齐了,对应专题如下:
- 核心拆解 29:AppState 与 UI/runtime 边界
- 核心拆解 30:认证 / Token / 登录运行时
- 核心拆解 31:Telemetry / analytics / attribution
- 核心拆解 32:Memory 全景
- 核心拆解 33:插件系统 / Marketplace / 扩展治理
- 核心拆解 34:Hooks 运行时总览
- 核心拆解 35:模型 / Provider / Capability 路由
下面这七块,保留的是“当时为什么必须补”和“为什么它们对 C# 抽象值钱”的判断。
2.1 AppState 与 UI/runtime 边界
建议单开:
src/state/AppStateStore.tssrc/state/AppState.tsxsrc/state/onChangeAppState.tssrc/state/selectors.tssrc/screens/REPL.tsxsrc/components/*
为什么还差这章:
- 现在很多文档已经反复提到
AppState - 但还没有一篇把它当“状态边界设计”来拆
AppStateStore.ts里这个对象已经不是普通 UI state 了
从源码上看,AppState 至少混了这些东西:
- 会话 runtime 状态
- task / agent / MCP / plugin 状态
- remote bridge / viewer 状态
- footer、选中态、panel 显示态这类 UI projection
这块最值钱的地方,不是“它有哪些字段”,而是:
- Claude Code 到底把哪些状态放在核心层
- 哪些状态其实只是宿主投影
- 现有实现里哪些地方是历史演化留下来的混合层
如果后面要做 C# 版,这一章会直接决定你是不是会抄出一个巨大的 God Object。
2.2 认证 / Token / 登录运行时
建议单开:
src/utils/auth.tssrc/utils/authPortable.tssrc/utils/authFileDescriptor.tssrc/services/oauth/*src/commands/login/*src/commands/logout/*
为什么还差这章:
- 现在文档里已经提到 auth 会影响 managed settings、remote、provider、组织限制
- 但还没有一篇把整条 auth runtime 串起来
这块源码很值钱,尤其是这几个判断:
isManagedOAuthContext()明确阻止 managed session 回退到用户本地 CLI 的 API keyisAnthropicAuthEnabled()不是简单开关,而是把 bare mode、3P provider、external key、managed context 一起判断getAuthTokenSource()和getAnthropicApiKeyWithSource()说明 auth source hierarchy 本身就是一套运行时协议
这章最值得提炼的问题:
- Claude Code 的 auth source 优先级到底怎么排
- first-party OAuth 和 3P provider 的边界怎么切
- 为什么远端、桌面、CLI 要故意隔离各自的认证来源
- org / trust / policy 是怎么压进 auth 判定链路的
2.3 Telemetry / analytics / attribution
建议单开:
src/services/analytics/*src/utils/telemetry/*src/utils/commitAttribution.ts
为什么还差这章:
- 目前文档里经常提到 telemetry
- 但基本都只是“某个模块会打点”
- 还没有一篇说明 Claude Code 怎么把观测能力做成正式基础设施
从源码能确认几件很值钱的事:
services/analytics/index.ts故意保持“零依赖入口”,避免 import cycle- sink 没挂上前,事件先排队,不阻塞启动
- metadata 类型故意限制 string,逼调用方显式声明“这不是代码、不是路径”
_PROTO_*字段会统一剥离,防止 PII 被误扔到通用后端sink.ts把 Datadog、1P logging、sampling、killswitch、gate 都统一收在一个路由层
这不是“埋点实现细节”,而是产品级 runtime 的可观测性设计。
如果以后 C# 版想做成长期演化的系统,这章非常值钱。
2.4 Memory 全景:memdir、session memory、team memory、autoDream
建议单开:
src/memdir/*src/services/SessionMemory/*src/services/teamMemorySync/*src/services/autoDream/*src/commands/memory/*
为什么还差这章:
- 现在书里已经写了 attachment、context、settings sync、session persistence
- 但 memory 还分散在不同专题里,没有合成一张完整地图
这块源码其实至少有四层:
memdir- 文件型长期记忆目录
- 有类型约束、索引文件、字节/行数限制
session memory- post-sampling hook 触发
- 阈值满足后用 forked subagent 维护会话摘要文件
team memory sync- repo 级共享记忆
- OAuth、ETag、checksum、delta upload、413 学习 server limit
autoDream- 背景 consolidation
- 按时间门槛、session 数量、锁文件做调度
这几层放在一起看,才能真正看明白 Claude Code 的 memory strategy:
- 哪些记忆是当前 session 的
- 哪些记忆是 project scoped 的
- 哪些记忆是 team scoped 的
- 哪些记忆是自动沉淀出来的
这块对 C# 第一版不一定最先实现,但对产品路线非常值钱。
2.5 插件系统 / Marketplace / 扩展治理
建议单开:
src/utils/plugins/*src/services/plugins/*src/commands/plugin/*
为什么还差这章:
- 我们已经拆了 MCP 和 skill
- 但 plugin 这条线还没有像 MCP 一样被完整收束
从源码看,这套系统明显不只是“装个插件”:
pluginLoader.ts里区分了 declaration、cache、seed、versioned install path、legacy pathmarketplaceManager.ts明确把 marketplace 分成 intent layer 和 materialized state layerloadPluginHooks.ts说明插件不只加命令,还会热插 hook,而且作者专门修过“clear 后 stop hook 静默失效”的边界问题PluginInstallationManager.ts则把后台 reconcile、AppState 安装进度、auto-refresh、needsRefresh都接到了 UI/runtime 之间pluginPolicy.ts说明插件还受 managed settings 的组织级策略约束
这章的价值,不只是给以后做插件系统,而是让你看清:
- 扩展生态怎么进 runtime
- 扩展什么时候能热更新
- 组织治理怎么卡在扩展入口
- marketplace 和 runtime state 为什么要分层
2.6 Hooks 运行时总览
建议单开:
src/utils/hooks/*src/query/stopHooks.tssrc/utils/plugins/loadPluginHooks.tssrc/state/sessionHooks*相关入口
为什么还差这章:
- 现在很多文档都提到 hook
- 但 hook 仍然是“散着出现”
- 还没有一篇把 Claude Code 的 hook runtime 当成一个正式子系统来写
而从源码上看,它其实已经是一套比较完整的 lifecycle system:
PreToolUse / PostToolUse / PermissionRequestSessionStart / SessionEndStop / StopFailurePreCompact / PostCompactElicitation / ElicitationResult- 插件 hook、session hook、内部 post-sampling hook 还会叠在一起
尤其是 SessionMemory 和 autoDream 都说明:
Claude Code 不是只把 hook 当外部扩展点,也会把内部后台能力挂在 hook runtime 上。
这章单开以后,前面很多文档里的 hook 线索才会真正闭环。
2.7 模型 / Provider / Capability 路由
建议单开:
src/utils/model/*src/utils/auth.tssrc/commands/model/*- 若干按 provider gate 的工具实现
为什么还差这章:
- 现在文档里已经提到过 Web 工具会看 provider / model 能力
- managed settings、auth、remote 也都跟 provider 有关系
- 但我们还没有系统写“Claude Code 怎么做模型与 provider 路由”
这块现在看起来不像最核心,但其实很值得提炼:
- first-party / Bedrock / Vertex / Foundry 的边界怎么做
- model capability 怎么影响工具可用性
- context window 升档和 provider routing 有没有耦合
- model alias、allowlist、deprecation 怎么进入运行时
如果以后 C# 版要支持多 provider,这章会很实用。
3. 现在最该补的,不是更多工具文档
这次复查之后,我更确定一件事:
后面最值钱的工作,不是继续横向扫更多工具,而是把这些横切系统补成“运行时控制面”文档。
原因很简单:
- 工具层的大骨架已经够清楚了
- 再继续加一个个工具专题,收益会开始变小
- 但上面这几块横切层,直接决定 Claude Code 为什么像一个产品级 runtime,而不是一个会调工具的 CLI
换句话说,后面的重点应该从:
- “这个工具怎么实现”
慢慢切到:
- “这个系统怎么治理状态、身份、记忆、扩展、观测和宿主边界”
4. 如果按“榨价值”的角度排优先级,我会这么排
4.1 第一梯队:最该马上补
- AppState 与 UI/runtime 边界
- 认证 / Token / 登录运行时
- Telemetry / analytics / attribution
这一梯队的共同点是:
- 都会直接影响 C# 核心边界设计
- 不补的话,C# 版很容易从第一天就分层失真
4.2 第二梯队:Claude Code 的差异化深水区
- Memory 全景
- 插件系统 / Marketplace / 扩展治理
- Hooks 运行时总览
这一梯队的共同点是:
- 更偏 Claude Code 的产品味和工程味
- 不一定要在 C# 第一版马上实现
- 但它们决定这套 runtime 后面能不能长成完整产品
4.3 第三梯队:决定多 provider 和产品外延
- 模型 / Provider / Capability 路由
这块排在后面,不是因为不重要,而是因为:
- 它跟 auth、settings、tool gating 都耦合
- 前面几章补完之后,再写它会更稳
5. 哪些地方已经能确认“真的有料”,不是凭感觉
这里把这次复查看到的几个强信号记一下,避免后面选题时只靠印象。
5.1 AppState 确实已经大到值得单拆
src/state/AppStateStore.ts 里同时装了:
- remote session status
- repl bridge status
- tasks / foregroundedTaskId / viewingAgentTaskId
- MCP clients / tools / commands / resources
- plugin enabled/disabled/errors/install state
- notifications / elicitation / sessionHooks
- footer、panel、selection 这类 UI 态
这已经不是一个普通 React store 了。
5.2 auth 不是简单的“登录功能”
src/utils/auth.ts 里能明确看到:
- managed OAuth context
- bare mode
- 3P provider
- env var / file descriptor / keychain / apiKeyHelper / claude.ai token
- org / profile / scope
这些都不是 UI 登录流程,而是运行时的身份路由层。
5.3 analytics 不是“补点日志”
src/services/analytics/index.ts 和 sink.ts 说明它至少在认真处理:
- 启动早期事件不丢
- 依赖环问题
- PII 隔离
- sink killswitch
- gate / sampling
- Datadog 和 1P backend 分流
这套东西已经有平台基础设施的味道了。
5.4 memory 确实是一整套系统,不是一个目录
从这次复查看到的文件就能确认:
src/memdir/*src/services/SessionMemory/sessionMemory.tssrc/services/teamMemorySync/index.tssrc/services/autoDream/autoDream.ts
而且几层之间的策略明显不同,不适合再分散地写在别的章节里。
5.5 plugin 也不是“插件菜单”
这次看到的关键证据包括:
- marketplace 的声明层 / 落地层分离
- seed cache / versioned cache
- managed settings 的 plugin policy
- hook hot reload 的原子 clear-register
- 后台 reconcile 与
needsRefresh
这已经是完整的扩展治理系统了。
6. 对 C# 版最重要的提醒
后面如果继续读源码,最容易犯的错是:
- 看到一个 feature,就想把它翻译成一个
FooService - 看到一个目录,就想把它翻译成一个 namespace
但 Claude Code 真正值钱的地方,很多都不是“功能目录”,而是:
- 状态边界
- 身份边界
- 观测边界
- 记忆边界
- 扩展边界
所以我更建议后面的文档继续围着这几个问题写:
- 这块东西归谁管
- 它改了哪些运行时状态
- 它依赖哪些外部系统
- 它应该留在核心,还是留在宿主
- 如果迁到 C#,最小抽象应该长什么样
7. 下一步最合理的文档顺序
如果现在继续写,我建议按这个顺序往下补:
AppState 与 UI/runtime 边界认证 / Token / 登录运行时Telemetry / analytics / attributionMemory 全景插件系统 / Marketplace / 扩展治理Hooks 运行时总览模型 / Provider / Capability 路由
这样写的好处是:
- 先把核心边界补齐
- 再把 Claude Code 的产品级差异化补齐
- 最后再把多 provider 和外延能力补齐
这条线走完,Claude Code 这份源码里最能迁移、最能复用、最能指导 C# 版设计的价值,基本就真被榨得差不多了。