loop-design-check · git:20261011.d0306dc · 2026-10-11 · sha256 711e70d4d3301045

loop-design-check git:20261011.d0306dcA

Immutable. This exact content never changes and is served at /api/v1/blob/711e70d4d3301045.

---
name: loop-design-check
description: >-
  把一个任务"写成"一个目标导向的 loop,并"检查"这个 loop 写得对不对、会不会跑飞——防止空转烧钱 / Goodhart 作弊 / 把错的干到底。两个动作:① 写 loop(先做减法判该不该建 → 定可判定目标 → 选回路类型 → 选骨架)② 体检 loop(过五个崩法 + 可判定性 + 边界 + 降级 + judge 独立 + 判断留人红线)。中文触发:写 loop、设计 loop、做一个 loop、把任务变 loop、agent 自动循环、检查 loop 对不对、loop 体检、loop 会不会跑飞、loop 空转烧钱、loop 作弊、目标导向循环、可判定目标、五个崩法、plan build judge、文档驱动派活、该不该建 loop。English triggers: design an agent loop, write a loop, check a loop, loop review, prevent runaway loop, goal-oriented loop, decidable goal, plan build judge.
metadata:
  origin: 小磊 · 控制论×Loop×Goal
---

# Loop 设计 + 体检

> **一句话前提**:LLM 本身是前馈系统(prompt 进 → token 出,跨轮之间没有内建的"朝目标纠偏"能力)。要它*表现得*像目标导向系统,得在外面包一条反馈回路(loop)。这个 skill 帮你**写对**这条回路、并**体检**它不会跑飞。

## 何时用 / 不用

**用**:
- 想把一个重复任务交给 agent 自动反复跑(写完测、测完修、改完验…)。
- 已经写了个 loop,但担心它空转 / 作弊 / 跑飞,要体检。

**不用**:
- 一次性任务 → 直接做,别套循环。
- 纯定时提醒 / 轮询 → 用 `/loop` 命令即可,不需要"设计"。
- "怎么搭循环的工程架构(管道→DAG、长跑恢复)" → 那是机制层,看 `autonomous-loops` / `continuous-agent-loop`。**本 skill 只管"目标定得对不对、会不会跑飞"这层判断,不重写机制。**

## 红线前提:两层反馈(先记死,违反则全盘皆输)

| 层 | 谁管 | 干什么 |
|---|---|---|
| **执行层**(低层) | 机器 / agent | 测"离字面目标还差多少",死磕缩到 0。机器很强。 |
| **判断层**(高层) | **人** | 判"这目标本身对不对、要不要改、要不要停"。机器跳不出自己的回路质疑目标。 |

> 空调能反馈"离 26 度差多少",但你发烧想要 28 度时,它判断不了"26 度对不对"——只会死磕 26。**"今天该设几度"永远是人。**
> 把判断 / 验收 / 最后一格交给机器 = 撤掉高层反馈 = 机器照着没人质疑的目标又快又狠地狂奔 → 出错。

---

## 动作一:写一个 loop(5 步)

### 步 0 · 先做减法:该不该建?(四条件入场券,缺一票否决)

① 任务每周以上重复 ② 验证能自动化 ③ token 预算扛得住 ④ agent 有"能真跑起来看结果"的工具

任一不满足 → **别建 loop**,手动做或换别的方式。
> 卡住大多数人的不是"会不会写循环",是"你那个仓库配不配得上一个循环"。配得上的仓库 = 有对账基线(golden sample / 上游合计)+ 单测 + lint 守护。**配不上循环的仓库,循环只会放大错。**

### 步 1 · 定一个"可判定"的目标(最吃劲,loop 成败全在这)

整条回路靠"比较器"那句"达成了吗"。**比较器能不能干活,全看你给的退出条件能不能被机器清楚判 yes/no。**

- ❌ 模糊("把这个做好""写高级点")→ 比较器没法判 → 要么永远不放行(卡死反复重试),要么瞎放行/瞎拦截。
- ✅ 可判定("96 个单测全绿且出改动清单""模块02字段补全、pytest 全过、没改业务逻辑")→ 一查就知道,回路干净收敛。

**目标定义五条框架:**
1. **完成标准可被机器验证**。
2. **边界条件和完成标准一起定义**("不能怎么做")——防 Goodhart,缺边界 = 给 agent 发作弊许可证。
3. **有失败降级方案**——重试上限 N + 超了升级人工。
4. **目标分层**。
5. **完成标准优先"对账型"而非"断言型"**——锚外部事实(golden sample / 上游合计 / 财务勾稽 / 平台后台数字),其次才是自己写的断言。"测试全过"能被钻(改松断言、注水 mock、吞异常);"和 VBA 差异 < 0.01"钻不了。

> **自检**:把目标念给一个不懂业务的人,他能不能跑一条命令就判出"到没到"?不能 → 还不够可判定,回来改。

### 步 2 · 选回路类型

| 你的任务 | 回路(控制论对应) | 怎么停 |
|---|---|---|
| 有明确"完成"判据(写到 done / 一批图处理完 / researcher 出 findings) | **servo**(`/goal` 型,闭环伺服) | 到目标就停 |
| 没终点、要持续维持(库存预警 / 报表定时体检) | **regulator**(`/loop` 型,恒温器) | 不停,有变化才动作(`[SILENT]` 死区压噪声) |
| 周期采样、满足条件就停(盯 PR 直到 CI 绿) | **带退出的 regulator** | 退出条件满足就停 |
| 要"确保某事按时发生" | 把上面**包进 `/schedule`** | cron 到点触发 |

> 经验法则:有"完成"判据 → servo;要持续维持没终点 → regulator;要"按时发生" → regulator 包进 schedule。
> (`/goal` 本质就是一个总返回 block 的 Stop 钩子:agent 想停但"不准停"直到达标——是 veto,不是 push。)

### 步 3 · 选骨架

**守成型(看护已有东西)→ 文档驱动派活**
loop 不是"定时跑固定检查",是 **"定时读文档、文档变了才派活"**。文档 = 任务队列 + 状态机 + 人机接口。
三条纪律:① 问题列只人写、结果列只 loop 写、**状态单向推进不回头** ② **退出码是终审**(脚本 exit 1 就以脚本为准)③ 状态推到"待验证"为止,**"已完成"那格只有人能扳**——loop 当工人,不当验收官。

**产出型(从零搭东西)→ plan / build / judge 三角色循环**

| 角色 | 干啥 | 关键 |
|---|---|---|
| **Plan** | 把目标拆成 spec + **可判定的验收条件** | 验收条件必须能被脚本判 |
| **Build** | 照 spec 写 | **不准改验收条件** |
| **Judge** | **独立**跑验收,过→停 / 不过→带失败原因回 Build | **独立 + 确定性规则** |

三条铁律(全押在 judge):① **Judge 必须独立**——不能是 Build 那个 agent(自己批作业必放水)② **用确定性规则**——pytest / 对账差异 / 类型检查 / diff,不靠"看着对" ③ **不准 Build 改验收条件过关**。重试 3 次还不过 → 升级人工。

### 步 4 · 加阻尼(防震颤 / 跑飞)

重试上限、硬停、人扳最后一格 = 阻尼。**没有阻尼的负反馈会震颤**(Ralph Wiggum loop:在原地空转烧钱)。

### 步 5 · 落地三档(别一上来就全自动)

① **先手动跑通一次**(逼自己讲清"judge 到底怎么判")→ ② 固化成 skill / Claude Code sub-agents(主 Claude 循环派 plan/build/judge)→ ③ 挂 cron / hermes 全自动。

---

## 动作二:检查一个 loop 对不对(体检清单 = 五个崩法防呆)

> 拿写好的 loop 逐条过。**命中任一条 = 这 loop 会出事,打回重写。** 这五条是负面经验(gotchas),比正面规则值钱。

| # | 崩法(会怎么坏) | 体检问题(命中即红) | 抗体 |
|---|---|---|---|
| 1 | 目标是句正确的废话 → **空转烧钱** | 退出条件能被机器判 yes/no 吗?还是"管好 / 做好"这种? | 换成可判定的结果条件(动作一·步1) |
| 2 | 验证写成"检查对不对" → **agent 自信说没问题就停** | judge 是不是被告自己?验证靠"看着对"还是确定性规则? | 对账 + 退出码说了算 + judge 独立 |
| 3 | (最痛)只卡"测试全过" → **agent 删了测试** | 有没有边界条件("不能怎么做")?还是只有完成标准? | 完成标准 **+ 边界** 一起定(Goodhart 抗体) |
| 4 | 指望 agent 中途来确认 → **它不会,把错的干到底** | 有没有"运行中才需要人澄清"的点? | **所有澄清前置**,出发前一次答死 |
| 5 | CLAUDE.md 膨胀 + 记忆过期 → **loop 越快错越多** | 它依赖的文档 / 记忆新鲜吗?谁维护? | 记忆三层 + 定期 lint 体检 |

**再加判 3 条红线(违反任一 = 不准上自动):**
- **判断留人**:验收 / "已完成"那格人来扳,loop 不当验收官。
- **责任不可转移**:凡"失败后果你担不起"的事(合错 PR / 发错图 / 分错钱),**不自动交权**。
- **反直觉警告**:越是"自改进 / 自己改规则"的 loop,越需要**更严的人审**(看它把规则改成了啥),不是更放手。机器快到来不及拦,人的判断必须卡在**动手之前**(硬 gate),不能出错了再补。

---

## 一句话收口

> 写 loop 真正吃劲的不是"会不会写循环",是"**定一个机器能对账的目标**"——可判定、带边界、对账型。控制器要确定性且外置;判断和标准留人;系统会熵增所以要持续维护。
> **循环只奖励已经想明白的人。指望它替你想,它会很乐意带着你一起想错。**

---

> 来源:小磊《控制论×Loop×Goal——把 LLM 管成目标导向系统》(vault `01-AI实践经验/10`)。plan/build/judge 源 Anatoli《Loops explained》/ Addy《Loop Engineering》;两层反馈 + 红线源 维纳《人有人的用处》(1950)。
> 机制层(怎么搭循环架构)见 `autonomous-loops` / `continuous-agent-loop`;本 skill 不重写机制,只管目标与防跑飞。