深度调研 / 2026-07-17

Claude Code 深度调研报告

一份自内向外的解剖:单循环内核、工具层的正确性下沉、上下文预算工程,到权限梯度、沙箱化自主性,与模型-harness 协同飞轮——附一次用户输入在 harness 内部的逐帧生命周期。

调研对象版本 Claude Code v2.1.197(本机实测)及此前公开版本史 阅读时长 约 45 分钟 图表 13 幅 Mermaid 图
信源标注说明

【官方】 = 官方文档/博客/发布信息 【实测】 = 本次在真实 Claude Code 环境中直接验证 【逆向】 = 社区逆向工程/反编译分析 【推断】 = 基于证据的合理推断。

本报告的撰写者本身运行在 Claude Code 的 agent harness 内部——工具协议、上下文注入机制、权限流等均为第一手观测,这类证据一律标 【实测】。全文 13 幅图表以 Mermaid 绘制,在本页内直接渲染。

摘要

十条核心发现

  1. "信模型"是贯穿一切的总纲。Claude Code 的几乎每个设计决策都可以还原为一句话:把工程做薄,把判断留给模型,随模型每次升级删掉一层脚手架。它刻意不做工作流编排、不做向量索引、不做厚重 GUI——这不是没能力做,而是赌"模型进步会淘汰这些补丁"。过去 18 个月的迭代史证明这个赌注是对的。
  2. 真正的护城河不在产品层,在"模型-harness 协同训练"。Anthropic 的模型在与 Claude Code 几乎同构的工具环境中做 RL 训练,模型每一代都"天生会用"这套工具。竞品可以复刻 harness(开源克隆已有十余个),但复刻不了这个训练闭环。
  3. 工具层是投入产出比最高的工程点。约 15 个内置工具,每个工具的描述是数百到上千词的"说明书式 prompt",错误信息全部面向模型编写。Edit 工具的 exact-match + read-before-edit 硬约束,是用工具层状态机消灭幻觉的教科书案例。
  4. 上下文被当成一等公民的稀缺资源管理:分层 CLAUDE.md 记忆、阈值触发的三段式 compaction、system-reminder 边带注入、append-only 消息布局换取 KV 缓存命中——一整套"注意力预算"工程。
  5. 安全模型是"能力沙箱 + 渐进信任",而非一次性授权。四档权限模式、规则化 allowlist、OS 级沙箱(Seatbelt/bubblewrap)、命令前缀解析 + 注入检测,每一次权限询问都附带"泛化建议"以摊薄未来打扰。
  6. "一切可回滚"是自主性的前提。checkpoints/rewind、随时 Esc 打断、会话 fork——先把撤销做到极致,才敢把自动执行权交给模型。
  7. 交互设计的母题是"透明 + 可打断 + 可组合":todo 进度外显、diff 逐条审批、流式展示每个动作;同时保持 unix 管道级可组合性(headless + stream-json),CLI 本身就是 API。
  8. 产品即平台:内核抽成 Claude Agent SDK 后,同一 harness 长出了 Cowork(面向非工程师,上线半年后软件开发仅占其用量 8.7%)、Claude for Excel、Chrome 扩展——Claude Code 实质是 Anthropic 所有 agent 产品的运行时。
  9. 2026 年的演进方向是"从单 agent 到 agent 组织":Agent Teams(2026.2 随 Opus 4.6 发布)、常驻 daemon、后台会话默认化、跨设备 Remote Control、定时任务、持久记忆——单次会话正在变成可调度、可协作的长期工作单元。
  10. 商业验证极其罕见地快:GA 后 6 个月做到 $1B 年化营收,9 个月 $2.5B,企业收入占比过半;开发者复杂任务偏好度 44%(第二名 19%)。它同时定义了品类(terminal agent)并守住了品类第一。
01 / 产品概述与演进

产品概述与演进

1.1 时间线:18 个月,从内部脚本到 $2.5B 产品线

timeline title Claude Code 产品演进主线(2024Q4–2026H1) 2024 Q4 : 内部原型诞生(Boris Cherny) 2025.02 : Research Preview(随 Claude 3.7) 2025.05 : GA + IDE 插件 / SDK / GitHub Actions 2025.06–08 : Hooks、Subagents、Windows、企业治理、1M beta 2025.09 : v2.0(Checkpoints、VS Code 原生扩展、SDK 更名 Agent SDK) 2025.10 : Plugins、Skills、Web+iOS、沙箱开源 2025.11 : Opus 4.5、桌面应用、effort 参数 2026.01 : Cowork 桌面端发布 2026.02 : Agent Teams(随 Opus 4.6) 2026.03 : 源码泄漏与 DMCA 风波 2026 H1 : Claude 5 家族、daemon 与后台会话、原生 1M、Cowork 上 Web/移动
图 1 产品演进主线 · 2024 Q4 – 2026 H1
时间 节点 意义
2024 Q4 Boris Cherny 的内部原型("给 Claude 一个终端"),在 Anthropic 内部病毒式扩散【访谈】 起点不是产品规划,是能力观测实验
2025.02.24 随 Claude 3.7 Sonnet 以 research preview 发布【官方】 品类定义时刻:terminal coding agent
2025.05.22 首届 Code with Claude 大会上随 Claude 4 GA;IDE 插件 beta、SDK、GitHub Actions 同发【官方】 单点工具 → 产品矩阵
2025.06–07 Hooks(v1.0.38)、Windows 原生支持、自定义 Subagents(v1.0.60)、纳入 Pro 订阅【官方】 可编程性/可扩展性补齐
2025.08 企业席位与支出管控、Sonnet 4 的 1M 上下文 beta、周限额(治理 24/7 挂机滥用)【官方】 商业化与治理成型
2025.09.29 v2.0.0 随 Sonnet 4.5:checkpoints + /rewind、原生 VS Code 扩展、终端 UI 重构、/usage;SDK 更名 Claude Agent SDK【官方】 "可回滚"补齐;内核正式平台化
2025.10 Plugins + Marketplace(10.9)、Agent Skills(10.16)、Claude Code on the Web + iOS(10.20)、沙箱运行时开源【官方】 生态开闸 + 云端形态
2025.11.24 Opus 4.5 + 桌面应用、effort 参数、Chrome 扩展【官方】 多端并行会话成为一等公民
2026.01 Claude Cowork 桌面端发布(面向非工程师的通用 agent 工作台,基于同一内核)【官方】 harness 出圈:从写代码到做一切知识工作
2026.02.06 Agent Teams 随 Opus 4.6 发布(实验性,多 agent 协作)【官方】 单 agent → agent 组织
2026.03.31 源码泄漏事件:npm 包 v2.1.88 意外携带 source map,约 51 万行 TypeScript 源码完整暴露,引发 DMCA 风波与社区 clean-room 重写热潮【公开报道】 闭源策略的压力测试;侧证 harness 层高度可复制、护城河在别处
2026 H1 Claude 5 家族进入产品(Fable 5 于 v2.1.170、Sonnet 5 于 v2.1.197 成为默认模型并带原生 1M 上下文);后台会话默认化、daemon 常驻、subagent 五层嵌套、fast mode;Cowork 上线 web/移动(7.7)【官方/实测】 长时程、多会话、跨设备的"agent 操作系统"雏形

表 1 产品演进时间线详表

本机实测:2026-07-17 安装版本为 v2.1.197~/.claude/ 下已出现 teams/tasks/daemon/plans/file-history/(checkpoints)、shell-snapshots/ 等目录,与上述特性一一对应【实测】

1.2 产品哲学:unopinionated,把模型裸露给用户

官方对 Claude Code 的自我定义只有一句话:"intentionally low-level and unopinionated"(刻意低层、不预设立场)【官方】。这句话展开是四个决策:

为什么选终端?这是被问最多的问题,官方与团队访谈给出的理由高度一致:终端是最大公约数环境——SSH、容器、CI、任何 IDE 的下层都有它;键盘流交互延迟最低;unix 管道天然可组合;对一个要快速迭代的实验性产品,TUI 的开发成本远低于 GUI。更深一层【推断】:终端形态使产品团队被迫把全部工程投入压在 agent 内核而非界面上,这在 2025 年恰好是正确的资源分配。

1.3 形态矩阵:一核多壳

所有形态共享同一个 agent 内核(后来抽象为 Claude Agent SDK),差异只在宿主与会话所在位置:

graph TB CORE["Agent 内核(Claude Agent SDK)
主循环 · 工具层 · 权限引擎 · 上下文管理 · 会话状态"] CORE --> CLI["CLI 本体
终端 / SSH / 容器"] CORE --> IDE["VS Code / JetBrains
diff 审阅 · 选区上下文"] CORE --> DESK["桌面应用
本地 + 云端多会话"] CORE --> WEB["Web / iOS
云沙箱 · PR 交付"] CORE --> CI["GitHub Actions / Headless
CI · 管道可组合"] CORE --> SDK["Agent SDK(对外开放)"] SDK --> P1["Cowork"] SDK --> P2["Claude for Excel"] SDK --> P3["Chrome 扩展"] SDK --> P4["第三方 agent 产品"]
图 2 一核多壳 · 形态矩阵
形态 会话运行在 解决的场景
CLI(本体) 本地终端 深度开发、SSH/容器、一切自动化的基座
VS Code / JetBrains 插件 本地(IDE 内嵌面板) inline diff 审阅、选区上下文注入、图形化 plan 审批
桌面应用 本地 + 云端并行多会话 多任务并行管理、非终端用户入口
Web + iOS(claude.ai/code) Anthropic 云沙箱 VM 移动端派活、PR 优先的异步工作流、无本地环境
GitHub Actions CI runner @claude 提及即干活、issue→PR 自动化
Headless(claude -p 任意脚本环境 unix 可组合性:Claude Code 作为命令行原语
Agent SDK 你自己的进程 把整个 harness 当库用,构建任意领域 agent

表 2 形态矩阵详表

这个矩阵的关键设计是会话可迁移:web 发起的会话可以 teleport 到本地 CLI 继续,桌面端可同屏管理本地与云端会话,2026 年的 Remote Control 进一步支持从其他设备接管本机会话【官方/实测】

1.4 商业模式与增长

1.5 团队与研发方式:dogfooding 即方法论

02 / 核心功能与交互设计(产品视角)

核心功能与交互设计(产品视角)

Claude Code 的交互设计有一条清晰的母题:agent 的自主性有多大,取决于用户的"透明度、可打断性、可回滚性"有多强。下面按功能点拆解,每个点都标注它服务于哪条设计原则。

2.1 主会话界面:在字符界面里做出 IDE 级信息密度

终端 UI 由 React + Ink 渲染(见 4.1),做到了传统 CLI 做不到的结构化呈现:

2.2 权限与信任梯度:交互设计的核心命题

这是 Claude Code 交互设计里最值得研究的部分。它把"用户对 agent 的信任"建模成一个可渐进让渡的梯度,而不是一次性开关:

四档权限模式(Shift+Tab 循环切换)【官方/实测】

模式 行为 适用心智
default 首次使用某能力时询问 "我在观察你"
acceptEdits 文件编辑自动放行,命令仍询问 "写代码我信你了"
plan 只读研究,产出计划需审批后才能动手 "先说服我"
bypassPermissions 全部放行(建议容器内使用) "自动驾驶"

三层机制叠加在模式之上

  1. 规则化 allowlistBash(npm run test:*)Edit(src/**)WebFetch(domain:github.com) 这样的规则语法,支持 allow/ask/deny 三级且 deny 优先。规则可以按 user/project/local 分层存放(见 4.4)。
  2. 询问即投资:每次权限弹窗都附带泛化选项("本项目内不再询问 npm test")。这个设计极其重要——它把每一次打扰转化为对未来打扰的削减,权限疲劳随使用时长单调下降。对比很多竞品的"每次都问"或"一次全放",这是最精细的中间态。
  3. diff 逐条审批:编辑类操作的确认单位是"这个 diff",不是"允许编辑文件"。用户批准的是具体变更内容。

信任建立曲线的完整旅程【推断,基于机制归纳】:新用户从 default 模式的高频确认开始 → 通过泛化选项快速积累项目级 allowlist → 切到 acceptEdits → 在容器/worktree 里对可信任务用 bypass → 最终形态是"权限规则集 + 沙箱"替代人工确认(见 4.5"用沙箱消灭弹窗")。产品没有强迫任何一步,但每一步都铺了台阶。

graph LR D["default
逐项确认"] -->|"每次询问附泛化选项
allowlist 逐步积累"| A["acceptEdits
编辑自动放行"] A -->|"沙箱 / worktree / 容器隔离"| B["bypassPermissions
全自动"] P["plan 模式
只读研究 + 计划审批"] -.->|"高风险大任务的前置迂回"| D B --> S["终态:规则集 + 沙箱
替代人工确认"]
图 3 权限信任梯度的让渡路径

2.3 Plan Mode:把"想清楚再动手"做成产品状态

设计价值:Plan Mode 把大任务的风险前置到一次性的、可审阅的文本上,是"透明度换自主性"的最典型交易。

2.4 上下文供给:让用户喂上下文的成本趋近于零

2.5 时间线控制:Esc 是最重要的按键

2.6 命令与扩展体系的用户侧体验

2.7 异步与并行:从"等它做完"到"管理一群会话"

这条演进线的产品含义:Claude Code 正在把交互单位从"一次对话"迁移到"一组可调度的长期工作",抢占的是"工程管理界面"的生态位【推断】

2.8 多端交互差异

2.9 反馈与"陪伴感":克制的人格化

2.10 Onboarding 与学习曲线

本章小结

① 透明是信任的货币(todo/diff/thinking 全部外显);② 打断与撤销是自主性的前提;③ 每次打扰都要为减少下次打扰做投资;④ 强约束用机制实现(收走工具),弱约束才用提示词;⑤ 键盘优先、可组合性即 API;⑥ 人格化只出现在等待间隙,不污染工作内容。

03 / Agent 系统设计 ★ 本报告重心

Agent 系统设计 ★ 本报告重心

这是本报告的重心。Claude Code 的 agent 系统可以概括为:一个单循环 + 一套精工工具 + 一整套上下文工程 + 分层的扩展机制(subagent/skill/hook/MCP)+ 机制化的安全边界。以下逐层拆解。

3.1 主循环:简单到令人意外的单循环

社区逆向(MinusX 的著名长文、多份反编译分析)与官方 SDK 结构互相印证【逆向/官方】:Claude Code 的核心是一个扁平的单线程 agentic loop——

flowchart TD U["用户输入"] --> CTX["组装上下文
系统提示 + append-only 历史 + 注入"] CTX --> M["调用模型(SSE 流式)"] M --> Q{"输出含 tool_use?"} Q -->|"否:end_turn"| DONE["turn 结束,等待用户"] Q -->|"是:可含 N 个并行调用"| PERM["权限判定管线(见 4.4 图)"] PERM --> EXEC["执行工具
只读并发 / 写与 Bash 串行"] EXEC --> APP["结果(含错误)作为 tool_result
追加进消息历史"] APP --> M
图 4 主循环 · 扁平单线程 agentic loop

没有状态机、没有 DAG 编排引擎、没有多 agent 路由器。消息历史是一条 append-only 的扁平列表。工程实现上是一个异步生成器(Agent SDK 的 query() 直接暴露了这个形态:async generator 逐条 yield 消息)【官方】

几个关键设计判断:

3.2 System Prompt 工程:一份持续运行的"员工手册"

完整系统提示(含工具描述)合计约 1.5 万 token 量级【逆向,多个独立 dump 相互印证】。结构上分为:

  1. 身份与安全边界:产品身份、防注入的"指令来源边界"(详见 3.11)、禁止事项(恶意代码等)。
  2. 语气与格式:为 CLI 场景定制——简洁、直接、可用 GitHub markdown;明确抑制冗余(曾有著名的 "answer with fewer than 4 lines unless asked" 类指令)、抑制奉承、抑制不必要的道歉与前后缀套话。
  3. 主动性校准:"做被要求的事,不多不少"——例如修完 bug 不要顺手 commit(除非被要求)、不要创建没被要求的文档文件。这一段直接决定产品"手感":既不畏手畏脚,也不自作主张。
  4. 代码规范:模仿现有代码风格、先确认库存在再引用(打开 package.json 看,而不是假设)、不留"给审阅者看的注释"、安全红线(不提交密钥)。
  5. 任务管理策略:何时必须用 TodoWrite、完成即勾选不要攒批、不确定完成就不许标完成。
  6. 工具使用策略:什么时候用 subagent 而非直接搜索、独立工具调用必须并行发出、引用代码用 file:line 格式等。
  7. 环境信息块:cwd、git 状态、平台、日期、模型名——一次性注入静态事实,避免模型浪费轮次探测环境。

两个值得单独强调的机制:

3.3 工具体系:约 15 个工具,每个都是一篇设计文档

工具层是 Claude Code 工程投入密度最高的地方。总原则(与官方《Writing effective tools for agents》一文互证):低层、通用、少量、正交;描述写成说明书;错误信息写给模型看;一切输出预算化【官方】

mindmap root((内置工具 ~15 个)) 文件读写 Read(行号 / 分页 / 多模态) Edit(精确匹配) Write NotebookEdit 代码检索 Glob Grep(内置 ripgrep) 系统执行 Bash(持久 shell · 后台 · 沙箱) 网络 WebSearch WebFetch(小模型摘要) 流程与元认知 TodoWrite Task(派生 subagent) AskUserQuestion Plan 模式切换 动态扩展 MCP 工具 ToolSearch(延迟加载) Skill 调用
图 5 内置工具分类 · 约 15 个

3.3.1 文件读写三件套

为什么不用行号定位或 unified diff?因为:① 行号在多次编辑间漂移,模型极易错位;② diff 格式对模型是"要生成的语法",会出错;而 exact-match 是自校验的——模型若幻觉了不存在的代码,编辑直接失败并报错,幻觉被当场拦截而不是写进文件。唯一性要求则强迫模型提供足够上下文消歧。这是"把正确性约束下沉到工具层"的典范设计。

3.3.2 检索双件套与"反 RAG"路线

这个决策是"信模型"哲学最锋利的体现,也是与 Cursor(语义索引路线)最本质的技术分歧点。

3.3.3 执行类:Bash 及其工程配套

3.3.4 流程与元认知类工具

3.3.5 工具描述工程与数量哲学

3.4 上下文工程:把注意力当预算管理

Anthropic 官方工程博客《Effective context engineering for AI agents》几乎可以视为 Claude Code 的设计说明书:上下文是有限且边际收益递减的资源(context rot),工程目标是"最小的高信号 token 集"【官方】。Claude Code 的落地手段:

3.4.1 分层记忆:CLAUDE.md 体系

四层叠加、逐层覆盖【官方】

企业管控层(IT 下发,不可覆盖)
→ 用户层 ~/.claude/CLAUDE.md(个人偏好,跨项目)
→ 项目层 <repo>/CLAUDE.md(入库共享,团队合意)
→ 子目录层 <repo>/sub/CLAUDE.md(进入该目录时按需加载)

支持 @path import 语法组合文件。内容随会话首条消息注入。关键实践共识:CLAUDE.md 是每一轮都在场的常驻 prompt,必须极度精炼(团队建议当作"新同事的一页纸须知"来写,而非文档堆场)。/init 让模型自己生成初稿、# 快捷追加,维护成本被压到顺手级别。

3.4.2 Compaction:三段式压缩

flowchart LR T["每轮统计 token 占用
UI 显示余量"] --> W{"逼近阈值?"} W -->|"否"| GO["正常继续"] W -->|"是"| MC["micro-compact
旧 tool_result 换占位符"] MC --> W2{"压力仍在?"} W2 -->|"否"| GO W2 -->|"是"| FC["全量 compaction
结构化摘要 + 保留近期原文"] FC --> RE["重建消息数组
接受一次性缓存失效"] RE --> GO
图 6 三段式 Compaction 触发链

3.4.3 缓存感知的对话架构

这是最少被讨论、但对成本与延迟影响最大的一层【官方/逆向】

3.4.4 Just-in-time 检索哲学

不预载代码库,维持"轻指针、重按需":CLAUDE.md 是地图,文件路径是指针,内容 Read 时才进上下文;subagent 进一步把"翻箱倒柜"外包到一次性上下文里,只回传结论(见 3.5)。1M 上下文(Sonnet 5 已原生默认【官方】)并没有改变这个哲学——窗口变大降低的是压缩频率,而不是"高信号密度"这个目标本身。

3.5 Subagents 与多 Agent:从工具到组织

3.5.1 Subagent(Task 工具)机制

3.5.2 Agent Teams(2026):结构性升级

2026.2.6 随 Opus 4.6 正式发布(此前以 feature flag 藏在二进制里被社区先行发现)【官方/社区】。与 subagent 的本质区别:

Subagent(2025) Agent Teams(2026)
拓扑 星型:只能向主 agent 汇报 网状:teammates 可互发消息(SendMessage)
生命周期 一次性,报告即销毁 常驻,可持续接活
状态共享 共享任务清单(TaskCreate/TaskList)
隔离 上下文隔离 上下文 + git worktree 隔离(可选)
交互范式 函数调用 组织协作(站会/认领/互审)
graph TB subgraph SG1["Subagent 模式(2025):星型窄腰"] M1["主 Agent"] -->|"下行:prompt"| A1["Sub A"] M1 -->|"下行:prompt"| B1["Sub B"] A1 -->|"上行:最终报告"| M1 B1 -->|"上行:最终报告"| M1 end subgraph SG2["Agent Teams(2026):网状 + 共享任务板"] L["Lead"] <--> |"SendMessage"| TA["Teammate A"] L <--> |"SendMessage"| TB["Teammate B"] TA <--> |"SendMessage"| TB L --- BOARD[("共享任务板
认领 / 依赖 / 状态")] TA --- BOARD TB --- BOARD end
图 7 Subagent 星型 vs Agent Teams 网状

设计上仍然克制:每会话一个隐式 team(v2.1.178 甚至删掉了 TeamCreate/TeamDelete 工具做简化)、会话级派生数量限额、实验性开关起步【官方/实测:本机 Agent 工具的 team_name 参数已标注 deprecated,与该演进吻合】。适用场景官方划得很清楚:竞争性假设排查、跨层特性分工、多视角评审——通信成本决定了它只适合"低耦合高并行"的任务形状

配套的还有 Workflow(脚本化确定性编排 fan-out/pipeline)、后台任务系统、定时任务(cron)——2026 年的 Claude Code 在单循环之上,长出了一个"编排层",但注意:编排层是可选外挂,单循环内核未变【实测/官方】

3.6 Skills:渐进式披露的能力包

2025.10 发布的 Agent Skills 是对"如何给 agent 添加领域能力"的重新回答【官方】

  1. 启动时只有全部技能的 name + description 进入上下文(每个几十 token);
  2. 任务命中时,模型才加载 SKILL.md 正文(几百到几千 token);
  3. 正文引用的深层文件/脚本,用到时才 Read/执行。

上下文占用与任务相关性严格成正比——对比 MCP 工具"全量 schema 常驻"的旧模式,这是数量级的预算改善。

graph TB U["用户 / 任务"] --> E["入口层:Slash Commands
用户显式触发"] E --> L["主循环(模型决策)"] L --> K["知识层:Skills
怎么做 · 按需加载"] L --> P["进程层:Subagents / Teams
隔离执行"] L --> C["连接层:MCP
外部系统"] H["控制层:Hooks
确定性拦截各生命周期节点"] -.-> L PL["Plugin:五种机制的
打包分发单元"] -.-> E PL -.-> K PL -.-> P PL -.-> C PL -.-> H
图 8 五种扩展机制的分工

3.7 Hooks:把"必须发生"从概率变成确定

3.8 MCP 集成:连接层的标准与治理

3.9 记忆与状态:全部落在文件系统

Claude Code 的一切状态都是本地文件,无云端黑盒【实测:~/.claude 目录结构】

3.10 推理与模型调度

3.11 自主性 x 安全:机制化的信任边界

Claude Code 对"agent 安全"的回答是把边界做进机制而不是仅靠模型自觉:

本章小结

Claude Code 的 agent 系统 = 单循环(简单可靠)× 工具约束(正确性下沉)× 上下文预算(注意力工程)× 渐进披露(skills/memory/tool-search 同一语言)× 机制化边界(权限/沙箱/hook)。所有扩展机制(subagent→teams、skills、workflow)都遵守同一条元原则:复杂性必须是可选的外挂,内核永远保持单循环的简单。(本章讲清了"有什么、为什么";单条用户输入在运行时的逐帧执行过程,见第九章深潜篇。)

04 / 底层架构与工程实现

底层架构与工程实现

4.1 技术栈:React 渲染终端

4.2 本地优先的瘦客户端架构

Claude Code 的部署架构简单得反直觉:没有自己的服务端

终端/IDE/桌面壳
   └─ Claude Code 进程(单二进制,本地)
        ├─ 全部编排逻辑:主循环、工具执行、权限、压缩、渲染
        ├─ 全部状态:~/.claude/(转录、设置、快照、检查点、记忆)
        └─ 唯一外部依赖:HTTPS → LLM API
             (api.anthropic.com / Bedrock / Vertex / Foundry,环境变量即可切换)

4.3 API 交互层

4.4 权限引擎与设置系统

flowchart TD TU["tool_use 到达"] --> HV["工具层硬校验
read-before-edit · 参数合法性"] HV --> DR{"deny 规则命中?"} DR -->|"是"| REJ["拒绝:错误信息引导模型改道"] DR -->|"否"| HK["PreToolUse Hook
可放行 / 否决 / 交还决策"] HK --> SB{"沙箱内的安全操作?"} SB -->|"是"| RUN["执行"] SB -->|"否"| AR{"allow 规则或当前模式放行?"} AR -->|"是"| RUN AR -->|"否"| ASK["弹窗询问用户
附泛化规则建议"] ASK -->|"批准"| RUN ASK -->|"拒绝"| REJ RUN --> CP["写类操作先落 checkpoint"] CP --> RES["结果预算化回填上下文"]
图 9 一次工具调用的授权决策(示意;实际优先级含 ask 规则与多层设置叠加的更细语义)。

4.5 沙箱:把安全从"审批"变成"构造"

2025.10 官方博文《Enabling Claude Code to work more autonomously》与开源的 sandbox runtime 给出完整方案【官方】

graph TB subgraph SBX["OS 级沙箱(macOS Seatbelt / Linux bubblewrap)"] P1["Bash / 命令进程"] FS["文件系统视图
工作区 + 临时区可写,越界只读或不可见"] P1 --- FS end P1 -->|"一切出网流量"| PX["沙箱外代理进程"] PX -->|"白名单域名"| OK["放行"] PX -.->|"其余"| NO["默认拒绝"]
图 10 OS 级沙箱与网络代理

4.6 多端架构:一核多壳的实现

4.7 CI 与自动化:CLI 即 API

4.8 Claude Agent SDK:产品内核的平台化

2025.9 从 "Claude Code SDK" 更名 "Claude Agent SDK",是战略层面最重要的动作之一【官方】

4.9 发布与质量工程

4.10 性能工程

05 / 细节优化亮点

细节优化亮点

本章收录 16 个"单看很小、合起来构成体验差距"的工程细节。每条给出机制、动机与可迁移结论。前四章已展开的仅作索引,避免重复。

01
Read-before-Edit 状态机 【实测】

编辑工具在工具层校验"本会话读过此文件",未读直接报错。它不是提示词请求,是硬不变量。

→ 迁移结论:凡是"必须成立"的正确性约束,编码进工具签名与状态机;提示词只承载"最好如此"的偏好。

02
行号读 / 字符串写的不对称设计 【实测】

Read 用 cat -n 行号帮模型建立空间坐标,Edit 却完全不用行号(exact-match)。承认模型"读位置强、写位置弱"的真实能力边界,各用所长。幻觉的编辑必然匹配失败——错误暴露在写入前而非写入后。

→ 工具接口应该围绕模型的真实强弱项设计,而不是照搬人类 API 的惯例(diff/patch 是给人的格式)。

03
错误信息是提示词 【实测】

每条工具错误都内嵌下一步指引:"not unique,请扩大上下文";权限被拒时告知"用户拒绝了,请调整方案而非原样重试"。错误文案被当作 prompt 资产来版本化打磨。

→ agent 产品里,报错文案对成功率的影响不亚于系统提示;把它纳入 prompt 工程的评审范围。

04
system-reminder 边带通道(详见 3.2)【实测】

动态转向信息以追加式提醒注入,不改历史消息(保缓存)、不进用户视野(保界面干净)。一个通道同时解决转向、缓存、UX 三个约束。

05
小模型微服务化 【逆向/官方】

标题生成、bash 命令描述与危险预判、网页摘要等十余处杂务全部路由到 Haiku。用户感知"处处有智能",而边际成本近乎为零。

→ 一个 agent 产品内部应当有模型分层调度表:把每一处 LLM 调用按"需要多少智力"重新定价。

06
Append-only 的缓存经济学(详见 3.4.3)【官方/实测】

消息布局围绕 KV cache 设计:稳定前缀、只追加不修改、动态信息走 reminder。长会话成本因此下降一个量级。

→ 对话式 agent 的消息架构要在第一天就按缓存友好设计,事后改造极其痛苦。

07
截断的一致性语言 【实测】

所有上限(2000 行、30K 字符、子进程输出)都显式告知模型"截断了、截了多少、如何取剩余"。模型于是会翻页,而不是把没看到的部分脑补出来。

→ 任何对模型隐瞒信息不完整性的设计,都会转化为幻觉。

08
Shell snapshot 环境确定性(详见 3.3.3)【逆向/实测】

一次快照用户真实 shell 环境,之后每条命令在干净 shell 中 source 快照执行。同时解决"继承用户环境"与"避免 rc 副作用"这对矛盾。

→ agent 执行环境的可复现性值得专门设计,"直接开用户的 shell"是隐性故障源。

09
Bash 权限的"解析器+规则+模型"三层混合(详见 4.4)【逆向】

前缀匹配处理常规、注入模式强制升级、小模型兜底语义混淆。单靠任何一层都不可靠,三层叠加后误放行率被压到可接受。

→ 安全判定不要在"规则 vs 模型"里二选一,混合并分层。

10
Checkpoint 走影子历史而非 git 【官方/实测】

快照存 ~/.claude/file-history/:不污染用户 git 历史、不产生 WIP commit、非 git 目录也能用、恢复瞬时。对话与代码可分别回滚的解耦设计尤其考究。

→ "撤销"是自主 agent 的采用解锁器,且必须独立于用户自己的版本管理。

11
权限弹窗附带泛化建议(详见 2.2)【实测】

每次询问都提供"以后不再问这类"的规则化选项,打扰次数随使用时长收敛。权限系统有了学习曲线。

12
并行调用的提示词纪律 【实测】

系统提示强制"无依赖的工具调用必须在同一消息内并行发出",harness 侧对读类并发、写类串行。速度来自并发,安全来自序列化,两者由不同层各自保证。

13
Compaction 摘要的结构化模板(详见 3.4.2)【逆向】

压缩不是"总结一下",而是定向抽取:目标、决策、涉及文件、未决项、下一步。被优先牺牲的是旧工具输出(体积最大价值最低)。

→ 上下文压缩的正确单位是"恢复工作所需的最小状态包",模板值得反复调优。

14
Git 礼仪内建(详见 3.3.3)【实测】

co-author 署名、HEREDOC 提交、禁 force push、"不叫提交就不提交"。高级工程师的协作规范成为出厂默认。

→ 领域最佳实践应内建为 agent 的默认行为,这是产品"手感专业"的直接来源。

15
反奉承的语气工程 【实测/逆向】

明文抑制 "You're absolutely right"、道歉循环、每次回答的套话前后缀。除了体验,还有实际功能收益:噪声 token 更少、缓存前缀更稳、用户对内容的信任校准更准。

→ agent 的"人格"是系统提示里的工程参数,需要像 UI 一样被设计与回归测试。

16
ToolSearch / 渐进披露作为统一设计语言 【实测】

工具(deferred loading)、技能(三级加载)、记忆(索引常驻+正文按需)、CLAUDE.md(分层注入)——四套系统用的是同一个模式:目录常驻、内容按需。学一次,处处适用;上下文预算处处受益。

→ 好的系统有统一的设计语言;"渐进披露"可能是 agent 时代最重要的一条。

06 / 生态与平台化

生态与平台化

6.1 Plugins:扩展机制的统一分发层

2025.10 上线【官方】。一个 plugin 可打包 slash commands + subagents + skills + hooks + MCP 配置,一条 /plugin 命令安装;marketplace 就是一个 git 仓库(组织可自建私有市场,企业可经 managed settings 统一下发/限制)。设计上的聪明之处:没有发明新的包管理基础设施,git 仓库 + markdown 文件就是全部——延续"文件系统即数据库"的语言,把分发门槛压到会用 git 即可。

6.2 社区生态:被逆向也是一种护城河

6.3 企业化

managed settings(权限策略、模型、marketplace 白名单集中下发且不可覆盖)、SSO/SCIM、席位 + 用量池 + per-user 支出上限、OTel 用量/成本导出、Bedrock/Vertex/Foundry 端点做数据驻留【官方】。企业收入占比过半(1.4 节)说明这套治理栈已被验证。值得注意的模式:先赢开发者个体(自下而上渗透),再补齐治理卖给 CIO——与当年 Slack/GitHub 的路径同构。

6.4 模型-产品协同飞轮(最深的护城河)

  1. Anthropic 的模型在与 Claude Code 高度同构的工具环境中做 RL 训练(官方对 Sonnet 4.5/Opus 4.5 的描述均强调面向真实 agentic coding 环境训练),模型"天生熟悉"这套工具的语义与约束【官方/推断】
  2. 产品是模型的第一评测场:新模型先在内部 Claude Code 全员环境跑,行为回归以小时计。
  3. 用户的真实使用暴露模型短板 → 定义下一代训练重点 → 新模型上线后产品删掉对应的补丁代码(提示词、护栏)→ 产品更薄、体验更强。
  4. SDK/Cowork/Excel 把同一 harness 铺到更多领域,飞轮的数据面从 coding 扩展到通用知识工作。
graph LR A["模型在同构工具环境中
做 RL 训练"] --> B["新模型'天生会用'
这套 harness"] B --> C["产品体验领先
用量与口碑增长"] C --> D["dogfooding + 真实用量
暴露模型短板"] D --> E["定义下一代模型
训练重点"] E --> A C --> F["SDK / Cowork / Excel
复用内核扩场景"] F --> D
图 11 模型 - 产品协同飞轮

竞品可以复刻第 1 层的工具协议(已有多个开源克隆),但复刻不了 2–4 层的组织闭环——模型公司做应用的真正复利在这里,而不在"有自己的入口"。

07 / 竞品横评与定位

竞品横评与定位

7.1 格局速览(截至 2026-07)

产品 形态重心 模型 开源 关键差异
Claude Code 终端为核,全形态覆盖 Claude(自家) 闭源(SDK 开放) 模型-harness 协同、生态最厚
OpenAI Codex CLI(开源)+ 云端并行 + IDE GPT-5.x-codex CLI 开源(Rust) 云端多任务编排激进、随 ChatGPT 订阅分发;周活 500 万+(2026.6),增长极快
Gemini CLI → Antigravity CLI/IDE Gemini 3 原开源,2026.6 转闭源二进制并大幅缩水免费额度 曾以免费额度换渗透,现战略收缩重组【公开报道】
Cursor IDE 整机 多模型 + 自研 Composer 闭源 编辑器内体验(tab 补全/语义索引)最强,自研模型走"快"路线
GitHub Copilot IDE 插件 + 平台 agent 多模型(含 Claude) 闭源 分发为王(VS Code/GitHub 原生位)、企业治理成熟
Aider / Cline / OpenHands / opencode 等 终端/IDE 开源阵营 BYOK 多模型 开源 可自托管、可换模型,是"harness 可复制"论的活证据
Devin / Factory 等 全自主云 agent 多模型 闭源 端到端外包式定位,与 CC 的"结对→委托"渐进路线相反

市场数据锚点【公开报道,2026 上半年口径】:Claude Code 在"复杂任务首选"开发者调研中约 44%(第二名 19%);VS Code 扩展装机 2020 万 vs Codex 1150 万;Codex 周活用户半年从 60 万涨到 500 万+——规模上 Codex 追得很快,心智上 CC 仍握着"最强"标签

7.2 形态之争的复盘与终局

终端形态为何先跑出来:agent 时代的交互单位从"补全一行"变成"委托一件事",IDE 的"光标旁辅助"范式反而不契合;终端是唯一同时覆盖本地/SSH/CI/容器的环境;且 CLI 的可组合性让它天然成为一切自动化的原语。

但到 2026 年,形态本身已经商品化:所有头部玩家都同时提供 CLI + IDE + 云 + 移动。真正的分层变成——上层是"会话/任务管理界面"(谁能成为工程师的 agent 调度台),下层是"循环质量"(模型 × 工具 × 上下文工程)。Claude Code 对这两层的回答分别是桌面多会话/Teams 与模型协同飞轮。

7.3 技术路线的三个根本分歧

  1. 检索:agentic search(CC、Codex)vs 语义索引(Cursor、Copilot)。前者赌模型能力与透明性,后者赌延迟与大仓库规模化。目前前者是趋势方向(模型越强,中间层越亏),但超大 monorepo 上索引派仍有实用优势。
  2. Harness 厚薄:CC 极薄(信模型)vs 部分竞品厚编排(多阶段流水线、专用规划器)。18 个月来的经验站在薄的一边:厚编排在每次模型升级时都成为负资产。
  3. 开放策略:Codex/开源阵营用开源 CLI 换信任与贡献;CC 闭源产品 + 开放 SDK/协议(MCP)/沙箱运行时——开放"接口与地基",闭合"体验与循环"。
quadrantChart title 路线定位示意(2026-07):harness 厚薄 × 开放程度 x-axis 薄 harness 信模型 --> 厚 harness 重编排 y-axis 闭源 --> 开源 quadrant-1 开源重编排 quadrant-2 开源薄壳 quadrant-3 闭源薄壳 quadrant-4 闭源重编排 Claude Code: [0.15, 0.28] Codex CLI: [0.3, 0.8] Aider 与开源克隆阵营: [0.32, 0.92] OpenHands: [0.7, 0.85] Antigravity: [0.5, 0.3] Cursor: [0.72, 0.22] GitHub Copilot: [0.68, 0.12] Devin 类全自主: [0.85, 0.12]
图 12 路线定位象限图(2026-07)。位置为定性示意(Claude Code 的 y 轴位置计入了 SDK/沙箱/协议层的开放)。

7.4 护城河与脆弱点(对 CC 的冷静评估)

真护城河:模型-harness 协同训练闭环(6.4);开发者心智与品牌("最强"标签);生态资产(skills/plugins/MCP 事实标准);多形态一致性带来的切换成本;以及组织层面的迭代速度本身。

脆弱点:① 价格与用量焦虑——重度用户成本显著高于竞品补贴价,限额政策每次收紧都引发迁移讨论;② 模型平权风险——若对手模型在 agentic coding 上真正拉平(SWE-bench 已同区间),薄 harness 反而意味着可替代性高(harness 早被克隆干净了);③ 平台依赖——VS Code 与 GitHub 都在微软手里,入口层随时可能被"原生位"挤压;④ 封闭源码在安全敏感型企业与主权云场景的先天劣势;⑤ 长期看,模型若把 compaction/todo/检索策略内化为原生能力,harness 层的差异化会进一步变薄——这对 CC 是"自我革命可控",对纯 harness 创业公司则是生存问题【推断】

08 / 对我们的启示

对我们的启示

8.1 可迁移的设计原则清单

  1. 信模型,做薄 harness——每个"帮模型"的中间层都要回答:模型下一代变强后,这层是资产还是负债?
  2. 工具是产品的真接口——工程投入优先级:工具约束 > 工具描述 > 错误文案 > 系统提示 > UI。
  3. 正确性下沉到机制——必须成立的用状态机/权限/hook 保证,最好如此的才写进提示词。
  4. 上下文是预算——为每类信息定价(常驻/按需/一次性),渐进披露作为统一设计语言。
  5. 缓存感知的消息架构——append-only、稳定前缀、边带注入,第一天就设计好。
  6. 一切可回滚,才敢自主——撤销/打断/快照是自主性的前提设施,不是锦上添花。
  7. 透明是信任的货币——计划、进度、diff、思考过程全部外显。
  8. 每次打扰都为减少下次打扰投资——权限、澄清、确认都要有学习曲线。
  9. 模型分层调度——每处 LLM 调用按所需智力重新定价,杂务给小模型。
  10. 错误信息面向模型写——agent 的自愈能力是文案工程出来的。
  11. 文本文件即系统——配置、记忆、技能、命令都是 markdown/JSON 文件:可 git、可 grep、可众包。
  12. dogfooding 即评测——团队必须是自己 agent 的重度用户,反馈回路以小时计。
  13. 先做最简单的事,把简单打磨到极致——复杂性必须是可选外挂,内核保持单循环。
  14. 产品即平台——内核值钱就抽 SDK,让别人替你验证通用性。

8.2 值得直接借鉴的机制 Top 8(按投入产出比排序)

# 机制 投入 回报
1 工具描述说明书化 + 错误文案工程(3.3.5) 纯文案工作 成功率/自愈率立竿见影
2 Read-before-Edit 类硬不变量(5.①) 少量工具层代码 消灭一整类幻觉事故
3 todo 外显 + 进度可视化(3.3.4) 一个结构化工具 + 渲染 长任务防跑偏 + 用户信任感
4 system-reminder 边带通道(3.2) 消息管线改造 运行时转向能力,不伤缓存
5 结构化 compaction 模板(3.4.2) 一段摘要 prompt 长会话质量的生死线
6 权限规则 + 泛化建议(2.2) 规则引擎 + 弹窗设计 安全与打扰的帕累托改善
7 渐进披露的能力加载(skills/tool-search)(3.6) 加载器架构 上下文成本数量级下降
8 小模型杂务分流(3.10) 路由表 成本直降,体验不降

8.3 应避免的坑(含 CC 自身的短板)

8.4 开放问题与跟踪清单

09 / 深潜:一次用户输入在 Claude Code 内部的完整生命周期

深潜:一次用户输入在 Claude Code 内部的完整生命周期

本章面向 agentic system 工程师,以"单个 session 内、一条用户输入从按下回车到 turn 结束"为主线做逐帧解剖。证据以【实测】为主(撰写者本身运行于该 harness 内),辅以官方 SDK/文档与社区逆向的交叉验证。

9.0 全景时序图

用户按下回车
│
├─[A] 输入分派(本地,不一定经过模型)
│      /命令 → 本地执行或展开为 prompt
│      !命令 → 直通 bash,结果入上下文
│      #文本 → 写入 CLAUDE.md,结束
│      普通输入 → 继续
│
├─[B] 消息构造
│      @引用解析、图片编码、UserPromptSubmit hook(可拦截/可注入)
│      附着 system-reminder(CLAUDE.md、记忆索引、外部文件变更…)
│
├─[C] 请求组装(append-only 布局 + 缓存断点)→ Messages API(SSE 流式)
│
├─[D] Agent 主循环(重复直到 stop_reason = end_turn)
│      流式事件 → thinking 渲染 / 文本渲染 / tool_use 参数累积
│      模型停止(stop_reason = tool_use,可含 N 个并行调用)
│      ┌─ 对每个 tool_use:
│      │    权限管线:硬不变量 → 规则(allow/ask/deny) → PreToolUse hook
│      │              → 沙箱判定 → (必要时)弹窗问人
│      │    执行调度:只读并发 / 写与 Bash 串行 / 长任务转后台
│      │    结果封装:tool_result(tool_use_id) + 截断标注 + 附加 reminder
│      └─ 全部结果追加进历史 → 回到 [C] 再次调用模型
│
└─[E] Turn 收尾
       转录 JSONL 落盘(其实每个事件都在实时追加)
       todo/计划/检查点状态持久化
       旁路小模型任务(会话标题等)异步完成
       通知(若用户已切走)→ 等待下一条输入

9.1 输入到来之前:会话启动时已就绪的状态

一条输入的处理成本低,是因为大量工作在 session 启动时已完成【实测/官方】

9.2 输入分派:五条路径

用户输入首先经过本地路由,并非一切都发给模型【实测/官方】

输入形态 处理方 说明
/clear/model/config 等纯管理命令 本地直接执行 零 token 成本
/compact 本地发起一次专用模型调用 摘要请求,不入正常对话流
自定义命令 /deploy-check 本地展开 markdown 模板 + $ARGUMENTS + !预执行结果 → 拼成 prompt 走正常流程
!npm test 本地 bash 直通 输出作为上下文追加,不消耗模型轮次
#这个项目用 pnpm 本地写 CLAUDE.md 记忆速记,即时生效于下轮
普通自然语言 进入 [B] 主流程

普通输入的构造阶段:@file 模糊引用解析为路径/内容注入;粘贴图片编码为 content block;UserPromptSubmit hook 获得一次拦截或注入上下文的机会(企业可在此做敏感词/合规过滤);最后,harness 把当轮应让模型知道的旁路信息(首条消息附 CLAUDE.md 与记忆索引、外部文件变更通知、上次 turn 的遗留提醒)以 <system-reminder> 块附着在用户消息前后——用户看到的自己的消息,和模型收到的"这条消息",不是同一个东西【实测】

9.3 请求组装:消息布局与预算管理

每一轮发给 API 的请求体,从上到下【官方/逆向/实测】

[system]   系统提示(稳定) ──────────────┐
[tools]    工具 schema 数组(稳定) ───────┤ 缓存断点区:整个 session 逐字节不变
[messages] user₁ (+reminders)             │
           assistant₁ (text/thinking/tool_use…)
           tool_result₁ …                 │ append-only:只增不改
           …                              │
           userₙ (+reminders) ←──────────┘ 滚动断点贴近尾部

三条纪律使缓存命中率逼近理论上限:前缀稳定(系统提示与工具定义 session 内不变)、历史不可变(一切动态信息以追加的 reminder 表达,绝不回改旧消息)、断点滚动(Anthropic API 支持多个 cache breakpoint,尾部断点随对话推进滚动,精确放置策略属实现细节【逆向/推断】)。

预算的运行时管理是一条触发链【官方/实测】:每轮统计 token 占用并在 UI 显示余量 → 接近阈值先做 micro-compact(把旧的 tool_result 替换为占位符——体积最大、复用价值最低的部分先牺牲,且不动消息骨架)→ 仍不足则触发全量 compaction(专用摘要调用产出"目标/决策/文件/未决项/下一步"结构化状态包 + 保留最近消息原文,重建消息数组,接受一次性缓存失效)→ Sonnet 5 原生 1M 后阈值大幅放宽,但这条链和布局纪律原样保留。

9.4 主循环逐帧:流式事件与执行调度

模型输出侧:SSE 事件流被增量消费——thinking delta 渲染为可折叠灰色斜体;文本 delta 实时走 markdown 渲染;tool_use 的 JSON 参数逐段累积(fine-grained tool streaming 使超长 Write 的参数也流式可见)。一次 assistant 消息可以携带多个 tool_use 块(系统提示强制模型对无依赖操作并行发出),harness 收齐当轮全部调用后进入执行段【实测/官方】

执行调度侧【逆向/实测】

循环控制:全部结果追加后立即再次调用模型(缓存使这次重复计费接近于零);直到模型以纯文本收束(stop_reason = end_turn)→ turn 结束。用户 Esc 打断是第一等公民路径:取消在途请求与执行中工具、已完成部分照常落历史、注入打断标记——上下文不损毁,用户追加一句纠偏即可继续【实测】

旁路异步任务与主循环并行不阻塞:小模型生成会话标题、bash 命令的一句话描述与危险性预判等(3.10)【逆向】

9.5 工具调用全链路:三个代表性剖面

一次 Edit【实测】

tool_use{file_path, old_string, new_string}
→ 硬不变量校验:本会话 Read 过该文件?old_string 精确且唯一命中?(任一失败 → 带指引的错误 tool_result)
→ 权限:acceptEdits 模式?allowlist 命中?→ PreToolUse hook(可否决)
→ (需要时)diff 卡片问人,附"以后不再问"泛化选项
→ 执行前先写 checkpoint 快照(file-history/,/rewind 的物质基础)
→ 原子替换写盘 → PostToolUse hook(典型:自动 format)
→ tool_result:成功摘要(而非全文回显——省 token)

一次 Bash【逆向/实测】

tool_use{command, timeout?, run_in_background?}
→ 命令结构解析:拆分复合命令、提取前缀
→ 注入检测:命令替换/管道下载执行等模式 → 强制升级为询问
→ 小模型旁路预判(描述 + 危险性)
→ 规则匹配(Bash(npm run test:*) 前缀语义)→ 沙箱判定(沙箱内 → 免审直行)
→ 持久 shell 执行(source 环境快照;默认 2min 超时)
→ stdout/stderr 合并、约 30K 截断(显式标注)→ tool_result

一次 MCP 调用【实测】

mcp__server__tool → schema 已加载?(deferred 工具需先经 ToolSearch 取回 schema)
→ 权限(MCP 默认 ask,可规则化放行)
→ JSON-RPC 至 server(stdio 子进程 / HTTP 远端)
→ 结果限长回填;超时/长任务自动转后台

三个剖面的共性即 harness 工具层的完整职责清单:校验 → 授权 → 隔离 → 执行 → 预算化回填,五段对模型完全透明——模型只看见"调用、结果"两个端点。

9.6 主从 Agent 的运行时关系

Subagent(Task 工具)的执行语义【实测/官方】

  1. 主 agent 发出 Task{description, prompt, subagent_type}——这只是一次普通工具调用;
  2. harness 据此新建一个完整会话:独立的空白消息数组、按 agent 定义裁剪过的工具集/模型/权限(只能收窄不能放宽)、自己的转录文件。子 agent 对主对话历史零可见——它知道的一切都必须显式写进 prompt;
  3. 子循环独立运行(与 9.4 完全同构,递归结构);多个子 agent 并发时共享会话级并发上限(约 10 量级,随版本调整【逆向/实测】),超额排队;
  4. 子 agent 的最终文本报告作为 tool_result 回填主上下文,子上下文随即整体废弃(转录留档可查);
  5. 主 agent 可阻塞等待(前台)或继续干活(后台派生,完成时以事件通知)。

工程上最重要的一句话:主从之间只有两个窄接口——下行的 prompt 和上行的 report。没有共享内存、没有流式管道、没有中途对话。这个"极窄腰"设计牺牲了交互丰富性,换来:上下文严格隔离(子 agent 的翻箱倒柜不污染主上下文)、并行无竞态(各自独立世界)、故障隔离(子挂了只是一条错误 tool_result)。

sequenceDiagram participant U as 用户 participant M as 主 Agent participant H as Harness participant SA as Subagent A participant SB as Subagent B U->>M: 复杂任务 M->>H: Task(A) + Task(B) 同轮并行派生 H->>SA: 新建隔离会话(空白上下文 · 裁剪工具与权限) H->>SB: 新建隔离会话 par 子循环 A SA->>SA: 独立完整 agent 循环(与 9.4 同构) and 子循环 B SB->>SB: 独立完整 agent 循环 end SA-->>H: 最终报告(纯文本) SB-->>H: 最终报告(纯文本) H-->>M: 报告作为 tool_result 回填主上下文 Note over SA,SB: 子上下文整体废弃(转录留档) M->>U: 综合结论
图 13 主从 Agent 运行时时序

Agent Teams 对窄腰的突破(2026,实验性)【官方/实测】:teammate 是常驻会话 + 一个邮箱。SendMessage 把消息异步注入对方下一轮上下文;共享任务板(tasks/ 目录的文件)提供"认领/依赖/状态"的协作原语;lead 本身也只是普通 agent。拓扑从星型变网状,但通信仍是"上下文注入"这一种机制——harness 影响任何 agent 的方式永远只有一种:往它的上下文里放东西

运行时选型心智(何时用哪层):

形态 上下文 交互 适用
主 agent 直接做 共享(会污染) 全双工 需要完整对话背景的核心工作
Subagent 隔离,窄腰 一问一答 探索/检索/评审等"过程冗长、结论短小"的任务
Teams 隔离 + 邮箱 + 任务板 异步多方 低耦合可并行的大块工作(跨层特性、竞争假设)

9.7 Harness 设计观:职责分界与事件溯源

把 9.1–9.6 收拢成三条系统设计原则,这是 Claude Code harness 最值得抄的底层观念:

  1. 责权分界线清晰且单向。harness 负责:上下文组装与预算、工具执行与安全、状态持久化、渲染与打断。模型负责:全部任务决策。harness 从不替模型决定下一步做什么(没有隐藏的规划器/路由器),模型从不绕过 harness 触碰系统(没有工具之外的副作用通道)。
  2. "一切转向皆上下文"。harness 干预模型行为的手段只有一种:向上下文放入信息(系统提示、reminder、工具结果、错误文案)。没有隐藏控制通道的直接后果是完全的可解释与可重放——JSONL 转录就是完整因果链,resume/fork/审计/调试全部是同一份日志的重放(事件溯源架构)。
  3. 每一层都有失败预案。API 层:重试/退避/回退模型;工具层:错误即信息,模型自愈;上下文层:micro-compact → compaction 逐级降压;进程层:崩溃后 resume 无损恢复;人机层:Esc/rewind 永远可用。自主性不是假设不出错,而是保证出错后系统仍在可恢复状态。

9.8 注释版 trace:以本报告的一次真实 turn 为例

撰写本报告"开始写吧"那一轮的实际执行序列(已简化),可与上文逐节对照【实测】

user: "非常好~开始写吧~最后给我markdown~"
  ↳ 附着 reminders:记忆索引、可用 skills 目录(9.2)
assistant: thinking(规划:先核验信源,再分章写入)
assistant: tool_use ×2 并行 —— ToolSearch(加载 WebSearch/WebFetch schema)
                              + Bash(claude --version; ls ~/.claude)   ← 只读并发(9.4)
tool_result ×2 回填
assistant: tool_use ×4 并行 —— WebFetch(CHANGELOG) + WebSearch(营收/teams/Cowork)
tool_result ×4 回填(WebFetch 结果已经小模型摘要化,9.5)
assistant: tool_use —— Write(报告文件, 第一章)      ← 写类串行开始
assistant: tool_use —— Edit(追加第二章) …… ×7 轮,每轮一次追加
  ↳ 每次 Edit 前:read-before-edit 校验通过(文件是本会话所写)
  ↳ 每次写盘前:checkpoint 快照落 file-history/
assistant: tool_use —— Bash(wc 统计) + Write(记忆文件) 并行
assistant: 纯文本收束(交付说明)→ stop_reason: end_turn,turn 结束(9.4)
  ↳ 全程 十余轮 模型调用,缓存前缀逐轮复用;转录实时追加至 session JSONL

这个 trace 里没有出现任何"编排代码":先调研后写作、先并行后串行、分八次追加——全部是模型在循环中的临场决策。这就是"model-driven, thin harness"在运行时的真实样子。

附录

版本大事记 · 信源 · 方法论

A. 版本大事记(要点)

详表见 1.1。补充近期关键版本号:v2.0.0(2025.09.29,checkpoints/VS Code/SDK 更名)→ v2.1.29(2026.01,TeammateTool 被社区发现)→ 2026.02.06 Agent Teams 随 Opus 4.6 发布 → v2.1.170(Fable 5)→ v2.1.172(subagent 五层嵌套)→ v2.1.178(隐式 team 简化)→ v2.1.196(后台会话默认 + 跨重启存活)→ v2.1.197(Sonnet 5 默认 + 原生 1M 上下文;本机版本)→ v2.1.212+(/fork 后台会话、会话级派生限额)【官方 CHANGELOG】

B. 信源清单

官方一手

  • 文档:code.claude.com/docs(agent-teams、sandboxing、hooks、skills、SDK、企业治理等分册)
  • 工程博客:Effective context engineering for AI agents / Writing effective tools for agents / Building agents with the Claude Agent SDK / Code execution with MCP / Enabling Claude Code to work more autonomously / How we built our multi-agent research system / Claude Code best practices
  • 发布公告:Claude 3.7/4/4.5/Opus 4.5/4.6/Claude 5 家族各版本;Web/iOS、桌面、Plugins、Skills、Cowork(含 2026.07 web/移动扩展)
  • GitHub:anthropics/claude-code(注意:壳仓库,仅 CHANGELOG/issues/示例/插件,不含产品源码——产品为闭源二进制分发,详见 6.2 澄清)、claude-code-action、开源 sandbox runtime、anthropics/skills

团队访谈:Boris Cherny 等在 Latent Space 等播客与公开演讲(起源故事、"90% 自举"、agentic search 取代 RAG 的决策)

社区逆向:MinusX《What makes Claude Code so damn good》;多份系统提示 dump 与二进制分析(Ink/Statsig/tengu、TeammateTool 发现过程等)

市场数据:Anthropic 官方披露(run-rate、企业占比)及 VentureBeat/TechCrunch/Reuters、Sacra 等公开报道;IntuitionLabs 等 2026 对比研究

本机实测:v2.1.197,macOS,2026-07-17(~/.claude 目录结构、工具协议、system-reminder、权限流、deferred tools 等)

C. 调研方法与置信度说明

四种方法交叉验证:官方资料研读(结论的骨架)→ 本机实测探针(harness 行为的直接证据,含撰写者自身运行于该 harness 内的内省观察)→ 社区逆向的交叉比对(内部实现细节,取多个独立来源一致者)→ 竞品公开信息横评。全文以【官方/实测/逆向/推断】四级标注置信度;未标注处为多源一致的共识性描述。内部实现类细节(压缩阈值、模型路由表等)随版本变化快,引用时建议以标注日期(2026-07-17)为准。

Claude Code 深度调研报告。调研对象:Claude Code v2.1.197 及此前公开版本史,截至 2026-07-17。
内部实现类细节(压缩阈值、模型路由表、并发上限等)随版本变化快,引用时建议以标注日期为准;泄漏源码不作为本报告的调研或实现参考。
本文既可从头读到尾,也可按章节随取;全部论断按【官方/实测/逆向/推断】四级标注置信度。

— 报告完 —