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
@@ -13,12 +13,16 @@ description: >
13
13
  opening the PR (ship), for addressing PR review feedback (review), or for orchestrating
14
14
  several stages / taking an issue end-to-end to a merged PR (smith).
15
15
  allowed-tools: Bash, Read, Write, Edit, Grep, Glob
16
+ next: validate
17
+ terminal: false
16
18
  ---
17
19
 
18
20
  Implement each task from the /plan task list using a subagent-driven loop: implementer → spec compliance reviewer → code quality reviewer per task.
19
21
 
20
22
  # Dev
21
23
 
24
+ > **Chain (HARD-GATE):** the ONLY skill you invoke after `dev` is `validate`. Never open a PR straight from `dev`.
25
+
22
26
  This skill reads the task list created by `/plan` and implements each task using a three-stage subagent loop. TDD is enforced inside each implementer subagent.
23
27
 
24
28
  ## Usage
@@ -0,0 +1,41 @@
1
+ {
2
+ "skill": "dev",
3
+ "fixtures": "present",
4
+ "static": {
5
+ "token_cost": {
6
+ "desc_chars": 962,
7
+ "body_lines": 328,
8
+ "score": 20
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": 76
41
+ }
@@ -0,0 +1,80 @@
1
+ ---
2
+ name: gates
3
+ description: >
4
+ Toggle Forge's workflow gates and rails — strong-but-toggleable enforcement. `forge gate
5
+ enable|disable <gate-id>` flips `workflow.gates.<id>.enabled` in `.forge/config.yaml`; the
6
+ installed git hooks read resolved config at run time, so disabling a rail makes them
7
+ genuinely inert. `forge gate approve|reject <issue> <gate>` records durable human-gate
8
+ approval events; `forge gate status`/`check` query them; `forge control <id>
9
+ <mandatory|optional|permission>` sets tri-state DECLARED intent (writes the same `enabled`
10
+ field — no independent runtime enforcement). Use when the user says "disable the gate",
11
+ "turn off TDD enforcement", "the tdd intent rail is blocking me", "toggle or enable a
12
+ gate", "loosen enforcement", or "approve a human gate". Common default-ON toggleable rails:
13
+ `rail.tdd_intent`, `rail.kernel_tracking`, `rail.auto_shepherd` — e.g. `forge gate disable
14
+ rail.tdd_intent`. NOT for addressing PR review feedback (review), NOT the status snapshot
15
+ of work in flight (status).
16
+ allowed-tools: Bash, Read, Grep, Glob
17
+ terminal: true
18
+ ---
19
+
20
+ Forge's gates and rails are **default-strong but toggleable**. The `gates` skill is how you flip one off (or back on), record a human-gate approval, and see enforcement state. The stored truth is one field — `workflow.gates.<id>.enabled` — and the installed hooks read the resolved config at run time, so a disabled rail is genuinely inert, not cosmetically off.
21
+
22
+ # Toggling gates and rails
23
+
24
+ ## When to use
25
+
26
+ - "Disable the gate", "turn off TDD enforcement", "the tdd intent rail is blocking me".
27
+ - "Toggle / enable a gate", "loosen enforcement for this repo".
28
+ - "Approve a human gate" (record a durable approval event on an issue).
29
+
30
+ ## Toggle a gate or rail (the enforcement switch)
31
+
32
+ ```bash
33
+ forge gate disable <gate-id> # set workflow.gates.<id>.enabled = false in .forge/config.yaml
34
+ forge gate enable <gate-id> # set it back to true
35
+ ```
36
+
37
+ An unknown gate id — or disabling a **locked** gate — errors **before** anything is written, never mid-run. Because the hooks resolve config at run time, the flip takes effect immediately with no reinstall.
38
+
39
+ ### Common rails (default-ON, toggleable)
40
+
41
+ | Rail | What it enforces | Turn off with |
42
+ | --- | --- | --- |
43
+ | `rail.tdd_intent` | Pre-commit TDD gate (source changed ⇒ tests changed). The `minimal` adoption profile ships it off. | `forge gate disable rail.tdd_intent` |
44
+ | `rail.kernel_tracking` | "File every issue" — nothing discussed goes missing. | `forge gate disable rail.kernel_tracking` |
45
+ | `rail.auto_shepherd` | The autonomous PR-shepherd daemon fire. | `forge gate disable rail.auto_shepherd` |
46
+
47
+ The `gate.*` and `rail.*` id namespaces are disjoint, so `forge gate enable|disable` governs both through one flat surface.
48
+
49
+ ## Human-gate approval events
50
+
51
+ ```bash
52
+ forge gate approve <issue-id> <gate-id> # record a durable gate.approved event
53
+ forge gate reject <issue-id> <gate-id> # record gate.rejected
54
+ forge gate status <issue-id> # list recorded events for that issue (resume-safe)
55
+ forge gate check <issue-id> <gate-id> # exit 0 iff gate DISABLED or an approval exists on that issue
56
+ ```
57
+
58
+ `check` is the reusable enforcement primitive a stage skill calls: it passes when the gate is disabled or an approval event has been recorded for that specific issue id (approvals are issue-scoped, so pass the same `<issue-id>` you approved against). Events are durable on the issue, so they survive a compaction or crash.
59
+
60
+ ## Tri-state control (declared intent)
61
+
62
+ ```bash
63
+ forge control <gate-id|rail-id> <mandatory|optional|permission>
64
+ forge control status [--json]
65
+ ```
66
+
67
+ `forge control` sets the **declared intent** vocabulary and writes the **same** `enabled` field that `forge gate` writes — there is deliberately no parallel key. It is a view/intent layer: today no runtime consumer denies purely on a control flag (MCP/rules/skills are presence-only and refused). For actually turning enforcement off, use `forge gate disable`.
68
+
69
+ ## The doc-update gate
70
+
71
+ ```bash
72
+ forge gate doc <detect|check|init|...> # = forge doc-gate (run `forge doc-gate --help`)
73
+ ```
74
+
75
+ The doc-update gate folds under this noun as `forge gate doc`; bare `forge doc-gate` stays as a back-compat alias.
76
+
77
+ ## Adjacent skills
78
+
79
+ - Addressing PR review feedback / resolving threads → `review`.
80
+ - The snapshot of where the project stands and what's in flight → `status`.
@@ -0,0 +1,38 @@
1
+ [
2
+ {
3
+ "query": "Disable the tdd gate for this repo.",
4
+ "should_trigger": true
5
+ },
6
+ {
7
+ "query": "Turn off TDD enforcement — the tdd intent rail is blocking my commit.",
8
+ "should_trigger": true
9
+ },
10
+ {
11
+ "query": "Toggle the kernel tracking rail off for now.",
12
+ "should_trigger": true
13
+ },
14
+ {
15
+ "query": "Enable a gate that I disabled earlier and loosen enforcement.",
16
+ "should_trigger": true
17
+ },
18
+ {
19
+ "query": "Approve the human gate on this issue so the stage can proceed.",
20
+ "should_trigger": true
21
+ },
22
+ {
23
+ "query": "Disable the auto shepherd rail so no PR daemon fires.",
24
+ "should_trigger": true
25
+ },
26
+ {
27
+ "query": "Address the CodeRabbit review feedback and resolve the threads.",
28
+ "should_trigger": false
29
+ },
30
+ {
31
+ "query": "Where am I in the workflow and what work is in flight right now?",
32
+ "should_trigger": false
33
+ },
34
+ {
35
+ "query": "Run the tests and lint before I push.",
36
+ "should_trigger": false
37
+ }
38
+ ]
@@ -0,0 +1,41 @@
1
+ {
2
+ "skill": "gates",
3
+ "fixtures": "present",
4
+ "static": {
5
+ "token_cost": {
6
+ "desc_chars": 994,
7
+ "body_lines": 63,
8
+ "score": 45
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": 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": 84
41
+ }
@@ -26,6 +26,7 @@ metadata:
26
26
  author: forge
27
27
  version: "1.0.0"
28
28
  roadmap: forge-2agy.9.7.x
29
+ chainExempt: true
29
30
  ---
30
31
 
31
32
  # Hermes ⇄ Forge consumption contract
@@ -0,0 +1,41 @@
1
+ {
2
+ "skill": "hermes-forge",
3
+ "fixtures": "present",
4
+ "static": {
5
+ "token_cost": {
6
+ "desc_chars": 993,
7
+ "body_lines": 157,
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": 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": 81
41
+ }
@@ -14,6 +14,7 @@ description: >
14
14
  the plan->dev->validate->ship pipeline or open a PR (use smith or stage skills); does NOT
15
15
  report the current stage or what's in flight (use status).
16
16
  allowed-tools: Read, Bash(forge:*)
17
+ terminal: true
17
18
  ---
18
19
 
19
20
  # Issue basics — the CRUD floor
@@ -0,0 +1,41 @@
1
+ {
2
+ "skill": "issue-basics",
3
+ "fixtures": "present",
4
+ "static": {
5
+ "token_cost": {
6
+ "desc_chars": 991,
7
+ "body_lines": 95,
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": 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": 63
41
+ }
@@ -14,6 +14,7 @@ description: >
14
14
  merged PR under gates → `smith`; token-bounded state for the Hermes harness →
15
15
  `hermes-forge`.
16
16
  allowed-tools: Read, Bash(forge:*)
17
+ terminal: true
17
18
  ---
18
19
 
19
20
  # Forge kernel surface
@@ -56,6 +57,43 @@ mutating it — a claim returning ok:true does not by itself prove ownership).
56
57
  status → plan → dev → validate → ship → review → verify
57
58
  ```
58
59
 
60
+ ### Chain map (each skill declares its successor)
61
+
62
+ Every skill carries chain metadata in its frontmatter (`next`, `terminal`,
63
+ `subskills`, `handoffs`); each workflow STAGE skill additionally carries a
64
+ HARD-GATE chain line in its body, so each stage announces the next one. The
65
+ linear ladder:
66
+
67
+ | Skill | `next` | `terminal` |
68
+ |-------|--------|-----------|
69
+ | `plan` | `dev` | `false` |
70
+ | `dev` | `validate` | `false` |
71
+ | `validate` | `ship` | `false` |
72
+ | `ship` | `review` | `false` |
73
+ | `review` | `verify` | `false` |
74
+ | `verify` | `ship` | `false` |
75
+
76
+ The `next` column is each stage's DEFAULT / critical-path successor (`plan`
77
+ composes `research`; `ship` and `review` also carry a `shepherd` handoff). The
78
+ actual successor after `ship`, `review`, and `verify` is classification-dependent
79
+ — see the note below. `verify`'s `next` (`ship`) is the `docs`-only pre-ship
80
+ reuse; in every other flow nothing follows `verify`.
81
+
82
+ Feeders into the chain: `triage-ready` → `claim-safety` → `dev` (rank the pick,
83
+ prove the live lease, then work it). `research` is standalone / callable
84
+ mid-workflow and returns to its CALLER (no forced `next`); it is also a `subskill`
85
+ of `plan`. The `smith` orchestrator composes the six stages (`subskills`).
86
+ Utility/terminal skills (`status`, `shepherd`, `kernel`, `issue-basics`, `memory`,
87
+ `rollback`, `research`, `sonarcloud`, `sonarcloud-analysis`,
88
+ `parallel-deep-research`, `using-forge`) declare no forward-stage `next`. Meta
89
+ skills (`hermes-forge`) are chain-exempt.
90
+
91
+ The stage `next` values above are the DEFAULT / critical-path successors. The
92
+ actual successor after `ship`, `review`, and `verify` is
93
+ classification-dependent — the authoritative matrix is `lib/workflow/stages.js`
94
+ (Simple/Hotfix/Refactor end at `ship`; Standard ends at `review`; Critical runs
95
+ through `verify`; the `docs` classification reuses `verify` → `ship`).
96
+
59
97
  ## Orchestrator super-skill
60
98
 
61
99
  `smith` is the flagship: a thin orchestrator that COMPOSES the skills above into
@@ -0,0 +1,41 @@
1
+ {
2
+ "skill": "kernel",
3
+ "fixtures": "present",
4
+ "static": {
5
+ "token_cost": {
6
+ "desc_chars": 993,
7
+ "body_lines": 187,
8
+ "score": 33
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": 80
41
+ }
@@ -13,6 +13,7 @@ description: >
13
13
  The local backend is always the offline floor. Not for: issue create/list/close ops
14
14
  (issue-basics), workflow status (status), or transient scratch notes.
15
15
  allowed-tools: Bash, Read, Grep, Glob
16
+ terminal: true
16
17
  ---
17
18
 
18
19
  # Memory
@@ -20,6 +21,16 @@ allowed-tools: Bash, Read, Grep, Glob
20
21
  Durable project memory for agents. This skill teaches you where a fact belongs,
21
22
  which backend is active, and how to use graph memory when it is enabled.
22
23
 
24
+ ## Applies to: Forge-managed memory
25
+
26
+ This skill describes memory managed by **Forge's own store** — `forge remember` /
27
+ `forge recall`, whose backend the Backends section (below) explains. If the repo you are working in ships
28
+ its **own** memory system (a database, an API, a "log a decision" surface, an
29
+ in-app memory service), **that** system is authoritative here and this skill does
30
+ not apply — follow the repo's own memory instructions instead. When unsure, prefer
31
+ the host repo's memory over `forge remember`; a note written to the wrong store is
32
+ a note nobody finds.
33
+
23
34
  ## The one rule
24
35
 
25
36
  Persistent, project-level knowledge goes to **`forge remember`** — never to a
@@ -33,7 +44,11 @@ is a local file store, so they always work offline with zero setup.
33
44
  convention, a decision and its rationale, a non-obvious gotcha, an environment
34
45
  quirk, a "we tried X, it failed because Y". Add `--tag <label>` for retrieval.
35
46
  - **`forge recall "<query>"`** — before assuming, check what is already known.
36
- Search first; do not re-derive knowledge the project already recorded.
47
+ Search first; do not re-derive knowledge the project already recorded. Note that
48
+ memory relevant to your current prompt **may already be injected automatically**
49
+ (a per-turn hook surfaces the best-matching notes; silent when nothing clears the
50
+ relevance bar). Treat auto-surfaced memory as a head start, and still `recall`
51
+ explicitly when you need to search for something specific it did not surface.
37
52
  - **`forge issue comment <id> "<note>"`** — progress or context that belongs to
38
53
  ONE issue's lifecycle (status, a blocker, a hand-off). Issue-scoped, not global.
39
54
  - **Rule of thumb:** would a future session on a *different* issue want this? →
@@ -0,0 +1,41 @@
1
+ {
2
+ "skill": "memory",
3
+ "fixtures": "no-fixtures",
4
+ "static": {
5
+ "token_cost": {
6
+ "desc_chars": 938,
7
+ "body_lines": 101,
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": 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": "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": 83
41
+ }
@@ -17,6 +17,7 @@ compatibility: Requires PARALLEL_API_KEY in .env.local. Uses curl. Takes 3-25 mi
17
17
  metadata:
18
18
  author: harshanandak
19
19
  version: "1.0.0"
20
+ terminal: true
20
21
  ---
21
22
 
22
23
  # Parallel Deep Research
@@ -0,0 +1,41 @@
1
+ {
2
+ "skill": "parallel-deep-research",
3
+ "fixtures": "present",
4
+ "static": {
5
+ "token_cost": {
6
+ "desc_chars": 996,
7
+ "body_lines": 92,
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
+ }
@@ -13,12 +13,18 @@ description: >
13
13
  where work stands or what is stale (status), and NOT for everyday issue create/list/close or
14
14
  picking the next ready issue (issue-basics / triage-ready).
15
15
  allowed-tools: Bash, Read, Write, Edit, Grep, Glob
16
+ next: dev
17
+ terminal: false
18
+ subskills:
19
+ - research
16
20
  ---
17
21
 
18
22
  Plan a feature from scratch: brainstorm design intent, research technical approach, then set up branch, worktree, and a complete task list ready for /dev.
19
23
 
20
24
  # Plan
21
25
 
26
+ > **Chain (HARD-GATE):** the next skill after `plan` is `dev`. `plan` composes the `research` sub-skill for its Phase 2 technical bundle. Do not skip ahead past `dev`.
27
+
22
28
  `/plan` is the default planning super-skill. A full invocation runs the three legacy sections below (intent, research, setup/task list), but v3 treats the internal planning work as callable sub-skills:
23
29
 
24
30
  - `plan.intent_capture`
@@ -0,0 +1,41 @@
1
+ {
2
+ "skill": "plan",
3
+ "fixtures": "present",
4
+ "static": {
5
+ "token_cost": {
6
+ "desc_chars": 958,
7
+ "body_lines": 530,
8
+ "score": 3
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": 4,
28
+ "reachable": true,
29
+ "keyword_alignment": 0.8
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": 51
41
+ }
@@ -0,0 +1,47 @@
1
+ ---
2
+ name: portability
3
+ description: >
4
+ Forge kernel data portability — getting issue data in and out of the local kernel. `forge
5
+ export [--dir] [--dry-run]` writes the kernel backlog to deterministic git-tracked JSONL
6
+ (D16 portability projection); `forge export --import` reads that committed snapshot back
7
+ into the kernel (hydrate). `forge migrate --from beads [--dry-run] [--source <dir>]` imports
8
+ a Beads issue store into the kernel — the onboarding path for users coming from Beads. Use
9
+ when the user says "export the kernel backlog to JSONL", "back up / snapshot the backlog",
10
+ "re-import / hydrate the backlog", "migrate from beads", or "import a beads store". Honesty:
11
+ bare `forge migrate --dry-run` (no `--from`) is v2→v3 preview only; a re-import that applies
12
+ nothing reports "already hydrated". NOT the cloud/backend sync of the kernel (that is `forge
13
+ sync`, cloud-native), NOT a database/schema migration (plan/dev), NOT memory notes (memory),
14
+ NOT syncing a git branch with main (ship).
15
+ allowed-tools: Bash, Read, Grep, Glob
16
+ terminal: true
17
+ ---
18
+
19
+ Moving Forge kernel issue data across a boundary: project the backlog to a git-committable snapshot (and hydrate it back), or import an existing issue store into the kernel. This is data portability — distinct from schema/database migrations and from the cloud backend sync (`forge sync`).
20
+
21
+ # Export / re-import the backlog
22
+
23
+ ```bash
24
+ forge export # write the kernel backlog to git-tracked JSONL (deterministic)
25
+ forge export --dir <path> # choose the projection directory
26
+ forge export --dry-run # show what would be written, change nothing
27
+ forge export --import # read the committed JSONL snapshot back INTO the kernel (hydrate)
28
+ ```
29
+
30
+ `forge export` is the **D16 portability projection**: a deterministic, git-committable snapshot of the backlog you can review in a diff and carry between machines or checkouts. `forge export --import` is the reverse — it hydrates the kernel from that on-disk snapshot; a re-import that finds everything already present reports "already hydrated" rather than claiming it imported anything.
31
+
32
+ # Migrate in from Beads (or preview v2→v3)
33
+
34
+ ```bash
35
+ forge migrate --from beads [--dry-run] # import a Beads issue store into the kernel
36
+ forge migrate --from beads --source <dir> # point at exported beads *.jsonl (defaults to auto-detecting .beads/)
37
+ forge migrate --dry-run # preview the v2→v3 migration (the ONLY supported mode without --from)
38
+ ```
39
+
40
+ `forge migrate --from beads` is the **onboarding path for users coming from Beads** — it imports a Beads issue store into the Forge Kernel (`--dry-run` reads + maps only, writing nothing). Without `--from`, migrate is **v2→v3 preview only**: `--dry-run` is required and applying the migration is not yet available.
41
+
42
+ ## Boundaries
43
+
44
+ - The **cloud/backend sync** of the kernel is `forge sync` (cloud-native) — a different operation; this skill is the local, git-based portability projection.
45
+ - A **database/schema** migration (adding a column, altering a table) is application work — that's **plan**/**dev**, not `forge migrate`.
46
+ - Persisting a decision or note is **memory** (`forge remember`), not export.
47
+ - Syncing a git **branch** with main before a PR is **ship**/**worktree**.