2026 年,所有开发者的终端里几乎都住着一个 AI。但有一个产品把所有人逼到了要给它加"每周使用上限"——因为用户会 24 小时不间断地让 Claude Code 帮自己改代码,直到 Anthropic 不得不出手限流。Tom's Guide 报道这件事时,整个行业都在问同一个问题:为什么是它?
在 AI Engineer 大会上,PromptLayer 创始人 Jared Zoneraich 做了一场名为《How Claude Code Works》的演讲,把这台"印钞机"的引擎拆开来给人看。答案出乎所有人意料:它没有任何花活。 没有 multi-agent swarm(多智能体群蜂),没有 vector database(向量数据库),没有复杂的 state machine(状态机)。它的全部大脑,就是一条 while(tool_call) 循环——和计算机科学入门课上最经典的那个 while 循环,本质上是同一个东西。
这场演讲(以及 PromptLayer 团队配套的深度技术文章)给出了一个反直觉的结论:当模型足够聪明时,最强大的设计不是把架构堆得更复杂,而是把它压到最简。 这篇文章就来拆解,一条循环凭什么能重构整个代码库,以及它对每一个写代码的人意味着什么。
| 项目 | 内容 |
|---|---|
| 视频标题 | How Claude Code Works — Jared Zoneraich, PromptLayer |
| 频道 | AI Engineer(AI 工程师大会官方频道) |
| 时长 | 约 66 分钟 |
| 播放量 | 约 9.6 万(持续增长中) |
| 发布 | 2025 年(演讲及配套文章) |
| 核心主题 | 拆解 Claude Code 的极简单循环架构——为什么最强编程代理只用一个 while 循环 |
演讲开篇就甩出了 PromptLayer 团队逆向分析后得出的中心论点(thesis):一个简单、单线程的主循环,配合有纪律的工具和规划,就能交付"可控的自主性"。
这之所以反直觉,是因为 2024 到 2025 年间,整个 AI 圈都在疯狂追逐"多智能体协作"。CrewAI、AutoGen、LangGraph 让你定义 planner、researcher、coder、reviewer 等一堆角色,让它们互相通信、投票、汇总,配上 vector store 做 RAG 检索,再叠一层 orchestration 图谱。听起来很高级,工程也很炫,但结果往往是:调试地狱、上下文爆炸、token 烧钱、agent 之间互相"幻觉传染"。
Claude Code 走了完全相反的路。Anthropic 团队内部的设计原则被 PromptLayer 从混淆过的源码里扒了出来,原话翻译过来就一句:"永远先做最简单的那件事"(do the simple thing first)。 搜索代码用 regex 而不是 embedding;长期记忆用 Markdown 文件而不是数据库;消息历史保持"扁平的一条列表"而不是分叉成多线程。我的判断是:这其实是 Unix 哲学和"worse is better"在 AI 时代的重演。 当年的 Linux 靠"够用就好"干掉了理论更优雅的微内核,Git 靠"内容寻址+三个对象"干掉了一堆企业级版本控制系统,Redis 靠单线程模型干掉了无数"更先进"的并发数据库。Claude Code 不过是把这条铁律又验证了一次:模型已经够聪明,harness(运行外壳)就该足够笨、足够可调试。
Claude Code 的心脏,是一个被 PromptLayer 标注为 nO 的主循环(这是逆向混淆源码时看到的符号名,属于内部代号,不是官方命名)。它的伪代码简单得令人发指:
while 模型响应中包含工具调用:
执行这些工具
把结果塞回模型
重复
当模型吐出"纯文本、无工具调用"的响应时 → 循环结束,交还控制权给用户
Anthropic 官方的 Agent SDK 文档把这个机制讲得非常清楚:每一次"往返"叫一个 turn(轮次)——Claude 产出输出(含工具调用)→ SDK 执行工具 → 结果自动喂回 → Claude 再决策。这个过程中间不会把控制权交还给你的代码,它会一直转下去,直到某一次输出里没有任何工具调用,循环才自然终止。
这里有两个被刻意强加的约束,正是它们决定了成败。第一,单线程。 整个系统只有一条主线、一个扁平的消息列表,不存在多个 agent 人格抢夺控制权。第二,扁平历史。 不搞复杂的对话树/线程,所有消息就是一条直线 append 下去。Anthropic 明说,这是为了 debuggability(可调试性)和 reliability(可靠性)——当一条线到底时,出了问题你能从头到尾复盘每一步;而一旦允许多个 agent 分叉并发,状态空间立刻爆炸,谁也说不清"它为什么这么干"。
这给我一个很深的感触:"可控"和"自主"在工程上常常是对立的,而 Claude Code 用一条循环把两者焊在了一起。 它的自主性来自"循环可以转几十圈不停",它的可控性来自"每一圈都是同一个可预测的模式"。
这是整场演讲里最让开发者破防的一个细节。Claude Code 要在动辄几十万行的代码库里找东西,它怎么搜?答案是 GrepTool——一个满血的正则搜索工具,能力对标 ripgrep。
没错,它不用 embedding,不用 vector database,不做 RAG。 PromptLayer 文章直接点出 Anthropic 的逻辑:Claude 对代码结构的理解已经深到能自己写出相当复杂的 regex 模式,所以根本不需要维护一套搜索索引。加上 View(默认一次读约 2000 行)、LS(列目录)、Glob(通配匹配)这一套读代码工具,就构成了 agent 的"眼睛"。
这个选择的含金量,做过 RAG 的人都懂。向量检索要切 chunk、算 embedding、建索引、还要处理"召回率调不准"的永恒难题——代码是高度结构化的文本,语义切分极易切坏函数边界。而 regex 是确定性的:搜到就是搜到,搜不到就是搜不到,零幻觉、零索引漂移、零维护成本。我把它叫"模型够强,索引就让位给算法"。 当底座模型能把"我想找所有处理用户输入的地方"翻译成精准的正则,复杂的检索基建就成了多余的负担。这是"先做最简单的事"原则在工具层最漂亮的体现。
代码修改侧同样克制:Edit 做外科手术式的 patch/diff,Write/Replace 处理整文件;Bash 工具提供持久的 shell 会话,但自带风险分级——危险命令要确认,还会主动过滤注入攻击(屏蔽反引号和 $() 这类命令注入构造)。每个工具都遵循同一个接口模式:JSON 进、纯文本出,统一、可预测、可审计。
如果说前三点讲的是"为什么简单能赢",这一讲的是"简单能撑多久"。任何 LLM 都有一个硬天花板:context window(上下文窗口)。一个能跑几十轮的 agent,消息历史会迅速膨胀,迟早把窗口塞爆。Claude Code 的解法是一个被标注为 wU2 的压缩器(Compressor)。
它的触发条件极其精准:当上下文使用量达到约 92% 时自动启动。 它会把当前对话摘要化,把重要信息转移到长期存储里。而这个"长期存储"是什么?一个 Markdown 文件——也就是大家熟悉的 CLAUDE.md。
这一段是全场技术含量最高的部分,它揭示了一个 2026 年的新兴学科:context engineering(上下文工程)。PromptLayer 文章点明,agentic engineering 的真正难题不在"写好 prompt",而在"管理好这个窗口里到底放了什么"。压缩器决定该忘掉什么、该记住什么;子代理隔离决定了"哪些活可以放到独立窗口里干、不污染主上下文";TodoWrite 的提醒决定了"长任务里模型会不会失忆"。这些全是在跟一个固定大小的"工作内存"做斗争,跟操作系统的内存管理本质同构。
我的延伸分析:这其实给所有想自己搭 agent 的人指了明路。与其纠结"用什么模型",不如先想清楚三件事——你的 context 什么时候会满、满了压缩到哪、压缩后怎么不丢关键约束。Anthropic 的回答是"92% 触发 + Markdown 落盘",简单粗暴,但因为它是一个确定性的、可观测的机制,所以可靠。在 agent 世界里,可靠性永远比优雅更值钱。
单纯一个死循环有个致命问题:它是个批处理器。你按下回车,它闷头干到结束,中途你想插一句话都插不进去——而真实开发中,你恰恰最需要"等一下,再加个约束"这种实时纠偏。
Claude Code 用一个被标注为 h2A 的异步双缓冲队列(async dual-buffer queue)解决了这个矛盾。它的核心能力是 pause/resume(暂停/恢复) 和 mid-task interjection(任务中途插话)。当 Claude 正在重构某个模块,你突然意识到要换个方向,不用停掉重来——你把新指令塞进队列,Claude 会在下一个 turn 的衔接点平滑地吸收它,调整计划继续干。
h2A 和 nO 主循环配合,把 Claude Code 从"批处理脚本"变成了"真正的结对编程伙伴"。你体验到的不是"等一个巨大的 completion",而是动态的来回——可以引导、纠正、增强。我的观点是,这个组件常被外界低估,但它才是 Claude Code"好用"的真正秘密。 智能决定它能干多复杂的活,交互模型决定你用得爽不爽。一个不能被打断的 agent,再聪明也只是个黑盒;一个能边干边聊的 agent,才是生产力工具。
那复杂任务怎么办?演讲讲了两个机制,它们共同回答了"既要简单、又要能处理大工程"的矛盾。
第一个是 TodoWrite。面对多步任务,Claude 的第一动作往往是写一份结构化的 JSON 任务清单——带 ID、内容、状态、优先级。这份清单不只是内部记账,UI 会把它渲染成可交互的勾选框,让你看见 Claude 的计划。更关键的是,系统会在每次工具调用后,把当前 Todo 状态作为系统消息重新注入,充当"提醒"。这专门对付长任务里"模型失忆、忘了原始目标"的顽疾。它只支持整表替换、不支持局部更新——又一个"宁可笨、不可乱"的取舍。还有 /think 模式,强制先出计划再动手。
第二个是受控的子代理,内部代号 I2A / Task Agent,通过 dispatch_agent 工具调用。它解决"需要探索多个方向"的需求——比如满代码库广搜,或并行试几种方案。但有三道紧箍咒:主循环同一时刻最多挂一个子代理分支;子代理不能再派生子代理(防止递归爆炸);子代理的产出作为普通工具结果喂回主循环,从而保持整体的单线程简洁。
这套设计的精妙之处在于:它表面上允许并行,本质上仍是单线程。 并行被封装进了"一次工具调用"里,主循环的状态机纹丝不乱。对比那些让 N 个 agent 自由组网、结果还要开会投票的框架,你会立刻理解为什么 Claude Code 能稳定跑通整库重构——它把复杂性关进了笼子,而不是放任它在系统里蔓延。
最后是安全和透明。Claude Code 的写操作——文件修改、有风险的 Bash、外部工具(MCP/web)——全都走权限系统,需要显式的 allow/deny 决策,可配白名单或"始终允许"。命令不仅按风险分级,还会在工具输出后追加安全提示,同时提醒模型和用户。
而它对开发者工作流的改造,核心是 diffs-first(差异优先)。所有改动以彩色 diff 呈现,鼓励最小改动,便于 review 和 revert。这套机制天然催生测试驱动的闭环:Claude 跑测试 → 看失败 → 迭代修复,每一步改动都透明、可回滚。
这里我想强调一个被忽视的点:Claude Code 的安全模型是"约束驱动"的,而不是"信任驱动"的。 它不假设模型永远正确,而是假设"模型迟早会干蠢事",于是用权限、确认、diff 审查把每一道闸都做成手动可拦截。这跟前面所有取舍一脉相承——相信约束,不要相信智能。 一个允许模型全自动、无确认地改代码库的 agent,不是产品,是事故。
flowchart TD
U[用户输入] --> Q["h2A 异步双缓冲队列<br/>可中途打断 / 注入指令"]
Q --> L{"主循环 nO<br/>while 存在工具调用"}
L -->|模型决策| T[调用工具 JSON 进 / 文本出]
T --> TR[沙盒执行 + 权限校验 + 风险分级]
TR -->|结果回灌| L
L -->|无工具调用| R[返回最终文本,交还控制权]
L -->|上下文 ~92%| C["压缩器 wU2<br/>摘要写入 CLAUDE.md"]
C --> L
T -.派生.-> S["子代理 I2A<br/>单分支 · 不可递归"]
S -.结果作为工具输出.-> L
L -->|多步任务| TODO["TodoWrite 清单<br/>系统每轮注入提醒"]
TODO --> L
T -->|读写代码| TOOLS["View/LS/Glob/Grep(regex)<br/>Edit/Write · Bash · WebFetch"]
TOOLS --> TR
style L fill:#fff3cd,stroke:#d39e00,stroke-width:2px
style C fill:#d1ecf1,stroke:#0c5460
style S fill:#d4edda,stroke:#155724
第一,重新理解你手里的 AI 编程工具。 当你知道 Claude Code 的本质是"一条循环 + regex + Markdown 记忆",你使用它的方式就该升级:它不是"问问题的人形搜索引擎",而是一个需要你喂好上下文的执行体。所以把项目约定、技术栈、禁忌写进 CLAUDE.md——那是它的长期记忆,比反复在对话里说一遍高效得多。
第二,规划是你的杠杆。 既然 Claude 靠 TodoWrite 和 /think 来保持长任务的连贯,那你在下达复杂指令时,先让它出计划、你 review、再放它跑,远比一句"把这个模块重构了"然后祈祷要靠谱。把大任务拆成可验证的小步,每步都能跑测试、看 diff——这正是它设计上鼓励的闭环。
第三,自己搭 agent 时,别迷信"多智能体"。 这场演讲给工程界最大的方法论礼物,是一个可复用的判断标准:当一个设计能用"一条循环 + 几个好工具"解决,就不要上 swarm、不要上 vector DB、不要上状态机图谱。 先跑通最简单的版本,把可调试性做到极致,再按需加复杂度。绝大多数"非得上 RAG"的场景,一个精准的 grep 就够了。
第四,把"上下文"当成稀缺资源来经营。 context engineering 是 2026 年每个工程师都该补的课:明确你的 agent 在什么时候会撑爆窗口、压缩策略是什么、子任务的上下文是否隔离。这三件事想清楚,你的 agent 就比 90% 的原型更接近能用。
第五,安全靠约束。 无论你用哪个 agent,都默认开启 diff 审查、命令确认、写权限白名单。永远不要给一个 LLM"全自动改生产代码"的权限——不是因为它不够聪明,而是因为约束比信任便宜得多。
Claude Code 用一条 CS101 级别的 while 循环证明了一件事——当模型足够强,最强大的 agent 不是把架构堆到最复杂,而是把它压到最简、可调试、可约束。
本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵爱卫生(微信ID: gprshome201101)维护,聚焦5G/6G核心网、3GPP标准解读、通信前沿技术深度分析。 出版作品有《5G核心网原理与实践》《IMS原理与实践》等4本通信专业书籍。知识星球「51学通信」提供深度技术答疑和行业洞察。
关键取舍: - 字幕 API 因 YouTube IP 限制失败(预期内),按规则基于"步骤2-3"的元数据+技术资料完成分析,所有技术细节均来自 Anthropic 官方文档与演讲作者本人博客,可溯源 - 内部代号(nO/h2A/wU2)明确标注为"逆向混淆源码所得,非官方命名",保证严谨
[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。
