# Goal Loop

> 将已收敛的 map、ADR、spec 或 implementation plan 编译为 Gate 计划、状态账本和跨轮复用的固定执行提示词。

- Skill: `hackycy/goal-loop` (Agent Skill, multi-file: 5 files)
- Install (CLI): `npx skillmds@latest add hackycy/goal-loop`
- Raw SKILL.md: https://api.skillmd.com/api/skills/hackycy/goal-loop/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: hackycy (https://skillmd.com/u/hackycy)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/hackycy/goal-loop

---


# Goal Loop

把决策文档编译成三层工件：

- `implementation-plan.md`：稳定的 Gate 合同，回答做什么、边界是什么、如何验证和何时停止。
- `goal-runbook.md`：唯一的执行状态与证据账本，只回答当前执行到哪里、已有何种证据。
- `goal-prompt.md`：方便人工复制的固定入口，只指向前两份文档；不绑定 Gate，也不重复合同。

本 skill 只建立或验证执行控制面，不实施 Gate，不重做已批准决策。

## 定位输入

用户提供 effort 目录、`map.md`、ADR/spec 或已有 `implementation-plan.md`。解析 Git 仓库根目录并定位 effort；无法唯一定位时停止，列出检查过的路径。

读取适用的 `CLAUDE.md`、`AGENTS.md`、`CONTEXT.md` / `CONTEXT-MAP.md`，以及 effort 中的 map、spec、implementation plan 和它们链接的本地 ADR、decision、issue 与验收依赖。`CONTEXT.md` 只提供术语和领域事实，不单独产生 Gate。

支持两种已收敛入口：

- **Decision-only**：Gate、范围、验证和 Exit 能从已接受 ADR、spec 或已解决 issue 得到。
- **Wayfinder**：map 的 `Not yet specified` 为空或明确为“无”，参与执行顺序和验收的 decision 全部已解决。

本地决策链接缺失、ADR 未接受、decision 未解决，或文档仍有 `TBD`、`TODO`、open question、pending decision 时停止，逐项报告缺口。不得用经验补齐产品决定、验收政策或回退边界。

## 编译计划

若 `implementation-plan.md` 不存在，完整读取 [`references/implementation-plan-schema.md`](references/implementation-plan-schema.md)，从已收敛决策生成计划。若已存在，只读取和验证，不覆盖。

计划独占所有稳定 Gate 合同：Objective、Inputs、Scope boundary、Constraints、Slice policy、Verification、Evidence rule、Stop conditions、Rollback 和 Exit conditions。项目命令与技术约束只写入计划，不进入固定 prompt。

若旧计划包含 `Current Execution State`，初始化 runbook 时可以导入一次；Gate 名称、顺序和状态必须一致，`passed` / `blocked` 必须已有对应证据。导入后不再更新计划。

## 编译或验证账本

完整读取 [`references/runbook-schema.md`](references/runbook-schema.md)。

`goal-runbook.md` 不存在时：

1. 从计划读取 Gate 编号、名称、依赖和合同位置。
2. 写入源码基线、唯一 Goal Ledger 和每个 Gate 的 Progress Log。
3. 没有可导入状态时只将 G0 标为 `active`，其余标为 `planned`。
4. 不复制计划中的 Objective、Constraints、Verification 或其它 Gate 合同。

`goal-runbook.md` 已存在时：

1. 对比源码路径集合和 SHA-256；计划或决策漂移时保持账本原样并停止。
2. 验证 Gate 顺序、计划引用、严格线性依赖、状态机和 Progress Log 证据。
3. 账本只能呈现 `passed* active planned*`、`passed* blocked planned*` 或 `passed+`。

计划是合同的唯一来源；账本是状态和证据的唯一来源。两者不得相互复制字段或双写状态。

## 写入固定 prompt

完整读取 [`references/goal-prompt-template.md`](references/goal-prompt-template.md)，只替换 `{{EFFORT_PATH}}`，写入或替换 `goal-prompt.md`。

固定 prompt 必须：

- 在同一 effort 的所有 Gate 中保持完全相同；
- 不出现 G0/G1 等具体 Gate、Gate 名称或 Objective；
- 不展开 Inputs、Constraints、Verification、Stop conditions、Rollback 或 Exit conditions；
- 保留跨项目稳定的执行循环和行为约束：最小 slice、范围控制、验证失败闭环、职责分片、保留无关实现、不弱化测试、人工验收交接终止和禁止 push；
- 要求在 Goal 启动时锁定当前唯一 active Gate，并只执行该 Gate；人工验收时只请求一次确认，先记录交接证据，再使用宿主 agent 提供的成功终态结束本次 Goal（不得标记为 `blocked`、`paused` 或继续运行），最后输出包含 Gate、自动化结果、验收入口、最小清单、明确回复格式和“Goal 已结束、Gate 仍 active”的交接结果并结束普通会话。此时 Gate 必须保持 `active`，后续只能由用户带着明确验收结果手动重新触发新的 Goal；没有 Goal 状态机制时直接结束当前任务，不创建等待循环。Gate 通过后将当前 Gate 标为 `passed`、直接后继标为 `active`，汇总证据并显式结束整个 Goal，不得把后继 Gate 纳入同一 Goal。

`goal-prompt.md` 是可删除、可重建的复制便利文件。它不属于源码基线，不被计划或 runbook 引用，也不参与状态验证。

最终回复说明是编译还是验证，给出计划、runbook 和固定 prompt 的路径，并输出 prompt 内容。只优化工件时不得实施 Gate。

