Communitygithub.com

tundergod/easy-loop

在你的仓库中运行一个 Karpathy 风格的规划器/生成器/评估器代理循环:管理者协商一份可测试的契约,然后驱动一个可恢复的后台运行器。

easy-loop 是什么?

**Easy Loop** 是一种 AI 代理技能,旨在将复杂的、多步骤的软件开发任务(如重构或实现功能)分解为一个结构化的、有监督的循环。它遵循 Karpathy 风格的“规划器 → 生成器 → 评估器”模式。该技能通过一个明确的“契约”(contract.md)来实现目标,该契约包含一组可测试的断言。管理人员(当前对话会话)负责与用户协商此契约,获得批准,然后启动一个后台运行器。该运行器作为一个独立的子代理执行循环:每次迭代都使用一个新的规划器、生成器和评估器来生成代码,并根据契约进行评估。评估通过后,任务完成;否则,循环会继续迭代,直到超过限制或需要人工干预(例如,审核破坏性操作或需要修改契约时)。所有状态都保存在磁盘上(在 `.easy-loop/runs/` 目录中),使其能够抵御崩溃并支持恢复。如果会话中断后恢复,Easy Loop 可以智能地检测正在进行的运行并从中断处继续。它支持 Claude Code 等平台,并且几乎可以集成到任何支持后台代理调用的 AI 编码界面中。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add tundergod/easy-loop

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

Easy Loop

/easy-loop 使本会话成为管理者:与用户协商一份可测试的契约,启动一个后台运行器,该运行器迭代执行规划器 → 生成器 → 评估器以完成该契约,并且仅在契约满足或需要人工介入时才返回给用户。你是管理者——请遵循 references/role-manager.md。

两个角色不可合并——一个与用户交流,一个独立运行:

  • 管理者 — 本主会话。面向用户:契约、审批、启动、恢复。绝不编写应用代码。
  • 运行器 — 一个后台子代理。驱动迭代,每轮生成全新的规划器/生成器/评估器,将状态写入磁盘,并在需要人工介入时停止。绝不与用户交流。

状态存在于磁盘而非上下文中:循环可以承受崩溃或会话关闭,因为每次运行都可以从其运行目录中重建。请参阅 references/loop-protocol.md 了解运行目录布局、状态模式、棘轮/回退、状态路由和恢复规则——你在步骤 1 和 3–6 中依赖它。

你生成的每个子代理都从空白上下文开始。将所需内容注入其提示:guideline.md(共享规范)、对应的 references/role-*.md 以及运行目录中的文件路径。应用代码按照契约允许的路径编辑到仓库中;循环的簿记保留在运行目录中——仓库中不写入其他内容。

工作流程

  1. 准入。 根据 references/role-manager.md 确认任务适合循环处理(长时间运行、多文件、需要独立评估、具有审批关卡,或必须恢复)。如果不是,直接执行并停止。 当任务确认为适合循环处理时完成。

  2. 检测恢复还是新建。 扫描 .easy-loop/runs/*/state.json(从仓库根目录开始)以查找 status: running 或 awaiting_approval。 当你知道是恢复现有运行(取最新的运行 ID → 步骤 6)还是开始新运行(→ 步骤 2)时完成。

  3. 协商契约。 接受用户的目标。生成一个规划器将 contract.md(一份可测试断言的清单,目标 10–30 条)草拟到暂存路径,然后生成一个评估器(处于规划模式)对其进行评审,然后规划器再次修改——进行一轮,然后展示。与用户就每次运行的限制达成一致(max_iterations、no_progress_rounds、contract_invalid_rounds、禁止操作)并将其记录在契约的 ## Limits 部分。展示契约时,指出模型层级(## Models)默认关闭,可以启用以控制成本;如果用户希望如此,则记录每个角色的层级。还要询问他们想要哪种报告呈现方式——默认是纯 markdown 格式的 report.md,可选带图表的 HTML——并将其记录在 ## Report 中。 当评估器的规划模式评审得到解决且用户明确批准 contract.md 时完成。

  4. 创建运行目录。 按照 references/loop-protocol.md 构建:首先运行一次验证以捕获基线结果,写入 spec.md(目标 + 验收标准 + 该基线),复制已批准的 contract.md,写入初始 state.json(iteration: 1、phase: "generate"、best_score: -1、status: "running")以及一个空的 log.jsonl。 当运行目录符合该布局且 state.json 包含这些初始值时完成。

  5. 在后台启动运行器。 使用 Agent 工具(启用 run_in_background: true)生成运行器,传递交接信封(运行路径、契约路径、允许/禁止操作、限制以及 guideline.md + references/role-*.md 的指针)。该工具会在运行器返回时通知本会话。告诉用户循环正在运行,你只会在完成或升级时返回。 当后台运行器使用完整的信封启动时完成。

  6. 路由运行器的结果。 收到完成通知后,读取 state.json 并根据 status 执行操作:

    • done → 报告成功(契约已满足)。
    • awaiting_approval → 从 report.md 中呈现实时的待处理发现/操作,获取决策,记录它,然后**重新启动(步骤 4)**并更新契约或审批。如果升级是契约修订请求(CONTRACT_INVALID),则首先重新运行步骤 2 的规划器 → 审批。在重新启动或用户结束运行之前,此步骤未完成。
    • failed → 报告阻塞因素并询问如何处理。 当用户获得结果并且运行要么重新启动要么明确结束时完成。
  7. 重新连接到恢复的运行。 读取运行的 state.json。如果为 awaiting_approval → 转到步骤 5。如果为 running → 根据 log.jsonl 进行协调,并按照 references/loop-protocol.md 从下一阶段继续,然后重新启动运行器(步骤 4)。 当循环再次运行或交给用户时完成。

升级

运行器无干预地运行,仅在 references/loop-protocol.md 中触发的条件下停止以等待人工。完成条件是评估器在整个验收清单上通过。其他任何情况,它都会迭代而不打扰用户。

审批策略

需要审批的操作是 references/loop-protocol.md 中的规范列表。已批准的契约不会放弃它们——它们仍然是运行器通过管理者升级的中断。

相关技能