Claude Code 源码分析Claude Code 源码分析
首页
源码统计
系统架构
UML 图表
工具系统
CodeGraph
首页
源码统计
系统架构
UML 图表
工具系统
CodeGraph
  • 概览

    • Claude Code 源码分析
    • 源码统计
    • CodeGraph 图谱
  • 架构

    • 系统架构
    • UML 图表索引
    • 查询引擎
    • 核心流程
    • 消息系统
    • 状态管理
  • 功能模块

    • 工具系统
    • 斜杠命令
    • 服务层
    • MCP 协议
    • Skills 技能
    • 子代理系统
  • 分层深度

    • 入口层
    • UI / Ink 层
    • utils 基础设施
    • 桥接 / 远程
    • 上下文压缩
  • 原理与安全

    • 底层原理
    • 技术难点
    • 权限与安全
    • 内部机制
    • 遥测与分析
  • 深度专题

    • Hooks 系统
    • 插件系统
    • 记忆系统
    • API 通信层
    • Ink 终端 UI
    • 认证系统
    • 构建与发布
    • 术语表
  • 调用分析

    • 调用链分析
    • 核心文件索引
  • 模块详解

    • utils

      • 模块: utils
      • messages · 消息工厂与规范化
      • session-storage · JSONL 会话持久化
      • permissions · 工具权限决策
      • shell-hooks · 用户 Shell Hook 系统
    • components

      • 模块: components
      • REPL · 主屏编排
      • messages · 消息行渲染
      • PermissionRequest · 权限弹窗
      • PromptInput · 底部输入
    • services

      • 模块: services
      • api-claude · Anthropic API 流式与重试
      • mcp-client · MCP 连接与工具调用
      • compact · 上下文压缩与自动触发
      • analytics · GrowthBook、Datadog 与 1P 事件
    • tools

      • 模块: tools
      • tool-interface · Tool 契约与注册表
      • bash-tool · Shell 执行与权限
      • streaming-executor · 流式工具并发调度
      • agent-tool · 子 Agent 委派
    • commands

      • 模块: commands
      • command-registry · commands.ts 注册与分派
      • model-command · /model 模型选择
      • mcp-commands · /mcp 服务器管理
      • compact-memory-commands · /compact 与 /memory
    • ink

      • 模块: ink
      • Ink 渲染管线 · Screen 与终端输出
      • 终端事件 · resize、paste、stdin
      • Ink Hooks · 输入、搜索、终端状态
      • Ink 组件 · Box、Text、ScrollBox 原语
    • hooks

      • 模块: hooks
      • useCanUseTool · 权限 UI 接缝
      • 输入与快捷键 Hook
      • 合并态 Hook(MCP + 本地)
      • notifs 通知 Hook
    • bridge

      • 模块: bridge
      • repl-bridge · REPL 桥初始化与传输
      • bridge-messaging · 桥消息路由与入站处理
      • remote-bridge-core · env-less 核心与守护主循环
      • bridge-permissions-ui · 权限、API 与 TUI
    • cli

      • 模块: cli
      • Structured IO · NDJSON SDK 协议
      • CLI Transports · Session Ingress 传输层
      • CLI Handlers · 子命令懒加载实现
      • Update & Upload · 自更新与串行上传原语
    • screens

      • 模块: screens
      • REPL 屏 · Screen 类型与顶层路由
      • ResumeConversation · 会话恢复选择器
      • Doctor · 安装诊断全屏
    • entrypoints

      • 模块: entrypoints
      • cli-entrypoint · Bootstrap 与快路径
      • sdk-types · core / control / runtime 类型体系
      • mcp-entrypoint · MCP stdio 服务器
      • sandbox-types · 沙箱配置单一真相源
    • skills

      • 模块: skills
      • skills-loading · 磁盘加载与 bundled 注册表
      • bundled-skills · 内置 skill 与 initBundledSkills
      • mcp-skills · MCP prompt 转 skill
      • skill-tool-integration · SkillTool 与命令注册
    • types

      • 模块: types
      • message-types · Message 联合与 content blocks
      • tool-permission-types · Tool、Permission、Command 类型
      • api-sdk-types · API 与 Hooks 协议类型
      • misc-types · ids、plugin、generated 与其余类型
    • tasks

      • 模块: tasks
      • local-agent-task · 本地 Agent 与主会话后台化
      • remote-agent-task · 远程 CCR 与 In-Process Teammate
      • shell-workflow-tasks · Bash 后台、Workflow 与 stopTask
      • dream-monitor-tasks · Dream、Monitor MCP 与 pill 文案
    • keybindings

      • 模块: keybindings
      • keybinding-registry · 注册、Provider 与 useKeybinding
      • default-bindings · 默认键位表与平台差异
      • command-bindings · command:* 动态斜杠命令绑定
      • vim-bindings · Vim 模式与 keybindings 边界
    • memdir

      • 模块: memdir
      • memdir-core · 路径、加载与 MEMORY.md
      • memory-extraction · extractMemories 与 SessionMemory
      • memdir-commands · /memory、/remember 与命令集成
    • state

      • 模块: state
      • app-state-core · store、AppState 类型与 Provider
      • app-state-selectors · selectors 与 onChangeAppState
      • teammate-state · 队友视图与 swarm 状态
      • state-boundaries · bootstrap、sessionStorage、FileStateCache
    • query

      • 模块: query
      • query config 与 deps · 配置快照与依赖注入
      • query tokenBudget · +500k 自动续跑
      • query transitions · Continue / Terminal 状态机
      • query stopHooks · Stop 事件与 turn 结束编排
  • 模块详解(扩展)

    • messages · 消息工厂与规范化
    • session-storage · JSONL 会话持久化
    • permissions · 工具权限决策
    • shell-hooks · 用户 Shell Hook 系统
    • REPL · 主屏编排
    • messages · 消息行渲染
    • PermissionRequest · 权限弹窗
    • PromptInput · 底部输入
    • api-claude · Anthropic API 流式与重试
    • mcp-client · MCP 连接与工具调用
    • compact · 上下文压缩与自动触发
    • analytics · GrowthBook、Datadog 与 1P 事件
    • tool-interface · Tool 契约与注册表
    • bash-tool · Shell 执行与权限
    • streaming-executor · 流式工具并发调度
    • agent-tool · 子 Agent 委派
    • command-registry · commands.ts 注册与分派
    • model-command · /model 模型选择
    • mcp-commands · /mcp 服务器管理
    • compact-memory-commands · /compact 与 /memory
    • Ink 渲染管线 · Screen 与终端输出
    • 终端事件 · resize、paste、stdin
    • Ink Hooks · 输入、搜索、终端状态
    • Ink 组件 · Box、Text、ScrollBox 原语
    • useCanUseTool · 权限 UI 接缝
    • 输入与快捷键 Hook
    • 合并态 Hook(MCP + 本地)
    • notifs 通知 Hook
    • repl-bridge · REPL 桥初始化与传输
    • bridge-messaging · 桥消息路由与入站处理
    • remote-bridge-core · env-less 核心与守护主循环
    • bridge-permissions-ui · 权限、API 与 TUI
    • Structured IO · NDJSON SDK 协议
    • CLI Transports · Session Ingress 传输层
    • CLI Handlers · 子命令懒加载实现
    • Update & Upload · 自更新与串行上传原语
    • REPL 屏 · Screen 类型与顶层路由
    • ResumeConversation · 会话恢复选择器
    • Doctor · 安装诊断全屏
    • cli-entrypoint · Bootstrap 与快路径
    • sdk-types · core / control / runtime 类型体系
    • mcp-entrypoint · MCP stdio 服务器
    • sandbox-types · 沙箱配置单一真相源
    • skills-loading · 磁盘加载与 bundled 注册表
    • bundled-skills · 内置 skill 与 initBundledSkills
    • mcp-skills · MCP prompt 转 skill
    • skill-tool-integration · SkillTool 与命令注册
    • message-types · Message 联合与 content blocks
    • tool-permission-types · Tool、Permission、Command 类型
    • api-sdk-types · API 与 Hooks 协议类型
    • misc-types · ids、plugin、generated 与其余类型
    • local-agent-task · 本地 Agent 与主会话后台化
    • remote-agent-task · 远程 CCR 与 In-Process Teammate
    • shell-workflow-tasks · Bash 后台、Workflow 与 stopTask
    • dream-monitor-tasks · Dream、Monitor MCP 与 pill 文案
    • keybinding-registry · 注册、Provider 与 useKeybinding
    • default-bindings · 默认键位表与平台差异
    • command-bindings · command:* 动态斜杠命令绑定
    • vim-bindings · Vim 模式与 keybindings 边界
    • memdir-core · 路径、加载与 MEMORY.md
    • memory-extraction · extractMemories 与 SessionMemory
    • memdir-commands · /memory、/remember 与命令集成
    • app-state-core · store、AppState 类型与 Provider
    • app-state-selectors · selectors 与 onChangeAppState
    • teammate-state · 队友视图与 swarm 状态
    • state-boundaries · bootstrap、sessionStorage、FileStateCache
    • query config 与 deps · 配置快照与依赖注入
    • query tokenBudget · +500k 自动续跑
    • query transitions · Continue / Terminal 状态机
    • query stopHooks · Stop 事件与 turn 结束编排
  • 工具详解

    • tool-interface · Tool 契约与注册表
    • tool-permission-types · Tool、Permission、Command 类型
    • 工具: Bash
    • 工具: PowerShell
    • 工具: Agent
    • 工具: LSP
    • 工具: FileEdit
    • 工具: FileRead
    • 工具: Skill
    • 工具: WebFetch
    • 工具: MCP
    • 工具: SendMessage
    • 工具: FileWrite
    • 工具: Config
    • 工具: Grep
    • 工具: Brief
    • 工具: ExitPlanMode
    • 工具: ToolSearch
    • 工具: NotebookEdit
    • 工具: TaskOutput
    • 工具: WebSearch
    • 工具: ScheduleCron

本章总览

src/tasks/(14 个文件,约 3310 行)是 Claude Code 的「后台任务层」:把 Bash 子进程、本地子 Agent、远程 CCR 会话、in-process teammate、Dream 记忆整理等长运行工作统一注册到 AppState.tasks,并通过 footer pill、Shift+Down 对话框、XML task-notification 与 SDK 事件对外暴露状态。根目录 Task.ts 定义 Task 接口与 createTaskStateBase;tasks.ts 维护 type→Task 实现映射;utils/task/framework.ts 提供 registerTask / updateTaskState。

总览图

渲染图表中…

学完本章你应该能

  • 建立 Task 接口 → 具体 Task 实现 → AppState.tasks → UI pill 的阅读顺序
  • 区分 local_agent / local_bash / remote_agent / in_process_teammate / dream 等 type 字段
  • 理解 isBackgroundTask 与 isBackgrounded 如何决定 footer pill 可见性
  • 能在源码树中从本页跳转到子章节与高亮文件

建议学习步骤

  1. 浏览下方子章节导航表,选择入口主题
  2. 点击 SourceTree 中的 tasks/LocalAgentTask/ 跳转到对应讲解
  3. 建议顺序:local-agent-task → remote-agent-task → shell-workflow-tasks → dream-monitor-tasks

模块在架构中的位置

tasks 是 src/ 下的一级目录,共 14 个文件、3,310 行。建议结合「系统架构」章节理解它与其他层的调用关系。

模块 UML 图表

后台 Task 生命周期

渲染图表中…

概览

指标数值
行数3,310
文件14

子章节导航

子章节主题核心路径
local-agent-task本地子 Agent、主会话后台化LocalAgentTask/、LocalMainSessionTask.ts
remote-agent-task远程 CCR 会话、Ultraplan、UltrareviewRemoteAgentTask/、InProcessTeammateTask/
shell-workflow-tasks后台 Bash、Monitor、stopTaskLocalShellTask/、LocalWorkflowTask/、stopTask.ts
dream-monitor-tasksDream 记忆整理、Monitor MCP、pill 文案DreamTask/、MonitorMcpTask/、pillLabel.ts

架构分层

Claude Code 任务系统可概括为四层:

Task.ts           — Task 接口、TaskStateBase、createTaskStateBase
tasks.ts          — getTaskByType、ALL_TASKS 注册表
tasks/*Task/      — 各任务类型实现(kill、spawn、complete)
utils/task/       — registerTask、updateTaskState、diskOutput
AppState.tasks    — Record<taskId, TaskState> 运行时状态
pillLabel.ts      — footer pill 文案与 CTA 判定
stopTask.ts       — TaskStopTool 与 SDK stop_task 共享逻辑

关键边界:

  • types.ts 定义 TaskState 联合类型与 isBackgroundTask 谓词,不 import React
  • LocalShellTask/guards.ts 与 killShellTasks.ts 从 TSX 拆出,避免 runAgent 拉入 Ink
  • LocalMainSessionTask.ts 复用 LocalAgentTaskState,agentType='main-session' 区分主会话后台化
  • RemoteAgentTask 通过 pollRemoteSessionEvents 增量拉取 CCR 事件,sidecar 持久化 --resume 恢复

SourceTree 扫描 src/tasks/ 目录;根目录 Task.ts、tasks.ts 在 highlightFiles 中以相对 src/ 的路径引用。

任务类型一览

type 字段实现目录典型触发场景
local_agentLocalAgentTask/AgentTool async、Ctrl+B 后台主会话
local_bashLocalShellTask/BashTool run_in_background、Monitor 脚本
remote_agentRemoteAgentTask//ultraplan、/ultrareview、background PR
in_process_teammateInProcessTeammateTask/AgentTool teammate spawn(同进程)
local_workflowLocalWorkflowTask/占位 stub(isLocalWorkflowTask 恒 false)
monitor_mcpMonitorMcpTask/占位 stub(isMonitorMcpTask 恒 false)
dreamDreamTask/autoDream 记忆整理 fork agent

BackgroundTaskState 是 footer pill 与 Shift+Down 对话框的数据源。isBackgroundTask 要求 status 为 running/pending 且 isBackgrounded !== false(foreground 任务在 pill 中隐藏,直到用户 Ctrl+B 或 auto-background 超时)。

notified 标志防止重复 XML notification;evictAfter + retain 控制 CoordinatorTaskPanel 的 GC 宽限期。

目录树展示 src/tasks/ 下全部子目录(LocalAgentTask、RemoteAgentTask、LocalShellTask 等)。根目录 types.ts、stopTask.ts、pillLabel.ts、LocalMainSessionTask.ts 在树中可见。点击子目录进入对应深度讲解。

与其他模块的协作

协作方关系
tools/AgentTool/registerAsyncAgent、completeAgentTask、enqueueAgentNotification
tools/BashTool/spawnShellTask、registerForeground、backgroundTask
query.tsLocalMainSessionTask.startBackgroundSession 递归 query
utils/task/diskOutputinitTaskOutputAsSymlink、appendTaskOutput、evictTaskOutput
utils/messageQueueManagerenqueuePendingNotification(task-notification 模式)
utils/sdkEventQueueemitTaskTerminatedSdk、emitTaskProgress
components/BackgroundTasksIndicator消费 getPillLabel、pillNeedsCta
utils/teleportpollRemoteSessionEvents、archiveRemoteSession

调试「任务 pill 不显示」时:先查 isBackgroundTask 谓词,再查 task.isBackgrounded,最后查 foregroundedTaskId 是否占用主视图。调试「stop 无效」时:查 getTaskByType(task.type).kill 与 StopTaskError.code。

本章小结与延伸

tasks 模块 = 长运行工作的统一注册表与生命周期管理。先懂 LocalAgentTask 与 LocalMainSessionTask,再读 RemoteAgentTask 轮询,最后理解 stopTask 与 pillLabel 的 UI 契约。 继续学习:

  • local-agent-task
Next
local-agent-task · 本地 Agent 与主会话后台化