Install
openclaw skills install @jainwong/loop-engineering基于 Loop Engineering 理念的元技能,为复杂多步骤任务构建可迭代、可验证、可安全停止的反馈闭环系统。适用于代码生成与调试、设计实现、内容创作、工具调用等任何需要多轮执行与自我修正的场景。
openclaw skills install @jainwong/loop-engineering将 AI Agent 从「一次性回答」升级为「可规划、可执行、可观察、可评估、可修正、可安全停止」的任务执行系统。
当执行以下任何复杂多步骤任务时自动触发 Loop 流程:
单次问答类任务不触发(如事实查询、简单翻译、概念解释)。
Goal → Plan → Act → Observe → Evaluate → Repair → Stop or Continue
每次进入 Loop 前,必须在对话上下文中显式建立并维护状态卡片:
loop_state:
goal: "任务目标,一句话描述最终交付物"
plan:
- "步骤1:..."
- "步骤2:..."
- "步骤N:..."
current_step: "当前正在执行的步骤编号与名称"
actions:
- step: "步骤1"
tool: "使用的工具/命令"
result_summary: "结果一句话摘要"
timestamp: "2026-07-07T10:00:00"
errors:
- error: "错误描述"
type: "临时错误/参数错误/权限错误/证据不足/目标冲突"
iteration: 1
fix_strategy: "采用的修复策略"
evidence:
- "已确认的事实1"
- "已找到的证据2"
constraints:
- "用户明确禁止的操作"
- "安全边界(如不能删除数据)"
iteration: 0
max_iterations: 6
max_tool_calls: 20
status: running # running / success / failed / need_human
状态维护规则:
iteration、actions、errors、current_step将 goal 拆分为 3–8 个可独立执行的步骤:
拆解原则:
Plan 模板:
① [准备] 环境检查与依赖安装 → 验证:npm install 成功无报错
② [实现] 核心组件/模块开发 → 验证:代码编译通过
③ [实现] 交互与状态逻辑 → 验证:功能流程可跑通
④ [验证] 运行测试或启动预览 → 验证:无运行时错误
⑤ [优化] 响应式适配与边界处理 → 验证:三端/多态正常
⑥ [交付] 最终检查与文档输出 → 验证:README 完整可运行
执行当前步骤,记录完整的工具调用与结果:
必须记录:
执行原则:
将原始输出解析为结构化观察对象,禁止直接把原始日志塞回模型:
观察模板:
observation:
tool: "使用的工具"
passed: true/false
summary: "一句话结果摘要"
key_output: "关键输出内容"
error_type: "none / timeout / bad_argument / permission_denied / assertion_error / compile_error / runtime_error"
suspected_module: "可能出错的文件/模块"
new_evidence: "本轮发现的新事实"
常见观察转换:
| 原始输出 | 结构化观察 |
|---|---|
| 测试日志 200 行 | passed: false, failed_cases: ["test_A"], error_type: "assertion_error", suspected_module: "auth.ts" |
API 响应 {code: 500} | passed: false, error_type: "runtime_error", key_output: "Internal Server Error", suspected_module: "后端 /api/users" |
构建输出 Build completed | passed: true, summary: "构建成功,耗时 12s" |
| 截图对比 | passed: false, summary: "间距偏差 4px,颜色偏差 #F0F0F0 vs #FFF8F0" |
基于观察对象,使用外部评估信号判断当前状态:
评估模板:
evaluation:
passed: true/false
score: 0.0-1.0
failed_rules:
- "未通过的规则1"
- "未通过的规则2"
risk: "none / low / medium / high"
next_action: "continue / retry / fix_arguments / retrieve_more / ask_human / stop"
reason: "评估结论的一句话解释"
按任务类型的评估标准:
| 任务类型 | 通过标准 | 评估信号 |
|---|---|---|
| 代码生成 | 编译通过 + 测试通过 + lint 无报错 | npm run build 结果、npm test 结果 |
| 设计实现 | 还原度 ≥ 95% + 三端正常 + 无交互阻断 | 截图对比、DevTools 设备模拟 |
| 内容生成 | 结构完整 + 数据真实 + 无幻觉 | 字数统计、事实校验、原创度检查 |
| 工具调用 | 状态码 200 + 返回体符合 schema | HTTP 状态码、响应体字段校验 |
| 数据操作 | 写入成功 + 读取一致 + 无脏数据 | 数据库查询验证、前后端联调 |
核心原则:不要让模型自己宣布自己成功。必须通过可验证的外部信号(编译器、测试框架、截图对比、数据库查询)来评估。
如果 evaluation.passed == false,根据 error_type 和 risk 选择修复策略:
修复策略路由:
| 错误类型 | 风险等级 | 修复策略 | 操作 |
|---|---|---|---|
| 临时错误(超时/502/限流) | low | retry_with_backoff | 指数退避重试(1s → 2s → 4s),最多 3 次 |
| 参数错误(字段缺失/类型不匹配) | low | fix_arguments | 修正参数后重新调用,不重试原请求 |
| 编译错误(语法/类型) | low | fix_code | 定位报错文件 → 修复具体行 → 重新编译 |
| 测试失败(断言/逻辑) | medium | fix_logic | 分析失败 case → 修改代码 → 重新测试 |
| 证据不足(检索缺失) | medium | retrieve_more | 换查询词/扩展检索范围/追问用户 |
| 还原度不足(设计偏差) | medium | refine_style | 对比设计稿 → 修正样式参数 → 重新截图验证 |
| 权限错误(403/token 失效) | high | stop_and_request_auth | 立即停止,告知用户需要授权 |
| 目标冲突(用户需求矛盾) | high | ask_human | 停止并列出冲突点,请求用户决策 |
| 高风险动作(删除/支付/发布) | high | ask_human | 必须人工确认,禁止自动执行 |
| 超出能力范围 | high | stop_with_reason | 明确告知不可完成的原因 |
修复后必须:
errors 列表iterationLoop 必须在以下任一条件触发时停止:
| 停止类型 | 触发条件 | 结果 |
|---|---|---|
| 成功停止 | evaluation.passed == true 且所有计划步骤完成 | 输出最终交付物,附上执行摘要 |
| 失败停止 | 明确不可完成(依赖缺失、超出能力、环境不支持) | 给出失败原因 + 已尝试的方案 + 建议的人工接手路径 |
| 风险停止 | evaluation.risk == "high" 或涉及约束清单中的高风险动作 | 请求人工确认,说明风险点和建议操作 |
| 预算停止 | iteration >= max_iterations 或工具调用/时间超限 | 汇报当前进展、已完成部分、未完成部分、建议的下一步 |
强制上限:
max_iterations: 6(默认)max_tool_calls: 20max_minutes: 15无论成功、失败还是人工接管,停止时必须输出结构化摘要:
loop_summary:
status: success/failed/need_human
iterations: 3
total_time: "8m 32s"
completed_steps:
- "① 环境准备 ✓"
- "② 核心实现 ✓"
- "③ 测试验证 ✓"
failed_steps:
- "④ 性能优化 ✗(超出迭代预算)"
key_errors:
- "TypeScript 类型不匹配(已修复)"
final_deliverable: "交付物描述及路径"
next_recommendation: "建议用户下一步操作"
Loop Engineering 的第二层闭环:从执行轨迹中自动提炼可复用的经验知识,使 Agent 在同类任务中越用越强。
执行闭环:Goal → Plan → Act → Observe → Evaluate → Repair → Stop
蒸馏闭环:Trace → Extract → Distill → Deposit → Retrieve → Apply → Validate
每一次任务执行都会产生一条完整的执行轨迹(Trace)。蒸馏提纯能力要求 Agent 在任务结束后,主动分析这条轨迹,提取成功模式与失败模式,沉淀为可复用的经验原则(Principle),并在后续同类任务中自动检索和应用。
轨迹是蒸馏的原材料。每次 Loop 必须生成完整的轨迹记录:
loop_trace:
trace_id: "trace-20260708-001"
task_type: "代码生成 / 设计实现 / 内容创作 / 数据分析"
goal: "任务目标"
plan: ["步骤1", "步骤2", "步骤3"]
execution_log:
- iteration: 1
step: "步骤1"
act: "执行的命令或代码"
observation:
passed: true/false
error_type: "..."
evaluation:
passed: true/false
score: 0.0-1.0
repair: "采用的修复策略(如有)"
- iteration: 2
step: "步骤2"
...
final_result:
status: "success / failed / need_human"
deliverable: "最终交付物摘要"
total_iterations: 5
total_time: "12m 30s"
context:
tech_stack: ["React", "Next.js", "Prisma"]
constraints: ["必须三端适配", "必须使用 SQLite"]
environment: "Node.js 20 / macOS / ARM64"
轨迹记录规则:
loop_trace 必须有唯一的 trace_idtask_type 必须标准化分类,便于后续检索execution_log 必须按迭代顺序完整记录,禁止省略失败的迭代context 记录环境信息,因为同一方案在不同环境下可能失效从轨迹中识别可复用的成功模式和需规避的失败模式:
成功模式提取:
success_pattern:
pattern_id: "sp-001"
task_type: "Next.js + Prisma 全栈项目"
context_match:
tech_stack: ["Next.js", "Prisma"]
goal_keywords: ["用户系统", "认证"]
successful_plan:
- "先配置 prisma/schema.prisma 再执行 migrate"
- "auth.ts 中使用 Credentials provider + bcrypt"
- "seed.ts 中同时创建管理员账号和示例数据"
key_successor: "prisma schema 定义完整后再迁移,避免后续反复修改"
source_trace: "trace-20260708-001"
occurrence_count: 3
success_rate: 1.0
失败模式提取:
failure_pattern:
pattern_id: "fp-001"
task_type: "Next.js 项目构建"
context_match:
tech_stack: ["Next.js", "TypeScript"]
failure_signature:
error_type: "compile_error"
symptom: "'session.user' is possibly 'undefined'"
root_cause: "NextAuth 默认 Session 类型不包含自定义字段(id, role)"
fix_strategy:
- "创建 src/types/next-auth.d.ts 扩展 Session 和 JWT 类型"
- "声明 module 'next-auth' 和 module 'next-auth/jwt'"
prevention: "任何使用 NextAuth credentials + role 的项目都必须先创建类型声明文件"
source_trace: "trace-20260708-002"
occurrence_count: 2
fix_success_rate: 1.0
提取规则:
task_type + tech_stack + goal_keywords 三维匹配将提取的模式进一步提炼为简洁、可执行的原则:
原则格式:
principle:
principle_id: "p-001"
category: "技术栈初始化 / 错误修复 / 架构设计 / 性能优化"
condition: "当使用 NextAuth Credentials Provider 且需要自定义用户字段时"
action: "必须首先创建 next-auth.d.ts 类型声明文件,扩展 Session 和 JWT 接口"
rationale: "NextAuth v4 的默认 TypeScript 类型不包含自定义字段,不声明会导致编译错误"
confidence: 0.95 # 基于成功次数 / (成功次数 + 失败次数)
source_patterns: ["fp-001", "fp-003"]
created_at: "2026-07-08"
last_applied: "2026-07-08"
application_count: 5
application_success_rate: 1.0
蒸馏标准:
condition → action 的触发式结构rationale 必须解释为什么这个原则有效(因果链)confidence 必须基于统计数据,低于 0.7 的原则标记为「实验性」经验库是 Agent 的「长期记忆」,按层级组织:
experience_bank:
version: "1.0.0"
last_updated: "2026-07-08T14:00:00"
principles:
- principle_id: "p-001"
...
- principle_id: "p-002"
...
patterns:
success_patterns: ["sp-001", "sp-002"]
failure_patterns: ["fp-001", "fp-002"]
task_type_index:
"Next.js + Prisma 全栈项目": ["p-001", "p-003", "sp-001"]
"React + Vite 纯前端项目": ["p-005", "sp-003"]
"设计稿转代码": ["p-010", "fp-005"]
anti_patterns:
- "永远不要在前端硬编码 API 密钥"
- "不要忽略 NextAuth 的 Session 类型扩展"
存储规则:
/workspace/.agent-experience/experience-bank.yaml新任务开始时,根据当前任务特征从经验库检索相关原则:
检索流程:
goal、task_type、tech_stack 提取关键词task_type_index 中查找匹配的任务类型confidence × application_success_rate 排序principle.condition 是否匹配当前上下文应用方式:
| 应用阶段 | 注入内容 | 示例 |
|---|---|---|
| Plan 阶段 | 成功模式的 successful_plan 作为默认步骤模板 | "历史经验表明,此类项目应先配置 Prisma schema 再迁移" |
| Repair 阶段 | 失败模式的 fix_strategy 作为首选修复方案 | "检测到 NextAuth 类型错误,历史最佳修复:创建 next-auth.d.ts" |
| Evaluate 阶段 | 失败模式的 prevention 作为预检清单 | "检查清单:是否已创建类型声明文件?" |
| 约束阶段 | anti_patterns 作为禁止操作 | "约束:禁止在前端硬编码 API 密钥" |
应用示例:
[新任务] Goal: 创建一个使用 NextAuth 的 Todo 应用
→ Retrieve: 匹配到 task_type "Next.js + Prisma 全栈项目"
→ 检索到原则 p-001(confidence 0.95)
→ 注入 Plan: 步骤① 创建 next-auth.d.ts 类型声明
→ 注入约束: "禁止跳过类型声明直接写 auth.ts"
→ 开始执行...
→ 若编译错误 symptom 匹配 fp-001
→ 自动应用 fix_strategy: 创建 next-auth.d.ts
经验库需要定期维护,防止膨胀和失效:
维护规则:
| 维护操作 | 触发条件 | 处理方式 |
|---|---|---|
| 去重合并 | 两个原则的 condition 和 action 相似度 > 80% | 合并为一条原则,更新 application_count 和 confidence |
| 置信度衰减 | 原则超过 30 天未被应用 | confidence 每年衰减 10%,低于 0.5 标记为「待验证」 |
| 版本淘汰 | 技术栈版本升级导致原则失效 | 标记为 deprecated,保留但不再推荐,新增适用于新版本的原则 |
| 成功升级 | 原则连续 5 次应用成功 | confidence 提升至 0.95 以上,标记为「最佳实践」 |
| 失败降级 | 原则应用后失败次数 > 成功次数 | confidence 降低,若低于 0.3 移入 discarded 区 |
维护周期:
experience_bank.versionmerged / deprecated / discarded / upgraded随着经验库积累,Repair 策略路由和评估标准应自动进化:
Repair 策略进化:
fix_strategy 在经验库中有高置信度原则时,该策略升级为「首选」评估标准进化:
evaluation.score 分布Plan 模板进化:
当任务复杂度超出单 Agent 处理能力,或任务天然可拆分为多个专业领域时,启用多代理模式。
以下情况自动从单代理升级为多代理:
根据任务特征选择以下三种编排模式之一:
多个 Agent 按固定顺序串行执行,前一个的输出作为后一个的输入。
用户输入 → Agent A(需求分析)→ Agent B(架构设计)→ Agent C(代码实现)→ Agent D(测试验证)→ 输出
适用场景:需求分析 → 设计 → 开发 → 测试等天然有依赖顺序的流程
状态传递:每个 Agent 完成后更新全局 Loop State,后续 Agent 读取状态中的 evidence 和 actions
一个编排器 Agent(Orchestrator)负责任务拆解、分配、聚合;多个工作者 Agent(Worker)并行执行子任务。
用户输入 → Orchestrator(拆解任务)→ [Worker A ∥ Worker B ∥ Worker C] → Orchestrator(聚合结果)→ 验证 → 输出
适用场景:
工作者定义模板:
worker:
id: "worker-a"
name: "前端结构专家"
role: "负责将设计稿拆解为 HTML/JSX 骨架,输出组件树和布局代码"
input: "设计稿解析规范 + 当前步骤的 Loop State"
output: "结构化代码 + 观察报告"
constraints:
- "不处理样式细节"
- "不处理交互逻辑"
max_iterations: 3
一个实现 Agent 与一个评审 Agent 成对协作,实现 → 评审 → 修正 → 再评审,直到达标。
用户输入 → Implementer(实现)→ Reviewer(评审)→ [passed?] → 是:输出 / 否:修正 → 循环
适用场景:
评审标准模板:
review_criteria:
- rule: "还原度 ≥ 95%"
check_method: "截图对比 + 像素偏差检测"
- rule: "无 TypeScript 类型错误"
check_method: "tsc --noEmit"
- rule: "所有交互状态已覆盖"
check_method: "人工检查清单"
reviewer:
id: "reviewer-alpha"
role: "严格的质量评审者,只指出问题不修改代码"
output_format: "结构化评审报告:{passed, score, issues: [{severity, location, description, suggestion}]}"
多代理模式下,Loop State 扩展为支持多 Agent 读写:
loop_state:
goal: "任务目标"
orchestrator: "编排器 Agent 的 ID"
workers:
- id: "worker-a"
status: "running / done / failed / need_human"
current_task: "当前子任务描述"
deliverable: "已交付内容摘要"
errors: []
- id: "worker-b"
status: "done"
current_task: "样式还原"
deliverable: "Tailwind 样式代码 + 颜色 token"
errors: []
shared_evidence:
- "Worker A 已确认:组件树包含 12 个节点"
- "Worker B 已确认:颜色系统提取完成"
messages:
- from: "worker-a"
to: "worker-b"
type: "dependency_ready"
content: "组件树已稳定,可开始样式绑定"
- from: "reviewer-alpha"
to: "worker-c"
type: "critique"
content: "交互逻辑缺少 loading 状态,需补充"
global_iteration: 2
max_global_iterations: 6
status: running
状态同步规则:
status 和 deliverablestatus == "done"messages 作为 Agent 间通信的唯一通道,禁止绕过消息总线直接修改其他 Agent 的状态所有 Agent 间通信必须通过结构化消息:
message:
id: "msg-001"
from: "agent-id"
to: "agent-id / broadcast"
type: "task_assign / result / critique / dependency_ready / escalation / heartbeat"
payload:
# 根据 type 变化
timestamp: "2026-07-07T10:00:00"
priority: "low / normal / high / critical"
消息类型说明:
| 类型 | 用途 | 发送者 | 接收者 |
|---|---|---|---|
task_assign | 分配子任务 | Orchestrator | Worker |
result | 交付子任务结果 | Worker | Orchestrator |
critique | 指出问题并要求修正 | Reviewer | Implementer |
dependency_ready | 通知依赖方前置条件已满足 | Worker | Worker |
escalation | 遇到无法解决的问题,升级给人工 | Worker | Human |
heartbeat | 定期汇报存活状态和当前进展 | Worker | Orchestrator |
当多个 Worker 的结果需要合并时,Orchestrator 执行以下流程:
聚合步骤:
result 消息冲突处理策略:
| 冲突类型 | 检测方式 | 解决策略 |
|---|---|---|
| 接口不一致 | Worker A 输出接口字段与 Worker B 期望不匹配 | Orchestrator 介入定义统一接口,要求双方对齐 |
| 文件覆盖 | 两个 Worker 修改同一文件 | 禁止并行修改同一文件,Orchestrator 在分配任务时隔离文件边界 |
| 数据矛盾 | Worker A 结论与 Worker B 结论相反 | 触发 Review Loop,由评审 Agent 判断哪方证据更充分 |
| 时序依赖 | Worker B 在 Worker A 完成前就开始执行 | Orchestrator 必须显式声明依赖关系,未满足前不分配下游任务 |
多代理模式下,停止条件增加全局维度:
| 停止类型 | 触发条件 |
|---|---|
| 全局成功 | 所有 Worker status == "done" + 集成验证通过 |
| 局部失败 | 单个 Worker 失败且无法通过 Repair 恢复,Orchestrator 判断整体不可完成 |
| 全局预算 | global_iteration >= max_global_iterations(默认 6) |
| 死锁 | 多个 Worker 互相等待依赖,且心跳超时(默认 5 分钟无响应) |
| 人工升级 | 任一 Worker 发送 escalation 消息,或冲突无法自动解决 |
何时用单代理:
何时用多代理:
当 Loop Engineering 与 design-to-code 等其他 skill 配合使用时:
compile_error 策略修复代码后重试构建当多个 Skill 需要协作时,使用多代理模式:
用户: "设计并实现一个古诗词学习小程序"
Orchestrator:
→ 分配 Worker A 调用 design-spec-optimizer → 输出完整设计描述
→ 收集设计描述后
→ 分配 Worker B 调用 design-to-code → 输出前端代码
→ 分配 Worker C 调用 design-to-code(后端部分)→ 输出 API + 数据库
→ 分配 Worker D(Reviewer)评审还原度和代码质量
→ 聚合所有结果 → 集成验证 → 输出完整项目
集成示例(单代理模式):
[Loop Start] Goal: 实现古诗词学习应用的游戏页
Plan: [①组件开发 ②游戏逻辑 ③测试运行]
→ Act: 编写游戏组件
→ Observe: 构建成功
→ Evaluate: passed=true
→ Act: 实现拼图游戏逻辑
→ Observe: 构建成功,但运行时数组越界
→ Evaluate: passed=false, error_type=runtime_error
→ Repair: fix_logic → 修正数组边界检查
→ Act: 重新测试
→ Observe: 游戏正常运行,得分逻辑正确
→ Evaluate: passed=true
→ Stop: 成功停止,输出游戏页代码
集成示例(多代理模式):
[Multi-Agent Loop Start] Goal: 从设计稿实现完整应用
Orchestrator Plan: [Worker A:页面结构 ∥ Worker B:样式还原] → [Worker C:交互逻辑] → [Reviewer:质量评审]
→ Worker A Act: 输出 JSX 骨架
→ Worker A Observe: 组件树完整
→ Worker A → msg(dependency_ready) → Worker B
→ Worker B Act: 输出 Tailwind 样式
→ Worker B Observe: 还原度 96%
→ Worker B → msg(result) → Orchestrator
→ Orchestrator: 分配 Worker C(依赖 A+B 均完成)
→ Worker C Act: 输出交互逻辑
→ Worker C Observe: 构建通过
→ Worker C → msg(result) → Orchestrator
→ Orchestrator: 分配 Reviewer
→ Reviewer Evaluate: passed=false, issues=["缺少 loading 状态"]
→ Reviewer → msg(critique) → Worker C
→ Worker C Repair: 补充 loading 状态
→ Worker C → msg(result) → Orchestrator
→ Reviewer Evaluate: passed=true
→ Orchestrator: 全局成功停止,聚合输出完整项目
loop_trace,作为蒸馏的原材料,禁止省略失败迭代principlerationale,没有因果解释的原则是不可信的迷信