从零读懂 Claude Code:73k stars 的 learn-claude-code 教我们的事
你有没有想过这样的问题:为什么 Anthropic 的 Claude Code 看起来比很多” 自研 AI 编程助手” 更顺手?为什么它能用一个命令行就跑完” 读代码、改代码、跑测试、修 bug” 这一整条链路,而有些产品把 LLM 套上十几个 if-else 分支之后就号称” 自主 Agent”?
最近 GitHub 上一个名叫 learn-claude-code 的项目悄悄爬到了 73k stars,73k 这个数字背后不是又一个” 快速上手 Claude Code” 的脚手架,而是一份从零开始讲清楚 Claude Code 内部设计的 20 节渐进式教程。它把整个系统拆解成” 模型 + Harness” 两部分,并且用一句非常挑衅的 slogan 把观点钉死:
Agency comes from the model. An agent product = Model + Harness.
今天我们就顺着这个仓库读一遍,看看一个真正优雅的 Agent Harness 是怎么搭出来的。
一、项目背景:它到底要解决什么问题
learn-claude-code 是 shareAI-lab 维护的一个 MIT 协议开源仓库,最初诞生于 2025 年 6 月,至今保持着非常密集的迭代节奏。它的官方 Slogan 是 “Bash is all you need” —— 也就是说,作者希望你读完整个教程之后相信一件事:只要给模型一个 Bash 工具,再加上一个循环,就已经有了一个 Agent 的雏形。
1.1 它不是另一个 “Agent 框架”
仓库的 README 一上来就先” 开炮”:
“The word ‘agent’ has been hijacked by an entire prompt-plumbing industry.”
拖拽式 workflow 构建器、零代码”AI Agent” 平台、prompt chain 编排库 —— 它们共享一个错觉:把 LLM API 调用串上 if-else、节点图和硬编码路由,就构成了” 构建一个 Agent”。
作者认为这些东西造出来的不是 Agent,而是 Rube Goldberg machines(鲁布・哥德堡机器)—— 一台台过度工程化、脆弱的、用 LLM 当文本补全节点的程序。它们不是 Agent,是” 伪装成 Agent 的 shell 脚本”。
1.2 一个澄清:什么是 “agency”
作者给了一个非常清晰的定义:
- Agency = 感知 + 推理 + 行动 的能力。
- 这种能力来自模型训练,不是来自外围代码。
- DeepMind DQN 用一个神经网络打穿 7 款 Atari 游戏(2013),OpenAI Five 打了 45000 年的 Dota 2 之后击败 TI8 冠军 OG(2019),AlphaStar 在不完整信息的即时战略游戏里打到 Grandmaster—— 所有这些里程碑都指向同一个事实:Agency 是被训练出来的,不是被编码出来的。
所以如果我们这些普通工程师说” 我在构建一个 Agent”,我们实际能做的只有两件事中的一件:
- 训练模型:通过 RL、Fine-tune、RLHF 等梯度方法调整权重,DeepMind / OpenAI / Anthropic 在做的就是这个;
- 构建 Harness:写出代码给模型一个可操作的环境 —— 这是我们绝大多数人能做的事,也是这个仓库的核心。
1.3 一句话定义 Harness
1 | Harness = Tools + Knowledge + Observation + Action Interfaces + Permissions |
模型决策,Harness 执行;模型推理,Harness 提供上下文;模型是驾驶员,Harness 是车。 这是整个仓库最重要的一个心智模型(mindshift)—— 工程师的工作不是写智能,而是给智能搭一个能充分发挥作用的世界。
二、核心功能亮点
整个仓库分了 20 节渐进式课程,每一节只加一个 Harness 机制,每一节都有自己的 motto。下面挑几个最能体现设计哲学的讲。
2.1 s01 Agent Loop:一个循环 + Bash = 一个 Agent
整个仓库最核心的代码,是 s01 里这个 15 行的 agent_loop:
1 | def agent_loop(messages): |
15 行代码,就是一个 Agent 的全部。模型决定何时调用工具、何时停止;代码只是按模型的要求去执行。 后续所有 19 节课程 ——Tools、Permissions、Hooks、Subagent、Context Compact、MCP—— 都是围着这个循环在加机制,循环本身一个字都不用改。
2.2 s03 Permission:先划边界,再给自由
“Set boundaries first, then grant freedom.”
这一节教你怎么在 Harness 里做权限治理:哪些操作可以直接放行、哪些必须 stop、哪些需要人工审批。一个典型的 PermissionRule 模式由三部分组成:
- allow:白名单,比如读文件、
grep、git status; - deny:黑名单,比如
rm -rf、git push --force; - ask:需要弹窗审批的操作,比如
git push、npm publish。
作者反复强调:自由和信任都是按层级授予的,Harness 必须把” 什么能跑、什么必须停、什么需要审批” 在工具调用前讲清楚,模型才能在一个可信的世界里发挥。
2.3 s06 Subagent:大任务拆小,每个子任务拿到干净上下文
“Big tasks split small, each subtask gets clean context.”
当一个 Agent 要处理的事情开始变大,主线程的 messages 数组就会被各种子任务的中间结果、错误日志、retry 信息塞满,最后模型自己也开始抓不到重点。s06 的解法是:开一个全新的 messages[] 给子任务,子任务跑完只把结果摘要塞回主线程。
1 | def run_subagent(task: str) -> str: |
这个模式的关键不是” 并发”,而是” 隔离上下文 “—— 主线程不必看见子任务的所有探索过程。
2.4 s08 Context Compact:上下文总会撑爆,得学会腾地方
“Context always fills up – have a way to make room.”
任何长任务的 Agent 都会撞上 context window 这一关。s08 给出了多层 compact 策略:
- snipCompact:直接截掉最旧的若干条消息;
- microCompact:在一次工具调用之后把冗余日志折叠成摘要;
- toolResultBudget:限制每个工具结果的体积;
- autoCompact:当剩余 token 低于阈值时自动触发。
用这种分层策略,可以做到” 无限长 session”。这是任何想跑长任务(重构大型项目、跨多文件迁移)的 Agent 都必须解决的问题。
2.5 s15 Agent Teams + s17 自组织:人多了怎么协作
“Too big for one agent – delegate to teammates.”
“Teammates check the board, claim work themselves.”
到了 s15,仓库开始讲多 Agent 协作。核心模式是:
- 持久化 teammates:每个 teammate 有独立的 identity、独立的 context、独立的能力标签;
- 异步 mailbox:teammate 之间通过 JSONL 邮件协议通信,消息可以延迟、可以批量处理;
- s17 的关键创新:没有 leader,队友们自己盯 board、自己 claim 工作。
s18 进一步把每个 task 绑定到自己的 worktree(独立目录),保证多 Agent 不会把彼此的文件搞乱。这一套机制组合起来,已经覆盖了 Claude Code 在生产里 90% 的多 Agent 协作模式。
2.6 s19 MCP Plugin:能力不够,外部工具来凑
“Not enough capability? Plug in more via MCP.”
最后一节扩展性课程讲的是 MCP(Model Context Protocol):Harness 通过统一的 transport(stdio / SSE /streamableHTTP)把外部工具挂载进同一个工具池,模型调用起来就像调用内置工具一样自然。MCP 不是 learn-claude-code 发明的,但这一节帮你看清:MCP 本质上就是一个工具协议 —— 它的目的是让 Harness 能把外部能力当自己的” 手” 用。
2.7 s20 Comprehensive:所有机制回到一个循环
最后 s20 把前面 19 节所有机制组装回最初那个 15 行的 agent_loop。循环从来没变,变的是它周围那一圈工具、知识、权限、上下文、协作机制。 这是整个仓库最震撼的一个 moment—— 你意识到 Claude Code 这种工业级 Agent 的复杂度,是附加在简单核心上的,不是淹没它的。
三、实战示例:15 行跑一个 Agent
下面这段代码完全可以拷贝到你本地跑(需要 ANTHROPIC_API_KEY):
1 | import os, anthropic |
跑起来之后你会看到一个完整的工作循环:模型思考 → 决定调用 bash → Harness 执行 → 把结果塞回 messages → 模型继续思考 → 直到 stop_reason != "tool_use"。这就是一个 Agent 的最小可工作版本。
接下来你可以照着 s02–s20 的目录,把 Permission、Subagent、Context Compact、Task System 一个个叠上去,每加一个机制就跑一下,感受 messages 数组和工具池的扩张。
四、适用场景与限制
4.1 适合谁读
- 想真正搞懂 Claude Code / Cursor Agent 内部机制的工程师 —— 这个仓库比任何博客都接近” 工业级 Agent Harness 的真实形态”;
- 自己要做 Coding Agent / DevTool 的团队 —— 可以把 learn-claude-code 当参考实现,再根据自己的场景裁剪;
- AI 工程师面试准备 ——s05–s12 几乎覆盖了所有主流 Agent 框架(LangGraph、CrewAI、AutoGen)的设计词汇;
- 想理解 “Harness Engineering” 这门新学科的人 —— 作者把这个仓库定位成”harness engineering 的入门教材”,这是 2025–2026 年 Agent 生态里一个被严重低估的概念。
4.2 不适合什么场景
- 想要一个开箱即用的 Coding Agent—— 你应该去看它的姐妹项目 shareAI-lab/Kode-CLI,而不是这个教程;
- 只想调 prompt 不想写代码 —— 这个仓库几乎全是 Python 实现,每节都要求你跑
code.py; - 想找”Agent 评测基准”—— 它讲实现,不讲 benchmark;
- 场景不是 coding—— 虽然”s01–s20” 的代码都围绕 shell 工具展开,但 Harness 的设计原则可以迁移到客服、销售、运维等领域,只是代码不能直接搬。
4.3 已知简化点(README 自己也写了)
为了让学习曲线平滑,作者明确砍掉了几个生产级机制:
- 完整的 event / hook bus(如
PreToolUse、SessionStart/End、ConfigChange); - 完整的 rule-based permission 治理与 trust workflow;
- session lifecycle 控制(resume /fork)和完整的 worktree lifecycle;
- 完整的 MCP runtime(transport、OAuth、resource subscription、polling);
- JSONL mailbox 是教学协议,不是某个生产系统的内部实现。
所以如果你想拿它做生产基线,必须自己补这些;但作为教学材料,它已经把最关键的 80% 讲透了。
五、总结
readme 末尾一句话总结得很到位:
Agency comes from the model. The harness gives agency a place to land. Build the harness well, and the model will do the rest.
learn-claude-code 这个仓库最大的价值,不是教你” 复制 Claude Code 的源代码”,而是帮你建立一种新的工程思维:我们写的不是 Agent,而是 Agent 的世界。
当所有”AI Agent 平台” 都在拼节点图、拼 workflow、拼 prompt chain 编排的时候,这个仓库告诉你:真正优雅的 Agent Harness 本质上就是一个 15 行的循环,外面套上一层又一层克制的、可解释的机制。每一层机制都有自己的 motto,每一层机制都在解决一个具体的问题,而不是堆砌复杂度。
如果你是工程师,强烈建议从 s01 开始,逐章跑 code.py,把 20 节课程过一遍。读完之后再看 Claude Code、Cursor、OpenHands 这些产品的 changelog,你会突然看懂它们每一个新 feature 是在 Harness 的哪一层加了东西。
写完这篇,我更确信一件事:2026 年最稀缺的不是会调 API 的 AI 工程师,而是懂 Harness Engineering 的工程师 —— 他们写的不是代码,而是代码与智能之间的合同。