Community写作与编辑github.com

merttcetn/pev-loop

基于证据的规划器-执行器-验证器循环,适用于长期运行的Codex目标,具有全新的角色上下文和仅限操作系统临时目录的运行状态。

pev-loop 是什么?

PEV Loop 是一个用于长周期 Codex 项目的无状态规划器-执行器-验证器循环智能体技能。它通过将主要 AI 智能体限制为薄控制器角色,强制执行非协商性保证,如保持角色隔离、仅使用临时文件存储运行状态,以及防止自我评分。该技能支持使用 `max=N` 和 `using=$skill-name` 等参数进行自定义,要求每个规划、执行和验证智能体都使用全新的、独立的上下文(`fork_turns="none"`)启动。PEV Loop 与本地目标工具集成,旨在通过在失败时提供无偏见的验证和清晰的状态来防止奖励黑客攻击,确保可靠和可审计的 AI 辅助软件开发。

兼容平台~Claude Code✓Codex CLI~Cursor
npx skills add merttcetn/pev-loop

Installed? Explore more 写作与编辑 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

在你喜欢的 AI 中提问

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

文档

PEV 循环

围绕一个持久目标运行无状态规划器-执行器-验证器循环。将主智能体保持为薄控制器:维护规范状态、分派隔离角色、强制执行限制并报告结果,而不规划、实施或评估产品本身。

不可协商的保证

  • 要求显式调用 $pev。将此次调用视为创建或重用匹配本地目标以及分派 P、E 和 V 子智能体的授权。
  • 让控制器远离产品工作。不得在主上下文中检查源文件主体、实施更改、解释原始测试日志或决定标准满足情况。
  • 使用全新上下文创建每个 P、E 和 V 智能体。使用 fork_turns="none" 或运行时的最强等效项。
  • 绝不让智能体评估自己的工作。
  • 对验证器隐藏规划器和执行器的推理、摘要和预期结果。
  • 仅允许验证器证据更改标准的满足状态。
  • 将所有运行状态存储在一个唯一命名的操作系统临时目录中。绝不要在仓库、工作区、主目录或技能目录下创建运行状态。
  • 运行结束时保留确切的临时目录。不要将其中内容暂存、提交、推送、发布或复制到持久的项目文件中。
  • 将 PEV 机制排除在产品标准之外。通过控制器的机械审计强制执行迭代限制、模型路由、角色隔离和仅临时状态。
  • 不要仅仅为了获得通过而删除、跳过、削弱或重写现有测试。仅当用户目标要求时才允许合理的测试更改,然后让验证器对其进行仔细审查。
  • 绝不要绕过最终的全标准验证。

解析调用

接受 $pev 之后的目标以及这些可选控制参数:

  • max=N 或 --max N:允许 1..10;默认为 6。
  • using=$skill-name:在相关每个角色中独立加载指定技能。在标准中将其要求包含在内,要求执行器遵循它,并要求验证器独立评估它。

如果调用省略了目标,则读取活动的本地目标。如果两者都不存在,则询问目标并停止。

当本地目标工具可用时:

  1. 在创建目标之前读取当前目标。
  2. 仅当活动目标与请求的目标匹配时才重用。
  3. 当没有目标时创建一个。除非用户显式提供,否则不设置代币预算。
  4. 如果存在不同的未完成目标,则停止并要求用户解决它,而不是替换它。

当本地目标工具不可用时,作为有界 PEV 运行继续,并说明自动延续不可用。

引导临时状态

运行:

python3 <skill-directory>/scripts/init_run.py --max-iterations <N>

在线程中记录返回的绝对 run_dir 并将其显式传递给每个子智能体。在首次分派之前阅读 references/contracts.md。

使用准确的目标和约束填充 goal.json。分派一个全新的规范规划器来创建不可更改的完成定义。要求每个标准项:

  • 从未满足状态开始;
  • 描述可观察的结果而非活动;
  • 命名可接受的证据;
  • 保留用户和仓库约束;并且
  • 可独立验证。

将内部 PEV 机制(如迭代计数、智能体选择、上下文隔离、临时路径和控制器簿记)排除在产品标准之外。当它们约束请求的结果时,保留用户可见的工作区不变性,例如“不要提交”、“不要推送”或“不要修改测试”。

在控制器的机械模式门控之后冻结 rubric.json。仅将可变满足状态和证据存储在 progress.json 中。

控制器拥有每个状态文件。P、E 和 V 智能体必须返回紧凑的 JSON 响应,并且不得修改临时状态。

运行循环

对于从 1 到 max_iterations 的每次迭代,按顺序执行以下阶段。

1. 分派全新的规划器

启动一个全新的只读 Sol 规划器。只给它:

  • 工作区路径;
  • goal.json、rubric.json 和 progress.json;
  • 之前的验证器裁决(如果存在);
  • 迭代编号和剩余预算;以及
  • 显式请求的 using= 技能。

允许规划器检查产品和仓库说明。不要给它之前的规划器或执行器推理。

要求一个与合同匹配的有界 task_packet。仅当没有有用的工作单元剩余时才允许 DONE_CANDIDATE;绝不要将其视为完成的证明。

机械地拒绝以下计划:

  • 未解决任何未满足的标准项;
  • 省略了范围、约束或验证目标;
  • 重复失败的工作单元而没有回应验证器证据;
  • 请求测试削弱或未经授权的破坏性操作;或
  • 无法适应一个执行器分配。

对于高风险的安全、迁移、权限、财务或不可逆工作,在执行前插入一个全新的只读计划审查员。给它目标、标准和任务包,但不给规划器推理。

在接受任务包后写入 plan.json,然后再分派执行器。不要将控制器状态更新推迟到验证之后。

2. 分派全新的执行器

启动一个全新的 Sol 工作进程,只拥有任务包文件的所属权和责任。告知它代码库中可能存在其他工作,并且它必须保留不相关的更改。

给它:

  • 确切的任务包;
  • 工作区路径和适用的仓库说明;
  • 避免范围漂移所需的原始约束;以及
  • 显式请求的 using= 技能。

不要给它验证器权限。要求它实施一个有意义的工作单元,运行相应的检查,并仅返回执行器收据。不要让它更新标准或临时状态。

防止验证和构建命令在目标工作区中留下意外的缓存、日志、覆盖率输出或其他非产品工件。当支持时,将可丢弃的输出路由到独立创建的操作系统临时位置。否则,仅删除由该分配创建的、来源确定的确切可丢弃工件;绝不要删除预先存在的或模糊的路径。

当运行时支持模型覆盖时,按如下方式路由推理努力:

  • 机械的、范围狭窄的执行:gpt-5.6-sol 配合 低;
  • 普通实施:gpt-5.6-sol 配合 中;
  • 交叉或高风险实施:gpt-5.6-sol 配合 高。

除非目标显式请求这些操作,否则不要提交或推送。

3. 分派全新的盲验证器

启动一个全新的只读 Sol 验证器,使用 高 推理;对于关键安全、迁移、权限或不可逆工作,使用 极高。

只给它:

  • 准确原始目标和冻结的标准;
  • 工作区或已产生的工件;
  • 适用的仓库说明;
  • 用户强制要求的验证命令;以及
  • 显式请求的 using= 技能。

不要给它控制器运行目录、任务包、规划器输出、执行器收据、实施摘要、预期结果、先前裁决理由或 P/E 对话历史。如果验证器的工具需要可丢弃的输出,则为其提供一个单独的操作系统临时暂存目录。

要求验证器独立检查当前产品,运行相关检查,检查测试更改以防范奖励黑客攻击,并返回裁决合同。验证器不得修改产品、测试、运行状态或外部系统。

4. 更新规范状态

让控制器验证响应形状,将完整响应写入迭代的裁决文件,并在任何下一次分派之前将验证器支持的状态和证据复制到 progress.json 中。不要将弱证据重新解释为通过。

  • 在 NEEDS_WORK 上,使用新的规划器开始下一次迭代。
  • 在 PASS 上,分派一个额外的全新最终验证器,不带先前的满足状态。要求它从头评估每个标准项。
  • 在最终 PASS 上,运行控制器的机械审计,检查角色隔离、迭代计数、仅临时状态和授权边界。仅当两个门控都通过时,才将本地目标标记为完成。
  • 在最终失败时,如果还有迭代剩余,则继续。

停止条件

仅在新最终验证器证明每个标准项后成功停止。

将产品验证和编排完整性视为单独的门控:

  • 产品门控: 一个新的盲最终验证器证明冻结的标准。
  • 控制器门控: 机器可检查的记录证明迭代限制、全新角色分派、仅临时状态以及没有未经授权的提交、推送、发布、部署或破坏性操作。

不要将控制器簿记失败发送回产品验证器或将其转化为产品标准项。在可能时立即修复安全的簿记;否则报告控制器门控失败而不声称完成。

在迭代限制处:

  • 不要声称成功;
  • 不要仅仅因为达到限制而将目标标记为完成或阻塞;
  • 报告已满足的项、剩余项、决定性证据和确切的临时路径;以及
  • 保持目标活动以进行显式延续。

仅当运行时的重复阻塞器阈值真正满足时,才将目标标记为阻塞。当授权、重大产品决策、缺少凭据或不可用的外部依赖项阻止安全进展时,暂停等待用户输入。

恢复

如果临时目录消失,则创建一个新目录,并根据活动线程目标和对话重建目标及其冻结的标准。将所有先前的满足视为未证明,然后在继续之前运行全新的完整验证器。

如果子智能体失败:

  • 使用相同的隔离边界重试关键 P、E 或 V 角色一次;
  • 绝不要用控制器判断替换缺失的验证器裁决;
  • 通过新的规划器缩小过大的工作单元;
  • 保留不相关的工作区更改;以及
  • 当迭代限制阻止恢复时,诚实地报告差距。

最终质量门控

在返回成功之前,确认:

  • 主智能体仅充当控制器;
  • 每个角色使用全新的隔离上下文;
  • 没有智能体评估自己的输出;
  • 验证器未看到 P/E 推理或预期结果;
  • 每个标准项都有来自最终验证器的当前、直接证据;
  • 现有测试未被削弱以制造成功;
  • 由工作流创建的意外命令工件未保留在目标工作区中;
  • 运行状态仅存在于记录的操作系统临时目录下;
  • 没有运行状态被提交或复制到项目中;以及
  • 仅在最终 PASS 之后,本地目标(如果可用)才被标记为完成。

相关技能