ARTICLE · 1033125
Claude Code 源码中的六大核心概念
Claude Code 建立在六项核心抽象之上。其余所有组件,包括 400 多个工具文件、分支终端渲染器、Vim 仿真模块、开销追踪器,都是为支撑这六项抽象而存在。

1. Query Loop 查询循环
查询循环(query.ts,约 1700 行)
这是一个异步生成器,也是整个系统的核心。它流式接收模型返回结果,收集工具调用指令,执行工具调用,再将调用结果追加到消息历史中,之后循环往复。所有交互场景 —— 交互式解释器(REPL)、软件开发工具包(SDK)、子智能体、无界面--print模式 —— 都会经过这一个函数。该生成器产出消息对象,供前端界面使用。它的返回类型是一个名为Terminal的可区分联合类型,精准记录循环终止的原因:正常完成、用户中止、token 额度耗尽、停止钩子干预、达到最大轮次,或是不可恢复错误。项目选用生成器模式,而非回调函数或事件触发器,以此实现原生背压机制、简洁的取消逻辑以及带类型约束的终止状态。
2. Tool System 工具系统
工具系统(Tool.ts、tools.ts、services/tools/目录)
工具指智能体可以在环境中执行的任意操作:读取文件、运行 Shell 命令、编辑代码、网络搜索。虽然用途概念简单,底层机制却相当复杂。每个工具都实现了一套完备接口,包含标识、数据模式、执行逻辑、权限控制与结果渲染。工具不只是普通函数 —— 它自带权限判定逻辑、并发声明、进度上报以及界面渲染能力。该系统会将工具调用划分为并发批次与串行批次;流式执行器甚至能在大模型尚未输出完整响应前,就启动支持并发安全的工具。
3. Tasks 任务模块
任务模块(Task.ts、tasks/目录)
任务是后台工作单元,主要由子智能体构成。任务遵循状态机流转:待处理(pending)→ 运行中(running)→ 已完成(completed)/ 失败(failed)/ 终止(killed)。AgentTool 会创建一个全新的 query() 生成器,该生成器拥有独立的消息上下文、工具集和权限模式。任务机制赋予了 Claude Code 递归执行能力:主智能体可以将任务委派给子智能体,子智能体还能继续向下委派任务。
4. State Layer 状态模块
状态模块(双层架构)
该系统在两个层级维护状态。一个可变单例对象(STATE)保存约 80 个会话级基础设施字段:工作目录、模型配置、费用统计、遥测计数器、会话 ID。它在启动时初始化一次,之后直接修改,不具备响应式。一个极简响应式存储(仅 34 行,Zustand 风格)负责驱动界面:消息、输入模式、工具授权、进度指示器。这种分层设计是刻意为之:基础设施状态变更频率低,无需触发界面重渲染;而 UI 状态会频繁变动,必须触发重渲染
5. Memory 记忆模块
记忆模块(memdir/目录)
记忆是智能体跨会话持久保存的上下文信息。分为三层:项目级(代码仓库中的 CLAUDE.md 文件)、用户级(~/.claude/MEMORY.md)、团队级(通过软链接共享)。会话启动时,系统扫描全部记忆文件,解析文件元数据头,再由大模型挑选与当前对话相关的记忆片段。依靠记忆机制,Claude Code 能够 “记住” 你的代码库规范、架构决策以及调试历史。
6. Hooks 钩子模块
钩子模块(hooks/、utils/hooks/目录)
用户自定义的生命周期拦截器,可在 4 类执行流程的 27 个不同事件点触发:Shell 命令、一次性大模型提示词、多轮智能体对话,以及 HTTP Webhook。钩子能够阻断工具执行、修改输入内容、注入额外上下文,或是直接提前终止整个查询循环。权限系统本身有一部分就是通过钩子实现的:PreToolUse 钩子可以在交互式权限弹窗弹出之前,就拒绝本次工具调用。