with one click
harness-skill
// 当需要运行 Harness 分层闭环控制系统时,使用这个技能。它是 Codex 中顶层监督控制器的入口,负责状态估计、算子选择、技能绑定、子代理分派、证据收集、裁决与状态更新,而不是直接执行编码。
// 当需要运行 Harness 分层闭环控制系统时,使用这个技能。它是 Codex 中顶层监督控制器的入口,负责状态估计、算子选择、技能绑定、子代理分派、证据收集、裁决与状态更新,而不是直接执行编码。
[HINT] Download the complete skill directory including SKILL.md and all related files
| name | harness-skill |
| description | 当需要运行 Harness 分层闭环控制系统时,使用这个技能。它是 Codex 中顶层监督控制器的入口,负责状态估计、算子选择、技能绑定、子代理分派、证据收集、裁决与状态更新,而不是直接执行编码。 |
Harness 是对 Repo 演进过程的分层闭环控制系统。
它在 Repo 级维护长期基线与系统不变量,在 Worktrack 级约束局部状态转移,并通过 Evidence + Gate 决定状态是否允许推进为新的基线。
Harness 关注的不是"把任务做完"本身,而是:
Harness 的运行基于一条完整的控制回路:
状态估计 → 选择算子 → 绑定技能 → 打包任务/信息 → 分派子代理 → 收集证据 → 裁决 → 状态更新
↑ ↓
└──────────────────────────── 反馈环 ────────────────────────────────────────┘
每个阶段的控制语义:
| 阶段 | Function 算子 | 职责 |
|---|---|---|
| 状态估计 | Observe | 通过传感器读取当前系统状态,与参考信号对比 |
| 选择算子 | Decide | 基于状态估计结果,选择合法的状态转移算子 |
| 绑定技能 | Bind | 将算子映射到具体的 Skill 实现 |
| 打包任务 | Package | 为 SubAgent 准备受约束的任务与信息包 |
| 分派子代理 | Dispatch | 将任务交给执行载体,而不是 Harness 自己执行 |
| 收集证据 | Verify | 通过多维度传感器收集证据,证明"当前状态是什么" |
| 裁决 | Judge | 通过 Gate 判断"当前状态是否允许推进" |
| 状态更新 | Update | 更新 Control State,闭合控制回路 |
关键约束:下游技能的轮次是本地控制步骤,不是隐式停止信号。Harness 应消费下游结构化输出持续推进,直到真正命中正式停止条件。
执行载体偏好:当实现、审查或验证任务可以被打包成边界清楚、信息充分、权限安全的单轮任务时,Harness 默认应优先通过真实 SubAgent 执行,而不是让控制器自己完成执行平面工作。只有在运行时缺少稳定分派壳层、权限边界禁止委派,或任务包不满足安全分派条件时,才允许当前载体回退执行;回退原因必须显式记录。
Harness 作为控制系统,包含以下系统组件:
定义:Harness 通过什么知道状态是真的?
示例:
Harness Control State 中的控制面信号Milestone artifact(.aw/milestone/)中的聚合进度、验收状态和 handback 边界信号没有这些,state 只是"自报状态"。
定义:什么对象实际改变系统状态?
示例:
执行器是被 Harness 调度的对象,不等于 Harness 本体。
定义:什么会让系统偏离?
示例:
扰动必须显式写出来,否则控制律会过于理想化。
定义:gate fail 之后如何恢复控制?
示例:
Harness 控制的不是每一行代码,而是 Repo 演进的偏差、风险、熵,以及状态转移的合法性。
当前有 6 个被控变量:
| 被控变量 | 说明 |
|---|---|
目标偏差 | 当前 Repo / Worktrack 距离目标状态还有多远 |
范围漂移 | 实际改动是否越出了声明的 scope |
集成风险 | 当前改动是否破坏主线或引入不可接受问题 |
治理债务 | 文档、测试、结构、规则是否出现缺口 |
分支熵 | 活跃分支是否过多、过老、失去用途或偏离基线 |
证据完备度 | 当前 review / test / rule-check 是否足以支持放行 |
负责:
控制平面不应因为没有命中一个完全匹配的专用技能,就直接吸收执行责任。正确路径是先把任务压缩成受约束的执行包,再选择专用技能、通用 SubAgent 或明确的当前载体回退。
负责:
因此,Harness 内部的动作应使用控制语义命名:
dispatch-subtask(分派子任务)execute-via-agent(通过代理执行)这样才不会把控制器和执行器粘在一起。
Harness 文档与控制逻辑应按 3 个正交维度组织:
回答"在什么层上控制":
RepoScope —— 慢变量,长期基线WorktrackScope —— 快变量,局部状态转移回答"控制器此刻在做什么":
Observe —— 状态估计Decide —— 选择算子Init —— 初始化局部状态Dispatch —— 分派执行Verify —— 收集证据Judge —— 裁决Recover —— 恢复控制Close —— 关闭并交接ChangeGoal —— 目标变更SetGoal —— 初始化参考信号约束:Function 不是 skill 名字,而是状态转移算子。Skill 是这些算子在 Codex / Claude 里的相对稳定实现。SubAgent 是被 Harness 调度的执行载体。
回答"控制器依赖什么正式对象":
Goal / Charter —— 长期目标,并承载 Engineering Node MapSnapshot / Status —— 当前状态Contract —— 局部状态转移合同,并绑定从 Goal 派生的 Node TypePlan / Task Queue —— 可执行子任务序列Evidence —— 状态转移证据Cursor / Control State —— 控制面当前模式ChangeRequest —— 目标变更请求关键约束:Control State 只保存控制面状态,不承载业务真相。业务真相应分别保存在 Repo 与 Worktrack 的正式文档里。
Engineering Node Map 属于 Repo 级目标真相;Node Type 与 baseline_form、merge_required、gate_criteria、if_interrupted_strategy 属于 Worktrack Contract 的执行约束。下游状态、调度、证据、关卡、恢复和收尾交接只能引用或携带这些字段,不应重新发明策略。
RepoScope 是对长期基线的控制模式。
参考信号设定(循环外,Goal 在循环中不可变):
SetGoal (set-harness-goal-skill) ──→ 仅在 .aw/ 未初始化时
ChangeGoal (repo-change-goal-skill) ──→ 由外部目标变更请求触发
↓
设定/重设完成后启动常规循环
RepoScope 控制回路(Goal 在此回路中不可变):
Observe (repo-status-skill)
↓
Decide (repo-whats-next-skill)
↓
├─→ 保持并观察 ───────────────────────────────→ 回到 Observe
└─→ 准备进入 WorktrackScope ──────────────────→ [Scope 切换]
↓
WorktrackScope 控制回路(局部状态转移): Init (init-worktrack-skill)
↓
Observe (worktrack-status-skill)
↓
Decide (schedule-worktrack-skill)
↓
Dispatch (dispatch-skills)
↓
Verify (review-evidence-skill + test-evidence-skill + rule-check-skill)
↓
Judge (gate-skill)
↓
┌──────────┼──────────┐
↓ ↓ ↓
通过 失败/阻塞 恢复
↓ ↓ ↓
Close Recover Recover
↓ ↓ ↓
[Scope 切换] 回到 Observe/ 回到 RepoScope
↓ Decide 或等待审批
RepoScope.Refresh (repo-refresh-skill)
↓
回到 Observe
↓
[git hash 对比守卫:若 HEAD 未变则跳过刷新]
其中 Close 绑定到 close-worktrack-skill,Recover 绑定到 recover-worktrack-skill。
Observe 阶段的默认绑定为 repo-status-skill。当 repo-status-skill 输出 active_milestone 非空时,Harness 必须在 Observe→Decide 之间追加绑定 milestone-status-skill,获取 milestone_acceptance_verdict、proceed_blockers、handback_required、milestone_input_checkpoint 等 Milestone 级裁决字段后再进入 repo-whats-next-skill 的 Decide 判定。收到 milestone_input_checkpoint 后应将其写回 control-state 的 Baseline Traceability.milestone_input_checkpoint 供下一轮幂等性对比。若无活跃 Milestone,跳过此额外绑定。
控制目标:维护 Repo 的长期基线稳定,判断是否需要进入局部执行。
RepoScope.SetGoal ──→ RepoScope.Observe ──→ RepoScope.Decide ──→ WorktrackScope.Init
↓
WorktrackScope.Observe
↓
WorktrackScope.Decide
↓
WorktrackScope.Dispatch
↓
WorktrackScope.Verify
↓
WorktrackScope.Judge
↓
┌───────────────┼───────────────┐
↓ ↓ ↓
通过 失败/阻塞 恢复
↓ ↓ ↓
Worktrack Worktrack Worktrack
.Close .Recover .Recover
↓ ↓ ↓
RepoScope.Refresh (repo-refresh-skill) 回到 Observe/ 回到 RepoScope
Decide 或等待审批
↓
RepoScope.Observe ──→ [循环]
↓
[git hash 对比守卫:若 HEAD 未变则跳过刷新]
其中 Close 绑定到 close-worktrack-skill,Recover 绑定到 recover-worktrack-skill。
关键约束:PR 不是闭环终点。完整的 closeout 是 merge → refresh repo snapshot → cleanup → return RepoScope。只有这样,Repo 的慢变量才会被真实更新,而不是停留在"PR 已发出"的半闭环状态。
Harness 不能只有 Gate,必须同时有 Evidence。
Evidence 负责证明"当前状态是什么"Gate 负责判断"当前状态是否允许推进"二者必须分开。
Gate 应汇总正交校验面的裁决:
| 校验面 | 判定内容 | 对应 Verify 技能 |
|---|---|---|
implementation-gate | 代码正确性、结构合理性 | review-evidence-skill |
validation-gate | 测试、验收条件、运行结果 | test-evidence-skill |
policy-gate | 规则、边界、不变量、治理要求 | rule-check-skill |
最后由汇总 gate-skill 生成最终 verdict。
当任务不是"写代码",而是"运行当前的 Harness 控制回路"时,使用这个技能:
Scope 和哪个 Function允许的下一路由、建议下一路由、可继续、继续阻塞项、审批字段),而不是在 Harness 内部自行推断.aw 配置读取 / 恢复前置:任何 Harness 轮次启动时,必须先读取既有 .aw/control-state.md,恢复控制面配置与上次交接边界,再进入状态估计。
.aw/control-state.md 或 .aw/goal-charter.md 缺失,说明 Harness 尚未初始化,应路由到 SetGoal / set-harness-goal-skill,不得凭当前对话临时假设长期配置。Linked Formal Documents、Approval Boundary、Continuation Authority、Handback Guard、Baseline Traceability 和 Autonomy Ledger。docs/harness/artifact/control/control-state.md 的默认值解释,并在状态估计中记录 config_hydration_gaps;缺失不能静默扩大权限或自动性。.aw/control-state.md 的对应配置段;若改变 canonical 字段语义或默认值,还必须同步更新 docs/harness/artifact/control/control-state.md 与初始化模板。.aw/control-state.md 只保存控制配置、路径指针与控制面记忆,不得写入 Repo 目标、Worktrack 业务真相或未验证结论。Harness Control State,确定当前 Scope 和 FunctionRepoScope:读取 Repo Goal/Charter、Repo Snapshot/StatusWorktrackScope:读取 Worktrack Contract、Plan/Task Queue、当前 evidence.aw/control-state.md 的 Baseline Traceability 段,获取 latest_observed_checkpoint(即上次刷新时记录的 git commit hash)git rev-parse HEAD 获取当前 HEAD hashrepo-refresh-skill 绑定,仅在状态估计中标记 repo_baseline_unchanged: truelatest_observed_checkpoint 缺失),说明代码基线已变化,必须在本轮合适阶段绑定 repo-refresh-skill 刷新 Repo 级慢变量doc_catch_up_needed: true,并在合适阶段绑定 doc-catch-up-worker-skill;如果上次 doc-catch-up 执行时的 git hash 与当前 HEAD 一致且无新的文档变更,可跳过重复追平基于状态估计结果,评估合法的状态转移算子集合
在 RepoScope 下,评估是否需要:
Observe(继续观察)Init(进入 WorktrackScope)关键约束:ChangeGoal 不由常规 Decide 选择。目标变更由外部请求触发,完成后系统重新进入 Observe。
在 WorktrackScope 下,评估是否需要:
Init(初始化局部状态)Observe(状态估计)Decide(调度)Dispatch(分派执行)Verify(收集证据)Judge(裁决)Recover(恢复)Close(收尾)只推荐一个算子,并投影成显式路由、阻塞项集合与审批状态
.aw/control-state.md 的 subagent_dispatch_mode_override_scope。默认 worktrack-contract-primary 表示当前 Worktrack Contract 的 runtime_dispatch_mode 优先;只有显式 global-override 才让 .aw/control-state.md 的 subagent_dispatch_mode 压过 worktrack。若 worktrack 未声明,再使用 control-state 作为 repo 级默认值,最终默认值为 autoruntime_dispatch_mode / subagent_dispatch_mode 支持 auto / delegated / current-carrierauto 表示宿主运行时提供真实的子代理分派壳层且权限边界允许时,默认使用委派式 SubAgent;运行时没有稳定分派壳层、权限边界禁止委派,或任务包不满足安全分派条件时,必须显式 fallbackdelegated 表示必须真实创建委派载体;如果无法委派,应返回运行时缺口或权限阻塞,而不是自动改为当前载体执行current-carrier 表示本轮显式关闭 SubAgent 委派,允许当前载体在同一份限定范围约定内执行Verify 阶段,收集三个正交维度的证据:
通过软失败硬失败阻塞Harness Control State通过 → 进入 Close → 然后 RepoScope.Refresh:
repo-refresh-skill,从已验证 关卡证据 刷新 Repo Snapshot/Statusgit rev-parse HEAD 获取当前 HEAD hash,将其写入 .aw/control-state.md 的 Baseline Traceability.latest_observed_checkpoint 字段,作为下次状态估计时 git hash 对比的锚点失败/阻塞 → 进入 Recoverdoc-catch-up-worker-skill;版本事实场景使用 version fact sync,并记录 source version、published version、VCS tracking facts 与未更新文档理由。如果 doc-catch-up 成功执行,将当前 git hash 写入 .aw/control-state.md 的 Baseline Traceability.last_doc_catch_up_checkpoint,作为下次文档 freshness 检查的对比锚点.aw/control-state.md 的 Approval Boundary、Continuation Authority 或 Autonomy Ledger,并记录审批理由;一次性审批只能写入本轮 evidence / handoff,不得伪装成长期默认配置。Harness 使用 git commit hash 作为幂等性锚点,避免对同一代码基线重复执行 repo-refresh-skill 和 doc-catch-up-worker-skill。
存储位置:.aw/control-state.md 的 Baseline Traceability 段。
字段定义:
| 字段 | 含义 | 更新时机 |
|---|---|---|
latest_observed_checkpoint | 上次 repo-refresh-skill 执行后记录的 git HEAD hash | RepoScope.Refresh 完成后写入 |
last_doc_catch_up_checkpoint | 上次 doc-catch-up-worker-skill 执行后记录的 git HEAD hash | 文档追平完成后写入 |
verified_at | 最近一次 checkpoint 验证时间 | 每次检查更新 |
工作逻辑:
Harness 启动 → 状态估计阶段
├─ git rev-parse HEAD → 当前 hash
├─ 读取 latest_observed_checkpoint
│ ├─ hash 一致 → repo_baseline_unchanged: true → 跳过 repo-refresh-skill
│ └─ hash 不一致/缺失 → repo_baseline_changed: true → 绑定 repo-refresh-skill
├─ 读取 last_doc_catch_up_checkpoint
│ ├─ hash 一致且本轮无文档变更 → 跳过 doc-catch-up-worker-skill
│ └─ hash 不一致或有文档变更 → doc_catch_up_needed: true → 绑定 doc-catch-up-worker-skill
└─ 继续正常控制回路
Close/Refresh 完成 → 状态更新阶段
├─ repo-refresh-skill 执行成功 → 写入 latest_observed_checkpoint = HEAD hash
└─ doc-catch-up-worker-skill 执行成功 → 写入 last_doc_catch_up_checkpoint = HEAD hash
硬约束:
doc-catch-up 的 hash 对比只能跳过"代码未变且文档未变"的重复追平;如果本轮明确修改了文档,即使 hash 未变也必须触发文档追平检查只有在以下至少一个条件成立时才停止并返回控制权:
审批门控:目标变更、范围扩张、破坏性动作或其他权限边界把 需要审批 置为 真证据门控:所需产物或证据缺失、过期或互相矛盾,已经无法安全继续路由阻塞:当前路由命中 软失败、硬失败、阻塞,或抛出了显式 继续阻塞项运行时缺口:宿主运行时缺少供下一个执行载体使用的安全分派壳层约定边界:下一步动作将越出已批准的代码仓库或工作追踪约定稳定交接:同一个交接边界在连续无变化轮次中再次被确认,因此再做一次完整重读只会重复相同的停止判定结果当 Gate 裁决为失败或阻塞时,Harness 必须进入恢复模式。合法恢复算子:
| 恢复算子 | 适用条件 | 限制 |
|---|---|---|
重试 | 当前目标、排除目标与基准仍然有效 | 不得扩大范围或重定义验收 |
回滚 | 当前状态已不可安全继续 | 除非程序员明确批准,否则执行破坏性变更前必须停止 |
拆分 Worktrack | 当前范围过宽或包含多个独立验收切片 | 不得静默创建新 Worktrack;必须明确验收标准分配 |
刷新基准 | 上游真相变化使当前分支比较失效 | 不得改写 Repo Snapshot/Status 或目标/章程 |
重新规划 | 当前路径整体不可行 | 必须回到 RepoScope 重新 Decide |
以上恢复策略由 recover-worktrack-skill 实现。Gate 裁决为失败或阻塞时,应绑定 recover-worktrack-skill 执行恢复动作;恢复成功后的收尾由 close-worktrack-skill 负责。close-worktrack-skill 同时负责 WorktrackScope 的正常收尾(Gate 通过后的 Close 路径)。
使用这个技能时,产出一份 Harness 控制回路报告,至少包含:
当前 Scope当前 Function控制状态评估本轮已执行控制动作已审阅的产物与证据已运行的下游轮次状态估计结果所选算子绑定技能分派模式收集的证据摘要Gate 裁决结果允许的下一路由建议下一路由建议下一 Scope建议下一 Function可继续继续阻塞项需要审批审批范围审批理由待审批如何审查约定后自动性已使用自动继续检测到稳定交接交接状态交接锁激活检测到解锁信号交接解锁条件继续决策命中停止条件所有 skill 产出的 artifact 必须遵守以下全局协议:
Control Signal 层。Control Signal 层;完整证据、日志、原始输出放在 Supporting Detail 层。N/A,删除占位符行(如 - 或 待填写)。[artifact-path#section] 格式,例如 [.aw/worktrack/contract.md#Task Goal]。Supporting Detail 层必须保留完整内容,只是不纳入传递/决策上下文;后续如需查阅细节,可直接读取。Observe → Decide → Dispatch → Verify → Judge → Recover → Close → ChangeGoal 的控制语义;禁止仅通过技能名称隐式传达当前算子。subagent_dispatch_mode 与工作追踪约定字段 runtime_dispatch_mode 支持 auto / delegated / current-carrier;控制态字段 subagent_dispatch_mode_override_scope 默认是 worktrack-contract-primary,只有显式 global-override 才是全局覆盖;默认 auto 才表示在宿主运行时支持真实 SubAgent 委派且权限边界允许时优先委派。未委派时必须将原因记录为 runtime fallback、permission blocked 或 dispatch package unsafe。.aw 控制配置必须先 hydration 再决策。 Harness 不得忽略上一轮 .aw/control-state.md 中的 linked artifact、approval boundary、continuation authority、handback guard、baseline traceability 或 autonomy ledger;缺失字段只能按 artifact 合同默认值降级解释,不能静默扩大权限。.aw/control-state.md 的配置段;若只是本轮一次性批准,必须保留为本轮 evidence / handoff,不得改变长期默认值。Harness Control State 明确授予 约定后自动性:最小委派 时才可开启;否则必须保持手动交接模式。Worktrack Contract 的 scope;超出 scope 的改动、目标重定义或预算超支必须触发审批门控。要求自动切片后停止 为真,必须停止执行并重新交接。等待交接;仅当观测到显式解锁信号时方可退出此状态。重试、裸 继续工作 或重复文字摘要不构成解锁信号。adjacent_system_referenced 必须为 false。Repo 与 Worktrack 的正式文档中,禁止写入 Control State。使用当前 Harness Control State、当前 Scope 所需的正式产物,以及下游技能的结构化输出作为本轮的权威依据。
判断下一次合法继续推进是否被允许时,应优先使用下游结构化输出,而不是本地叙述性摘要。
三轴参考:
Scope 回答"在什么层上控制"Function 回答"控制器此刻在做什么"Artifact 回答"控制器依赖什么正式对象"Inside the result, include at least these fields or equivalents:
current_scopeartifacts_readstatus_or_verdictallowed_next_routesrecommended_next_routecontinuation_readyrecommended_next_scoperecommended_next_actioncontinuation_decisionstop_conditions_hitapproval_requiredneeds_approvalconfig_hydration_gapspersistent_authority_updates