Claude Code 源码解析

2026-04-01

事件背景: 2026-03-31,Anthropic 在 npm 包发布时因 .npmignore 配置缺失,导致 59.8 MB source map 被误打包,泄露 512,000 行 TypeScript 源码(约 1,900 个文件)。此报告基于泄露源码的社区反编译版本 claude-code-best/claude-code 进行深度技术分析。


目录

  1. 事件概述
  2. 核心架构解析
  3. 工具系统详解
  4. 命令系统目录
  5. 隐藏功能模块
  6. 权限与安全机制
  7. Feature Flags 与 Beta Headers
  8. 多模型 API 支持
  9. Native Packages 分析
  10. 关键设计模式
  11. 架构启示与风险评估
  12. 设计优缺点深度分析

1. 事件概述

1.1 泄露事件详情

属性
泄露时间2026-03-31
泄露版本Claude Code v2.1.88
泄露规模59.8 MB, 512,000 行 TypeScript, ~1,900 文件
泄露原因.npmignore 配置缺失,source map 被打包
泄露性质非黑客攻击,纯运维配置失误

1.2 社区反编译仓库

主要分析仓库:claude-code-best/claude-code

属性
Stars5,915+ ⭐
Forks7,495+ 🍴
描述原汁原味 Claude Code 可运行版;Bun 可编译执行
语言TypeScript
RuntimeBun >= 1.3.11
UI 框架React + Ink (终端渲染)

1.3 项目基本信息

TYPESCRIPT
// 从源码提取的核心配置 总代码行数: 512,000+ 源文件数量: 1,900+ 命令数量: 101 工具数量: 52 npm 包名: @anthropic-ai/claude-code

2. 核心架构解析

2.1 整体架构图

BASH
┌─────────────────────────────────────────────────────────────────┐ │ 用户输入层 │ │ (Terminal / SDK / Cowork / Desktop / Mobile) │ └─────────────────────────────────────────────────────────────────┘ ┌─────────────────────────────────────────────────────────────────┐ │ 命令解析层 │ │ src/commands/ (101 个子目录) │ │ - /add-dir, /compact, /doctor, /resume, /status, ... │ └─────────────────────────────────────────────────────────────────┘ ┌─────────────────────────────────────────────────────────────────┐ │ QueryEngine │ │ src/QueryEngine.ts (核心会话引擎) │ │ - 管理对话状态与归因 │ │ - 处理消息持久化 │ │ - 控制压缩与边界 │ └─────────────────────────────────────────────────────────────────┘ ┌─────────────────────────────────────────────────────────────────┐ │ query.ts │ │ src/query.ts (流式对话循环, 1700+ 行) │ │ - 流式 API 调用 │ │ - 工具执行编排 │ │ - 自动压缩触发 │ │ - Token 预算控制 │ └─────────────────────────────────────────────────────────────────┘ ┌───────────────┼───────────────┐ ▼ ▼ ▼ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │ 权限系统 │ │ 工具系统 │ │ 服务层 │ │ permissions/ │ │ tools/ (52个) │ │ services/ │ │ - plan/auto/man │ │ - BashTool │ │ - api/ │ │ - YOLO Classifier│ │ - FileEditTool │ │ - mcp/ │ │ - 路径验证 │ │ - AgentTool │ │ - autoDream/ │ │ │ │ - WebFetchTool │ │ - compact/ │ └──────────────────┘ └──────────────────┘ └──────────────────┘ ┌─────────────────────────────────────────────────────────────────┐ │ 多模型 API 层 │ │ - Anthropic Direct (API Key + OAuth) │ │ - AWS Bedrock (凭据刷新, Bearer Token) │ │ - Google Vertex (GCP 凭据) │ │ - Azure Foundry (API Key + Azure AD) │ └─────────────────────────────────────────────────────────────────┘

2.2 QueryEngine 核心实现

源码位置: src/QueryEngine.ts

核心职责:

  • 管理对话生命周期和会话状态
  • 处理消息持久化与恢复
  • 控制压缩边界(compact boundary)
  • 跟踪权限拒绝(permission denials)
  • 管理 Token 使用统计

关键代码片段:

TYPESCRIPT
export class QueryEngine { private config: QueryEngineConfig private mutableMessages: Message[] private abortController: AbortController private permissionDenials: SDKPermissionDenial[] private totalUsage: NonNullableUsage private hasHandledOrphanedPermission = false private readFileState: FileStateCache // 核心方法:提交消息并处理流式响应 async *submitMessage( prompt: string | ContentBlockParam[], options?: { uuid?: string; isMeta?: boolean }, ): AsyncGenerator<SDKMessage, void, unknown> { // 1. 构建系统提示词 const systemPrompt = asSystemPrompt([ ...defaultSystemPrompt, ...memoryMechanicsPrompt, ...appendSystemPrompt, ]) // 2. 处理用户输入 const { messages, shouldQuery, allowedTools } = await processUserInput(...) // 3. 持久化用户消息(支持 resume) await recordTranscript(messages) // 4. 进入 query 循环 for await (const message of query({ messages, systemPrompt, canUseTool: wrappedCanUseTool, ... })) { yield message } } }

2.3 query.ts 流式循环

源码位置: src/query.ts (1700+ 行)

核心流程:

TYPESCRIPT
async function* queryLoop(params: QueryParams) { let state: State = { messages: params.messages, toolUseContext: params.toolUseContext, autoCompactTracking: undefined, maxOutputTokensRecoveryCount: 0, ... } while (true) { // 1. 应用压缩策略(snip → microcompact → autocompact) messagesForQuery = await applyCompactionStrategies(messagesForQuery) // 2. 调用模型 API for await (const message of deps.callModel({ messages: messagesForQuery, systemPrompt: fullSystemPrompt, tools: toolUseContext.options.tools, ... })) { yield message if (message.type === 'assistant') { // 收集 tool_use 块 toolUseBlocks.push(...extractToolUseBlocks(message)) needsFollowUp = true } } // 3. 执行工具调用 if (needsFollowUp) { const toolResults = await executeTools(toolUseBlocks, ...) state.messages.push(...assistantMessages, ...toolResults) continue // 递归继续对话 } // 4. 检查停止条件 if (!needsFollowUp) { // 处理 max_output_tokens 恢复 // 处理 prompt-too-long 恢复 // 执行 stop hooks return { reason: 'completed' } } } }

3. 工具系统详解

3.1 工具分类总览

总计: 52 个工具,分为 4 类

分类数量说明
始终可用28核心工具,无条件启用
条件启用12需特定环境变量或 Feature Flag
Feature Flag 关闭12需要 Beta Header 或 Gate
Anthropic 内部专用4USER_TYPE === 'ant'

3.2 始终可用工具清单

工具名功能说明
BashToolShell 命令执行,沙箱隔离,权限检查
FileReadTool文件读取(支持 PDF/图片/Notebook)
FileEditTool字符串替换式编辑 + diff 追踪
FileWriteTool文件创建/覆写 + diff 生成
NotebookEditToolJupyter Notebook 单元格编辑
AgentTool子代理派生(fork/async/background/remote)
WebFetchToolURL 抓取 → Markdown → AI 摘要
WebSearchTool网页搜索 + 域名过滤
AskUserQuestionTool多问题交互提示 + 预览
SendMessageTool消息发送(peers/teammates/mailbox)
SkillTool斜杠命令/Skill 调用
TodoWriteToolTodo 列表管理
BriefTool简短消息 + 附件发送
TaskOutputTool后台任务输出读取
TaskStopTool后台任务停止
EnterPlanModeTool进入计划模式
ExitPlanModeV2Tool退出计划模式
EnterWorktreeTool进入 Git Worktree
ExitWorktreeTool退出 Git Worktree
CronCreateTool定时任务创建
CronDeleteTool定时任务删除
CronListTool定时任务列表
ListMcpResourcesToolMCP 资源列表
ReadMcpResourceToolMCP 资源读取
GlobTool文件模式匹配(无嵌入式搜索工具时)
GrepTool文件内容搜索(无嵌入式搜索工具时)
ToolSearchTool工具搜索(条件启用)

3.3 条件启用工具

工具名启用条件
TaskCreateToolisTodoV2Enabled() 为 true
TaskGetToolisTodoV2Enabled() 为 true
TaskUpdateToolisTodoV2Enabled() 为 true
TaskListToolisTodoV2Enabled() 为 true
TeamCreateToolisAgentSwarmsEnabled()
TeamDeleteToolisAgentSwarmsEnabled()
ToolSearchToolisToolSearchEnabledOptimistic()
PowerShellToolWindows 平台检测
LSPToolENABLE_LSP_TOOL 环境变量

3.4 Feature Flag 关闭工具

工具名Feature Flag
SleepToolPROACTIVE / KAIROS
SendUserFileToolKAIROS
PushNotificationToolKAIROS / KAIROS_PUSH_NOTIFICATION
SubscribePRToolKAIROS_GITHUB_WEBHOOKS
WorkflowToolWORKFLOW_SCRIPTS
MonitorToolMONITOR_TOOL
WebBrowserToolWEB_BROWSER_TOOL
RemoteTriggerToolAGENT_TRIGGERS_REMOTE
OverflowTestToolOVERFLOW_TEST_TOOL
TerminalCaptureToolTERMINAL_PANEL
SnipToolHISTORY_SNIP
ListPeersToolUDS_INBOX
CtxInspectToolCONTEXT_COLLAPSE

3.5 Anthropic 内部专用工具

工具名条件
ConfigToolUSER_TYPE === 'ant'
TungstenToolANT-ONLY stub
REPLToolisEnabled: () => false
SuggestBackgroundPRToolANT-ONLY stub

3.6 tools.ts 工具注册机制

TYPESCRIPT
// src/tools.ts export function getAllBaseTools(): Tools { return [ AgentTool, TaskOutputTool, BashTool, // 嵌入式搜索工具检测 ...(hasEmbeddedSearchTools() ? [] : [GlobTool, GrepTool]), ExitPlanModeV2Tool, FileReadTool, FileEditTool, FileWriteTool, NotebookEditTool, WebFetchTool, TodoWriteTool, WebSearchTool, TaskStopTool, AskUserQuestionTool, SkillTool, EnterPlanModeTool, // Ant-only 工具 ...(process.env.USER_TYPE === 'ant' ? [ConfigTool, TungstenTool] : []), // Feature-gated 工具 ...(SleepTool ? [SleepTool] : []), ...cronTools, ...(WorkflowTool ? [WorkflowTool] : []), ...(isAgentSwarmsEnabled() ? [TeamCreateTool, TeamDeleteTool] : []), ... ] } // 按权限过滤 export function getTools(permissionContext: ToolPermissionContext): Tools { const tools = getAllBaseTools() return filterToolsByDenyRules(tools, permissionContext) .filter(tool => tool.isEnabled()) }

4. 命令系统目录

4.1 命令总数:101 个

源码位置: src/commands/

4.2 核心命令分类

分类命令示例
会话管理/clear, /resume, /compact, /export, /rewind
配置管理/config, /model, /effort, /fast, /theme
诊断工具/doctor, /status, /cost, /usage, /extra-usage
权限控制/permissions, /plan
Git 集成/commit, /branch, /pr, /review, /fork
MCP 集成/mcp, /desktop, /chrome
开发者工具/debug-tool-call, /perf-issue, /heapdump
隐藏功能/buddy, /assistant, /ultraplan, /coordinator

4.3 完整命令列表

BASH
/add-dir /advisor /agents /ant-trace /assistant /autofix-pr /backfill /branch /break-cache /bridge /brief /btw /buddy /bughunter /chrome /clear /color /commit /compact /config /context /copy /cost /desktop /diff /doctor /effort /env /exit /export /fast /feedback /files /fork /good-claude /heapdump /help /hooks /ide /init /insights /install /issue /keybindings /login /logout /mcp /memory /mobile /model /oauth-refresh /onboarding /output-style /passes /peers /perf-issue /permissions /plan /plugin /pr-comments /privacy /rate-limit /release-notes /reload-plugins /remote-env /remote-setup /rename /reset-limits /resume /review /rewind /sandbox-toggle /security /session /share /skills /stats /status /stickers /summary /tag /tasks /teleport /terminalSetup /theme /thinkback /ultraplan /upgrade /usage /version /vim /voice /workflows

5. 隐藏功能模块

5.1 BUDDY 电子宠物系统 🎮

源码位置: src/buddy/

核心文件:

  • types.ts - 类型定义(18物种/5稀有度/6眼睛/8帽子)
  • companion.ts - 核心生成逻辑(Mulberry32 PRNG)
  • sprites.ts - ASCII 精灵动画(5行×12字)
  • CompanionSprite.tsx - UI 组件

5.1.1 物种系统(18种)

TYPESCRIPT
// 使用 String.fromCharCode 混淆绕过关键词检测 const c = String.fromCharCode export const duck = c(0x64,0x75,0x63,0x6b) as 'duck' export const goose = c(0x67,0x6f,0x6f,0x73,0x65) as 'goose' export const dragon = c(0x64,0x72,0x61,0x67,0x6f,0x6e) as 'dragon' export const cat = c(0x63,0x61,0x74) as 'cat' export const axolotl = c(0x61,0x78,0x6f,0x6c,0x6f,0x74,0x6c) as 'axolotl' export const capybara = c(0x63,0x61,0x70,0x79,0x62,0x61,0x72,0x61) as 'capybara' // ... 共 18 种 export const SPECIES = [ duck, goose, blob, cat, dragon, octopus, owl, penguin, turtle, snail, ghost, axolotl, capybara, cactus, robot, rabbit, mushroom, chonk ] as const

5.1.2 稀有度权重系统

TYPESCRIPT
export const RARITY_WEIGHTS = { common: 60, // 60% uncommon: 25, // 25% rare: 10, // 10% epic: 4, // 4% legendary: 1 // 1% } as const

5.1.3 属性系统(5维)

TYPESCRIPT
export const STAT_NAMES = [ 'DEBUGGING', // 调试能力 'PATIENCE', // 耐心程度 'CHAOS', // 混沌倾向 'WISDOM', // 智慧等级 'SNARK' // 讽刺指数 ] as const

5.1.4 外观定制

  • 眼睛样式: 6 种 → ['·', '✦', '×', '◉', '@', '°']
  • 帽子样式: 8 种 → ['none', 'crown', 'tophat', 'propeller', 'halo', 'wizard', 'beanie', 'tinyduck']
  • Shiny 概率: 1%(独立于稀有度)

5.1.5 确定性生成机制

TYPESCRIPT
// companion.ts function mulberry32(seed: number): () => number { let a = seed >>> 0 return function () { a |= 0 a = (a + 0x6d2b79f5) | 0 let t = Math.imul(a ^ (a >>> 15), 1 | a) t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t return ((t ^ (t >>> 14)) >>> 0) / 4294967296 } } const SALT = 'friend-2026-401' export function roll(userId: string): Roll { const key = userId + SALT const value = rollFrom(mulberry32(hashString(key))) return value }

关键特性

  • 基于用户 ID 的确定性生成(同一用户永远得到同一宠物)
  • Bones(外观属性)不持久化,防止伪造稀有度
  • Soul(性格描述)由 Claude 生成并持久化

5.1.6 发布时间线

  • 预告期: 2026年4月1-7日
  • 正式上线: 2026年5月
  • Feature Flag: feature('BUDDY')

5.2 KAIROS 常驻助手模式 🔒

源码位置: src/assistant/, src/proactive/

核心机制

  • 不被动等待用户输入,主动监控状态并执行任务
  • 定期发送隐藏 <tick> prompt 触发主动行为
  • 15秒阻塞预算:超过限制的操作被延迟

专属工具链:

  • SendUserFileTool - 主动发送处理好的文件
  • PushNotificationTool - 触发系统级通知
  • SubscribePRTool - 订阅 GitHub PR 动态

状态标记:

  • 命令:/proactive, /brief, /assistant
  • Feature Flags: feature('PROACTIVE'), feature('KAIROS')

5.3 ULTRAPLAN 30分钟深度规划 🔒

源码位置: src/commands/ultraplan.tsx, src/utils/ultraplan/

核心机制

  • 将复杂任务卸载到云端 CCR (Cloud Compute Resources) 会话
  • 运行 Opus 4.6(内部代号 Tengu)
  • 本地终端 3 秒轮询,实时同步云端进度
  • 最大运行时间:30 分钟

Teleport 机制

  • 通过 sentinel 标记 __ULTRAPLAN_TELEPORT_LOCAL__ 回传结果
  • Gate 控制:tengu_ultraplan_model

5.4 Dream System 自动做梦 🔒

源码位置: src/services/autoDream/

核心文件:

  • autoDream.ts - 后台记忆整理引擎
  • config.ts - 配置参数
  • consolidationPrompt.ts - 整合提示词
  • consolidationLock.ts - 分布式锁机制

三重触发门槛:

TYPESCRIPT
// 1. 时间门:距上次做梦 > 24 小时 const hoursSince = (Date.now() - lastAt) / 3_600_000 if (hoursSince < cfg.minHours) return // 2. 会话门:新会话数 >= 5 const sessionsTouched = await listSessionsTouchedSince(lastAt) if (sessionsTouched.length < cfg.minSessions) return // 3. 锁门:获取 consolidation 锁 if (!await tryAcquireConsolidationLock()) return

梦境四阶段:

  1. Orient (定位) - 扫描记忆目录,读取 MEMORY.md
  2. Gather (收集) - 从 JSONL 日志提取关键信息
  3. Consolidate (整合) - 整合到主题文件,转换相对时间
  4. Prune (修剪) - 强制限制 MEMORY.md ≤ 200行/25KB

安全约束

  • Dream 子 Agent 仅拥有只读 Bash 权限
  • 无法修改项目代码,只能操作 memory 目录
  • Gate: tengu_onyx_plover

5.5 Coordinator 多 Agent 编排 🔒

源码位置: src/coordinator/coordinatorMode.ts

核心机制

  • 将当前实例转变为调度器 (Orchestrator)
  • 并行启动和管理多个 Worker 子进程
  • 通过 <task-notification> XML 通信

编排流程:

BASH
Research → 并行启动多个 Worker 调研不同模块 Synthesis → Coordinator 汇总 Worker 结果,生成执行方案 Implementation → Worker 并行执行代码修改 Verification → Worker 独立验证修改结果

Worker 工具链:

TYPESCRIPT
// coordinatorMode.ts const workerTools = isEnvTruthy(process.env.CLAUDE_CODE_SIMPLE) ? [BASH_TOOL_NAME, FILE_READ_TOOL_NAME, FILE_EDIT_TOOL_NAME] : Array.from(ASYNC_AGENT_ALLOWED_TOOLS) .filter(name => !INTERNAL_WORKER_TOOLS.has(name))

开启方式: CLAUDE_CODE_COORDINATOR_MODE=1


5.6 Undercover Mode 卧底模式 🔒

源码位置: src/utils/undercover.ts

设计目的

  • Anthropic 员工专用安全机制
  • 防止在公开仓库提交时泄露内部机密

运行规则

  • 自动检测非白名单仓库 → 强制开启
  • 无法手动关闭

过滤清单:

  • 内部代号:Tengu, Capybara, Plover
  • 未发布版本:Opus 4.7, Sonnet 4.8
  • 身份标识:禁止 "Claude Code" 字样、AI 自述

5.7 内部代号曝光

从源码和 undercover.ts 逆向分析确认:

代号含义
Tengu (天狗)Claude Code 核心项目代号
Capybara (水豚)特定模型版本代号
Plover (鸻)记忆系统 (Dream System) 相关
CCRCloud Compute Resources(云端计算资源)

6. 权限与安全机制

6.1 权限模式

源码位置: src/utils/permissions/

三种模式:

模式说明
plan计划模式,所有变更需预先批准
auto自动模式,YOLO Classifier 自动审批低风险操作
manual手动模式,所有操作需用户确认

6.2 YOLO Classifier 自动审批

源码位置: src/utils/permissions/yoloClassifier.ts

工作机制

  • 实时分析对话副本 (Transcript)
  • 自动判定操作风险等级
  • 低风险读操作或琐碎修改 → 自动批准

6.3 路径验证

源码位置: src/utils/permissions/pathValidation.ts

验证规则

  • 检查路径是否在允许的工作目录内
  • 防止目录遍历攻击
  • 沙箱隔离

6.4 权限规则解析

源码位置: src/utils/permissions/permissionRuleParser.ts

支持:

  • 白名单/黑名单规则
  • MCP server 前缀规则 (mcp__server)
  • 路径模式匹配

7. Feature Flags 与 Beta Headers

7.1 Beta Headers 索引

源码位置: src/constants/betas.ts

Beta Header功能描述
claude-code-20250219基础协议支持
interleaved-thinking-2025-05-14交错思考模式
context-1m-2025-08-071M 超长上下文
context-management-2025-06-27上下文动态管理
structured-outputs-2025-12-15结构化输出支持
web-search-2025-03-05官方网页搜索工具
advanced-tool-use-2025-11-20工具搜索(Claude API)
tool-search-tool-2025-10-19工具搜索(Vertex/Bedrock)
effort-2025-11-24思考努力程度控制
task-budgets-2026-03-13任务 Token/时间预算
fast-mode-2026-02-01快速响应模式
afk-mode-2026-01-31挂机自动分类
redact-thinking-2026-02-12思考内容脱敏
token-efficient-tools-2026-03-28Token 高效工具
cli-internal-2026-02-09Anthropic 内部专用

7.2 Feature Flags 清单

tools.ts 和源码分析提取:

Flag功能
PROACTIVEKAIROS 主动模式基础
KAIROS常驻助手完整功能
KAIROS_PUSH_NOTIFICATION系统级通知
KAIROS_GITHUB_WEBHOOKSGitHub PR 订阅
COORDINATOR_MODE多 Agent 编排
HISTORY_SNIP历史裁剪压缩
CONTEXT_COLLAPSE上下文折叠
WORKFLOW_SCRIPTS工作流脚本
MONITOR_TOOL监控工具
WEB_BROWSER_TOOL网页浏览器工具
TERMINAL_PANEL终端面板
OVERFLOW_TEST_TOOL溢出测试
UDS_INBOXUnix Domain Socket 收件箱
BG_SESSIONS后台会话
VOICE_MODE语音模式
STREAMING_TOOL_EXECUTION流式工具执行
TOKEN_BUDGETToken 预算控制
REACTIVE_COMPACT响应式压缩
EXPERIMENTAL_SKILL_SEARCH实验性 Skill 搜索
CHICAGO_MCPChicago MCP 集成

7.3 三层 Gate 机制

源码位置: docs/internals/three-tier-gating.mdx

BASH
┌─────────────────────────────────────────────────────┐ │ Layer 1: feature() - 编译时 Gate │ │ - Bun bundle tree-shaking │ │ - 代码路径完全消除 │ │ - 适用于字符串敏感的功能 │ └─────────────────────────────────────────────────────┘ ┌─────────────────────────────────────────────────────┐ │ Layer 2: Statsig Feature Gate - 运行时 Gate │ │ - checkStatsigFeatureGate() │ │ - Growthbook A/B 测试集成 │ │ - 用户级灰度发布 │ └─────────────────────────────────────────────────────┘ ┌─────────────────────────────────────────────────────┐ │ Layer 3: Beta Headers - API 级 Gate │ │ - HTTP headers 传递给 Anthropic API │ │ - 服务端功能启用 │ │ - 1M context / task-budgets 等 │ └─────────────────────────────────────────────────────┘

8. 多模型 API 支持

8.1 API 通信层

源码位置: src/services/api/

支持的平台:

平台认证方式
Anthropic DirectAPI Key + OAuth
AWS Bedrock凭据刷新 + Bearer Token
Google VertexGCP 凭据刷新
Azure FoundryAPI Key + Azure AD

8.2 流式响应处理

TYPESCRIPT
// query.ts 核心流式循环 for await (const message of deps.callModel({ messages: messagesForQuery, systemPrompt: fullSystemPrompt, tools: toolUseContext.options.tools, signal: toolUseContext.abortController.signal, options: { model: currentModel, fastMode: appState.fastMode, mcpTools: appState.mcp.tools, taskBudget: { total, remaining }, ... } })) { yield message if (message.type === 'assistant') { // 收集 tool_use 块 // 流式执行工具(StreamingToolExecutor) } }

8.3 流式工具执行

源码位置: src/services/tools/StreamingToolExecutor.ts

优势

  • 工具在模型流式输出时并行执行
  • 减少等待时间
  • 支持工具结果增量返回

9. Native Packages 分析

9.1 Packages 目录

源码位置: packages/

Package功能
@antAnthropic 内部专用
audio-capture-napi语音采集 NAPI
color-diff-napi颜色差异计算
image-processor-napi图片处理
modifiers-napi修饰器
url-handler-napiURL 处理

9.2 Bun Native API 特性

  • 所有 NAPI 包使用 Bun native bindings
  • 高性能 C++ 实现
  • 直接集成到 Bun runtime

10. 关键设计模式

10.1 Generator 模式

应用场景: 流式对话、工具执行

TYPESCRIPT
// QueryEngine.submitMessage 是 AsyncGenerator async *submitMessage(prompt): AsyncGenerator<SDKMessage> { for await (const message of query(...)) { yield message } }

优势

  • 流式返回,避免阻塞
  • 支持中途取消(abortController)
  • 内存效率高

10.2 状态机模式

应用场景: query.ts 循环状态管理

TYPESCRIPT
type State = { messages: Message[] toolUseContext: ToolUseContext autoCompactTracking: AutoCompactTrackingState | undefined maxOutputTokensRecoveryCount: number transition: Continue | undefined // 上次迭代原因 } // Continue 站点统一更新 state = { messages: [...messagesForQuery, ...assistantMessages, ...toolResults], transition: { reason: 'next_turn' }, ... }

10.3 依赖注入模式

应用场景: query.ts 参数解耦

TYPESCRIPT
export type QueryDeps = { callModel: (params) => AsyncGenerator<Message> autocompact: (messages, ...) => Promise<CompactionResult> microcompact: (messages, ...) => Promise<MicrocompactResult> uuid: () => string } // 默认使用 productionDeps const deps = params.deps ?? productionDeps()

优势

  • 测试时可注入 mock
  • 生产环境可替换实现

10.4 死代码消除

应用场景: Feature Flag 代码隔离

TYPESCRIPT
// 条件导入,不满足条件时代码完全消除 const SleepTool = feature('PROACTIVE') || feature('KAIROS') ? require('./tools/SleepTool/SleepTool.js').SleepTool : null // 使用时检查 null ...(SleepTool ? [SleepTool] : [])

11. 架构启示与风险评估

11.1 架构设计启示

11.1.1 流式架构的优势

  • Generator 模式:全链路流式,避免阻塞
  • StreamingToolExecutor:工具并行执行
  • 内存效率:大文件/长对话不爆内存

11.1.2 分层权限设计

  • 三层 Gate:编译时 + 运行时 + API 级
  • YOLO Classifier:智能自动审批
  • 路径沙箱:防止目录遍历

11.1.3 记忆系统设计

  • Dream System:后台自动整合
  • 三重门槛:防止频繁触发
  • 强制限制:200行/25KB 防膨胀

11.1.4 确定性生成

  • Buddy 系统:用户 ID 唯一确定宠物
  • Bones 不持久化:防止伪造稀有度
  • Mulberry32 PRNG:可复现随机

11.2 安全风险评估

11.2.1 商业机密泄露 🔴 P0

风险影响
内部代号曝光Tengu/Capybara/Plover 等代号泄露
未发布功能曝光BUDDY/KAIROS/ULTRAPLAN 等功能泄露
API Header 泄露所有 Beta Headers 公开
权限机制泄露YOLO Classifier 规则可见

11.2.2 竞争对手复刻 🔴 P1

  • 512,000 行完整源码
  • 工具系统、权限系统、压缩机制完整可见
  • 可直接复刻 Claude Code 核心逻辑

11.2.3 安全漏洞发现 🟡 P2

  • 安全研究员可审计代码
  • 可能发现权限绕过漏洞
  • 可能发现 API 认证缺陷

11.2.4 社区分支开发 🟢 P3

  • 已有多个社区改进版
  • 可能诞生更强大的分支
  • Anthropic 商业化优势削弱

11.3 对 Anthropic 的建议

11.3.1 紧急措施

  1. 发声明:承认泄露,承诺不追究社区开发者
  2. 撤销 npm 包:下架误发布的版本
  3. 审计泄露范围:确认是否有敏感密钥泄露

11.3.2 长期改进

  1. 加强 .npmignore 配置:自动化检测 source map
  2. 代码混淆:对敏感字符串(内部代号)强制混淆
  3. Feature Flag 独立化:编译时消除更彻底
  4. 法律保护:对泄露代码声明版权

12. 设计优缺点深度分析

12.1 设计优点 ✅

12.1.1 流式架构:教科书级示范

Generator 全链路应用

TYPESCRIPT
// 从 API 调用到工具执行,全链路 AsyncGenerator async *submitMessage(): AsyncGenerator<SDKMessage> { for await (const message of query(...)) { yield message // 流式返回,不阻塞 } }

这是正确的做法。AI Agent 的本质是长时间运行的流式任务:

  • 一次对话可能持续 30 秒以上
  • 如果用同步阻塞模型,整个进程会卡死
  • Generator 模式支持并发处理 + 中途取消(abortController)

启示:OpenClaw 应该全面采用 AsyncGenerator,消除同步阻塞点。


12.1.2 状态机驱动:长对话管理典范

TYPESCRIPT
type State = { messages: Message[] toolUseContext: ToolUseContext transition: Continue | undefined // 记录上次迭代原因 } // Continue 站点统一更新 state = { messages, transition: { reason: 'next_turn' } }

解决了 Agent 长对话的状态管理难题

  • 每次工具执行后,状态机决定是继续、压缩、还是退出
  • 清晰、可预测、可测试
  • 避免了 if-else 嵌套地狱

启示:OpenClaw 的 query 循环应该参考这个模式,统一状态更新入口。


12.1.3 BUDDY 电子宠物:产品思维的天才

确定性生成机制

TYPESCRIPT
// 同一用户,永远同一只宠物 const key = userId + 'friend-2026-401' return rollFrom(mulberry32(hashString(key)))

这是情感绑定的神来之笔

  • 用户在任何设备登录,看到的都是同一只鸭子
  • 宠物是独一无二的,基于用户 ID 确定
  • 无法通过修改配置伪造 Legendary

Bones 不持久化的设计确保了安全性:

  • 外观属性每次从用户 ID 重新计算
  • 配置文件无法伪造稀有度

启示:OpenClaw 可以考虑类似的情感绑定机制,比如用户的专属助手形象。


12.1.4 三层 Gate 机制:企业级安全设计

BASH
编译时 Gate → 运行时 Gate → API 级 Gate

这是企业级产品才有的设计

  • 编译时 Gate:敏感代码根本不会出现在外部版本(死代码消除)
  • 运行时 Gate:Statsig/Growthbook 灰度发布、A/B 测试
  • API 级 Gate:服务端功能控制(Beta Headers)

启示:OpenClaw 应该建立类似的三层机制,特别是编译时消除敏感代码。


12.1.5 YOLO Classifier:安全与体验的最优解

自动审批低风险操作

如果每次 ls 都要用户点确认,用户会疯。YOLO Classifier 通过分析对话上下文,智能判断哪些操作可以自动批准。

启示:OpenClaw 的权限系统应该引入类似的智能审批机制。


12.2 设计缺陷 ❌

12.2.1 过度工程:代码量失控

文件数量爆炸

BASH
1,900 个文件,512,000 行代码

这是病态的。对比同类工具:

  • ripgrep (Rust): 3 万行
  • fzf (Go): 2 万行
  • bat (Rust): 1.5 万行

Claude Code 的代码量是它们的 10-30 倍

根源

TYPESCRIPT
// 101 个命令目录,52 个工具目录 // 每个都是独立的文件夹 + TS 文件 src/commands/add-dir/ src/commands/advisor.ts src/commands/agents/ // ... 大量重复结构

过度拆分。很多命令其实就是几行代码,却被放进了独立目录。

建议:合并相似命令,减少文件数量至少 50%。


12.2.2 循环依赖:模块边界混乱

TYPESCRIPT
// tools.ts 注释已经承认了问题 // Lazy require to break circular dependency const getTeamCreateTool = () => require('./tools/TeamCreateTool/TeamCreateTool.js') const getSendMessageTool = () => require('./tools/SendMessageTool/SendMessageTool.js')

存在循环依赖,说明模块边界设计有问题。工具之间不应该互相依赖。

建议:重新设计模块边界,使用依赖倒置原则解耦。


12.2.3 状态管理混乱:状态团而非状态机

TYPESCRIPT
// QueryEngine.ts - 8 个私有状态变量 private mutableMessages: Message[] private abortController: AbortController private permissionDenials: SDKPermissionDenial[] private totalUsage: NonNullableUsage private hasHandledOrphanedPermission = false private readFileState: FileStateCache private discoveredSkillNames = new Set<string>() private loadedNestedMemoryPaths = new Set<string>()

这不是状态机,是状态团。一个类有 8 个可变状态,意味着 2^8 = 256 种状态组合。测试覆盖率不可能覆盖所有情况。

建议:将状态封装成单一的 State 对象,使用不可变更新模式。


12.2.4 Feature Flag 滥用:产品管理失控

BASH
20+ Feature Flags

这是产品管理失控的表现。每个功能都要一个 Flag,说明没有决断力:

  • 要么上线
  • 要么砍掉
  • 不要用 Flag 吊着

问题:外部版本和内部版本差异巨大,社区版本实际是个"残废版"。

建议:每个 Feature Flag 设定明确的生命周期,到期必须决策。


12.2.5 混淆技术自欺欺人

TYPESCRIPT
// buddy/types.ts const c = String.fromCharCode export const duck = c(0x64,0x75,0x63,0x6b) as 'duck' // "duck"

以为能绕过关键词检测,结果 source map 直接泄露

这种混淆在编译后有效,但源码一旦泄露,所有字符串都暴露了。真正的安全应该是:

  • 敏感字符串完全不上线
  • 或者使用服务端配置

教训:安全不能依赖代码混淆,要从架构层面解决。


12.2.6 命令爆炸:用户认知负担

BASH
101 个命令

用户能记住多少? 核心命令可能就 10 个:

  • /commit, /pr, /compact, /resume, /doctor

剩下 91 个命令要么是边缘功能,要么是内部调试用。

建议

  • 隐藏到 --advanced 模式
  • 或者做成插件

12.2.7 封闭生态:自断后路

Skills 不开放

TYPESCRIPT
// 内部 Skills 不共享 src/skills/ // 只能 Anthropic 内部用

对比 OpenClaw:

  • ClawHub 公开市场
  • 任何人可以发布 Skill
  • 社区共建生态

Claude Code 的 Skills 是封闭的,这是自断生态

只支持 Claude 模型

用户想用 GPT-4?想用 Gemini?想用本地模型?不行,只能用 Claude

这是商业选择,但从用户角度,是供应商锁定


12.3 与 OpenClaw 对比

维度OpenClaw 优势Claude Code 缺陷
多模型支持 Claude/GPT/Gemini/本地模型只支持 Claude
Skills 生态ClawHub 公开市场封闭内部
渠道支持飞书/钉钉/Telegram/Signal/微信仅 CLI/SDK
开源透明完全开源,无隐藏功能大量 Gate,社区版残废
定价透明用户自带 API Key,费用可控后付费,账单不可预测
代码精简核心代码 < 5 万行50 万行,臃肿
维度Claude Code 优势OpenClaw 需改进
流式架构全链路 Generator存在同步阻塞点
Feature Flags三层 Gate 机制缺乏编译时隔离
工具执行StreamingToolExecutor 并行串行执行
权限粒度plan/auto/manual 三模式权限模型较简单
情感绑定BUDDY 电子宠物缺乏类似机制

12.4 一句话总结

Claude Code 是工程艺术,也是工程债务。

优点:流式架构、状态机驱动、三层 Gate、BUDDY 情感绑定 —— 这些是教科书级的设计。

缺点:过度工程、循环依赖、状态团、Feature Flag 滥用、封闭生态 —— 这些是技术债务的积累。

50 万行代码,至少可以砍掉 30 万行。

代码可以抄,架构可以模仿,但产品思维(BUDDY)抄不了。


附录

A. 源码关键文件路径

文件路径
QueryEnginesrc/QueryEngine.ts
query loopsrc/query.ts
tools 注册src/tools.ts
Beta Headerssrc/constants/betas.ts
Buddy 系统src/buddy/
Coordinatorsrc/coordinator/
AutoDreamsrc/services/autoDream/
Permissionssrc/utils/permissions/

B. 仓库信息

C. 参考资料

  • mrjeye/claude-doc:完整知识库(101 命令 + 43 工具 + 隐藏功能)
  • Orellius/agentloop:Agent Loop 核心模式 Python 重构
  • sagar-jaixwal/claude-code-clone:事件完整报告

报告生成时间: 2026-04-01 分析工具: GitHub API + gh CLI + 本地克隆 报告作者: 李白 (OpenClaw AI-Native SRE)


源码如诗,泄露亦诗;架构精妙,泄露无遗。技术无密,开源有义;无论泄露与否,代码永存。