Clippings
← 返回首页
Clipping

Agent Loop 很火,但基座才是关键:从单代理到自我进化系统的 14 步路线图

本文提出了基座工程(底座工程)的14步路线图,强调循环工程(如Claude Code的/loop)的效果取决于其运行的基座(模型、工具、权限、上下文、记忆等)的质量,先打造好基座,再套上循环,才能实现自我进化的代理系统。

Image

所有人都在谈循环。几乎没人在谈循环跑在什么东西上面。

十个开发者里,有九个用 Claude Code 的时候连默认设置都没改过——没有规则文件,没有子代理,没有钩子,没有记忆。

然后他们困惑为什么自己的循环产出的全是垃圾。

真相很简单:循环的上限,取决于它脚下那个基座。

这就是基座工程的 14 步路线图——从一个光杆代理,到一套能自我进化的系统

循环工程火了,但别忘了基座

“循环工程”——也就是搭建一个定时唤醒代理的系统——这个月吸引了所有目光。但 Addy Osmani 在那篇关于循环的长文里,特意指出了它下面那一层:

循环工程比基座高一层。基座是一个单独代理运行的环境。循环就是基座,只不过它加了定时器,会自己衍生帮手,会自己给自己喂料。

基座工程,就是设计这个环境:模型、工具、权限、上下文、记忆。

它是最不起眼的那一层——偏偏是决定上层一切能不能跑通的那一层。一个精妙的循环架在烂基座上,唯一的本事就是把垃圾大规模量产。

Image

14 步,三层结构。一切的地基。

第一部分 · 基座是什么

01 · 基座就是一个代理运行的环境

剥掉术语,一个基座就是四样东西:干活的模型能调用的工具工具上的权限、还有每次启动时读取的上下文

就这些。其余的一切——子代理、钩子、记忆——都不过是对这四样东西的某种塑形。

Image

02 · 同一个模型,不同的基座,完全是两个代理

基座定义了有哪些工具可用、代理能做什么、启动时知道什么。同一个模型,不同的基座,完全是两个代理。

所有塑造你代理的东西,都躺在项目根目录的一个文件夹里。记住下面这个结构,你就能一眼看懂任何人的基座:

03 · 好基座的分界线

好基座和烂基座的分界线就一条规则:保持足够精简,让你能说清楚每个文件为什么存在。 如果解释不了某个规则、某个钩子、某个子代理的用途,删掉。

大多数“我的代理配置一团糟”的问题,都源于把三层楼搞混了。记住:

实操版本:常量放上下文,强制规则放钩子,操作流程放技能,隔离任务放子代理。

把这几样搞混——强制规则塞进 CLAUDE.md,操作流程把上下文撑爆——就是代理行为不稳定、成本居高不下的根源。

04 · 默认基座:一个空壳

装上 Claude Code,打开一个文件夹,你已经有基座了——只不过是个空壳。默认配置给了你一个能打的模型、内置工具(读、写、bash、搜索),以及所有有风险的操作都要手动确认。没有项目上下文,没有自定义子代理,没有记忆。

Image

对于一次性任务,默认配置够用。但对于任何你要反复做的事,默认配置意味着代理每次会话都从头推导你的项目,安全操作也要你点头,终端一关它就忘光。

接下来的十步,就是来补这个窟窿的。

第二部分 · 打造基座

05 · CLAUDE.md:代理的常驻记忆

CLAUDE.md 在每次会话开始时被读取。它是代理对你项目的常驻认知——规范、架构、那些“我们之所以不这样做,是因为出过那档子事”。

Image

最常见的错误:让它膨胀成一个巨型流程文档,然后每次会话都拖着一大坨上下文。

每天跑这套东西的实践者的共识:主记忆文件控制在 500 token 以内。 固定事实放这里。

多步骤流程放技能(第 8 步)。特定路径的行为放 rules/ 里,限定生效范围。如果 CLAUDE.md 里的某个段落已经从“事实”变成了“流程”,那它该搬家了。

把你的 CLAUDE.md 念出声来。每一行应该是一个代理在每次会话中都需要知道的事实(比如“我们用 pnpm,不是 npm”)。如果某一行是流程(比如“加功能的话,先……”),挪到技能里去。 如果它是针对某个文件夹的规则,挪到 rules/

06 · settings.json:权限与型号

默认基座每次有风险的操作都问你。你在旁边盯着的时候这挺好,你不在的时候就坏事了。settings.json 就是让你把安全操作预先放行、危险操作直接拦住、顺便选好跑哪个模型的地方。

判断什么该自动放行的标准:这事搞砸了,回滚有多难? 回滚成本低 → 自动放行。

回滚成本高(强制推送、删文件、碰密钥)→ 永远拒绝或至少弹窗确认。中间地带可以在有日志记录的前提下自动放行。

07 · 子代理:隔离噪音,保护主上下文

子代理是从主会话启动的独立 Claude 会话——有自己的上下文窗口,自己的工具列表。它的意义不是并行本身,而是把噪音挡在主上下文外面。

一个要读 40 个文件的研究任务、一个需要全新视角的审查、一个产生满屏日志的评估跑批——这些都应该丢给子代理,别污染主线程。

Image

任何基座里最有价值的子代理,是那个检查主代理干活质量的。 一个模型审查自己的输出,对自己太宽容了。

一个带着全新上下文窗口的独立审查者,能逮住写的人自我说服的那些盲区。这就是写手与审查者的分工,让基座之上每一个循环都值得信赖。

08 · 技能:可复用的指令单元

一个技能就是一个 SKILL.md 文件,代理会执行它——你可以用 /skill-name 手动调用,也可以让它在任务匹配描述时自动触发。

Image

和子代理不同,技能跑在_同一个_上下文窗口里。它只是一组可复用的指令,成为当前会话的一部分。

什么时候该建一个技能:当你发现自己每次开新对话都在粘贴同一段指令。 那就是一个技能在等你。PR 检查清单、评估流程、发布流程——写一次,永远调用。

而且正因为技能是可复用的单元,它才是基座随时间进化的关键:每次流程以一种新方式失败,你就把教训加到技能里,下一次运行自动继承。

09 · 钩子:强制执行,不是建议

前面所有东西,都依赖模型_理解_你的指令。钩子不依赖。

钩子是一个在代理生命周期固定节点触发执行的 shell 命令——工具调用前、文件变更后、会话结束时——它的退出码可以直接拦截操作。钩子是强制执行,CLAUDE.md 只是建议。

Image

几乎每个基座都该有两个钩子:

钩子用于必须发生或绝不能发生的事——安全、格式化、审计日志。

不要用钩子做判断型决策;那是模型该干的。一个好基座有一两个锋利的钩子,不是二十个。

10 · 循环:让基座自己运转

一个配置好的基座还是在等你敲键盘。循环让它自己运转起来。最简单的版本就是 Claude Code 里的 /loop——一个按节奏重复执行的 prompt。

Image

搭配 /goal,循环会一直跑,直到客观条件满足——而且是由独立的评分者判断,不是代理自己给自己打分。

注意刚才发生了什么:循环没有凭空增添智能,它复用了基座里的一切——规则、审查子代理、安全钩子。好基座让循环变得微不足道。这就是先打地基的全部意义。

11 · 动态工作流:编排子代理与技能

对于单循环搞不定的任务——高度并行、高度结构化、对抗性验证——Claude 可以即时写自己的 JavaScript 编排。

这就是动态工作流:agent() 衍生子代理,parallel() 扇出,pipeline() 流水线。它把你基座里定义的子代理组合成扇出再汇总、对抗验证之类的模式。

Image

跟基座工程的关系:动态工作流的上限,取决于它能调用的子代理和技能的质量。

你的基座里有一个锋利的审查子代理和一个写得好的评估技能,工作流就有好用的零件可以编排。基座是空的,工作流就无米下锅。

工作流是指挥,你的基座是乐团。

第三部分 · 自我进化

12 · 状态文件:基座不用忘

这一步,把配置好的基座变成真正会进化的系统。

代理每次运行之间忘得一干二净。基座不用忘。

一个状态文件——agent-memory/ 里的 markdown 文件,或者一个 Linear 看板——记录了什么被尝试过、什么管用、什么翻车了、什么规则经受住了考验。

Image

让记忆滚雪球的模式,来自最强代理的用法:

13 · 自我进化回路

到了这一步,三层楼终于卡在一起,变成一个能自我进化的东西。

每次运行产生输出。审查子代理(第 7 步)检查它。

结果——哪些过了、哪些挂了、学到了什么——写入记忆(第 12 步)。通用的教训提炼成技能(第 8 步)。

下一次运行继承更锋利的技能和更丰富的记忆。

这就是完整的自我进化循环,注意它每一块都来自基座:

模型始终没变。它周围的基座越来越锋利。这就是“自我进化”的诚实含义——不是模型在学习,而是基座在累积。

14 · 打包成插件:从个人配置到共享基础设施

一个在一个项目上跑通的基座,是一笔资产。

把技能、子代理和规则打包成插件,整个团队一步安装同样的配置——同样的规范、同样的安全钩子、同样的审查者。

Image

基座不再是你个人的配置,变成了共享的基础设施。

总结

先把一次手动运行在干净的基座上搞稳定。加上上下文和权限。加上审查子代理。加上记忆。然后,也只有在这些之后,才套上循环。

好基座上的循环会滚雪球。烂基座上的循环只是加速失血。

循环享受聚光灯。基座在幕后干活。

循环工程是兴奋的部分——代理自我唤醒,在你睡觉的时候运转。但循环不过是加了个定时器的基座。

决定产出是精品还是垃圾的一切,都在下面那一层:你选的模型、你放行的工具、你写的上下文、你加的审查者、你留存的记忆。

把这一层造好,上面的一切都会滚雪球:循环复用你的子代理,工作流编排你的技能,记忆让每次运行都比上一次更锋利。

自我进化从来不是模型本身的属性。它是你在模型周围搭建的基座的属性。

今天就从你还没做的里面挑一样——大概率是审查子代理、安全钩子或状态文件——加上去。让基座保持精简到你能解释清楚。然后在上面套一个循环,看着地基替你干活。

原文参考:https://movez.substack.com/p/harness-engineering-with-claude-14?utm_source=substack&publication_id=9020837&post_id=202282465&utm_medium=email&utm_content=share&utm_campaign=email-share&triggerShare=true&isFreemail=true&r=7r2akf&triedRedirect=true