forge-workflow 0.1.0-beta.2 → 0.1.0-beta.4

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 (155) hide show
  1. package/.forge/hooks/check-tdd.js +79 -5
  2. package/.forge/hooks/forge-native-hook.js +194 -8
  3. package/AGENTS.md +2 -1
  4. package/CHANGELOG.md +28 -0
  5. package/QUICKSTART.md +6 -2
  6. package/README.md +3 -1
  7. package/bin/forge-cmd.js +1 -1
  8. package/bin/forge.js +95 -19
  9. package/docs/guides/SETUP.md +4 -1
  10. package/docs/guides/SUPPORT.md +5 -0
  11. package/docs/reference/COMMANDS.md +12 -1
  12. package/docs/reference/shepherd.md +114 -3
  13. package/lib/activation/ensure-forge-home.js +135 -0
  14. package/lib/adapters/beads-kernel-compat.js +67 -0
  15. package/lib/adapters/greptile-review-adapter.js +1 -1
  16. package/lib/adapters/pr-state-adapter.js +103 -8
  17. package/lib/adoption-profiles.js +17 -4
  18. package/lib/agents-config.js +5 -0
  19. package/lib/beads-detect.js +60 -0
  20. package/lib/commands/_aliases.js +248 -0
  21. package/lib/commands/_issue.js +65 -41
  22. package/lib/commands/_manifest.js +3 -1
  23. package/lib/commands/_registry.js +14 -0
  24. package/lib/commands/_resolve-command-opts.js +36 -60
  25. package/lib/commands/claim.js +2 -4
  26. package/lib/commands/gate.js +19 -2
  27. package/lib/commands/hooks.js +294 -12
  28. package/lib/commands/init.js +26 -20
  29. package/lib/commands/memory.js +81 -0
  30. package/lib/commands/migrate.js +0 -161
  31. package/lib/commands/plan.js +71 -123
  32. package/lib/commands/pr.js +88 -0
  33. package/lib/commands/prime.js +8 -1
  34. package/lib/commands/push.js +66 -0
  35. package/lib/commands/recall.js +67 -12
  36. package/lib/commands/recap.js +18 -4
  37. package/lib/commands/release.js +15 -3
  38. package/lib/commands/remember.js +86 -20
  39. package/lib/commands/serve.js +5 -2
  40. package/lib/commands/setup.js +135 -73
  41. package/lib/commands/shepherd.js +102 -4
  42. package/lib/commands/ship.js +40 -4
  43. package/lib/commands/skill.js +275 -0
  44. package/lib/commands/status.js +37 -32
  45. package/lib/commands/test.js +32 -0
  46. package/lib/commands/worktree.js +87 -5
  47. package/lib/core/runtime-graph.js +122 -17
  48. package/lib/forge-issues.js +13 -464
  49. package/lib/gate-events.js +54 -55
  50. package/lib/global-flags.js +30 -0
  51. package/lib/grounding/context-events.js +230 -0
  52. package/lib/grounding/read-first.js +112 -0
  53. package/lib/harness-capability-matrix.js +2 -2
  54. package/lib/hook-renderer.js +144 -12
  55. package/lib/issue-backend.js +42 -3
  56. package/lib/kernel/backing-issue.js +7 -1
  57. package/lib/kernel/broker.js +28 -0
  58. package/lib/kernel/migrations.js +30 -2
  59. package/lib/kernel/owned-kernel.js +43 -0
  60. package/lib/kernel/schema.js +35 -0
  61. package/lib/kernel/sqlite-driver.js +187 -1
  62. package/lib/memory-recall.js +151 -0
  63. package/lib/orientation.js +303 -6
  64. package/lib/pr-bundle.js +6 -2
  65. package/lib/pr-monitor/auto-actions.js +175 -0
  66. package/lib/pr-monitor/digest.js +206 -0
  67. package/lib/pr-monitor/reconcile-executor.js +659 -0
  68. package/lib/pr-monitor/reconcile-tick.js +138 -0
  69. package/lib/pr-monitor/reconcile.js +0 -0
  70. package/lib/pr-monitor/render-sticky.js +57 -8
  71. package/lib/pr-monitor/shepherd-lease.js +243 -0
  72. package/lib/pr-monitor/upsert-sticky.js +169 -0
  73. package/lib/pr-monitor/watch-lifecycle.js +1 -1
  74. package/lib/pr-pull.js +113 -17
  75. package/lib/project-memory.js +8 -0
  76. package/lib/release-readiness.js +17 -1
  77. package/lib/rules-sync.js +4 -0
  78. package/lib/runtime-health.js +15 -46
  79. package/lib/skill-eval.js +750 -0
  80. package/lib/status/identity.js +46 -0
  81. package/lib/status/presenter.js +0 -35
  82. package/lib/status/snapshot.js +11 -16
  83. package/lib/upgrade-safety.js +52 -1
  84. package/lib/using-forge.js +315 -0
  85. package/lib/workflow/enforce-stage.js +64 -7
  86. package/lib/workflow/state-manager.js +23 -23
  87. package/package.json +2 -2
  88. package/rules/using-forge.md +24 -0
  89. package/scripts/forge-team/index.sh +0 -5
  90. package/scripts/forge-team/tests/dispatcher.test.sh +1 -1
  91. package/scripts/forge-team/tests/workflow-integration.test.sh +0 -1
  92. package/scripts/pr-auto-actions.js +93 -0
  93. package/scripts/pr-verdict-label.js +50 -0
  94. package/scripts/test.js +8 -1
  95. package/skills/claim-safety/SKILL.md +4 -0
  96. package/skills/claim-safety/evals/scorecard.json +41 -0
  97. package/skills/coverage.json +83 -0
  98. package/skills/dev/SKILL.md +4 -0
  99. package/skills/dev/evals/scorecard.json +41 -0
  100. package/skills/gates/SKILL.md +80 -0
  101. package/skills/gates/evals/evals.json +38 -0
  102. package/skills/gates/evals/scorecard.json +41 -0
  103. package/skills/hermes-forge/SKILL.md +1 -0
  104. package/skills/hermes-forge/evals/scorecard.json +41 -0
  105. package/skills/issue-basics/SKILL.md +1 -0
  106. package/skills/issue-basics/evals/scorecard.json +41 -0
  107. package/skills/kernel/SKILL.md +38 -0
  108. package/skills/kernel/evals/scorecard.json +41 -0
  109. package/skills/memory/SKILL.md +16 -1
  110. package/skills/memory/evals/scorecard.json +41 -0
  111. package/skills/parallel-deep-research/SKILL.md +1 -0
  112. package/skills/parallel-deep-research/evals/scorecard.json +41 -0
  113. package/skills/plan/SKILL.md +6 -0
  114. package/skills/plan/evals/scorecard.json +41 -0
  115. package/skills/portability/SKILL.md +47 -0
  116. package/skills/portability/evals/evals.json +34 -0
  117. package/skills/portability/evals/scorecard.json +41 -0
  118. package/skills/research/SKILL.md +1 -0
  119. package/skills/research/evals/scorecard.json +41 -0
  120. package/skills/review/SKILL.md +6 -0
  121. package/skills/review/evals/scorecard.json +41 -0
  122. package/skills/rollback/SKILL.md +1 -0
  123. package/skills/rollback/evals/scorecard.json +41 -0
  124. package/skills/setup/SKILL.md +91 -0
  125. package/skills/setup/evals/evals.json +42 -0
  126. package/skills/setup/evals/scorecard.json +41 -0
  127. package/skills/shepherd/SKILL.md +76 -36
  128. package/skills/shepherd/evals/evals.json +21 -9
  129. package/skills/shepherd/evals/scorecard.json +41 -0
  130. package/skills/ship/SKILL.md +6 -0
  131. package/skills/ship/evals/scorecard.json +41 -0
  132. package/skills/smith/SKILL.md +8 -0
  133. package/skills/smith/evals/scorecard.json +41 -0
  134. package/skills/sonarcloud/SKILL.md +1 -0
  135. package/skills/sonarcloud/evals/scorecard.json +41 -0
  136. package/skills/sonarcloud-analysis/SKILL.md +1 -0
  137. package/skills/sonarcloud-analysis/evals/scorecard.json +41 -0
  138. package/skills/status/SKILL.md +3 -0
  139. package/skills/status/evals/scorecard.json +41 -0
  140. package/skills/triage-ready/SKILL.md +2 -0
  141. package/skills/triage-ready/evals/scorecard.json +41 -0
  142. package/skills/using-forge/SKILL.md +104 -0
  143. package/skills/using-forge/evals/scorecard.json +41 -0
  144. package/skills/validate/SKILL.md +4 -0
  145. package/skills/validate/evals/scorecard.json +41 -0
  146. package/skills/verify/SKILL.md +4 -0
  147. package/skills/verify/evals/scorecard.json +41 -0
  148. package/skills/worktree/SKILL.md +87 -0
  149. package/skills/worktree/evals/evals.json +38 -0
  150. package/skills/worktree/evals/scorecard.json +41 -0
  151. package/lib/adapters/beads-issue-adapter.js +0 -127
  152. package/lib/commands/board.js +0 -64
  153. package/lib/status/beads-snapshot.js +0 -145
  154. package/scripts/forge-team/lib/dashboard.sh +0 -316
  155. package/scripts/forge-team/tests/dashboard.test.sh +0 -155
@@ -0,0 +1,41 @@
1
+ {
2
+ "skill": "shepherd",
3
+ "fixtures": "present",
4
+ "static": {
5
+ "token_cost": {
6
+ "desc_chars": 997,
7
+ "body_lines": 86,
8
+ "score": 43
9
+ },
10
+ "caps": {
11
+ "desc_within": true,
12
+ "body_within": true,
13
+ "score": 100
14
+ },
15
+ "description_quality": {
16
+ "has_trigger_cues": true,
17
+ "has_disambiguation_cues": true,
18
+ "adequate_length": true,
19
+ "score": 100
20
+ }
21
+ },
22
+ "router_reachability": {
23
+ "has_curated_rule": true,
24
+ "router_exempt": false,
25
+ "fixtures": "present",
26
+ "fixtures_total": 9,
27
+ "fixtures_best_hit": 6,
28
+ "reachable": true,
29
+ "keyword_alignment": 0.67
30
+ },
31
+ "behavioral": {
32
+ "trigger_recall": null,
33
+ "trigger_precision": null,
34
+ "disambiguation": null,
35
+ "chain_correctness": null,
36
+ "outcome_quality": null,
37
+ "variance": null,
38
+ "note": "behavioral — W5 (LLM judge): semantic recall/precision/chain/outcome/variance, not deterministic"
39
+ },
40
+ "composite": 83
41
+ }
@@ -14,12 +14,18 @@ description: >
14
14
  (verify); reverting an already-shipped change (rollback). If the PR already exists, this is
15
15
  not the skill.
16
16
  allowed-tools: Bash, Read, Edit, Grep, Glob
17
+ next: review
18
+ terminal: false
19
+ handoffs:
20
+ - shepherd
17
21
  ---
18
22
 
19
23
  Push code and create a pull request with full context and documentation links.
20
24
 
21
25
  # Ship
22
26
 
27
+ > **Chain (HARD-GATE):** the successor depends on the change classification (source of truth: lib/workflow/stages.js) — Standard → `review`; Critical → `review` → `verify`; Simple/Hotfix/Refactor/Docs END at `ship`. `review` is the default/critical-path next; `shepherd` may monitor the PR's checks. `ship` never merges.
28
+
23
29
  This skill creates a PR after validation passes.
24
30
 
25
31
  ## Usage
@@ -0,0 +1,41 @@
1
+ {
2
+ "skill": "ship",
3
+ "fixtures": "present",
4
+ "static": {
5
+ "token_cost": {
6
+ "desc_chars": 993,
7
+ "body_lines": 237,
8
+ "score": 28
9
+ },
10
+ "caps": {
11
+ "desc_within": true,
12
+ "body_within": true,
13
+ "score": 100
14
+ },
15
+ "description_quality": {
16
+ "has_trigger_cues": true,
17
+ "has_disambiguation_cues": true,
18
+ "adequate_length": true,
19
+ "score": 100
20
+ }
21
+ },
22
+ "router_reachability": {
23
+ "has_curated_rule": true,
24
+ "router_exempt": false,
25
+ "fixtures": "present",
26
+ "fixtures_total": 5,
27
+ "fixtures_best_hit": 3,
28
+ "reachable": true,
29
+ "keyword_alignment": 0.6
30
+ },
31
+ "behavioral": {
32
+ "trigger_recall": null,
33
+ "trigger_precision": null,
34
+ "disambiguation": null,
35
+ "chain_correctness": null,
36
+ "outcome_quality": null,
37
+ "variance": null,
38
+ "note": "behavioral — W5 (LLM judge): semantic recall/precision/chain/outcome/variance, not deterministic"
39
+ },
40
+ "composite": 78
41
+ }
@@ -13,6 +13,14 @@ description: >
13
13
  skill only when the user explicitly wants just that one step (e.g. "just open the
14
14
  PR").
15
15
  allowed-tools: Read, Bash(forge:*)
16
+ terminal: true
17
+ subskills:
18
+ - plan
19
+ - dev
20
+ - validate
21
+ - ship
22
+ - review
23
+ - verify
16
24
  ---
17
25
 
18
26
  # Smith — the orchestrator super-skill
@@ -0,0 +1,41 @@
1
+ {
2
+ "skill": "smith",
3
+ "fixtures": "present",
4
+ "static": {
5
+ "token_cost": {
6
+ "desc_chars": 819,
7
+ "body_lines": 127,
8
+ "score": 47
9
+ },
10
+ "caps": {
11
+ "desc_within": true,
12
+ "body_within": true,
13
+ "score": 100
14
+ },
15
+ "description_quality": {
16
+ "has_trigger_cues": true,
17
+ "has_disambiguation_cues": true,
18
+ "adequate_length": true,
19
+ "score": 100
20
+ }
21
+ },
22
+ "router_reachability": {
23
+ "has_curated_rule": true,
24
+ "router_exempt": false,
25
+ "fixtures": "present",
26
+ "fixtures_total": 6,
27
+ "fixtures_best_hit": 0,
28
+ "reachable": false,
29
+ "keyword_alignment": 0
30
+ },
31
+ "behavioral": {
32
+ "trigger_recall": null,
33
+ "trigger_precision": null,
34
+ "disambiguation": null,
35
+ "chain_correctness": null,
36
+ "outcome_quality": null,
37
+ "variance": null,
38
+ "note": "behavioral — W5 (LLM judge): semantic recall/precision/chain/outcome/variance, not deterministic"
39
+ },
40
+ "composite": 84
41
+ }
@@ -13,6 +13,7 @@ description: >
13
13
  Not for local SAST scans of your own code, nor the Forge issue tracker (`forge issue ...`,
14
14
  "open/ready issues") — here those bare words always mean SonarCloud.
15
15
  allowed-tools: Bash, Read, Grep, Glob, WebFetch
16
+ terminal: true
16
17
  ---
17
18
 
18
19
  # SonarCloud Query Command
@@ -0,0 +1,41 @@
1
+ {
2
+ "skill": "sonarcloud",
3
+ "fixtures": "present",
4
+ "static": {
5
+ "token_cost": {
6
+ "desc_chars": 977,
7
+ "body_lines": 147,
8
+ "score": 38
9
+ },
10
+ "caps": {
11
+ "desc_within": true,
12
+ "body_within": true,
13
+ "score": 100
14
+ },
15
+ "description_quality": {
16
+ "has_trigger_cues": false,
17
+ "has_disambiguation_cues": true,
18
+ "adequate_length": true,
19
+ "score": 60
20
+ }
21
+ },
22
+ "router_reachability": {
23
+ "has_curated_rule": true,
24
+ "router_exempt": false,
25
+ "fixtures": "present",
26
+ "fixtures_total": 6,
27
+ "fixtures_best_hit": 6,
28
+ "reachable": true,
29
+ "keyword_alignment": 1
30
+ },
31
+ "behavioral": {
32
+ "trigger_recall": null,
33
+ "trigger_precision": null,
34
+ "disambiguation": null,
35
+ "chain_correctness": null,
36
+ "outcome_quality": null,
37
+ "variance": null,
38
+ "note": "behavioral — W5 (LLM judge): semantic recall/precision/chain/outcome/variance, not deterministic"
39
+ },
40
+ "composite": 61
41
+ }
@@ -18,6 +18,7 @@ tags: [sonarcloud, code-quality, issues, metrics, security]
18
18
  context: fork
19
19
  tools: [Bash, WebFetch, Read, Grep, Glob]
20
20
  model: sonnet
21
+ terminal: true
21
22
  ---
22
23
 
23
24
  <role>
@@ -0,0 +1,41 @@
1
+ {
2
+ "skill": "sonarcloud-analysis",
3
+ "fixtures": "present",
4
+ "static": {
5
+ "token_cost": {
6
+ "desc_chars": 993,
7
+ "body_lines": 156,
8
+ "score": 36
9
+ },
10
+ "caps": {
11
+ "desc_within": true,
12
+ "body_within": true,
13
+ "score": 100
14
+ },
15
+ "description_quality": {
16
+ "has_trigger_cues": true,
17
+ "has_disambiguation_cues": true,
18
+ "adequate_length": true,
19
+ "score": 100
20
+ }
21
+ },
22
+ "router_reachability": {
23
+ "has_curated_rule": true,
24
+ "router_exempt": false,
25
+ "fixtures": "present",
26
+ "fixtures_total": 6,
27
+ "fixtures_best_hit": 0,
28
+ "reachable": false,
29
+ "keyword_alignment": 0
30
+ },
31
+ "behavioral": {
32
+ "trigger_recall": null,
33
+ "trigger_precision": null,
34
+ "disambiguation": null,
35
+ "chain_correctness": null,
36
+ "outcome_quality": null,
37
+ "variance": null,
38
+ "note": "behavioral — W5 (LLM judge): semantic recall/precision/chain/outcome/variance, not deterministic"
39
+ },
40
+ "composite": 81
41
+ }
@@ -12,6 +12,7 @@ description: >
12
12
  (issue-basics); the Hermes harness's token-bounded orient/recap contract (hermes-forge); or
13
13
  the post-merge CI health check that closes issues after a merge lands (verify).
14
14
  allowed-tools: Bash, Read, Grep, Glob
15
+ terminal: true
15
16
  ---
16
17
 
17
18
  Check where you are in the project and what work is in progress.
@@ -44,6 +45,8 @@ This command dynamically computes and displays all issues ranked by composite sc
44
45
 
45
46
  For full context on any issue: `forge show <id>`
46
47
 
48
+ For the full workflow contract and command reference at session start, run `forge prime`.
49
+
47
50
  ### Step 1b: Reconcile stale in-progress issues
48
51
 
49
52
  Check if any in-progress issues were already merged but not closed (can happen if `/verify` was skipped or backup was restored from stale snapshot):
@@ -0,0 +1,41 @@
1
+ {
2
+ "skill": "status",
3
+ "fixtures": "present",
4
+ "static": {
5
+ "token_cost": {
6
+ "desc_chars": 954,
7
+ "body_lines": 90,
8
+ "score": 44
9
+ },
10
+ "caps": {
11
+ "desc_within": true,
12
+ "body_within": true,
13
+ "score": 100
14
+ },
15
+ "description_quality": {
16
+ "has_trigger_cues": false,
17
+ "has_disambiguation_cues": true,
18
+ "adequate_length": true,
19
+ "score": 60
20
+ }
21
+ },
22
+ "router_reachability": {
23
+ "has_curated_rule": true,
24
+ "router_exempt": false,
25
+ "fixtures": "present",
26
+ "fixtures_total": 6,
27
+ "fixtures_best_hit": 2,
28
+ "reachable": true,
29
+ "keyword_alignment": 0.33
30
+ },
31
+ "behavioral": {
32
+ "trigger_recall": null,
33
+ "trigger_precision": null,
34
+ "disambiguation": null,
35
+ "chain_correctness": null,
36
+ "outcome_quality": null,
37
+ "variance": null,
38
+ "note": "behavioral — W5 (LLM judge): semantic recall/precision/chain/outcome/variance, not deterministic"
39
+ },
40
+ "composite": 63
41
+ }
@@ -14,6 +14,8 @@ description: >
14
14
  whole session or routing to stage skills (use kernel), not for driving an issue to a merged
15
15
  PR (use smith).
16
16
  allowed-tools: Read, Bash(forge:*)
17
+ next: claim-safety
18
+ terminal: false
17
19
  ---
18
20
 
19
21
  # Triage: what should I work on next
@@ -0,0 +1,41 @@
1
+ {
2
+ "skill": "triage-ready",
3
+ "fixtures": "present",
4
+ "static": {
5
+ "token_cost": {
6
+ "desc_chars": 977,
7
+ "body_lines": 105,
8
+ "score": 42
9
+ },
10
+ "caps": {
11
+ "desc_within": true,
12
+ "body_within": true,
13
+ "score": 100
14
+ },
15
+ "description_quality": {
16
+ "has_trigger_cues": true,
17
+ "has_disambiguation_cues": true,
18
+ "adequate_length": true,
19
+ "score": 100
20
+ }
21
+ },
22
+ "router_reachability": {
23
+ "has_curated_rule": true,
24
+ "router_exempt": false,
25
+ "fixtures": "present",
26
+ "fixtures_total": 5,
27
+ "fixtures_best_hit": 1,
28
+ "reachable": true,
29
+ "keyword_alignment": 0.2
30
+ },
31
+ "behavioral": {
32
+ "trigger_recall": null,
33
+ "trigger_precision": null,
34
+ "disambiguation": null,
35
+ "chain_correctness": null,
36
+ "outcome_quality": null,
37
+ "variance": null,
38
+ "note": "behavioral — W5 (LLM judge): semantic recall/precision/chain/outcome/variance, not deterministic"
39
+ },
40
+ "composite": 83
41
+ }
@@ -0,0 +1,104 @@
1
+ ---
2
+ name: using-forge
3
+ description: >
4
+ Forge dispatch skill: the session bootstrap that makes Forge's skills auto-trigger as a
5
+ reasoning-driven SYSTEM. Reach for this FIRST, before ANY response (including clarifying
6
+ questions, codebase exploration, or file reads), whenever there is even a 1% chance a Forge
7
+ skill applies. Carries the 1%-rule, the announce-before-acting rule, an anti-rationalization
8
+ red-flags table, a subagent escape hatch, and an intent-to-skill routing table: add/build/scope
9
+ a feature to plan; implement an existing task to dev; fix a failing test or bug to dev (debug
10
+ first); type-check/lint/tests to validate; push and open a PR to ship; address PR/review
11
+ feedback to review; post-merge health to verify; what to work on to triage-ready; where am I /
12
+ current stage to status; create/close/search an issue to issue-basics; drive one issue
13
+ end-to-end to smith; monitor a PR to shepherd. Run `forge skill for "<situation>"` for a
14
+ deterministic fallback. NOT itself a stage; the kernel skill is the fuller umbrella index
15
+ once oriented.
16
+ allowed-tools: Read, Bash(forge:*)
17
+ terminal: true
18
+ ---
19
+
20
+ <SUBAGENT-STOP>
21
+ If you were dispatched as a subagent to execute one specific task, ignore this skill and do
22
+ the task you were given. This dispatch rule is for the top-level session, not for a scoped
23
+ subagent — otherwise every subagent would re-enter routing instead of working.
24
+ </SUBAGENT-STOP>
25
+
26
+ <EXTREMELY-IMPORTANT>
27
+ If you think there is even a 1% chance a Forge skill applies to what you are doing, you MUST
28
+ invoke that skill BEFORE any response or action.
29
+
30
+ IF A SKILL APPLIES TO YOUR TASK, YOU DO NOT HAVE A CHOICE. YOU MUST USE IT.
31
+
32
+ This is not negotiable. You cannot rationalize your way out of it.
33
+ </EXTREMELY-IMPORTANT>
34
+
35
+ ## The rule
36
+
37
+ **Invoke the relevant or requested Forge skill BEFORE any response or action** — including
38
+ clarifying questions, exploring the codebase, or checking files. If it turns out wrong for the
39
+ situation, you don't have to follow it — but you check first.
40
+
41
+ Then **announce** `Using [skill] to [purpose]` and follow the skill exactly. If it has a
42
+ checklist or HARD-GATE, create one todo per item.
43
+
44
+ When unsure WHICH skill fits, either consult the routing table below or run
45
+ `forge skill for "<what you are about to do>"` for a deterministic best-fit answer.
46
+
47
+ ## Intent → skill routing table
48
+
49
+ Process skills set the approach first; then the stage/implementation skill carries it out.
50
+
51
+ | When the situation is… | Start with |
52
+ |------------------------|-----------|
53
+ | "Add / build / scope a new feature", "let's build X" | `plan` |
54
+ | Implement a task that a plan already defined | `dev` |
55
+ | "Fix this bug" / a failing test / unexpected behavior | `dev` (if `superpowers:systematic-debugging` is installed, apply its technique first, then implement via `dev`) |
56
+ | Run type-check, lint, security, or tests | `validate` |
57
+ | Push the branch and open a PR | `ship` |
58
+ | Address PR / review-agent feedback (CodeRabbit, Greptile, CI) | `review` |
59
+ | Post-merge health check, close issues | `verify` |
60
+ | "What should I work on?" — rank the ready queue | `triage-ready` |
61
+ | "Where am I?" / current stage / stale or active work | `status` |
62
+ | Create / update / close / search / comment on ONE issue | `issue-basics` |
63
+ | Claim an issue and PROVE the lease before mutating | `claim-safety` |
64
+ | Drive one issue plan→merged-PR under human gates | `smith` |
65
+ | Monitor / shepherd a PR's CI + checks (never merges) | `shepherd` |
66
+ | Deep, multi-source web research | `research` / `parallel-deep-research` |
67
+ | "How does Forge fit together?" / which verb for X | `kernel` |
68
+ | Safe revert / undo a merged change | `rollback` |
69
+
70
+ If two skills seem to apply, run the process skill first (`plan`, `systematic-debugging`), then
71
+ the doing skill. `kernel` is the umbrella index — use it to orient, not to do the work.
72
+
73
+ ## Red flags — these thoughts mean STOP, you are rationalizing
74
+
75
+ | Thought | Reality |
76
+ |---------|---------|
77
+ | "This is just a simple question" | Questions are tasks. Check for a skill. |
78
+ | "I need more context first" | The skill check comes BEFORE clarifying questions. |
79
+ | "Let me explore the codebase first" | Skills tell you HOW to explore. Check first. |
80
+ | "I can check git/files quickly" | Files lack conversation context. Check for a skill. |
81
+ | "This doesn't need a formal stage" | If a skill exists, use it. |
82
+ | "I remember what that skill says" | Skills evolve. Read the current version. |
83
+ | "The skill is overkill here" | Simple things become complex. Use it. |
84
+ | "I'll just do this one thing first" | Check BEFORE doing anything. |
85
+ | "It's obviously a plan/dev/ship" | Then invoking it costs nothing. Invoke it. |
86
+
87
+ ## Subagent escape hatch
88
+
89
+ You do NOT have to hold every skill in your own context. When a task is independent and
90
+ bounded, dispatch a subagent with the specific skill and a self-contained brief, and keep only
91
+ its conclusion. Parallelize independent tasks (see `superpowers:dispatching-parallel-agents`).
92
+ Reviewers/verifiers that find nothing must say so and name what they inspected.
93
+
94
+ ## Agent-agnostic
95
+
96
+ This skill syncs to every harness mirror (`.agents/`, `.claude/`, `.codex/`, `.cursor/`,
97
+ `.hermes/`), and the same routing guidance is reachable via `forge skill for "<situation>"` on
98
+ any harness — never branch on harness identity. On Claude the SessionStart hook injects this
99
+ text automatically; elsewhere, AGENTS.md points here and the CLI router is the fallback.
100
+
101
+ ## User instructions win
102
+
103
+ CLAUDE.md / AGENTS.md and direct user requests take precedence over skills, which in turn
104
+ override default behavior. Skip a skill only when your human partner explicitly tells you to.
@@ -0,0 +1,41 @@
1
+ {
2
+ "skill": "using-forge",
3
+ "fixtures": "no-fixtures",
4
+ "static": {
5
+ "token_cost": {
6
+ "desc_chars": 1016,
7
+ "body_lines": 87,
8
+ "score": 42
9
+ },
10
+ "caps": {
11
+ "desc_within": true,
12
+ "body_within": true,
13
+ "score": 100
14
+ },
15
+ "description_quality": {
16
+ "has_trigger_cues": false,
17
+ "has_disambiguation_cues": true,
18
+ "adequate_length": true,
19
+ "score": 60
20
+ }
21
+ },
22
+ "router_reachability": {
23
+ "has_curated_rule": false,
24
+ "router_exempt": false,
25
+ "fixtures": "no-fixtures",
26
+ "fixtures_total": 0,
27
+ "fixtures_best_hit": 0,
28
+ "reachable": null,
29
+ "keyword_alignment": null
30
+ },
31
+ "behavioral": {
32
+ "trigger_recall": null,
33
+ "trigger_precision": null,
34
+ "disambiguation": null,
35
+ "chain_correctness": null,
36
+ "outcome_quality": null,
37
+ "variance": null,
38
+ "note": "behavioral — W5 (LLM judge): semantic recall/precision/chain/outcome/variance, not deterministic"
39
+ },
40
+ "composite": 63
41
+ }
@@ -13,6 +13,8 @@ description: >
13
13
  is `/ship`), it does not answer PR review feedback from Greptile / SonarCloud / CodeRabbit
14
14
  (that is `/review`), and it is not the post-merge CI health check (that is `/verify`).
15
15
  allowed-tools: Bash, Read, Grep, Glob
16
+ next: ship
17
+ terminal: false
16
18
  ---
17
19
 
18
20
  > **Note:** Three things share the "validate" name in Forge:
@@ -24,6 +26,8 @@ Run comprehensive validation including type checking, linting, code review, secu
24
26
 
25
27
  # Validate
26
28
 
29
+ > **Chain (HARD-GATE):** the ONLY skill you invoke after `validate` is `ship`. Do not open the PR until validation shows fresh passing output in THIS session.
30
+
27
31
  This skill validates all code before creating a pull request.
28
32
 
29
33
  ## Usage
@@ -0,0 +1,41 @@
1
+ {
2
+ "skill": "validate",
3
+ "fixtures": "present",
4
+ "static": {
5
+ "token_cost": {
6
+ "desc_chars": 995,
7
+ "body_lines": 300,
8
+ "score": 21
9
+ },
10
+ "caps": {
11
+ "desc_within": true,
12
+ "body_within": true,
13
+ "score": 100
14
+ },
15
+ "description_quality": {
16
+ "has_trigger_cues": false,
17
+ "has_disambiguation_cues": true,
18
+ "adequate_length": true,
19
+ "score": 60
20
+ }
21
+ },
22
+ "router_reachability": {
23
+ "has_curated_rule": true,
24
+ "router_exempt": false,
25
+ "fixtures": "present",
26
+ "fixtures_total": 5,
27
+ "fixtures_best_hit": 3,
28
+ "reachable": true,
29
+ "keyword_alignment": 0.6
30
+ },
31
+ "behavioral": {
32
+ "trigger_recall": null,
33
+ "trigger_precision": null,
34
+ "disambiguation": null,
35
+ "chain_correctness": null,
36
+ "outcome_quality": null,
37
+ "variance": null,
38
+ "note": "behavioral — W5 (LLM judge): semantic recall/precision/chain/outcome/variance, not deterministic"
39
+ },
40
+ "composite": 56
41
+ }
@@ -12,12 +12,16 @@ description: >
12
12
  rollback to undo an already-shipped change, status to merely report the current stage
13
13
  without acting, and issue-basics to close an issue unrelated to a just-merged PR.
14
14
  allowed-tools: Bash, Read, Grep, Glob
15
+ next: ship
16
+ terminal: false
15
17
  ---
16
18
 
17
19
  Verify that the merge landed correctly and everything is running properly after merge.
18
20
 
19
21
  # Verify
20
22
 
23
+ > **Chain (HARD-GATE):** the successor depends on the change classification (source of truth: lib/workflow/stages.js) — in the post-merge flow (Critical/Standard/Refactor/Simple/Hotfix) NOTHING follows `verify`; the `docs` flow alone reuses `verify` → `ship` as a pre-ship content check. `verify` is therefore not universally terminal — a chain-aware harness MUST gate on classification, not blindly follow `next`.
24
+
21
25
  This skill runs AFTER the user has merged the PR. It checks system health — not documentation (that was handled by the pre-merge gate embedded in `/ship` and `/review`).
22
26
 
23
27
  ## Usage
@@ -0,0 +1,41 @@
1
+ {
2
+ "skill": "verify",
3
+ "fixtures": "present",
4
+ "static": {
5
+ "token_cost": {
6
+ "desc_chars": 890,
7
+ "body_lines": 287,
8
+ "score": 28
9
+ },
10
+ "caps": {
11
+ "desc_within": true,
12
+ "body_within": true,
13
+ "score": 100
14
+ },
15
+ "description_quality": {
16
+ "has_trigger_cues": true,
17
+ "has_disambiguation_cues": true,
18
+ "adequate_length": true,
19
+ "score": 100
20
+ }
21
+ },
22
+ "router_reachability": {
23
+ "has_curated_rule": true,
24
+ "router_exempt": false,
25
+ "fixtures": "present",
26
+ "fixtures_total": 6,
27
+ "fixtures_best_hit": 2,
28
+ "reachable": true,
29
+ "keyword_alignment": 0.33
30
+ },
31
+ "behavioral": {
32
+ "trigger_recall": null,
33
+ "trigger_precision": null,
34
+ "disambiguation": null,
35
+ "chain_correctness": null,
36
+ "outcome_quality": null,
37
+ "variance": null,
38
+ "note": "behavioral — W5 (LLM judge): semantic recall/precision/chain/outcome/variance, not deterministic"
39
+ },
40
+ "composite": 78
41
+ }