Claude Code 源码架构与模块功能详解

本文档基于本仓库 src/ 目录结构、README.md 说明及对关键入口与模块的代码阅读整理,用于按架构分模块梳理职责与数据流。仓库为公开快照,原始版权归 Anthropic;本文仅作结构与功能层面的技术分析。


一、项目定位与技术栈

1.1 产品定位

Claude Code 是面向终端的 AI 编程助手 CLI:在本地工作区中与 Claude 对话,完成读改文件、执行命令、检索代码库、调用外部工具(MCP / LSP)、多代理协作、会话恢复等软件工程任务。

1.2 技术栈摘要

类别 技术
运行时 Bun
语言 TypeScript(严格模式)
终端 UI React + Ink
CLI 解析 Commander.js
校验 Zod v4
模型 API Anthropic SDK
扩展协议 MCP SDK、LSP
特性开关 / 实验 GrowthBook(Statsig 等门控)
构建裁剪 bun:bundlefeature() 编译期消除

1.3 架构分层(逻辑视图)

text

复制代码
┌─────────────────────────────────────────────────────────────┐
│  入口层 entrypoints / main.tsx — CLI 解析、快速路径、子进程   │
├─────────────────────────────────────────────────────────────┤
│  表现层 components / screens / ink / context — Ink UI 与状态  │
├─────────────────────────────────────────────────────────────┤
│  交互层 commands / keybindings / vim / voice — 用户指令与输入  │
├─────────────────────────────────────────────────────────────┤
│  编排层 query.ts / QueryEngine — 对话轮次、流式、工具循环       │
├─────────────────────────────────────────────────────────────┤
│  工具层 tools/* + services/tools — 工具注册、权限、并发执行   │
├─────────────────────────────────────────────────────────────┤
│  服务层 services/* — API、OAuth、MCP、压缩、遥测、插件等        │
├─────────────────────────────────────────────────────────────┤
│  基础设施 utils / types / schemas / migrations / bootstrap   │
└─────────────────────────────────────────────────────────────┘
         │                    │                    │
         ▼                    ▼                    ▼
    bridge/remote/      coordinator/         memdir/skills/
    server/upstreamproxy  多代理模式           记忆与技能

二、顶层目录与职责总览

以下为 src/ 下一级目录(及少量根级核心文件)的职责摘要。

路径 职责
entrypoints/ 多入口:cli.tsx(主 CLI)、mcp.ts(MCP 服务模式)、init.ts(初始化)、SDK 类型与沙箱类型
main.tsx 与 Commander 配合的总体启动;并行预取(MDM、钥匙串等)以优化冷启动
cli/ 结构化 I/O、NDJSON、传输层(SSE/WebSocket/Hybrid)、远程 I/O、更新与各类 handler(auth、MCP、agents、plugins 等)
query.ts / query/ 查询管线核心 :消息规范化、流式响应、工具调用循环、压缩边界、与 QueryConfig 等配置快照
Tool.ts / tools.ts 工具类型定义与全量工具注册;按 feature / 环境条件加载可选工具
tools/ 各 Tool 的独立实现(schema、权限、执行逻辑、prompt 片段)
commands/ / 为主的斜杠命令及子命令实现(数十个子目录)
components/ Ink 组件库(消息气泡、输入框、列表、弹层等)
screens/ 全屏或大型界面(如 Doctor、REPL、Resume 等场景)
context/ React Context:通知、邮箱、语音、统计、遮罩、队列消息等 UI 级横切状态
hooks/ React Hooks:设置、IDE、剪贴板、权限、任务、语音、远程会话等;含 toolPermission/
services/ 对外服务与客户域逻辑:API、OAuth、MCP、LSP、压缩、分析、插件、策略限制、语音 STT 等
bridge/ IDE / 远程桥:会话创建、JWT、轮询、REPL 桥、容量唤醒、与云端 API 协同
remote/ 远程会话:WebSocket、RemoteSessionManager、权限桥、SDK 消息适配
server/ 直连 / 会话服务相关(如 directConnectManager、类型定义)
coordinator/ 协调器模式coordinatorMode.ts):多代理场景下的工具白名单与用户上下文注入
tasks/ 本地任务执行:LocalShellTaskLocalAgentTaskDreamTask 等与 UI/执行隔离相关的任务模型
state/ 应用级状态存储(如 AppStateStore
plugins/ 内置与打包插件注册
skills/ 技能加载、捆绑技能(bundled)、与 MCP 技能构建辅助
memdir/ 持久记忆目录MEMORY.md 入口、扫描、团队记忆路径、相关 prompt 拼装
keybindings/ 快捷键解析、默认绑定、校验
vim/ Vim 模式:动作、操作符、文本对象、过渡状态
voice/ 语音输入管线(与 services/voice*.ts 协同)
outputStyles/ 输出样式加载
upstreamproxy/ CCR 容器内上游代理:token、CA 合并、CONNECT→WebSocket relay、环境变量注入
bootstrap/ 启动期状态(会话 ID、附加目录缓存等)
migrations/ 配置/数据迁移
schemas/ Zod 配置 schema
types/ 消息、权限、日志、生成事件类型等
utils/ 通用工具:消息、Git、权限、模型、token、附件、配置等
assistant/ 助手侧历史等
buddy/ 伴侣精灵 UI 与通知
ink/ Ink 渲染封装
native-ts/ 原生相关 TS 工具
constants/ 产品常量、prompt 片段、查询来源等
moreright/ 内部/实验相关模块(视构建门控而定)

三、核心运行时路径(深入)

3.1 入口 entrypoints/cli.tsxmain.tsx

  • 设计目标 :非交互快速路径(如 --version)尽量少加载模块;其余路径再拉取启动分析、配置、完整 CLI。

  • 典型分支

    • --dump-system-prompt:渲染并输出系统 prompt(评估/调试,常由 feature('DUMP_SYSTEM_PROMPT') 门控)。

    • --claude-in-chrome-mcp / --chrome-native-host:Chrome 集成相关子进程入口。

    • --computer-use-mcpCHICAGO_MCP 门控下的计算机使用 MCP。

    • --daemon-workerDAEMON 门控下由 supervisor 拉起的 worker。

    • remote-control / rc / remote / sync / bridge:在 BRIDGE_MODE 下进入桥接服务形态。

  • 环境适配 :例如 CLAUDE_CODE_REMOTE 为真时为子进程设置更大 Node 堆上限,避免容器内 OOM。

3.2 查询引擎 query.tsQueryEngine.tsquery/ 子模块

  • 角色 :连接「用户/模型消息」与「工具执行结果」的主循环:发起 API 请求、处理流式事件、在工具调用与文本回复之间迭代直至回合结束或中止。

  • 文件分工

    • QueryEngine.ts 承载流式解析、重试、thinking、token 与工具循环的主体实现。

    • query.ts 作为管线入口与大量协作模块的衔接层。

    • query/ 目录提供 configdepsstopHookstokenBudget 等子模块。

  • 协作模块

    • 压缩services/compact(自动压缩、buildPostCompactMessages)。

    • 附件与记忆utils/attachments、相关 memory prefetch。

    • 工具StreamingToolExecutorrunTools、工具结果预算。

    • 遥测services/analyticslogEvent 等。

    • 消息工具函数utils/messages(用户消息、中断、规范化等)。

  • query/config.ts --- QueryConfig :每次 query() 入口快照不可变配置 (如 sessionId),gates 来自 Statsig 缓存门控与环境变量,与 feature() 编译期门控刻意分离。

3.3 工具编排 services/tools/toolOrchestration.ts

  • runTools :将一轮中的多个 tool_use 块按是否可并发分区:

    • 可并发 (只读等):在上限内并行执行,并合并对 ToolUseContext 的延迟修改。

    • 不可并发:串行执行,保证写操作顺序与副作用可预测。

  • hooks/useCanUseToolCanUseToolFn 结合,实现每次调用前的权限决策

3.4 工具注册 tools.tstools/*

  • 静态核心工具:Bash、文件读写/编辑、Glob、Grep、Notebook、WebFetch/WebSearch、LSP、MCP 资源读写、Agent、Skill、Plan/Worktree、Task 系列、Todo、AskUserQuestion、Config 等。

  • 条件加载

    • SleepToolCron*RemoteTriggerToolMonitorTool 等与 PROACTIVE / KAIROS / AGENT_TRIGGERS 相关。

    • REPLToolSuggestBackgroundPRToolAnt 内部USER_TYPE === 'ant')。

    • WorkflowToolWORKFLOW_SCRIPTS 下初始化 bundled workflows。

    • coordinatorModeCOORDINATOR_MODE 下参与协调器工具策略。

  • 设计模式 :通过 require + feature() 避免循环依赖,并在发布构建中剔除未启用代码路径


四、命令系统 commands/

用户通过 / 斜杠命令触发的功能均落在此树。可按主题归类如下:

4.1 会话与工作区

  • session:会话相关 UI/逻辑

  • resume / rewind:恢复与回溯

  • share:会话分享

  • add-dir:附加工作目录

  • context / ctx_viz:上下文查看与可视化

  • compact:手动压缩上下文

4.2 版本控制与评审

  • commit / commit-push-pr:提交与推送 PR 流程

  • diff:查看变更

  • review / security-review / pr_comments:代码评审与 PR 评论

  • branch / rename / tag:分支与标签类辅助

4.3 配置、模型与主题

  • config / model / theme / output-style / color

  • permissions:权限模式相关界面

  • keybindings:快捷键配置

  • rate-limit-options / reset-limits / mock-limits:限额与测试

4.4 认证与账户

  • login / logout / oauth-refresh

4.5 MCP、插件、技能

  • mcp:MCP 服务器管理

  • plugin / reload-plugins:插件与子命令分页等

  • skills:技能管理

4.6 记忆与任务

  • memory:持久记忆 UI

  • tasks:任务列表与管理

4.7 环境与健康

  • doctor:环境诊断

  • upgrade / version / release-notes

  • install / onboarding / terminalSetup

  • remote-env / remote-setup / bridge:远程与桥接相关命令

4.8 编辑器与模式

  • vim:Vim 模式切换与说明

  • voice:语音相关命令

  • ide:IDE 集成辅助

4.9 遥测、调试与内部

  • stats / usage / cost / extra-usage

  • debug-tool-call / heapdump / perf-issue

  • ant-trace / bughunter / good-claude 等内部或实验向命令


五、服务层 services/(深入)

子模块 功能要点
api/ Anthropic API 客户端、重试、错误类型、上传、与主循环对接的 fetch 封装等
oauth/ OAuth 2.0 登录流程与 token 生命周期
mcp/ MCP 连接、工具与资源枚举、与 MCPTool 协同
lsp/ 语言服务器进程管理与 LSP 请求封装
compact/ 对话压缩算法与自动压缩策略
analytics/ GrowthBook、Datadog、一方向事件日志、metadata、kill switch
plugins/ PluginInstallationManager、CLI 命令扩展、插件操作
policyLimits/ 组织策略与用量上限
remoteManagedSettings/ 云端统一下发的设置
teamMemorySync/ 团队记忆同步与密钥守卫
extractMemories/ 从对话中抽取记忆条目
toolUseSummary/ 对 tool 结果生成摘要,减少上下文体积
tools/ StreamingToolExecutortoolOrchestrationtoolExecution 等执行管线
voice.ts / voiceStreamSTT.ts 语音开关、流式语音识别
preventSleep.ts / awaySummary.ts 防止休眠、离开摘要
claudeAiLimits* AI 限额钩子与测试模拟

六、桥接与远程 bridge/remote/server/

6.1 bridge/

  • 目标 :让 IDE 扩展 (VS Code、JetBrains 等)与本地 CLI 双向通信:同步选区、发起会话、权限回调、REPL 桥接。

  • 关键文件

    • bridgeMain.ts:主循环、退避重连、会话生成与销毁,涵盖错误分类、容量唤醒等生产细节。

    • bridgeMessaging.ts / inboundMessages.ts:消息协议。

    • replBridge.ts / initReplBridge.ts:REPL 与桥的衔接。

    • jwtUtils.ts:令牌刷新调度。

6.2 remote/

  • RemoteSessionManagerSessionsWebSocket:远程会话生命周期与实时通道。

  • remotePermissionBridge:远程场景下的权限桥接。

  • sdkMessageAdapter:SDK 消息形态适配。

6.3 server/

  • directConnectManagercreateDirectConnectSession:直连会话创建与管理(配合远程/桌面产品形态)。

七、协调器模式 coordinator/coordinatorMode.ts

  • 开关feature('COORDINATOR_MODE') 且环境变量 CLAUDE_CODE_COORDINATOR_MODE 为真时进入协调器模式。

  • 职责

    • 定义协调器场景下允许的工具集合禁止/内部工具边界。

    • matchSessionMode:恢复会话时若当前模式与存储不一致,自动同步环境变量并打 analytics 事件。

    • getCoordinatorUserContext:向系统/用户上下文注入协调器专用说明。


八、任务系统 tasks/

  • LocalShellTask:在本地 shell 中执行命令,含 guard、kill 逻辑。

  • LocalAgentTask:本地代理子任务 UI/状态。

  • LocalMainSessionTask:主会话任务抽象。

  • DreamTask :与 services/autoDream 等相关的后台/自动任务形态。

  • tools 中的 Task 系列及 hooks/useTasksV2 等联动,形成「计划---执行---可查询」的任务闭环。


九、记忆系统 memdir/

  • memdir.tsMEMORY.md 入口内容截断(行数与字节双上限)、与自动记忆路径、getMemoryFiles 等 prompt 构建共享逻辑。

  • paths.ts / memoryScan.ts / findRelevantMemories.ts:记忆文件布局、扫描与检索。

  • teamMemPaths.ts / teamMemPrompts.ts :团队记忆(TEAMMEM feature)路径与 prompt 片段。

  • memoryTypes.ts:frontmatter 与说明文档结构约定。

记忆内容经 context.ts / utils/claudemd 等进入系统 prompt,与 /memory 命令及自动抽取服务共同构成长期上下文


十、技能系统 skills/

  • loadSkillsDir.ts:从用户/项目目录加载技能定义。

  • bundled/ :内置技能实现(如 batch、debug、simplify、verify、scheduleRemoteAgents、claudeInChrome、keybindings 等),由 bundledSkills.ts / bundled/index.ts 聚合。

  • mcpSkillBuilders.ts:从 MCP 能力构建技能相关结构。

  • 执行路径上通过 SkillTool 与模型 tool_use 对接,使用户可扩展可复用工作流


十一、插件系统 plugins/

  • builtinPlugins.ts / bundled/:内置与打包插件入口。

  • services/pluginscommands/pluginhooks/useManagePlugins 等配合:安装、更新、推荐、与 MCP/LSP 能力的交叉提示。


十二、表现层与交互

12.1 components/screens/

  • Ink 组件:消息列表、输入、确认框、进度、主题色与布局。

  • Screens:Doctor、全屏 REPL、Resume 等大界面,减少主界面复杂度。

12.2 context/

集中放置 跨组件 的 React Context:通知、邮箱、语音、统计、FPS、遮罩、prompt 覆盖、队列消息等。

12.3 hooks/

  • 输入与导航useTextInputuseVimInputuseArrowKeyHistoryuseCommandQueue 等。

  • IDEuseIDEIntegrationuseIdeSelectionuseDiffInIDE 等。

  • 权限useCanUseToolhooks/toolPermission/*

  • 业务useRemoteSessionuseDirectConnectuseVoiceuseSwarmInitialization 等。

12.4 keybindings/vim/voice/

  • 快捷键解析与默认绑定;Vim 动作状态机;语音采集与识别服务衔接。

12.5 buddy/

终端内「伴侣」形象与轻量互动(精灵图、通知 hook)。


十三、状态、配置与类型

  • state/AppStateStore:MCP 入口等使用的默认应用状态。

  • schemas/ + migrations/:配置演进与校验。

  • types/:消息模型、权限、hooks、生成的事件 proto 类型等。

  • bootstrap/state.ts:会话级全局片段(如 session id、CLAUDE.md 缓存)。

  • utils/config.js:配置启用与合并。


十四、上游代理 upstreamproxy/

面向 CCR(容器化远程会话) 场景:

  • 读取 /run/ccr/session_token,加固进程(如限制 dumpable),下载并合并上游 MITM CA,启动 CONNECT→WebSocket relay ,设置 HTTPS_PROXY / SSL_CERT_FILE

  • 失败开放:任何一步出错应记录警告并禁用代理,避免拖垮主功能。


十五、CLI 子系统 cli/

  • 传输transports/SSETransportWebSocketTransportHybridTransportccrClientWorkerStateUploaderSerialBatchEventUploader 等------支撑远程 worker、状态上报与流式事件。

  • 结构化 I/OstructuredIO.tsndjsonSafeStringify.tsprint.ts------便于脚本化与机器可读输出。

  • handlersauthmcpagentspluginsautoModeutil 等子命令实现。

  • update.ts / exit.ts / remoteIO.ts:更新检查、退出码约定、远程环境下的 I/O 适配。


十六、入口:MCP 服务器 entrypoints/mcp.ts

  • 使用 @modelcontextprotocol/sdk 创建 stdio MCP Server (名称如 claude/tengu)。

  • 暴露注册表中的工具,并与内置 MCP 命令(如 review)结合;包含权限检查、setCwd、文件状态 LRU 缓存等长驻进程注意事项。


十七、SDK 类型 entrypoints/sdk/*

  • coreTypescoreSchemascontrolSchemas:对外或内部 SDK 控制的类型与 schema,与 agent SDK 类型文件共同约束程序化驱动 CLI 时的消息格式。

十八、权限体系(横切)

  • 工具级utils/permissionshooks/useCanUseToolhooks/toolPermission/handlers/* --- 根据模式(default / plan / bypass / auto 等)决定提示、自动允许或拒绝。

  • 文件系统utils/permissions/filesystem 等与 .gitignore、沙箱路径、scratchpad 门控结合。

  • 桥接/远程bridgeremotePermissionBridge 将权限决策延伸到 IDE 或远程 UI。


十九、遥测与特性开关(横切)

  • GrowthBook / Statsig :门控功能与实验分组;部分 gate 在 QueryConfig 等处单次查询快照以避免行为抖动。

  • Datadog / 第一方日志services/analytics 下 sink 与 exporter;关闭时走 kill switch。

  • bun:bundle feature():编译期剔除大块代码(VOICE、DAEMON、BRIDGE、MONITOR_TOOL 等),减小发布体积与攻击面。


二十、核心大文件说明(维护者视角)

文件 典型职责
QueryEngine.ts 流式解析、重试、thinking、token、与工具循环的完整状态机(体量最大)
query.ts 查询管线入口及与压缩、附件、工具编排、遥测等的协作
Tool.ts 所有工具的共有类型、权限上下文、findToolByName
tools.ts 工具列表组装与条件导出
commands.ts 命令注册总表与条件加载
main.tsx Commander 命令树与 Ink 根渲染启动

二十一、数据流小结(一次用户发送消息后)

  1. 输入层 解析用户文本或粘贴、附件引用;斜杠命令可走 commands 快捷路径。

  2. 上下文组装context.tsmemdirutils/messagesattachments 等拼出用户可见上下文与系统提示片段。

  3. query() 调用 API,消费 SSE/流式 事件;若出现 tool_use ,经权限检查进入 runTools(并发或串行)。

  4. 工具结果写回消息列表;必要时触发 compacttool use summary;继续下一轮直到模型停止或用户取消。

  5. UI 通过 Ink 组件与 Context/Hooks 刷新;IDE/远程通过 bridge/remote 同步状态。


二十二、阅读源码的建议顺序

  1. entrypoints/cli.tsxmain.tsxentrypoints/init.ts

  2. query.ts 主循环 + services/tools/toolOrchestration.ts

  3. tools.ts + 任选 tools/BashTooltools/FileReadTool 作为模板

  4. hooks/useCanUseTool.tsx + hooks/toolPermission/

  5. commands/helpcommands/init 了解命令注册方式

  6. bridge/bridgeMain.ts(需耐心:含网络与会话全生命周期)

相关推荐
AI创界者2 小时前
基于 C++ 架构的高性能远程管理技术探究(附 V7.4 优化解析)
人工智能·架构
GOWIN革文品牌咨询2 小时前
B2B品牌升级路径判断:架构型、结构型、表达型三类问题怎么分
架构·工业软件·b2b品牌设计·b2b全案策划
wind6752 小时前
一场因 .map 引发的史诗级“开源”:Claude Code 源码泄露事件全复盘
claude
mrchen2463 小时前
XAI工程实现可能
架构
EDPJ4 小时前
从 Grounding DINO 到 DINO-X:开放集目标检测的架构演进与细节拆解
目标检测·计算机视觉·架构·图像分割·图像分类
米花丶4 小时前
同样的 while(true),不同的工程深度:Claude Code 源码中的 Agent 设计启示
人工智能·claude
全栈若城5 小时前
HarmonyOS6 半年磨一剑 - RcInput 组件清空、密码切换与图标交互机制
架构·交互·harmonyos6·三方库开发实战·rchoui·三方库开发
2020酱5 小时前
国内团队接入 Claude / GPT API 完整避坑指南
claude
AI服务老曹5 小时前
GB28181 与 RTSP 深度解析:企业级 AI 视频中台的全协议接入架构
人工智能·架构·音视频