forge-workflow 0.1.0-beta.3 → 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 (122) hide show
  1. package/AGENTS.md +1 -1
  2. package/bin/forge-cmd.js +1 -1
  3. package/bin/forge.js +5 -0
  4. package/docs/reference/COMMANDS.md +3 -1
  5. package/docs/reference/shepherd.md +72 -1
  6. package/lib/adapters/greptile-review-adapter.js +1 -1
  7. package/lib/adapters/pr-state-adapter.js +103 -8
  8. package/lib/agents-config.js +5 -0
  9. package/lib/commands/_issue.js +31 -46
  10. package/lib/commands/_manifest.js +1 -1
  11. package/lib/commands/_resolve-command-opts.js +36 -29
  12. package/lib/commands/claim.js +2 -4
  13. package/lib/commands/hooks.js +155 -8
  14. package/lib/commands/plan.js +23 -115
  15. package/lib/commands/prime.js +8 -1
  16. package/lib/commands/release.js +1 -2
  17. package/lib/commands/serve.js +5 -2
  18. package/lib/commands/setup.js +0 -1
  19. package/lib/commands/shepherd.js +36 -3
  20. package/lib/commands/skill.js +275 -0
  21. package/lib/commands/status.js +37 -32
  22. package/lib/commands/test.js +32 -0
  23. package/lib/commands/worktree.js +27 -1
  24. package/lib/core/runtime-graph.js +88 -14
  25. package/lib/forge-issues.js +13 -464
  26. package/lib/harness-capability-matrix.js +2 -2
  27. package/lib/hook-renderer.js +54 -12
  28. package/lib/issue-backend.js +42 -3
  29. package/lib/kernel/broker.js +28 -0
  30. package/lib/kernel/migrations.js +30 -2
  31. package/lib/kernel/schema.js +35 -0
  32. package/lib/kernel/sqlite-driver.js +150 -0
  33. package/lib/memory-recall.js +151 -0
  34. package/lib/orientation.js +303 -6
  35. package/lib/pr-bundle.js +6 -2
  36. package/lib/pr-monitor/reconcile-executor.js +659 -0
  37. package/lib/pr-monitor/reconcile-tick.js +138 -0
  38. package/lib/pr-monitor/reconcile.js +0 -0
  39. package/lib/pr-monitor/render-sticky.js +14 -0
  40. package/lib/pr-monitor/shepherd-lease.js +243 -0
  41. package/lib/pr-monitor/upsert-sticky.js +1 -1
  42. package/lib/pr-monitor/watch-lifecycle.js +1 -1
  43. package/lib/pr-pull.js +70 -15
  44. package/lib/project-memory.js +8 -0
  45. package/lib/rules-sync.js +4 -0
  46. package/lib/runtime-health.js +15 -46
  47. package/lib/skill-eval.js +750 -0
  48. package/lib/status/identity.js +46 -0
  49. package/lib/status/presenter.js +0 -35
  50. package/lib/status/snapshot.js +11 -16
  51. package/lib/upgrade-safety.js +8 -9
  52. package/lib/using-forge.js +315 -0
  53. package/lib/workflow/enforce-stage.js +5 -5
  54. package/lib/workflow/state-manager.js +23 -23
  55. package/package.json +1 -1
  56. package/rules/using-forge.md +24 -0
  57. package/scripts/forge-team/index.sh +0 -5
  58. package/scripts/forge-team/tests/dispatcher.test.sh +1 -1
  59. package/scripts/forge-team/tests/workflow-integration.test.sh +0 -1
  60. package/scripts/test.js +8 -1
  61. package/skills/claim-safety/SKILL.md +4 -0
  62. package/skills/claim-safety/evals/scorecard.json +41 -0
  63. package/skills/coverage.json +83 -0
  64. package/skills/dev/SKILL.md +4 -0
  65. package/skills/dev/evals/scorecard.json +41 -0
  66. package/skills/gates/SKILL.md +80 -0
  67. package/skills/gates/evals/evals.json +38 -0
  68. package/skills/gates/evals/scorecard.json +41 -0
  69. package/skills/hermes-forge/SKILL.md +1 -0
  70. package/skills/hermes-forge/evals/scorecard.json +41 -0
  71. package/skills/issue-basics/SKILL.md +1 -0
  72. package/skills/issue-basics/evals/scorecard.json +41 -0
  73. package/skills/kernel/SKILL.md +38 -0
  74. package/skills/kernel/evals/scorecard.json +41 -0
  75. package/skills/memory/SKILL.md +16 -1
  76. package/skills/memory/evals/scorecard.json +41 -0
  77. package/skills/parallel-deep-research/SKILL.md +1 -0
  78. package/skills/parallel-deep-research/evals/scorecard.json +41 -0
  79. package/skills/plan/SKILL.md +6 -0
  80. package/skills/plan/evals/scorecard.json +41 -0
  81. package/skills/portability/SKILL.md +47 -0
  82. package/skills/portability/evals/evals.json +34 -0
  83. package/skills/portability/evals/scorecard.json +41 -0
  84. package/skills/research/SKILL.md +1 -0
  85. package/skills/research/evals/scorecard.json +41 -0
  86. package/skills/review/SKILL.md +6 -0
  87. package/skills/review/evals/scorecard.json +41 -0
  88. package/skills/rollback/SKILL.md +1 -0
  89. package/skills/rollback/evals/scorecard.json +41 -0
  90. package/skills/setup/SKILL.md +91 -0
  91. package/skills/setup/evals/evals.json +42 -0
  92. package/skills/setup/evals/scorecard.json +41 -0
  93. package/skills/shepherd/SKILL.md +76 -36
  94. package/skills/shepherd/evals/evals.json +21 -9
  95. package/skills/shepherd/evals/scorecard.json +41 -0
  96. package/skills/ship/SKILL.md +6 -0
  97. package/skills/ship/evals/scorecard.json +41 -0
  98. package/skills/smith/SKILL.md +8 -0
  99. package/skills/smith/evals/scorecard.json +41 -0
  100. package/skills/sonarcloud/SKILL.md +1 -0
  101. package/skills/sonarcloud/evals/scorecard.json +41 -0
  102. package/skills/sonarcloud-analysis/SKILL.md +1 -0
  103. package/skills/sonarcloud-analysis/evals/scorecard.json +41 -0
  104. package/skills/status/SKILL.md +3 -0
  105. package/skills/status/evals/scorecard.json +41 -0
  106. package/skills/triage-ready/SKILL.md +2 -0
  107. package/skills/triage-ready/evals/scorecard.json +41 -0
  108. package/skills/using-forge/SKILL.md +104 -0
  109. package/skills/using-forge/evals/scorecard.json +41 -0
  110. package/skills/validate/SKILL.md +4 -0
  111. package/skills/validate/evals/scorecard.json +41 -0
  112. package/skills/verify/SKILL.md +4 -0
  113. package/skills/verify/evals/scorecard.json +41 -0
  114. package/skills/worktree/SKILL.md +87 -0
  115. package/skills/worktree/evals/evals.json +38 -0
  116. package/skills/worktree/evals/scorecard.json +41 -0
  117. package/lib/adapters/beads-issue-adapter.js +0 -127
  118. package/lib/beads-nudge.js +0 -91
  119. package/lib/commands/board.js +0 -64
  120. package/lib/status/beads-snapshot.js +0 -145
  121. package/scripts/forge-team/lib/dashboard.sh +0 -316
  122. package/scripts/forge-team/tests/dashboard.test.sh +0 -155
@@ -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**.
@@ -0,0 +1,34 @@
1
+ [
2
+ {
3
+ "query": "Back up the kernel backlog to a git-tracked JSONL snapshot.",
4
+ "should_trigger": true
5
+ },
6
+ {
7
+ "query": "Export the kernel backlog to git-tracked JSONL.",
8
+ "should_trigger": true
9
+ },
10
+ {
11
+ "query": "Migrate our Beads issue store into the Forge kernel.",
12
+ "should_trigger": true
13
+ },
14
+ {
15
+ "query": "Dry-run the beads migration and show what would be imported.",
16
+ "should_trigger": true
17
+ },
18
+ {
19
+ "query": "Re-import the exported backlog JSONL into the kernel.",
20
+ "should_trigger": true
21
+ },
22
+ {
23
+ "query": "Migrate the database schema to add the new billing column.",
24
+ "should_trigger": false
25
+ },
26
+ {
27
+ "query": "Sync my feature branch with main before opening the PR.",
28
+ "should_trigger": false
29
+ },
30
+ {
31
+ "query": "Remember this decision for later.",
32
+ "should_trigger": false
33
+ }
34
+ ]
@@ -0,0 +1,41 @@
1
+ {
2
+ "skill": "portability",
3
+ "fixtures": "present",
4
+ "static": {
5
+ "token_cost": {
6
+ "desc_chars": 957,
7
+ "body_lines": 31,
8
+ "score": 50
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": 5,
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": 85
41
+ }
@@ -14,6 +14,7 @@ description: >
14
14
  heavyweight EXTERNAL market/competitive report (paid Parallel AI); `plan` for the full plan
15
15
  stage (brainstorm + tasks); `dev` or `validate` to implement or scan rather than investigate.
16
16
  allowed-tools: Bash, Read, Write, Grep, Glob, WebSearch, WebFetch
17
+ terminal: true
17
18
  ---
18
19
 
19
20
  Investigate anything, from anywhere: verify a claim, search the web, find better options, pull
@@ -0,0 +1,41 @@
1
+ {
2
+ "skill": "research",
3
+ "fixtures": "present",
4
+ "static": {
5
+ "token_cost": {
6
+ "desc_chars": 1014,
7
+ "body_lines": 179,
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": 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": 2,
28
+ "reachable": true,
29
+ "keyword_alignment": 0.4
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": 60
41
+ }
@@ -13,12 +13,18 @@ description: >
13
13
  closing issues), ship (pushes the branch + opens the PR), validate (PRE-PR local
14
14
  type/lint/test/security), and sonarcloud / sonarcloud-analysis (only QUERY SonarCloud data).
15
15
  allowed-tools: Bash, Read, Edit, Grep, Glob
16
+ next: verify
17
+ terminal: false
18
+ handoffs:
19
+ - shepherd
16
20
  ---
17
21
 
18
22
  Process ALL pull request issues including GitHub Actions failures, review-agent inline comments (Greptile, CodeRabbit, Qodo, or human reviewers), SonarCloud analysis, and other CI/CD checks.
19
23
 
20
24
  # Review
21
25
 
26
+ > **Chain (HARD-GATE):** the successor depends on the change classification (source of truth: lib/workflow/stages.js) — Critical → `verify` (post-merge health check); Standard ENDS at `review`. `verify` is the default/critical-path next. While the PR is still open you may hand off to `shepherd` to watch checks toward merge. `review` never merges.
27
+
22
28
  This skill handles ALL issues that arise after creating a pull request.
23
29
 
24
30
  ## Usage
@@ -0,0 +1,41 @@
1
+ {
2
+ "skill": "review",
3
+ "fixtures": "present",
4
+ "static": {
5
+ "token_cost": {
6
+ "desc_chars": 988,
7
+ "body_lines": 476,
8
+ "score": 4
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": 71
41
+ }
@@ -13,6 +13,7 @@ description: >
13
13
  (shepherd), the post-merge CI health check on master (verify), pushing a branch or opening a
14
14
  PR (ship), or ordinary issue status/field edits (issue-basics).
15
15
  allowed-tools: Bash, Read, Edit, Grep, Glob
16
+ terminal: true
16
17
  ---
17
18
 
18
19
  Comprehensive rollback system with multiple methods and automatic USER content preservation.
@@ -0,0 +1,41 @@
1
+ {
2
+ "skill": "rollback",
3
+ "fixtures": "present",
4
+ "static": {
5
+ "token_cost": {
6
+ "desc_chars": 965,
7
+ "body_lines": 95,
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": 6,
27
+ "fixtures_best_hit": 1,
28
+ "reachable": true,
29
+ "keyword_alignment": 0.17
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,91 @@
1
+ ---
2
+ name: setup
3
+ description: >
4
+ Forge install & setup lifecycle. `forge setup` interactively configures Forge for your
5
+ coding agents; `forge init [--profile minimal|standard|full]` writes the
6
+ adoption config in a fresh repo; `forge doctor` reports whether the kernel DB is on a
7
+ cloud/network path; `forge upgrade [--dry-run]` previews + self-heals upgrade readiness;
8
+ `forge hooks install --global` installs native hooks; `forge reset --soft|--hard --force`
9
+ and `forge reinstall --force` undo/redo the install; `forge recommend` lists suggested
10
+ tools. Use when the user says "install/set up forge", "init forge", "adoption profile",
11
+ "forge doctor", "upgrade forge", "install the hooks globally", or "reset/reinstall forge".
12
+ Footguns: setup is interactive — pass `--yes` in automation; `doctor` only checks the
13
+ kernel-DB filesystem class, NOT general health; `upgrade` self-heals Forge state, NOT the
14
+ npm package; reset/reinstall need `--force`. NOT toggling a gate/rail (gates), NOT
15
+ orienting in a set-up repo (status), NOT installing project deps (dev).
16
+ allowed-tools: Bash, Read, Grep, Glob
17
+ terminal: true
18
+ ---
19
+
20
+ Getting Forge installed, configured, upgraded, and diagnosed in a repo. These are the bootstrap and maintenance commands — distinct from the everyday workflow stages.
21
+
22
+ # Install & configure
23
+
24
+ ```bash
25
+ forge setup # interactive agent configuration (Claude/Cursor/Codex …)
26
+ forge setup --yes # non-interactive: accept defaults (use this in automation)
27
+ forge setup --agents claude,cursor --skip-external # target specific harnesses, skip service prompts
28
+ forge setup --path <dir> --dry-run # preview against another dir, write nothing
29
+ ```
30
+
31
+ `forge setup` is **interactive by default**. In any automated/agent context pass `--yes` (or `--non-interactive`) so it never blocks on a prompt.
32
+
33
+ # Initialize a fresh repo
34
+
35
+ ```bash
36
+ forge init --minimal # shortcut for --profile minimal --yes
37
+ forge init --profile standard --harness claude,cursor
38
+ forge init --classification standard --dry-run # preview the adoption config
39
+ ```
40
+
41
+ `forge init` writes the Forge adoption config (`.forge/config.yaml`). The profile picks how much enforcement ships on: `minimal` (rails off) → `standard` → `full`. This configures the workflow; toggling an individual gate afterward is the **gates** skill.
42
+
43
+ # Diagnose
44
+
45
+ ```bash
46
+ forge doctor # is the kernel DB on a cloud-synced / network path? (reliability signal)
47
+ forge doctor --json # machine-readable
48
+ ```
49
+
50
+ `forge doctor` is **narrow**: it reports the filesystem class of the Forge kernel database path (local / cloud-synced / network) so you can catch the reliability footgun of running the DB on OneDrive/Dropbox/a network share. It is **not** a general health check.
51
+
52
+ # Upgrade readiness
53
+
54
+ ```bash
55
+ forge upgrade --dry-run # preview the planned self-heal, change nothing
56
+ forge upgrade # apply safe self-heal steps to make the repo upgrade-ready
57
+ ```
58
+
59
+ `forge upgrade` previews and applies **safe self-heal** steps for Forge's own state. It does **not** update the installed npm package — use your package manager for that.
60
+
61
+ # Global hooks
62
+
63
+ ```bash
64
+ forge hooks install --global # install native hooks for all harnesses
65
+ forge hooks install --global --harness codex # scope to one harness (codex|hermes|all)
66
+ forge hooks install --global --dry-run # preview
67
+ ```
68
+
69
+ `--global` is the required consent flag — it opts you into installing hooks at the user level. (The other `forge hooks` subcommands — `session-start`, `inbox-pickup`, `shepherd-events`, `memory-recall`, `capture` — are machine-facing hook emitters the harness calls, not things you run by hand.)
70
+
71
+ # Undo / redo the install
72
+
73
+ ```bash
74
+ forge reset --soft --force # remove .forge/ config only (keeps commands, rules, agents)
75
+ forge reset --hard --force # remove ALL forge-managed files (keeps user-created files)
76
+ forge reinstall --force # remove + re-run default setup in one step
77
+ ```
78
+
79
+ `reset` and `reinstall` are destructive, so `--force` is required. `reset` with no `--soft`/`--hard` just prints usage.
80
+
81
+ # Recommend tooling
82
+
83
+ ```bash
84
+ forge recommend # suggest tools/integrations for the current project
85
+ ```
86
+
87
+ ## Boundaries
88
+
89
+ - Toggling a single gate/rail (e.g. TDD, kernel-tracking) is **gates** — `init` *writes* the initial config; `gates` *flips* one afterward.
90
+ - "Where am I / how is forge set up" in an already-configured repo is **status** / **kernel**, not setup.
91
+ - Installing project dependencies (`bun install`) is **dev**, not `forge setup`.
@@ -0,0 +1,42 @@
1
+ [
2
+ {
3
+ "query": "Install Forge into this repo and configure it for Claude and Cursor.",
4
+ "should_trigger": true
5
+ },
6
+ {
7
+ "query": "Initialize forge in this fresh repository with the minimal adoption profile.",
8
+ "should_trigger": true
9
+ },
10
+ {
11
+ "query": "Run forge doctor — is the kernel database on a cloud-synced path?",
12
+ "should_trigger": true
13
+ },
14
+ {
15
+ "query": "Upgrade forge and self-heal anything unsafe first.",
16
+ "should_trigger": true
17
+ },
18
+ {
19
+ "query": "Install the Forge native hooks globally for Codex.",
20
+ "should_trigger": true
21
+ },
22
+ {
23
+ "query": "Undo the forge install — reset this repo's forge files.",
24
+ "should_trigger": true
25
+ },
26
+ {
27
+ "query": "Disable the TDD gate, it's blocking my commit.",
28
+ "should_trigger": false
29
+ },
30
+ {
31
+ "query": "Set up the database schema for the new billing feature.",
32
+ "should_trigger": false
33
+ },
34
+ {
35
+ "query": "Upgrade the eslint dependency to the latest version.",
36
+ "should_trigger": false
37
+ },
38
+ {
39
+ "query": "Install the project dependencies with bun install.",
40
+ "should_trigger": false
41
+ }
42
+ ]