序言
为什么还要写一本 Claude Agent SDK 的书
“我已经有 Claude Code 了,为什么还要用 Claude Agent SDK 自己造一个更差的?”
这是决定写这本书之后,我被问得最多的问题。也是我一开始问自己的问题。
我第一次用 SDK 写 Agent,写了一个两百行的循环:读文件、改代码、跑测试。它能把测试改绿,但修不好 bug——因为它把测试改了。同一个模型,放进 Claude Code 里,它能修好;放进我的循环里,它走捷径。
我一开始以为是模型不够聪明,换模型、改提示词、加“绝对不要修改测试”的警告。结果只是从“改测试”变成“说这个测试本身有问题”。
后来我才明白:差别不在模型,在模型外面那套程序。
那套程序叫 Harness。
这本书,就是把这套东西拆开给你看。
1. Claude Code 和 Claude Agent SDK 是什么关系
先把最容易混淆的事说清楚。
Claude Code 是一个产品,Claude Agent SDK 是这套 Harness 的库接口。
它们不是替代关系:一个把同一套 Harness 做成产品,一个把它做成库。
你的代码 / 你的产品
│
▼
Claude Agent SDK(库:配置、消息流、回调)
│
▼
Claude Code CLI(Harness:循环、工具、权限、上下文、压缩、会话)
│
▼
模型 API这张图里最重要的一点是:SDK 不实现 Agent Loop。
循环、工具执行、权限判定、上下文组装、压缩、会话落盘,都在 Claude Code CLI 里。SDK 做两件事:
- 把你的配置翻译成 CLI 的启动参数和控制请求;
- 把 CLI 的消息流和回调翻译回你的 Python 代码。
所以你可以把 SDK 理解成“这台 Harness 的库接口”,而不是“一个从零搭 Agent 的框架”。
所以有个很常见的误解:用了 SDK,不等于自动拥有 Claude Code 的效果。 SDK 让你用上同一套 Harness,但系统提示、工具面、上下文、权限、压缩、评测仍然要你配。配错了,你只是把一台 Nginx 配成了 Hello World。
SDK 不能改循环。 这是它的边界,也是这本书第二部分存在的理由:如果你需要完全控制循环,就得自己造,或者用裸 Messages API。第二部分会带你造一遍;第三部分再回到 SDK,看哪些不用自己写、哪些必须自己配。
| Claude Code | Claude Agent SDK | |
|---|---|---|
| 使用者 | 人 | 程序 |
| 形态 | 终端里的 CLI 产品 | Python / TypeScript 库 |
| 循环 | 内置 | 同一套(在 CLI 里) |
| 工具 | 内置 + MCP | 内置 + MCP + 进程内工具 |
| 权限 | 交互 UI + settings / hooks | can_use_tool + 权限模式 + hooks |
| 输出 | 终端文本 | 消息流、结构化输出 |
| 部署 | 本地 / CI | 嵌入产品、多租户服务 |
| 定制 | 设置、技能、子 Agent | 上述全部 + 程序化控制 |
说白了:Claude Code 是给人用的 Agent,Agent SDK 是给你造 Agent 的库。
2. 这本书讲什么
这不是一本 API 大全,也不是一本 Claude Code 源码解读。
它只做一件事:带你造一个 Agent,造两遍。
- 第一遍,tiny:用 Anthropic Messages API 手写,从一个
while True循环开始,逐步加工具、权限、上下文、压缩、会话、子 Agent,最后组装成一个能修测试、能加功能的 coding agent。 - 第二遍,sdk:用 Claude Agent SDK 把同一个 Agent 重写一遍。你会发现,有些代码不用写了,有些配置反而更重要了。
全书分五部分:
| 部分 | 内容 | 你得到的 |
|---|---|---|
| 一、定位 | Harness 六问;Claude Code / SDK / 裸 API 的关系 | 一张能诊断任何 Agent 的检查表 |
| 二、亲手造 | 循环 → 工具 → 权限 → 上下文 → 压缩 → 会话 / 子 Agent → 组装 | 一个能跑的 tiny coding agent |
| 三、换引擎 | 用 SDK 重写同一个 Agent;工具、权限、上下文、长任务、控制、边界 | 一个能配、能扩、能上线的 SDK Agent |
| 四、工程化 | 评测、成本、时延、可靠性、安全 | 一套证明“它变好了”的方法 |
| 五、实战 | coding / research / support 三个业务 Agent | 一张迁移到你自己的业务的设计清单 |
每一章都围绕同一个问题:Agent 这一章又强在哪?
不是“又一个机制”,是“同一个任务,这次它又做到了什么、又暴露了什么”。
代码都在这个仓库:https://github.com/kevinkelin/claude-agent-sdk-book。正文只贴关键片段;第 1 章会详细到 import,后面的章节会逐步精简,把完整文件交给 GitHub。
3. Harness 到底在做什么
“Harness”这个词,你可以在很多地方看到。这本书里,它只有一个意思:
Harness 是模型外面那套决定“看见什么、能做什么、允许做什么、什么时候算完、失败怎么办、做完留下什么”的程序。
拆成六个问题:
- 模型看见什么? 系统提示、工具定义、历史、文件、记忆、技能。
- 模型能做什么? 工具集合、参数、执行、结果回填。
- 模型允许做什么? 权限、审批、沙箱、路径限制。
- 模型什么时候停? 轮数、预算、完成条件、中断。
- 模型失败了怎么办? 错误分类、重试、回填、恢复。
- 模型做完留下什么? 会话、压缩、笔记、检查点、审计。
同一个模型,这六个问题的答案不同,表现可以差几倍。
Claude Code 的优势,很大程度上不是“它的模型更聪明”,而是它把这六个问题回答得很好:工具打磨过、上下文会挑、权限有闸门、压缩有策略、会话能恢复、子 Agent 能分工、错误能兜底。
你造的 Agent 不如 Claude Code,通常也是因为这六个问题里,有几个你没回答。
这就是 Harness 的作用:它不改变模型有多聪明,它决定模型能不能把事做完。
这本书的每一章,都是在回答其中一问,或者把一问接到 SDK 上。
4. 读完你会得到什么
不是“了解了 SDK”,是四样能拿出来的东西:
- 一个能修测试、能加功能的 coding agent。 不是玩具 demo,是能在一个真实小仓库里跑完“读—改—跑—验证”的 Agent。
- 一张 Harness 控制矩阵。 行为 × 机制 × 你手写的实现 × SDK 旋钮 × 不能控制的部分。拿着它,你能对自己的 Agent 做一次 30 分钟的诊断。
- 一套评测方法。 同一组任务、同一个模型,量成功率、轮数、成本、失败模式;不是凭感觉调提示词。
- 一张业务 Agent 的设计清单。 任务、工具、上下文、权限、状态、评测、上线,一页纸填完,知道第一周该做什么。
如果你只想查 API,官方文档比我写得好。这本书的价值在“为什么”和“怎么选”:为什么这个选项存在,什么时候该用它,不用它会怎样。
5. 有了 Claude Code、Codex、WorkBuddy,为什么还要自己开发 Agent
先说一句可能不讨喜的话:不是所有人都需要自己造 Agent。
Claude Code、Codex、WorkBuddy 本质上都是“模型 + Harness + 产品体验”的打包;差别在 Harness 和场景。
如果你的问题刚好是“在终端里让人和 Agent 一起改代码”,Claude Code 已经很好;如果是“在 IDE 里补全和改代码”,Codex、Cursor 这类产品已经很成熟;如果是“在办公/业务场景里跑固定流程”,WorkBuddy 这类产品可能已经覆盖了你的需求。
工具能解决的问题,不要用造轮子解决。
那什么时候值得自己造?通常是下面五种情况。
第一种:你要把它嵌进自己的产品
Claude Code 是给人用的终端产品;你的产品可能是一个客服后台、一个数据分析平台、一个 IDE 插件、一条 CI 流水线。你需要 Agent 作为服务的一部分,而不是一个人在终端里敲。
SDK 提供的消息流、控制请求、回调,就是为这种“嵌进去”设计的。
第二种:你要用自己的工具和数据
你的 Agent 要查订单、读工单、调内部 API、访问数据库。Claude Code 通过 MCP 能接一部分,但你的工具可能就跑在自己的进程里,需要直接调 Python 函数;你的数据可能有自己的权限模型。
SDK 的进程内工具、MCP、权限回调,能把“你的系统”接进来。
第三种:你要用自己的策略和审批
“退款超过 500 要人工批”“改测试文件直接拒绝”“跨租户读写一律拒绝”——这些不是提示词能保证的,要落到代码里的权限管线。
Claude Code 有 settings 和 hooks;SDK 的 can_use_tool 能把每一次写操作接到你的风控引擎,返回结构化的 allow / deny。
第四种:你要程序化编排和结构化输出
多个 Agent 分工、上游结果进下游系统、运行中中断/切模型/查上下文、最后输出一个 JSON 而不是一段作文——这些需要 typed messages 和控制请求,不是终端文本能稳定支持的。
第五种:Harness 和领域层就是你的产品差异
模型是大家都能买的;Harness 和领域层是你自己能建的。
同样一个模型,工具怎么设计、上下文怎么挑、权限怎么设、失败怎么恢复,决定了它在你的业务里好不好用。你越懂 Harness,越能把“通用模型”变成“你的 Agent”。
而且,懂 Harness 还有一个附带好处:你能诊断。 当 Agent 变差时,你知道该看工具、看上下文、看权限、看终止条件,而不是只会改提示词。
什么时候不该自己造
- 产品已经刚好解决你的问题:用产品。
- 你只需要一次 LLM 调用:用 Messages API,别引入一个进程。
- 你要自定义整个循环/编排:用裸 API 或别的框架,SDK 只会挡路。
- 你只是想“拥有一个自己的 Agent”:先想清楚它要替谁做什么;否则造出来也只是个 demo。
这本书不劝你造,只教你在要造的时候,知道自己在造什么。
6. 这本书不做什么
- 不做 API 大全。 官方文档更全、更新更快;本书只讲最常用、最容易配错的那部分。
- 不读 Claude Code 源码。 CLI 是闭源的;本书不反编译、不猜内部实现。我们通过自己造一遍来理解机制,再对照 SDK 的公开行为。
- 不教提示词玄学。 提示词是 Harness 的一部分,但不是全部;本书更关心工具、权限、上下文、终止、恢复。
- 不承诺“读完你就能做出比 Claude Code 更好的 Agent”。 它给你的是方法:怎么量差距、怎么补、怎么判断值不值得补。
- 不假设你必须用 Claude 模型。 书里的例子可以用 Anthropic 官方 API,也可以用兼容端点;差异会在代码里标出来。
7. 怎么读
有两种读法。
深入路径(推荐):
序言 → 第 1–2 章 → 第二部分(3–9,亲手造)
→ 第三部分(10–16,换 SDK)
→ 第四部分(17–21,工程化)
→ 第五部分(22–25,实战)快速路径(只想尽快用 SDK):
序言 → 第 1–2 章 → 第三部分(10–16)
→ 遇到“这个选项为什么存在”时,回到第二部分对应章节
→ 第四部分按需读第 16 章的控制矩阵是两条路径的汇合点。不管你从哪条路来,最后都应该能填出那张表。
前置知识:会 Python,见过 async/await。不需要写过 Agent,也不需要读过 Claude Code 源码。
版本基线:本书以 claude-agent-sdk 0.2.168、CLI 2.1.301 为基线;版本会变,但六问和控制矩阵不会。代码在 GitHub 上按章打 tag,正文里给链接。
最后
这本书想回答的,不是“SDK 有哪些 API”,而是两个更具体的问题:
- 为什么同一个模型,在 Claude Code 里能干活,在你的循环里却把测试改了?
- 你要怎么造出前者那样的 Agent?
下一篇,从一个具体的事故开始。