generic-goal-driven · git:20261011.011df4e · 2026-10-11 · sha256 59f0659d56e840c3

generic-goal-driven git:20261011.011df4eA

Immutable. This exact content never changes and is served at /api/v1/blob/59f0659d56e840c3.

---
name: generic-goal-driven
description: '长周期任务的目标驱动流程:把中心思想、步骤清单、进度指针、改动日志和验收指南存成文件,换 session 也能接着做;每步做完等用户说“通过”;中途可以加或改需求。只在用户明确输入 /generic-goal-driven 时使用,日常任务不要用。关键词:长任务、goal-driven、续接、换 session、防失忆、TODO 清单、中心思想、进度指针、开发日志、验收指南、需求变更。'
argument-hint: '新目标的描述,或“继续”'
disable-model-invocation: true
type: workflow
specificTo: generic
---

# Goal-Driven:长任务不失忆

用文件记住一个大任务。先定中心思想,再拆成小步,一步一步做、自验、交给用户验收。换了 session 或隔了几天,读文件就能接上。

## 使用时机

- 用户认为任务大、会跨很多天或多个 session,并明确输入了 `/generic-goal-driven`。
- 用户说“继续”:接着做已有的目标。
- 做的过程中用户加了需求或改了需求。

## 不要用

- 一个 session 能做完的任务。日常任务直接开一个任务(技能 `harness-my-task`)。
- 用户没有明确要求。你觉得任务很长时,只能建议用户启用,不能自己启动。
- 目标文件不是每个任务都要有。没有目标时,不要补建。

## 文件

放在 `.workspace/goals/<id>/`(git 忽略)。`<id>` 用短英文名,例如 `ledger-migration`。你直接读写这些文件。模板在 [templates/](templates/)。

| 文件 | 放什么 | 多久改一次 |
| --- | --- | --- |
| `GOAL.md` | 中心思想:目标、原则、范围、不做什么、整体验收;“已定的事”;末尾是变更记录 | 需求或决定变了才改 |
| `TODO.md` | 步骤清单:每步有状态、验收标准、反馈记录 | 每步开工、交棒、通过时改 |
| `NOW.md` | 进度指针:现在在哪一步、下一步做什么、用哪个任务 | 每次动手前后都改 |
| `LOG.md` | 改动日志:每个通过的步骤改了什么,以前怎样、现在怎样。只往上加,不改旧条目 | 每步通过时加一条 |
| `accept/<步骤号>.md` | 验收指南:复杂步骤才写,一步一步告诉用户怎么测 | 交棒时写,用户反馈后补 |

状态只有五个:`待做`、`做中`、`已交棒`(等用户验收)、`已通过`、`已取消`。

## 开始新目标

1. 目标有不清楚的地方,先用技能 `generic-grill-me` 问用户。
2. 建目录,按模板写 `GOAL.md`、`TODO.md`、`NOW.md`、`LOG.md`。步骤要小:一个 session 内能做完,用户能单独验收。
3. 给用户文件的链接,让用户在编辑器里看。用户确认前不开始第 1 步。

## 每一步的循环

1. **开工前**:`TODO.md` 该步改成 `做中`;`NOW.md` 写明第几步、用哪个任务。要落盘的步骤,一步开一个任务(技能 `harness-my-task`)。
2. **做**:照任务的规则做。
3. **自验**:跑能跑的检查。结果写下来,不要只说“应该没问题”。
4. **收尾**:先 promote(如需要),再 `task close`。这是“步骤边界”,见下面的 gate 说明。
5. **交棒**:
   - `TODO.md` 该步改成 `已交棒`,写自验结果。
   - 验收按 [验收指南](#验收指南) 写:简单步骤在 `TODO.md` 写一行;复杂步骤写 `accept/<步骤号>.md`,在 `TODO.md` 放链接。
   - `NOW.md` 写“等用户验收”。在对话里告诉用户,然后停下。
6. **用户反馈**:
   - 有问题:写进该步的“反馈记录”(有验收指南的,也写进指南的“反馈记录”),状态改成 `做中`,回到第 2 步。
   - 用户说“通过”:按下面顺序写,再停下等用户说开始。
     1. `LOG.md` 加一条(见 [LOG.md 怎么写](#logmd-怎么写))。
     2. `TODO.md` 该步改成 `已通过` 并写日期。
     3. `NOW.md` 指向下一步,并把这一步的细节删掉(见 [NOW.md 保持短](#nowmd-保持短))。
     4. 说下一步要不要开任务、开哪一种。

## 验收指南

- **简单步骤**(一个文件、一个命令就能看出对不对):在 `TODO.md` 的“验收标准”写一行:看哪里,预期是什么。
- **复杂步骤**(要多个操作、多个 prompt、跨文件看结果):写 `accept/<步骤号>.md`,按 [templates/ACCEPT.md](templates/ACCEPT.md) 的固定节写:目的、前置、步骤、看哪里、预期、自验结果、反馈记录。
- 每个步骤只测一件事。步骤要按顺序编号,每步写清“做什么”和“预期”。
- 命令和 prompt 写成能直接复制的样子。不要让用户去猜。
- 能在磁盘上看的结果(日志、文件、`git diff`),就让用户看文件,由你读。不要让用户复制大段输出回来。
- 能用便宜的做法就用:最小的任务、最小的文件。
- 你已经验过的写进“自验结果”;你验不了的(要用户的环境、账号、真实界面),明说,让用户来测。

## LOG.md 怎么写

每个步骤通过时加一条,新的写在最上面。只写已经完成并通过的改动,不写计划和猜测。

```markdown
### <yyyy-mm-dd>|第 <n> 步:<名称>

- **改了什么**:<文件、命令、行为,给链接;不要贴代码>
- **以前**:<一句话>
- **现在**:<一句话>
- **验收**:<TODO 的哪一行,或 accept 的哪个文件>
```

- 返工步骤也记一条,写明返工的是哪一步。
- 已写的条目不改。写错了,加一条更正。
- 目标整体完成后,用户可以把 `LOG.md` 交给技能 `generic-populate-development-log` 的格式整理,由用户决定。

## NOW.md 保持短

`NOW.md` 只是指针,新 session 第一个读它。

- 只写当前一步和下一步。已通过的步骤细节删掉,细节在 `LOG.md` 和 `TODO.md`。
- 不放环境说明、历史、已完成的清单。
- “卡点和遗留问题”最多 5 条。解决了就删,并在 `LOG.md` 对应条目里提一句。放不下的,说明该开一个新步骤。
- 超过一屏,就是写多了。先删再写。

## 改需求和续接

- 用户加、改或删需求时,按 [references/change.md](references/change.md) 做。
- 新 session 输入“继续”时,按 [references/resume.md](references/resume.md) 做。

## 写文件和 gate

接着任务的会话(`task close` 之前),gate 不许写 `.workspace/goals/` 下的文件(含 `LOG.md`、`accept/`)。所以:

- 开工前先把 `NOW.md` 写好,再开任务。
- 做完先 `task close`,再写 `TODO.md`、`NOW.md`、`LOG.md`、验收指南。
- 任务进行中用户提了新需求:先在对话里记下,到步骤边界再写进文件。用户要立刻存下,就先 `task close`(之后 `task open` 能接回来)。
- 写入被拒绝时,不要用终端命令绕过。照拒绝理由里的下一步做。

## Gotchas

- **只有用户本人在对话里说“通过”,才能标 `已通过`。** 没回应、“差不多”、“还行”都不算,再问一次。你自己宣布通过会让后面所有步骤建在没验收的东西上。
- **不要一次做多步。** 一步交棒后停下,等用户验收,再开下一步。
- **不要改写已通过的步骤和已写的日志。** 它受到需求变更影响时,加一个新步骤(返工)。步骤编号不复用,取消的步骤留着并写原因。
- **记录和磁盘不一致时,以磁盘为准。** 修正记录,并告诉用户。不要照着旧记录继续做。
- **`GOAL.md` 和 `NOW.md` 各保持在一屏左右。** 续接时每次都要读,太长会浪费上下文。旧细节往 `LOG.md` 挪,不要堆在这两个文件里。
- **不要把知识库内容或业务数据抄进目标文件。** 只放指针和结论。
- **本 Skill 不改变权限。** 它只管记录和流程。

## 故障处理

| 问题 | 处理方式 |
| --- | --- |
| 写 `TODO.md`、`NOW.md`、`LOG.md` 被拒绝 | 任务还没关。先 `task close`,再写 |
| 找不到 `.workspace/goals/<id>/` | 问用户目标名。不要新建一个顶替 |
| 目录下有多个目标,不知道接哪个 | 列出各目标的 `NOW.md` 第一行,让用户选 |
| `NOW.md` 写“做中”,但磁盘上没有对应成果 | 当作该步没做。告诉用户,从这一步重新开始 |
| `TODO.md` 写“已通过”,但 `LOG.md` 没有对应条目 | 补一条,写明是补记,并告诉用户 |