@izkac/forgekit 0.3.11 → 0.3.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/bin/forge.mjs +107 -107
  2. package/bin/forgekit.mjs +83 -83
  3. package/bin/review.mjs +81 -81
  4. package/package.json +1 -1
  5. package/scripts/prepack.mjs +78 -78
  6. package/scripts/run-tests.mjs +50 -50
  7. package/src/adr.mjs +236 -236
  8. package/src/adr.test.mjs +170 -170
  9. package/src/change.mjs +327 -234
  10. package/src/change.test.mjs +145 -83
  11. package/src/cleanup-sessions.mjs +84 -84
  12. package/src/config.mjs +103 -103
  13. package/src/defer.mjs +75 -75
  14. package/src/doctor.mjs +350 -341
  15. package/src/doctor.test.mjs +114 -114
  16. package/src/init.mjs +680 -621
  17. package/src/install.mjs +815 -815
  18. package/src/install.test.mjs +180 -180
  19. package/src/integrity-check.mjs +60 -60
  20. package/src/integrity.mjs +682 -682
  21. package/src/integrity.test.mjs +566 -566
  22. package/src/lib.mjs +143 -143
  23. package/src/models.defaults.json +41 -41
  24. package/src/new-session.mjs +99 -99
  25. package/src/openspec-overlays/README.md +19 -19
  26. package/src/openspec-overlays/openspec-apply-change-footer.md +14 -14
  27. package/src/openspec-overlays/opsx-apply-completion-step.md +1 -1
  28. package/src/openspec-overlays/opsx-apply-implement-step.md +11 -11
  29. package/src/paths.mjs +92 -92
  30. package/src/plan-engine.mjs +321 -278
  31. package/src/plan-engine.test.mjs +447 -283
  32. package/src/preferences.defaults.json +78 -78
  33. package/src/preferences.mjs +438 -438
  34. package/src/preferences.test.mjs +174 -174
  35. package/src/record-evidence.mjs +204 -204
  36. package/src/resolve-model.mjs +312 -312
  37. package/src/resolve-model.test.mjs +194 -194
  38. package/src/review/cli.test.mjs +117 -117
  39. package/src/review/export.mjs +172 -172
  40. package/src/review/export.test.mjs +197 -197
  41. package/src/review/fixtures/valid-review.json +42 -42
  42. package/src/review/lib.mjs +894 -894
  43. package/src/review/lib.test.mjs +266 -266
  44. package/src/review/schema.json +196 -196
  45. package/src/review/signals.test.mjs +62 -62
  46. package/src/score-cli.mjs +68 -68
  47. package/src/score.mjs +568 -566
  48. package/src/score.test.mjs +366 -340
  49. package/src/session-reminder.mjs +207 -207
  50. package/src/session-status.mjs +70 -70
  51. package/src/set-models.mjs +186 -186
  52. package/src/set-phase.mjs +205 -205
  53. package/src/set-prefs.mjs +294 -294
  54. package/src/specs-sync.mjs +234 -0
  55. package/src/specs-sync.test.mjs +114 -0
  56. package/src/spine.mjs +93 -93
  57. package/src/triage-prompt.mjs +175 -175
  58. package/src/triage-prompt.test.mjs +50 -50
  59. package/src/vendor-openspec-overlays.mjs +176 -176
  60. package/src/vendor-openspec-overlays.test.mjs +62 -62
  61. package/vendor/skills/archive-to-adr/SKILL.md +149 -149
  62. package/vendor/skills/forge/SKILL.md +136 -136
  63. package/vendor/skills/forge/docs/forge.md +650 -647
  64. package/vendor/skills/forge/phases/brainstorm.md +23 -23
  65. package/vendor/skills/forge/phases/finish.md +90 -87
  66. package/vendor/skills/forge/phases/implement.md +77 -77
  67. package/vendor/skills/forge/phases/plan-openspec.md +60 -60
  68. package/vendor/skills/forge/phases/plan-specs.md +163 -117
  69. package/vendor/skills/forge/phases/review.md +25 -25
  70. package/vendor/skills/forge/phases/verify.md +124 -124
  71. package/vendor/skills/forge/references/forge-layout.md +85 -85
  72. package/vendor/skills/forge/references/pace.md +115 -115
  73. package/vendor/skills/forge/references/plan-routing.md +52 -51
  74. package/vendor/skills/forge/references/runtime-integrity.md +232 -225
  75. package/vendor/skills/forge/references/substantial-work.md +37 -37
  76. package/vendor/skills/forge/references/test-evidence.md +30 -30
  77. package/vendor/skills/forge/references/test-strategy.md +68 -68
  78. package/vendor/skills/forge/skills/subagent-driven-development/SKILL.md +87 -87
  79. package/vendor/skills/forge/subagents/final-reviewer-prompt.md +56 -56
  80. package/vendor/skills/forge/subagents/implementer-prompt.md +38 -38
  81. package/vendor/skills/git-resolve-adr-conflict/SKILL.md +132 -132
  82. package/vendor/skills/thorough-code-review/SKILL.md +290 -290
  83. package/vendor/skills/thorough-code-review/examples.md +133 -133
  84. package/vendor/skills/thorough-code-review/reference/accepted-risks.md +26 -26
  85. package/vendor/skills/thorough-code-review/reference/lenses.md +96 -96
  86. package/vendor/skills/thorough-code-review/reference/phase1-scout.md +62 -62
  87. package/vendor/skills/thorough-code-review/reference/phase2-skeptic.md +105 -105
  88. package/vendor/skills/thorough-code-review/reference/report-schema.json +222 -222
  89. package/vendor/skills/thorough-code-review/reference/report-template.md +115 -115
  90. package/vendor/skills/thorough-code-review/reference/severity-rubric.md +49 -49
  91. package/vendor/skills/thorough-code-review/reference/signals-preflight.md +55 -55
  92. package/vendor/templates/adr/README.md +7 -7
  93. package/vendor/templates/adr/decisions.md +141 -141
  94. package/vendor/templates/adr/hooks/check-pending-adrs.mjs +74 -74
  95. package/vendor/templates/adr/hooks/check-pending-adrs.sh +3 -3
  96. package/vendor/templates/adr/hooks/openspec-archive-agent-message.mjs +52 -52
  97. package/vendor/templates/adr/hooks/openspec-archive-agent-message.sh +3 -3
  98. package/vendor/templates/project/claude/commands/forge-apply.md +75 -75
  99. package/vendor/templates/project/claude/commands/forge-brainstorm.md +7 -7
  100. package/vendor/templates/project/claude/commands/forge-build.md +17 -17
  101. package/vendor/templates/project/claude/commands/forge-plan.md +12 -12
  102. package/vendor/templates/project/claude/commands/forge-skip.md +14 -14
  103. package/vendor/templates/project/claude/commands/forge-status.md +16 -16
  104. package/vendor/templates/project/claude/commands/forge.md +16 -16
  105. package/vendor/templates/project/claude/hooks/forge-prompt-hook.mjs +73 -73
  106. package/vendor/templates/project/claude/hooks/forge-session-start.mjs +19 -19
  107. package/vendor/templates/project/claude/hooks/forge-triage-hook.mjs +77 -77
  108. package/vendor/templates/project/cursor/commands/forge-apply.md +75 -75
  109. package/vendor/templates/project/cursor/commands/forge-brainstorm.md +10 -10
  110. package/vendor/templates/project/cursor/commands/forge-build.md +17 -17
  111. package/vendor/templates/project/cursor/commands/forge-plan.md +15 -15
  112. package/vendor/templates/project/cursor/commands/forge-skip.md +14 -14
  113. package/vendor/templates/project/cursor/commands/forge-status.md +16 -16
  114. package/vendor/templates/project/cursor/commands/forge.md +16 -16
  115. package/vendor/templates/project/cursor/hooks/forge-session-start.mjs +30 -30
  116. package/vendor/templates/project/cursor/hooks/forge-session-start.sh +3 -3
@@ -1,149 +1,149 @@
1
- ---
2
- name: archive-to-adr
3
- description: >-
4
- Create or update Architecture Decision Records (ADRs) from an archived OpenSpec
5
- change. Fire after archive-shaped Bash completes (hooks wrap `openspec archive`
6
- plus `mv` into dated `openspec/changes/archive/…`). Also use when sessionStart
7
- reports pending archives, the user says `/archive-to-adr`, or they ask to
8
- generate ADRs from an archive. Skip entirely when the project has ADRs disabled
9
- (`.forge/config.json` → `adr.enabled: false`).
10
- disable-model-invocation: false
11
- ---
12
-
13
- # Archive to ADR
14
-
15
- Turn a **completed and archived** OpenSpec change into one or more ADRs, following
16
- the project's decisions doc (scaffolded as `docs/decisions.md` by default via
17
- `forge init --adr`).
18
-
19
- This skill is **decoupled** from OpenSpec itself: archive hooks inject a reminder
20
- after successful archive-shaped shells; you judge whether an ADR is warranted.
21
-
22
- ## Project config
23
-
24
- Read **`.forge/config.json`** at the repo root (written by `forge init` / optional
25
- `forgekit install` project scaffold):
26
-
27
- ```json
28
- {
29
- "adr": {
30
- "enabled": true,
31
- "dir": "docs/adr",
32
- "decisionsDoc": "docs/decisions.md"
33
- }
34
- }
35
- ```
36
-
37
- | Field | Default | Meaning |
38
- |-------|---------|---------|
39
- | `adr.enabled` | `true` if file missing and `docs/adr/` exists; else follow install | When `false`, do **not** run this skill — no ADR, no "No ADR" stamp |
40
- | `adr.dir` | `docs/adr` | Directory for `NNNN-short-topic.md` + status `README.md` |
41
- | `adr.decisionsDoc` | sibling `decisions.md` of `adr.dir` | Process / template (when to write, format, hooks) |
42
- | `plan.engine` | `openspec` | `specs` = built-in engine; archives live under `<plan.dir>/changes/archive/` instead of `openspec/changes/archive/` |
43
-
44
- Below, **`{adrDir}`** and **`{decisionsDoc}`** mean those configured paths, and
45
- **`{archiveRoot}`** means `openspec/changes/archive` (OpenSpec engine) or
46
- `<plan.dir>/changes/archive` (specs engine, default `specs/changes/archive`).
47
-
48
- If `adr.enabled` is `false`, stop and tell the user ADRs are disabled for this project.
49
-
50
- ## When to skip entirely (ADRs enabled)
51
-
52
- If the change is a bug fix, copy tweak, docs-only edit, or refactor with no
53
- architectural choice, **do not** create an ADR. Instead add this **single line**
54
- to the archived `proposal.md`:
55
-
56
- ```text
57
- No ADR — non-architectural change
58
- ```
59
-
60
- That silences the session-start pending-ADR backstop.
61
-
62
- ## Input
63
-
64
- **Required:** the archive directory path, e.g.
65
- `{archiveRoot}/2026-05-15-payment-add-service/`.
66
-
67
- If the user only gives the change name, resolve it: list `{archiveRoot}/`
68
- and pick the matching dated folder.
69
-
70
- ## Steps
71
-
72
- 1. **Confirm ADRs are enabled** — read `.forge/config.json` as above.
73
-
74
- 2. **Read the archived artifacts**
75
- - `proposal.md` — Why, What Changes, Capabilities, Impact
76
- - `design.md` — Context, Decisions, Risks, Migration
77
- - `specs/**/*.md` in the archive (capability deltas)
78
-
79
- 3. **Apply the ADR gate** (`{decisionsDoc}` § "When to write an ADR")
80
- - Write an ADR when the change establishes/revises a **boundary**, picks one
81
- approach over a **real** alternative, introduces a **constraint** future code
82
- must respect, picks a **vendor/protocol/library** that is expensive to swap,
83
- or codifies a **repo-wide** convention.
84
- - Skip when it's purely implementation detail inside an existing decision.
85
-
86
- 4. **Pick the next ADR number**
87
- - List `{adrDir}/*.md` (four-digit prefix pattern `NNNN-*.md`).
88
- - Use **the next sequential integer**; never reuse a number.
89
- - If multiple distinct architectural decisions warrant separate ADRs in one
90
- archive, create multiple files (`NNNN-…`, `NNNN+1-…`), each with one sharp decision.
91
-
92
- 5. **Author the ADR file** at `{adrDir}/NNNN-short-topic.md` using the **exact
93
- section structure** from `{decisionsDoc}`:
94
- - Title: `# NNNN. <Short, decision-shaped title>`
95
- - Frontmatter lines: **Status**, **Date**, **Area**, **Related** (link the
96
- archive path, sibling ADRs)
97
- - Body: Context, Decision, Alternatives considered, Consequences
98
- (Positive / Negative / Neutral), References
99
-
100
- Keep it terse (target ~80–200 lines total across all new ADRs for the change).
101
- Link to the archive for forensic detail; don't paste the whole design.
102
-
103
- 6. **Update the status index** `{adrDir}/README.md` — add or amend the table
104
- row(s). If `README.md` is missing, create it with the table scaffold from
105
- `{decisionsDoc}`.
106
-
107
- 7. **Cross-reference from the archive**
108
- - In `{archiveRoot}/<dated-change>/proposal.md`, add (or extend):
109
-
110
- ```markdown
111
- ## Decision record
112
-
113
- This change is recorded as ADR-NNNN ({adrDir}/NNNN-short-topic.md).
114
- ```
115
-
116
- Use `ADR-NNNN` text so pending-ADR hooks (`grep 'ADR-[0-9]'`) recognize the link.
117
-
118
- 8. **If capability specs were promoted** during archive: consider a one-line
119
- pointer in the ADR **References** to `openspec/specs/<capability>/spec.md`
120
- (optional but valuable).
121
-
122
- ## Output
123
-
124
- - Paths of created/updated `{adrDir}/*.md`
125
- - Confirmation `{adrDir}/README.md` was updated
126
- - Confirmation the archived `proposal.md` now references `ADR-NNNN`
127
- - One-sentence summary per ADR written
128
-
129
- ## Guardrails
130
-
131
- - Naming: **`NNNN-short-topic.md`**, not date-only filenames.
132
- - **Never** add `{adrDir}/` to `.cursorindexignore` (or equivalent ignore that
133
- blocks agent retrieval).
134
- - Don't duplicate content that belongs only in OpenSpec — the archive remains
135
- the verbose record; the ADR is the distilled "why."
136
- - If unsure whether to write an ADR, re-read the decisions gate; when still
137
- ambiguous, ask the user once rather than inventing ceremony.
138
-
139
- ## Relationship to hooks
140
-
141
- Project hooks (from `forge init --adr`) may:
142
-
143
- - Remind agents to run **archive-to-adr** after `openspec archive` / an archive
144
- move (either engine)
145
- - At session start, list archives (both `openspec/changes/archive/` and
146
- `specs/changes/archive/`) whose `proposal.md` lacks `ADR-*` **and** lacks
147
- the `No ADR — non-architectural change` stamp
148
-
149
- Neither hook writes ADR files; **this skill** does.
1
+ ---
2
+ name: archive-to-adr
3
+ description: >-
4
+ Create or update Architecture Decision Records (ADRs) from an archived OpenSpec
5
+ change. Fire after archive-shaped Bash completes (hooks wrap `openspec archive`
6
+ plus `mv` into dated `openspec/changes/archive/…`). Also use when sessionStart
7
+ reports pending archives, the user says `/archive-to-adr`, or they ask to
8
+ generate ADRs from an archive. Skip entirely when the project has ADRs disabled
9
+ (`.forge/config.json` → `adr.enabled: false`).
10
+ disable-model-invocation: false
11
+ ---
12
+
13
+ # Archive to ADR
14
+
15
+ Turn a **completed and archived** OpenSpec change into one or more ADRs, following
16
+ the project's decisions doc (scaffolded as `docs/decisions.md` by default via
17
+ `forge init --adr`).
18
+
19
+ This skill is **decoupled** from OpenSpec itself: archive hooks inject a reminder
20
+ after successful archive-shaped shells; you judge whether an ADR is warranted.
21
+
22
+ ## Project config
23
+
24
+ Read **`.forge/config.json`** at the repo root (written by `forge init` / optional
25
+ `forgekit install` project scaffold):
26
+
27
+ ```json
28
+ {
29
+ "adr": {
30
+ "enabled": true,
31
+ "dir": "docs/adr",
32
+ "decisionsDoc": "docs/decisions.md"
33
+ }
34
+ }
35
+ ```
36
+
37
+ | Field | Default | Meaning |
38
+ |-------|---------|---------|
39
+ | `adr.enabled` | `true` if file missing and `docs/adr/` exists; else follow install | When `false`, do **not** run this skill — no ADR, no "No ADR" stamp |
40
+ | `adr.dir` | `docs/adr` | Directory for `NNNN-short-topic.md` + status `README.md` |
41
+ | `adr.decisionsDoc` | sibling `decisions.md` of `adr.dir` | Process / template (when to write, format, hooks) |
42
+ | `plan.engine` | `openspec` | `specs` = built-in engine; archives live under `<plan.dir>/changes/archive/` instead of `openspec/changes/archive/` |
43
+
44
+ Below, **`{adrDir}`** and **`{decisionsDoc}`** mean those configured paths, and
45
+ **`{archiveRoot}`** means `openspec/changes/archive` (OpenSpec engine) or
46
+ `<plan.dir>/changes/archive` (specs engine, default `specs/changes/archive`).
47
+
48
+ If `adr.enabled` is `false`, stop and tell the user ADRs are disabled for this project.
49
+
50
+ ## When to skip entirely (ADRs enabled)
51
+
52
+ If the change is a bug fix, copy tweak, docs-only edit, or refactor with no
53
+ architectural choice, **do not** create an ADR. Instead add this **single line**
54
+ to the archived `proposal.md`:
55
+
56
+ ```text
57
+ No ADR — non-architectural change
58
+ ```
59
+
60
+ That silences the session-start pending-ADR backstop.
61
+
62
+ ## Input
63
+
64
+ **Required:** the archive directory path, e.g.
65
+ `{archiveRoot}/2026-05-15-payment-add-service/`.
66
+
67
+ If the user only gives the change name, resolve it: list `{archiveRoot}/`
68
+ and pick the matching dated folder.
69
+
70
+ ## Steps
71
+
72
+ 1. **Confirm ADRs are enabled** — read `.forge/config.json` as above.
73
+
74
+ 2. **Read the archived artifacts**
75
+ - `proposal.md` — Why, What Changes, Capabilities, Impact
76
+ - `design.md` — Context, Decisions, Risks, Migration
77
+ - `specs/**/*.md` in the archive (capability deltas)
78
+
79
+ 3. **Apply the ADR gate** (`{decisionsDoc}` § "When to write an ADR")
80
+ - Write an ADR when the change establishes/revises a **boundary**, picks one
81
+ approach over a **real** alternative, introduces a **constraint** future code
82
+ must respect, picks a **vendor/protocol/library** that is expensive to swap,
83
+ or codifies a **repo-wide** convention.
84
+ - Skip when it's purely implementation detail inside an existing decision.
85
+
86
+ 4. **Pick the next ADR number**
87
+ - List `{adrDir}/*.md` (four-digit prefix pattern `NNNN-*.md`).
88
+ - Use **the next sequential integer**; never reuse a number.
89
+ - If multiple distinct architectural decisions warrant separate ADRs in one
90
+ archive, create multiple files (`NNNN-…`, `NNNN+1-…`), each with one sharp decision.
91
+
92
+ 5. **Author the ADR file** at `{adrDir}/NNNN-short-topic.md` using the **exact
93
+ section structure** from `{decisionsDoc}`:
94
+ - Title: `# NNNN. <Short, decision-shaped title>`
95
+ - Frontmatter lines: **Status**, **Date**, **Area**, **Related** (link the
96
+ archive path, sibling ADRs)
97
+ - Body: Context, Decision, Alternatives considered, Consequences
98
+ (Positive / Negative / Neutral), References
99
+
100
+ Keep it terse (target ~80–200 lines total across all new ADRs for the change).
101
+ Link to the archive for forensic detail; don't paste the whole design.
102
+
103
+ 6. **Update the status index** `{adrDir}/README.md` — add or amend the table
104
+ row(s). If `README.md` is missing, create it with the table scaffold from
105
+ `{decisionsDoc}`.
106
+
107
+ 7. **Cross-reference from the archive**
108
+ - In `{archiveRoot}/<dated-change>/proposal.md`, add (or extend):
109
+
110
+ ```markdown
111
+ ## Decision record
112
+
113
+ This change is recorded as ADR-NNNN ({adrDir}/NNNN-short-topic.md).
114
+ ```
115
+
116
+ Use `ADR-NNNN` text so pending-ADR hooks (`grep 'ADR-[0-9]'`) recognize the link.
117
+
118
+ 8. **If capability specs were promoted** during archive: consider a one-line
119
+ pointer in the ADR **References** to `openspec/specs/<capability>/spec.md`
120
+ (optional but valuable).
121
+
122
+ ## Output
123
+
124
+ - Paths of created/updated `{adrDir}/*.md`
125
+ - Confirmation `{adrDir}/README.md` was updated
126
+ - Confirmation the archived `proposal.md` now references `ADR-NNNN`
127
+ - One-sentence summary per ADR written
128
+
129
+ ## Guardrails
130
+
131
+ - Naming: **`NNNN-short-topic.md`**, not date-only filenames.
132
+ - **Never** add `{adrDir}/` to `.cursorindexignore` (or equivalent ignore that
133
+ blocks agent retrieval).
134
+ - Don't duplicate content that belongs only in OpenSpec — the archive remains
135
+ the verbose record; the ADR is the distilled "why."
136
+ - If unsure whether to write an ADR, re-read the decisions gate; when still
137
+ ambiguous, ask the user once rather than inventing ceremony.
138
+
139
+ ## Relationship to hooks
140
+
141
+ Project hooks (from `forge init --adr`) may:
142
+
143
+ - Remind agents to run **archive-to-adr** after `openspec archive` / an archive
144
+ move (either engine)
145
+ - At session start, list archives (both `openspec/changes/archive/` and
146
+ `specs/changes/archive/`) whose `proposal.md` lacks `ADR-*` **and** lacks
147
+ the `No ADR — non-architectural change` stamp
148
+
149
+ Neither hook writes ADR files; **this skill** does.
@@ -1,136 +1,136 @@
1
- ---
2
- name: forge
3
- description: >-
4
- Forge — self-contained disciplined development workflow. Triage substantial work,
5
- brainstorm, tracked plan (OpenSpec or built-in specs engine), subagent-driven TDD
6
- implementation, verify, review, and finish.
7
- Use when building features, fixing non-trivial bugs, or when the user invokes /forge.
8
- Skip only when user says /forge:skip or work is trivial.
9
- disable-model-invocation: false
10
- ---
11
-
12
- # Forge
13
-
14
- Spec-tracked development pipeline. Planning engine is per-project
15
- (`.forge/config.json` → `plan.engine`): **OpenSpec** (vendor CLI) or the
16
- **built-in specs engine** (`specs/changes/`, same layout). **Self-contained** —
17
- all workflow skills live under `./skills/` (vendored from Superpowers MIT; see
18
- [skills/NOTICE.md](./skills/NOTICE.md)).
19
-
20
- Full reference: [docs/forge.md](./docs/forge.md) (ships with this skill).
21
-
22
- **Announce at start:** "Using Forge for this work." Include effective pace from
23
- `forge status` (e.g. `Pace: auto → brisk (…)`) — see [references/pace.md](./references/pace.md).
24
-
25
- ## Instruction priority
26
-
27
- 1. User explicit instructions (including `/forge:skip` and pace overrides)
28
- 2. This skill + `./phases/`, `./references/`, and `./skills/`
29
- 3. Project OpenSpec skills (`openspec-propose`, `openspec-apply-change`) — do not edit vendor copies (OpenSpec-engine projects only)
30
-
31
- ## Pace (thoroughness)
32
-
33
- Checkout-local prefs control review/verify ceremony. Default pace is **`auto`**
34
- (resolves once per session from risk signals).
35
-
36
- ```bash
37
- forge prefs # print effective pace (does NOT write a file)
38
- forge prefs brisk # WRITE .forge/preferences.local.json
39
- forge prefs --session-set lite
40
- forge models # print billing (does NOT write); set: included|metered
41
- forge doctor # plan-engine readiness (OpenSpec CLI or specs/ layout)
42
- ```
43
-
44
- Honor [references/pace.md](./references/pace.md) in implement / verify / review.
45
- Hard floor: money/auth/contracts/migrations always get per-task review (even under `standard` mid-group / `brisk` / `lite`).
46
- Local overlays: [docs/forge.md](./docs/forge.md) § Checkout-local overrides.
47
-
48
- ## Bundled skills
49
-
50
- | Skill | Path | When |
51
- | ----- | ---- | ---- |
52
- | Brainstorming | [skills/brainstorming/SKILL.md](./skills/brainstorming/SKILL.md) | brainstorm phase |
53
- | TDD | [skills/test-driven-development/SKILL.md](./skills/test-driven-development/SKILL.md) | every implement task |
54
- | Subagent-driven dev | [skills/subagent-driven-development/SKILL.md](./skills/subagent-driven-development/SKILL.md) | implement phase |
55
- | Systematic debugging | [skills/systematic-debugging/SKILL.md](./skills/systematic-debugging/SKILL.md) | blockers / test failures |
56
- | Verification | [skills/verification-before-completion/SKILL.md](./skills/verification-before-completion/SKILL.md) | verify phase |
57
- | Code review | [skills/requesting-code-review/SKILL.md](./skills/requesting-code-review/SKILL.md) | review phase |
58
-
59
- ## Step 0 — Triage (default)
60
-
61
- Before coding on any non-trivial request, run triage per
62
- [references/substantial-work.md](./references/substantial-work.md).
63
-
64
- - **Substantial (tracked-change-worthy)** → continue Forge (bootstrap session if needed)
65
- - **Too small for a tracked change** → execute directly, no session
66
- - **`/forge:skip`** → mark session `phase: skipped` if one exists; execute directly
67
-
68
- Bootstrap session when entering Forge:
69
-
70
- ```bash
71
- forge new <kebab-slug>
72
- # optional: forge new <slug> --signal "add stripe refund"
73
- ```
74
-
75
- `forge new` resolves pace (default `auto`) onto the session and runs the
76
- plan-engine doctor in warn-only mode (missing OpenSpec CLI does not block
77
- session creation; specs-engine projects skip the CLI check).
78
-
79
- Resume: read `.forge/active.json` → `forge status`.
80
-
81
- Update phase as you progress:
82
-
83
- ```bash
84
- forge phase <phase> [--plan-type openspec|specs] [--openspec <change>]
85
- ```
86
-
87
- Valid phases: `triage`, `brainstorm`, `plan`, `implement`, `verify`, `review`, `finish`, `done`, `skipped`.
88
-
89
- ## Phase flow
90
-
91
- | Phase | Action |
92
- | ----- | ------ |
93
- | brainstorm | [phases/brainstorm.md](./phases/brainstorm.md) → **skills/brainstorming** |
94
- | plan | [references/plan-routing.md](./references/plan-routing.md) → engine from `.forge/config.json`: **OpenSpec** ([plan-openspec.md](./phases/plan-openspec.md)) or **specs** ([plan-specs.md](./phases/plan-specs.md)) |
95
- | implement | [phases/implement.md](./phases/implement.md) → **subagent-driven-development** + **TDD** |
96
- | verify | [phases/verify.md](./phases/verify.md) → **verification-before-completion** |
97
- | review | [phases/review.md](./phases/review.md) → **requesting-code-review** |
98
- | finish | [phases/finish.md](./phases/finish.md) |
99
-
100
- <HARD-GATE>
101
- Do NOT write implementation code during brainstorm or plan phases until the user approves the tracked change (OpenSpec or specs).
102
- </HARD-GATE>
103
-
104
- <HARD-GATE>
105
- Subagent dispatch: NEVER pass a model slug you picked yourself (including any from the host's model list). Run `forge resolve-model --tier <fast|standard|capable>` and honor its JSON — omit the `model` parameter when `omitModel` is true, else pass `model` exactly. Metered/API models only on explicit user request. This applies to retries and fallbacks too: if a dispatch fails, re-resolve — do not hand-pick a replacement slug.
106
- </HARD-GATE>
107
-
108
- ## Session artefacts
109
-
110
- Layout: [references/forge-layout.md](./references/forge-layout.md)
111
-
112
- Testing: [references/test-strategy.md](./references/test-strategy.md) — tier 1 scoped TDD per task, tier 2 narrow evidence per task, tier 3 full workspace once at verify.
113
-
114
- ## Guardrails (every phase)
115
-
116
- - No autonomous `git commit` / push unless the user explicitly asks
117
- - Tests required for behavior changes
118
- - Trace ecosystem consumers when contracts change
119
- - Honor `openspec/config.yaml` prefixes when the project uses them (OpenSpec engine)
120
- - **Runtime integrity** — [references/runtime-integrity.md](./references/runtime-integrity.md): **spine.json mandatory every change** (rows or `notApplicable` — not keyword-gated); no stubs / false success; capability specs beat narrow task wording; every claimed capability needs a named production caller; when spine has rows the product loop must be **executed** — `e2e.json` steps + green `forge e2e run` (or BLOCKED), prose does not satisfy the gate; deferred wiring only via `forge defer` — `forge phase done` mechanically refuses on `forge integrity-check` failures
121
-
122
- ## Agent surfaces
123
-
124
- | Agent | Skill (after `forgekit install`) | Project wiring (`forge init`) |
125
- | ----- | ----------------------------- | ----------------------------- |
126
- | **Cursor** | `~/.cursor/skills/forge/` | commands, `forge.mdc`, SessionStart hook |
127
- | **Claude Code** | `~/.claude/skills/forge/` | commands, `forge.md`, SessionStart + prompt hooks |
128
- | **Codex CLI** | `~/.codex/skills/forge/` | thin rule |
129
-
130
- **Planning (all agents):** after brainstorm, proceed directly to the configured engine — no plan-mode prompt. See [references/plan-routing.md](./references/plan-routing.md). Hooks remind agents to run the propose flow when `planType` is unset.
131
-
132
- **Distribute:** edit `skills/forge/` in forgekit, then `forgekit install --skills forge --force` on each machine. The bundled skills are a maintained fork (see [skills/NOTICE.md](./skills/NOTICE.md)) — do not re-vendor from Superpowers.
133
-
134
- ## Do not edit vendor OpenSpec skills
135
-
136
- OpenSpec vendor skills upgrade in place. Forge behaviour lives in this tree and [docs/forge.md](./docs/forge.md). Re-apply vendor patches with `forge overlay` after OpenSpec upgrades.
1
+ ---
2
+ name: forge
3
+ description: >-
4
+ Forge — self-contained disciplined development workflow. Triage substantial work,
5
+ brainstorm, tracked plan (OpenSpec or built-in specs engine), subagent-driven TDD
6
+ implementation, verify, review, and finish.
7
+ Use when building features, fixing non-trivial bugs, or when the user invokes /forge.
8
+ Skip only when user says /forge:skip or work is trivial.
9
+ disable-model-invocation: false
10
+ ---
11
+
12
+ # Forge
13
+
14
+ Spec-tracked development pipeline. Planning engine is per-project
15
+ (`.forge/config.json` → `plan.engine`): **OpenSpec** (vendor CLI) or the
16
+ **built-in specs engine** (`specs/changes/`, same layout). **Self-contained** —
17
+ all workflow skills live under `./skills/` (vendored from Superpowers MIT; see
18
+ [skills/NOTICE.md](./skills/NOTICE.md)).
19
+
20
+ Full reference: [docs/forge.md](./docs/forge.md) (ships with this skill).
21
+
22
+ **Announce at start:** "Using Forge for this work." Include effective pace from
23
+ `forge status` (e.g. `Pace: auto → brisk (…)`) — see [references/pace.md](./references/pace.md).
24
+
25
+ ## Instruction priority
26
+
27
+ 1. User explicit instructions (including `/forge:skip` and pace overrides)
28
+ 2. This skill + `./phases/`, `./references/`, and `./skills/`
29
+ 3. Project OpenSpec skills (`openspec-propose`, `openspec-apply-change`) — do not edit vendor copies (OpenSpec-engine projects only)
30
+
31
+ ## Pace (thoroughness)
32
+
33
+ Checkout-local prefs control review/verify ceremony. Default pace is **`auto`**
34
+ (resolves once per session from risk signals).
35
+
36
+ ```bash
37
+ forge prefs # print effective pace (does NOT write a file)
38
+ forge prefs brisk # WRITE .forge/preferences.local.json
39
+ forge prefs --session-set lite
40
+ forge models # print billing (does NOT write); set: included|metered
41
+ forge doctor # plan-engine readiness (OpenSpec CLI or specs/ layout)
42
+ ```
43
+
44
+ Honor [references/pace.md](./references/pace.md) in implement / verify / review.
45
+ Hard floor: money/auth/contracts/migrations always get per-task review (even under `standard` mid-group / `brisk` / `lite`).
46
+ Local overlays: [docs/forge.md](./docs/forge.md) § Checkout-local overrides.
47
+
48
+ ## Bundled skills
49
+
50
+ | Skill | Path | When |
51
+ | ----- | ---- | ---- |
52
+ | Brainstorming | [skills/brainstorming/SKILL.md](./skills/brainstorming/SKILL.md) | brainstorm phase |
53
+ | TDD | [skills/test-driven-development/SKILL.md](./skills/test-driven-development/SKILL.md) | every implement task |
54
+ | Subagent-driven dev | [skills/subagent-driven-development/SKILL.md](./skills/subagent-driven-development/SKILL.md) | implement phase |
55
+ | Systematic debugging | [skills/systematic-debugging/SKILL.md](./skills/systematic-debugging/SKILL.md) | blockers / test failures |
56
+ | Verification | [skills/verification-before-completion/SKILL.md](./skills/verification-before-completion/SKILL.md) | verify phase |
57
+ | Code review | [skills/requesting-code-review/SKILL.md](./skills/requesting-code-review/SKILL.md) | review phase |
58
+
59
+ ## Step 0 — Triage (default)
60
+
61
+ Before coding on any non-trivial request, run triage per
62
+ [references/substantial-work.md](./references/substantial-work.md).
63
+
64
+ - **Substantial (tracked-change-worthy)** → continue Forge (bootstrap session if needed)
65
+ - **Too small for a tracked change** → execute directly, no session
66
+ - **`/forge:skip`** → mark session `phase: skipped` if one exists; execute directly
67
+
68
+ Bootstrap session when entering Forge:
69
+
70
+ ```bash
71
+ forge new <kebab-slug>
72
+ # optional: forge new <slug> --signal "add stripe refund"
73
+ ```
74
+
75
+ `forge new` resolves pace (default `auto`) onto the session and runs the
76
+ plan-engine doctor in warn-only mode (missing OpenSpec CLI does not block
77
+ session creation; specs-engine projects skip the CLI check).
78
+
79
+ Resume: read `.forge/active.json` → `forge status`.
80
+
81
+ Update phase as you progress:
82
+
83
+ ```bash
84
+ forge phase <phase> [--plan-type openspec|specs] [--openspec <change>]
85
+ ```
86
+
87
+ Valid phases: `triage`, `brainstorm`, `plan`, `implement`, `verify`, `review`, `finish`, `done`, `skipped`.
88
+
89
+ ## Phase flow
90
+
91
+ | Phase | Action |
92
+ | ----- | ------ |
93
+ | brainstorm | [phases/brainstorm.md](./phases/brainstorm.md) → **skills/brainstorming** |
94
+ | plan | [references/plan-routing.md](./references/plan-routing.md) → engine from `.forge/config.json`: **OpenSpec** ([plan-openspec.md](./phases/plan-openspec.md)) or **specs** ([plan-specs.md](./phases/plan-specs.md)) |
95
+ | implement | [phases/implement.md](./phases/implement.md) → **subagent-driven-development** + **TDD** |
96
+ | verify | [phases/verify.md](./phases/verify.md) → **verification-before-completion** |
97
+ | review | [phases/review.md](./phases/review.md) → **requesting-code-review** |
98
+ | finish | [phases/finish.md](./phases/finish.md) |
99
+
100
+ <HARD-GATE>
101
+ Do NOT write implementation code during brainstorm or plan phases until the user approves the tracked change (OpenSpec or specs).
102
+ </HARD-GATE>
103
+
104
+ <HARD-GATE>
105
+ Subagent dispatch: NEVER pass a model slug you picked yourself (including any from the host's model list). Run `forge resolve-model --tier <fast|standard|capable>` and honor its JSON — omit the `model` parameter when `omitModel` is true, else pass `model` exactly. Metered/API models only on explicit user request. This applies to retries and fallbacks too: if a dispatch fails, re-resolve — do not hand-pick a replacement slug.
106
+ </HARD-GATE>
107
+
108
+ ## Session artefacts
109
+
110
+ Layout: [references/forge-layout.md](./references/forge-layout.md)
111
+
112
+ Testing: [references/test-strategy.md](./references/test-strategy.md) — tier 1 scoped TDD per task, tier 2 narrow evidence per task, tier 3 full workspace once at verify.
113
+
114
+ ## Guardrails (every phase)
115
+
116
+ - No autonomous `git commit` / push unless the user explicitly asks
117
+ - Tests required for behavior changes
118
+ - Trace ecosystem consumers when contracts change
119
+ - Honor `openspec/config.yaml` prefixes when the project uses them (OpenSpec engine)
120
+ - **Runtime integrity** — [references/runtime-integrity.md](./references/runtime-integrity.md): **spine.json mandatory every change** (rows or `notApplicable` — not keyword-gated); no stubs / false success; capability specs beat narrow task wording; every claimed capability needs a named production caller; when spine has rows the product loop must be **executed** — `e2e.json` steps + green `forge e2e run` (or BLOCKED), prose does not satisfy the gate; deferred wiring only via `forge defer` — `forge phase done` mechanically refuses on `forge integrity-check` failures
121
+
122
+ ## Agent surfaces
123
+
124
+ | Agent | Skill (after `forgekit install`) | Project wiring (`forge init`) |
125
+ | ----- | ----------------------------- | ----------------------------- |
126
+ | **Cursor** | `~/.cursor/skills/forge/` | commands, `forge.mdc`, SessionStart hook |
127
+ | **Claude Code** | `~/.claude/skills/forge/` | commands, `forge.md`, SessionStart + prompt hooks |
128
+ | **Codex CLI** | `~/.codex/skills/forge/` | thin rule |
129
+
130
+ **Planning (all agents):** after brainstorm, proceed directly to the configured engine — no plan-mode prompt. See [references/plan-routing.md](./references/plan-routing.md). Hooks remind agents to run the propose flow when `planType` is unset.
131
+
132
+ **Distribute:** edit `skills/forge/` in forgekit, then `forgekit install --skills forge --force` on each machine. The bundled skills are a maintained fork (see [skills/NOTICE.md](./skills/NOTICE.md)) — do not re-vendor from Superpowers.
133
+
134
+ ## Do not edit vendor OpenSpec skills
135
+
136
+ OpenSpec vendor skills upgrade in place. Forge behaviour lives in this tree and [docs/forge.md](./docs/forge.md). Re-apply vendor patches with `forge overlay` after OpenSpec upgrades.