文章总结: 本文对大型语言模型Claude的源代码进行了深度技术解析,从入口层、上下文与会话层、命令系统、核心对话引擎等多个模块拆解了其架构设计。分析了各部分的职责与实现细节,如启动流程的分层解耦、上下文缓存机制、工具注册与任务执行模型等,并总结了其重度使用featuregate、lazyrequire和模块化设计等整体架构特征,最后还提供了阅读源码的建议顺序。 综合评分: 85 文章分类: AI安全,代码审计,技术标准,解决方案,安全开发
扒光Claude”衣服”
原创
Ghost Wolf Lab Ghost Wolf Lab
Ghost Wolf Lab
2026年3月31日 22:22 北京
写在前面
拿到Claude源代码的那一刻,我对代码仓库做了一次完整的架构扫描。本文不聊体验,不聊评测,只聊代码。我会按模块边界拆解这套系统的真实设计——它的入口、大脑、工具链和通信层长什么样,以及为什么这样设计。
入口层
代码入口分布在 cli.tsx 和 main.tsx,但真正的启动逻辑藏在 setup.ts 里。
先说结论:Claude的启动流程做了非常精细的分层解耦。
cli.tsx只做两件事:解析命令行参数,走快速路径(–version、–help 这类指令直接返回,不加载任何重模块)main.tsx负责全局装配,包含明显的启动性能优化——提前并行预取、延迟加载、条件引入setup.ts负责环境落地:当前工作目录、会话快照、hook快照、工作树状态、终端恢复等
这个分层的好处是职责清晰,代价是三个文件之间的调用关系需要花点时间理清。但客观来说,这种设计对后续维护是有利的。
值得注意的一点:setup.ts里对会话状态的初始化做了memoize,意味着会话启动时的环境快照是一次性抓取的,避免了后续每轮对话重复读取文件系统带来的开销。
上下文与会话层
context.ts是整条链路上最关键的一环。
它的职责是构建注入给模型的system context和user context。我重点看了它的几个设计决策:
- Git状态快照 会话开始时一次性抓取git状态并缓存,后续对话不再重复读取。这是一个典型的“读一次、用多次”模式,在长时间会话中能有效降低IO开销。
- 上下文缓存清理 代码里实现了cache breaker机制。当某些关键文件变更时,可以主动清空缓存,保证下一轮对话能拿到最新状态。这个设计在诊断日志里埋点也很完整,方便排障。
- 降级策略 在bare模式下,user context会按规则降级——比如不读取Claude.md文件。这说明系统对不同运行环境有明确的契约约束,不是所有场景都追求“全功能”。
命令系统
命令注册中心在 commands.ts。
这是一个典型的集中注册 + feature gate条件加载的模式。所有命令的入口都在同一个文件里,枚举能力强,便于统一管理。
但代价也很明显:这个文件体量很大,多人协作时冲突概率高。新增命令时,所有人都要改同一个聚合点。
不过话说回来,这种模式对产品形态切换是有好处的。通过feature gate,同一套代码可以编译出不同能力集的版本,这是工程化成熟度的体现。
核心对话引擎
QueryEngine.ts和query.ts是整条链路上最复杂的区域。
QueryEngine扮演的是会话编排器的角色,实际执行循环在query.ts 里。它的职责涵盖:
- 用户输入处理
- 多模态调度器:根据用户意图,智能调度不同的处理引擎,如普通对话引擎、代码解释器或外部工具调用。
- 命令与工具调用:负责解析并执行命令,或调用注册的外部工具(Tools),并处理其输入输出。
- 权限判定:在执行敏感操作或调用特定工具前,进行严格的权限检查,确保操作符合安全策略
- 预算与token控制:实时计算和监控输入输出的Token数量,确保不超出模型上下文窗口限制,并为计费提供依据。
- 消息持久化
- 维护可变消息状态与跨轮会话状态
通过feature gate,这里可以拼接不同能力——比如snip、coordinator、compact等模块是按条件装配的。
一个值得关注的设计点:token预算控制不是简单的硬截断,而是通过compact机制做智能压缩。这意味着Claude在处理长上下文时,有明确的策略选择,而不是粗暴地丢掉历史。
工具与任务执行层
工具注册总表在tools.ts。
这里定义了所有可供模型调用的Tool集合,并在运行时做可用性过滤——环境、权限、feature gate都会影响哪些工具最终暴露给模型。
任务模型定义在Task.ts,任务分发在tasks.ts。
这套模式的优点很明显:声明式注册 + 运行时过滤 + 条件装配。想要新增一个工具能力,只需要在tools.ts里增加定义,不需要改动核心引擎。这种设计对持续迭代非常友好。
远程桥接层
bridgeMain.ts是远程桥接的主循环。
它的职责包括:
- 轮询与心跳
- 重试退避算法
- session生命周期管理
- 超时清理
- 多会话并发控制
这部分代码的工程化程度明显高于其他模块。大量细节考虑到位——比如心跳超时后如何处理、网络抖动时如何退避重试、多会话场景下如何隔离资源。
这说明Claude的设计从一开始就考虑了远程/多会话场景,而不是事后打补丁。
整体架构特征
扫描完整个代码库,可以看到几个关键特征:
- 重度使用feature gate
通过编译时开关做死代码消除和产品形态切换。这意味着不同用户看到的Claude能力集可能不同,而代码库是同一套。
- 大量lazy require
主要用于规避循环依赖和降低启动成本。这是Node.js生态里处理大型项目的成熟手段。
- 日志与诊断埋点密集
每个关键路径都有埋点,线上排障时能快速定位问题。这是生产级系统的标配。
- 模块边界清晰,但聚合文件较重
启动、环境、大脑、工具、桥接这几层分得清楚,但commands.ts这类聚合入口文件确实偏大,是后续可优化的点。
建议分析文件顺序
如果想查看源码,我建议按这个顺序:
- cli.tsx —— 理解入口
- main.tsx —— 理解装配
- setup.ts —— 理解环境初始化
- context.ts —— 理解上下文构建
- QueryEngine.ts + query.ts —— 理解核心对话循环
- tools.ts + Task.ts + tasks.ts —— 理解工具与任务
- bridgeMain.ts —— 理解远程通信
这个顺序遵循了“从外到内、从启动到执行”的原则,能最快建立全局认知。
调用链时序图:
代码:
sequenceDiagram
autonumber
participant U as 用户输入
participant M as main.tsx
participant P as print.ts runHeadless
participant RS as runHeadlessStreaming
participant A as QueryEngine.ask
participant QE as QueryEngine.submitMessage
participant Q as query.ts query loop
participant TE as ToolExecutor
participant T as 具体工具
participant O as StructuredIO/stdout
U->>M: CLI 参数/stdin prompt
M->>P: 调用 runHeadless(...)
P->>P: 初始化 structuredIO、权限回调、tools/mcp
P->>RS: for-await runHeadlessStreaming(...)
RS->>A: 调用 ask({...})
A->>QE: new QueryEngine + submitMessage(prompt)
QE->>QE: fetchSystemPromptParts + processUserInput
QE->>Q: 进入 query({...}) 主循环
Q->>Q: prependUserContext/appendSystemContext,发起模型流式响应
Q->>Q: 收集 assistant 中的 tool_use blocks
alt 流式工具执行开启
Q->>TE: StreamingToolExecutor.getRemainingResults()
else 普通工具执行
Q->>TE: runTools(toolUseBlocks,...)
end
TE->>T: runToolUse(逐个/并发)
T-->>TE: tool_result / progress / attachment
TE-->>Q: MessageUpdate(newContext/message)
Q-->>QE: yield assistant/user/system/result
QE-->>RS: 规范化并持续回放消息
RS-->>P: 流式产出 StdoutMessage
P->>O: structuredIO.write(...) 或最终 stdout 输出
最后
这套系统的强大不在于某个模块的“炫技”,而在于整体架构的克制与工程化。
课程:
突破防御极限!《APT攻击原理深度刨析》第二批课程
关注 Ghost Wolf Lab,获取更多前沿技术干货.
公开QQ群:816112115
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:Ghost Wolf Lab Ghost Wolf Lab Ghost Wolf Lab《扒光Claude”衣服”》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论