forge-workflow 0.0.10 → 0.1.0-beta.2

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 (454) hide show
  1. package/.claude/rules/{greptile-review-process.md → review-process.md} +56 -41
  2. package/.claude/scripts/{greptile-resolve.sh → review-resolve.sh} +13 -3
  3. package/.cursor/rules/permissions-guidance.mdc +2 -2
  4. package/.forge/hooks/check-tdd.js +3 -0
  5. package/.forge/hooks/forge-native-hook.js +245 -0
  6. package/.forge/protected-paths.yaml +157 -0
  7. package/AGENTS.md +150 -61
  8. package/CHANGELOG.md +681 -0
  9. package/CLAUDE.md +9 -118
  10. package/QUICKSTART.md +171 -0
  11. package/README.md +271 -363
  12. package/bin/forge-cmd.js +120 -9
  13. package/bin/forge-preflight.js +26 -5
  14. package/bin/forge.js +461 -489
  15. package/docs/INDEX.md +93 -0
  16. package/docs/PROJECT_DESIGN.md +685 -0
  17. package/docs/architecture/index.md +66 -0
  18. package/docs/architecture/notes/README.md +35 -0
  19. package/docs/architecture/subsystems/README.md +46 -0
  20. package/docs/forge/TOOLCHAIN.md +670 -0
  21. package/docs/forge/VALIDATION.md +82 -0
  22. package/docs/{AGENT_INSTALL_PROMPT.md → guides/AGENT_INSTALL_PROMPT.md} +3 -3
  23. package/docs/guides/BEADS_GITHUB_SYNC.md +32 -0
  24. package/docs/{ENHANCED_ONBOARDING.md → guides/ENHANCED_ONBOARDING.md} +16 -12
  25. package/docs/guides/GREPTILE_SETUP.md +46 -0
  26. package/docs/guides/MANUAL_REVIEW_GUIDE.md +58 -0
  27. package/docs/guides/MIGRATION.md +56 -0
  28. package/docs/guides/SETUP.md +118 -0
  29. package/docs/guides/SUPPORT.md +185 -0
  30. package/docs/guides/WORKFLOW_TEMPLATES.md +74 -0
  31. package/docs/guides/memory-backends.md +183 -0
  32. package/docs/reference/ADAPTERS.md +128 -0
  33. package/docs/reference/AGENT_SKILL_PARITY.md +175 -0
  34. package/docs/reference/COMMANDS.md +205 -0
  35. package/docs/reference/DECISION_DRIFT_GUARDS.md +97 -0
  36. package/docs/{EXAMPLES.md → reference/EXAMPLES.md} +7 -5
  37. package/docs/reference/FORGE_KERNEL_STORAGE_MODEL.md +135 -0
  38. package/docs/reference/HERMES_INTEGRATION.md +118 -0
  39. package/docs/reference/INSIGHTS_RECAP.md +63 -0
  40. package/docs/reference/INSTALL.md +164 -0
  41. package/docs/reference/KERNEL_TAXONOMY_VALIDATION.md +161 -0
  42. package/docs/reference/PROTECTED_PATH_MANIFEST.md +25 -0
  43. package/docs/reference/RELEASE.md +68 -0
  44. package/docs/reference/RESEARCH_TEMPLATE.md +292 -0
  45. package/docs/{ROADMAP.md → reference/ROADMAP.md} +12 -9
  46. package/docs/reference/SKILLS.md +35 -0
  47. package/docs/reference/STATUS_BOARD.md +80 -0
  48. package/docs/reference/TEMPLATES.md +106 -0
  49. package/docs/{TOOLCHAIN.md → reference/TOOLCHAIN.md} +62 -47
  50. package/docs/reference/VALIDATION.md +82 -0
  51. package/docs/reference/agent-permissions.md +169 -0
  52. package/docs/reference/beads-to-kernel-migration-ux.md +61 -0
  53. package/docs/reference/control-plane-guarantees.md +125 -0
  54. package/docs/reference/dependency-chain.md +331 -0
  55. package/docs/reference/forge-kernel-issue-command-contract.md +161 -0
  56. package/docs/reference/forge-kernel-schema.md +72 -0
  57. package/docs/reference/kernel-conflict-evaluators.md +27 -0
  58. package/docs/reference/patch-md-format.md +77 -0
  59. package/docs/reference/protected-state-surfaces.md +59 -0
  60. package/docs/reference/shepherd.md +115 -0
  61. package/docs/reference/superpowers-analysis.md +320 -0
  62. package/docs/reference/superpowers-integration-options.md +404 -0
  63. package/docs/reference/test-environment.md +519 -0
  64. package/docs/reference/upgrade-safety.md +59 -0
  65. package/lefthook.yml +18 -0
  66. package/lib/adapter-cli.js +307 -0
  67. package/lib/adapters/beads-issue-adapter.js +127 -0
  68. package/lib/adapters/beads-kernel-compat.js +1042 -0
  69. package/lib/adapters/greptile-review-adapter.js +141 -0
  70. package/lib/adapters/kernel-issue-adapter.js +101 -0
  71. package/lib/adapters/pr-state-adapter.js +484 -0
  72. package/lib/adoption-profiles.js +126 -0
  73. package/lib/agents/README.md +2 -6
  74. package/lib/agents/claude.plugin.json +3 -8
  75. package/lib/agents/codex.plugin.json +9 -1
  76. package/lib/agents/cursor.plugin.json +2 -6
  77. package/lib/agents/hermes.plugin.json +22 -0
  78. package/lib/agents-config.js +39 -1236
  79. package/lib/audit-evidence.js +282 -0
  80. package/lib/beads-setup.js +121 -0
  81. package/lib/beads-sync-scaffold.js +25 -101
  82. package/lib/codex-skills.js +51 -1
  83. package/lib/commands/_issue.js +741 -77
  84. package/lib/commands/_manifest.js +91 -0
  85. package/lib/commands/_registry.js +85 -34
  86. package/lib/commands/_resolve-command-opts.js +261 -0
  87. package/lib/commands/_serve-security.js +270 -0
  88. package/lib/commands/adapter.js +12 -0
  89. package/lib/commands/add.js +118 -0
  90. package/lib/commands/audit.js +70 -0
  91. package/lib/commands/blocked.js +5 -0
  92. package/lib/commands/board.js +64 -0
  93. package/lib/commands/claim.js +21 -2
  94. package/lib/commands/claims.js +7 -0
  95. package/lib/commands/clean.js +485 -75
  96. package/lib/commands/close.js +2 -2
  97. package/lib/commands/comment.js +5 -0
  98. package/lib/commands/control.js +148 -0
  99. package/lib/commands/create.js +2 -2
  100. package/lib/commands/dev.js +185 -7
  101. package/lib/commands/doc-gate.js +336 -0
  102. package/lib/commands/doctor.js +156 -0
  103. package/lib/commands/explain.js +15 -0
  104. package/lib/commands/export.js +237 -0
  105. package/lib/commands/gate.js +192 -0
  106. package/lib/commands/hooks.js +242 -0
  107. package/lib/commands/inbox.js +118 -0
  108. package/lib/commands/init.js +598 -0
  109. package/lib/commands/insights.js +79 -0
  110. package/lib/commands/issue.js +12 -1
  111. package/lib/commands/issues.js +17 -0
  112. package/lib/commands/lint.js +5 -0
  113. package/lib/commands/list.js +2 -2
  114. package/lib/commands/merge.js +312 -0
  115. package/lib/commands/migrate.js +523 -0
  116. package/lib/commands/new.js +12 -0
  117. package/lib/commands/options.js +241 -0
  118. package/lib/commands/orient.js +13 -0
  119. package/lib/commands/orphans.js +5 -0
  120. package/lib/commands/patch.js +67 -0
  121. package/lib/commands/plan.js +436 -24
  122. package/lib/commands/preflight.js +211 -0
  123. package/lib/commands/prime.js +13 -0
  124. package/lib/commands/push.js +69 -2
  125. package/lib/commands/ready.js +2 -2
  126. package/lib/commands/recall.js +116 -0
  127. package/lib/commands/recap.js +61 -0
  128. package/lib/commands/recommend.js +0 -1
  129. package/lib/commands/release.js +91 -0
  130. package/lib/commands/remember.js +74 -0
  131. package/lib/commands/role.js +99 -0
  132. package/lib/commands/serve.js +581 -0
  133. package/lib/commands/setup.js +838 -972
  134. package/lib/commands/shepherd.js +436 -0
  135. package/lib/commands/ship.js +23 -1
  136. package/lib/commands/show.js +2 -2
  137. package/lib/commands/stage.js +192 -0
  138. package/lib/commands/stale.js +5 -0
  139. package/lib/commands/status.js +158 -21
  140. package/lib/commands/sync.js +34 -46
  141. package/lib/commands/team.js +4 -1
  142. package/lib/commands/test.js +43 -27
  143. package/lib/commands/update.js +2 -2
  144. package/lib/commands/upgrade.js +47 -0
  145. package/lib/commands/validate.js +43 -18
  146. package/lib/commands/worktree.js +307 -100
  147. package/lib/config-writer.js +202 -0
  148. package/lib/control-plane.js +236 -0
  149. package/lib/core/runtime-graph.js +946 -0
  150. package/lib/dep-guard/keyword-ripple.js +2 -2
  151. package/lib/deprecated-sync-cleanup.js +362 -0
  152. package/lib/detect-agent.js +2 -28
  153. package/lib/detect-worktree.js +35 -9
  154. package/lib/doc-gate/declaration.js +177 -0
  155. package/lib/doc-gate/detect.js +289 -0
  156. package/lib/doc-gate/gate.js +375 -0
  157. package/lib/doc-gate/okf-config.js +128 -0
  158. package/lib/doc-gate/okf.js +429 -0
  159. package/lib/docs-command.js +1161 -6
  160. package/lib/forge-issues.js +382 -11
  161. package/lib/forge-lock.js +262 -0
  162. package/lib/gate-events.js +193 -0
  163. package/lib/global-flags.js +74 -0
  164. package/lib/greptile-match.js +7 -63
  165. package/lib/harness-capability-matrix.js +380 -0
  166. package/lib/hook-global-installer.js +347 -0
  167. package/lib/hook-renderer.js +451 -0
  168. package/lib/inbox.js +391 -0
  169. package/lib/insights.js +397 -0
  170. package/lib/issue-adapter.js +156 -0
  171. package/lib/issue-backend.js +145 -0
  172. package/lib/issue-render.js +220 -0
  173. package/lib/kernel/backing-issue.js +305 -0
  174. package/lib/kernel/broker.js +1218 -0
  175. package/lib/kernel/cli-broker-factory.js +130 -0
  176. package/lib/kernel/conflict-signal.js +82 -0
  177. package/lib/kernel/evaluators.js +195 -0
  178. package/lib/kernel/fs-class.js +495 -0
  179. package/lib/kernel/issue-command-contract.js +559 -0
  180. package/lib/kernel/issue-id-resolver.js +186 -0
  181. package/lib/kernel/lease-enforcer.js +158 -0
  182. package/lib/kernel/migrations.js +333 -0
  183. package/lib/kernel/planning-buckets-schema.js +109 -0
  184. package/lib/kernel/projection-jsonl-writer.js +450 -0
  185. package/lib/kernel/readiness-model.js +329 -0
  186. package/lib/kernel/schema.js +356 -0
  187. package/lib/kernel/sqlite-driver.js +2504 -0
  188. package/lib/kernel/taxonomy-validator.js +394 -0
  189. package/lib/lefthook-check.js +3 -2
  190. package/lib/lefthook-wiring.js +413 -0
  191. package/lib/mcp-config-renderer.js +288 -0
  192. package/lib/memory/graphiti-mcp.js +106 -0
  193. package/lib/memory/router.js +387 -0
  194. package/lib/memory/typed-api.js +102 -0
  195. package/lib/memory-digest.js +195 -0
  196. package/lib/merge-rules.js +395 -0
  197. package/lib/migrate-dry-run.js +466 -0
  198. package/lib/orientation.js +863 -0
  199. package/lib/package-manager-remediation.js +103 -0
  200. package/lib/package-root.js +381 -0
  201. package/lib/patch-intent.js +890 -0
  202. package/lib/plugin-catalog.js +3 -4
  203. package/lib/plugin-manager.js +0 -5
  204. package/lib/pr-bundle.js +186 -0
  205. package/lib/pr-monitor/differ.js +195 -0
  206. package/lib/pr-monitor/events.js +0 -0
  207. package/lib/pr-monitor/gather.js +124 -0
  208. package/lib/pr-monitor/journal.js +299 -0
  209. package/lib/pr-monitor/monitor.js +146 -0
  210. package/lib/pr-monitor/render-sticky.js +157 -0
  211. package/lib/pr-monitor/watch-lifecycle.js +95 -0
  212. package/lib/pr-monitor/watch.js +247 -0
  213. package/lib/pr-pull.js +1273 -0
  214. package/lib/pr-shepherd.js +494 -0
  215. package/lib/pr-state-validator.js +59 -0
  216. package/lib/preflight/gates.js +237 -0
  217. package/lib/preflight/runner.js +116 -0
  218. package/lib/project-discovery.js +0 -53
  219. package/lib/project-memory.js +99 -497
  220. package/lib/protected-path-manifest.js +281 -0
  221. package/lib/protected-state-surfaces.js +387 -0
  222. package/lib/release-readiness.js +2089 -0
  223. package/lib/reset.js +59 -45
  224. package/lib/review-adapter.js +68 -0
  225. package/lib/rules-sync.js +260 -0
  226. package/lib/runtime-health.js +241 -20
  227. package/lib/safety-config-renderer.js +268 -0
  228. package/lib/setup-action-log.js +1 -7
  229. package/lib/setup.js +27 -65
  230. package/lib/shell-utils.js +76 -6
  231. package/lib/skills-sync.js +330 -0
  232. package/lib/smart-status/scoring.js +17 -3
  233. package/lib/status/beads-snapshot.js +45 -2
  234. package/lib/status/presenter.js +169 -18
  235. package/lib/status/snapshot.js +186 -0
  236. package/lib/sync-backend.js +202 -0
  237. package/lib/untrusted-content.js +52 -0
  238. package/lib/upgrade-safety.js +199 -0
  239. package/lib/workflow/enforce-stage.js +296 -47
  240. package/lib/workflow/stage-transition.js +115 -0
  241. package/lib/workflow/stages.js +30 -6
  242. package/lib/workflow/state-manager.js +11 -22
  243. package/lib/workflow/state.js +23 -1
  244. package/lib/workflow-profiles.js +17 -5
  245. package/package.json +37 -35
  246. package/rules/documentation.md +19 -0
  247. package/rules/kernel-tracking.md +26 -0
  248. package/rules/security.md +22 -0
  249. package/rules/tdd.md +20 -0
  250. package/rules/workflow.md +27 -0
  251. package/scripts/auto-backing-issue.js +47 -0
  252. package/scripts/beads-context.sh +81 -57
  253. package/scripts/beads-upgrade-smoke.sh +24 -3
  254. package/scripts/bootstrap-windows-tools.sh +78 -0
  255. package/scripts/branch-protection.js +2 -3
  256. package/scripts/check-agents.js +34 -137
  257. package/scripts/commitlint.js +3 -1
  258. package/scripts/conflict-detect.sh +3 -0
  259. package/scripts/dep-guard.sh +22 -3
  260. package/scripts/file-index.sh +3 -0
  261. package/scripts/forge-team/lib/claim.sh +34 -18
  262. package/scripts/forge-team/lib/dashboard.sh +61 -86
  263. package/scripts/forge-team/lib/epic.sh +99 -263
  264. package/scripts/forge-team/lib/hooks.sh +26 -28
  265. package/scripts/forge-team/lib/identity.sh +4 -4
  266. package/scripts/forge-team/lib/sync-github.sh +49 -84
  267. package/scripts/forge-team/lib/verify.sh +93 -83
  268. package/scripts/forge-team/lib/workload.sh +41 -65
  269. package/scripts/forge-team/tests/claim.test.sh +25 -19
  270. package/scripts/forge-team/tests/dashboard.test.sh +31 -46
  271. package/scripts/forge-team/tests/epic.test.sh +52 -71
  272. package/scripts/forge-team/tests/hooks.test.sh +38 -50
  273. package/scripts/forge-team/tests/identity.test.sh +3 -3
  274. package/scripts/forge-team/tests/integration.test.sh +44 -66
  275. package/scripts/forge-team/tests/sync-github.test.sh +50 -83
  276. package/scripts/forge-team/tests/verify.test.sh +37 -46
  277. package/scripts/forge-team/tests/workflow-integration.test.sh +4 -4
  278. package/scripts/forge-team/tests/workload.test.sh +32 -66
  279. package/scripts/gen-command-manifest.js +153 -0
  280. package/scripts/gen-embedded-assets.mjs +129 -0
  281. package/scripts/install.ps1 +139 -0
  282. package/scripts/install.sh +268 -0
  283. package/scripts/lib/release-asset.mjs +84 -0
  284. package/scripts/parity-check.mjs +145 -0
  285. package/scripts/parity-check.test.mjs +58 -0
  286. package/scripts/pin-agentic-workflow-images.js +112 -0
  287. package/scripts/pr-coordinator.sh +3 -0
  288. package/scripts/preflight-sonar.eslint.config.mjs +44 -0
  289. package/scripts/preflight.sh +21 -94
  290. package/scripts/protected-state-check.js +104 -0
  291. package/scripts/smart-status.sh +60 -57
  292. package/scripts/spikes/config-race-bench.js +111 -0
  293. package/scripts/spikes/harness-capability-matrix.js +13 -0
  294. package/scripts/spikes/patch-anchor-stability-bench.js +125 -0
  295. package/scripts/spikes/protected-path-manifest.js +20 -0
  296. package/scripts/spikes/skill-auto-invoke-parity.js +292 -0
  297. package/scripts/sync-agent-skills.js +62 -0
  298. package/scripts/sync-utils.sh +3 -0
  299. package/scripts/test-ci-shard.js +13 -6
  300. package/scripts/test.js +95 -12
  301. package/skills/claim-safety/SKILL.md +102 -0
  302. package/skills/claim-safety/evals/evals.json +46 -0
  303. package/{.github/prompts/dev.prompt.md → skills/dev/SKILL.md} +44 -50
  304. package/skills/dev/evals/evals.json +50 -0
  305. package/skills/hermes-forge/SKILL.md +185 -0
  306. package/skills/hermes-forge/evals/evals.json +46 -0
  307. package/skills/issue-basics/SKILL.md +111 -0
  308. package/skills/issue-basics/evals/evals.json +46 -0
  309. package/skills/kernel/SKILL.md +166 -0
  310. package/skills/kernel/evals/evals.json +50 -0
  311. package/skills/memory/SKILL.md +102 -0
  312. package/skills/parallel-deep-research/SKILL.md +14 -11
  313. package/skills/parallel-deep-research/evals/evals.json +11 -27
  314. package/{.github/prompts/plan.prompt.md → skills/plan/SKILL.md} +132 -157
  315. package/skills/plan/evals/evals.json +42 -0
  316. package/skills/research/SKILL.md +195 -0
  317. package/skills/research/evals/evals.json +42 -0
  318. package/{.github/prompts/review.prompt.md → skills/review/SKILL.md} +98 -62
  319. package/skills/review/evals/evals.json +42 -0
  320. package/skills/rollback/SKILL.md +110 -0
  321. package/skills/rollback/evals/evals.json +46 -0
  322. package/skills/rollback/references/methods.md +204 -0
  323. package/{.cursor/commands/rollback.md → skills/rollback/references/workflow-integration.md} +10 -284
  324. package/skills/shepherd/SKILL.md +66 -0
  325. package/skills/shepherd/evals/evals.json +42 -0
  326. package/{.github/prompts/ship.prompt.md → skills/ship/SKILL.md} +81 -45
  327. package/skills/ship/evals/evals.json +42 -0
  328. package/skills/smith/SKILL.md +142 -0
  329. package/skills/smith/evals/evals.json +46 -0
  330. package/skills/smith/references/autonomy-and-gates.md +94 -0
  331. package/{.github/prompts/sonarcloud.prompt.md → skills/sonarcloud/SKILL.md} +14 -3
  332. package/skills/sonarcloud/evals/evals.json +46 -0
  333. package/skills/sonarcloud-analysis/SKILL.md +18 -13
  334. package/skills/sonarcloud-analysis/evals/evals.json +11 -15
  335. package/{.github/prompts/status.prompt.md → skills/status/SKILL.md} +20 -10
  336. package/skills/status/evals/evals.json +50 -0
  337. package/skills/triage-ready/SKILL.md +121 -0
  338. package/skills/triage-ready/evals/evals.json +42 -0
  339. package/{.github/prompts/validate.prompt.md → skills/validate/SKILL.md} +52 -29
  340. package/skills/validate/evals/evals.json +42 -0
  341. package/skills/verify/SKILL.md +299 -0
  342. package/skills/verify/evals/evals.json +50 -0
  343. package/.claude/commands/dev.md +0 -345
  344. package/.claude/commands/plan.md +0 -566
  345. package/.claude/commands/premerge.md +0 -186
  346. package/.claude/commands/research.md +0 -42
  347. package/.claude/commands/review.md +0 -451
  348. package/.claude/commands/rollback.md +0 -721
  349. package/.claude/commands/ship.md +0 -213
  350. package/.claude/commands/sonarcloud.md +0 -152
  351. package/.claude/commands/status.md +0 -90
  352. package/.claude/commands/validate.md +0 -288
  353. package/.claude/commands/verify.md +0 -269
  354. package/.claude/rules/workflow.md +0 -121
  355. package/.cline/workflows/dev.md +0 -342
  356. package/.cline/workflows/plan.md +0 -563
  357. package/.cline/workflows/premerge.md +0 -183
  358. package/.cline/workflows/research.md +0 -39
  359. package/.cline/workflows/review.md +0 -448
  360. package/.cline/workflows/rollback.md +0 -718
  361. package/.cline/workflows/ship.md +0 -210
  362. package/.cline/workflows/sonarcloud.md +0 -146
  363. package/.cline/workflows/status.md +0 -87
  364. package/.cline/workflows/validate.md +0 -285
  365. package/.cline/workflows/verify.md +0 -266
  366. package/.codex/config.toml +0 -11
  367. package/.codex/skills/dev/SKILL.md +0 -345
  368. package/.codex/skills/plan/SKILL.md +0 -566
  369. package/.codex/skills/premerge/SKILL.md +0 -186
  370. package/.codex/skills/research/SKILL.md +0 -42
  371. package/.codex/skills/review/SKILL.md +0 -451
  372. package/.codex/skills/rollback/SKILL.md +0 -721
  373. package/.codex/skills/ship/SKILL.md +0 -213
  374. package/.codex/skills/sonarcloud/SKILL.md +0 -149
  375. package/.codex/skills/status/SKILL.md +0 -90
  376. package/.codex/skills/validate/SKILL.md +0 -288
  377. package/.codex/skills/verify/SKILL.md +0 -269
  378. package/.cursor/commands/dev.md +0 -342
  379. package/.cursor/commands/plan.md +0 -563
  380. package/.cursor/commands/premerge.md +0 -183
  381. package/.cursor/commands/research.md +0 -39
  382. package/.cursor/commands/review.md +0 -448
  383. package/.cursor/commands/ship.md +0 -210
  384. package/.cursor/commands/sonarcloud.md +0 -146
  385. package/.cursor/commands/status.md +0 -87
  386. package/.cursor/commands/validate.md +0 -285
  387. package/.cursor/commands/verify.md +0 -266
  388. package/.cursorrules +0 -149
  389. package/.github/prompts/premerge.prompt.md +0 -188
  390. package/.github/prompts/research.prompt.md +0 -44
  391. package/.github/prompts/rollback.prompt.md +0 -723
  392. package/.github/prompts/verify.prompt.md +0 -271
  393. package/.github/workflows/beads-to-github.yml +0 -89
  394. package/.github/workflows/github-to-beads.yml +0 -100
  395. package/.kilocode/workflows/dev.md +0 -346
  396. package/.kilocode/workflows/plan.md +0 -567
  397. package/.kilocode/workflows/premerge.md +0 -187
  398. package/.kilocode/workflows/research.md +0 -43
  399. package/.kilocode/workflows/review.md +0 -452
  400. package/.kilocode/workflows/rollback.md +0 -722
  401. package/.kilocode/workflows/ship.md +0 -214
  402. package/.kilocode/workflows/sonarcloud.md +0 -150
  403. package/.kilocode/workflows/status.md +0 -91
  404. package/.kilocode/workflows/validate.md +0 -289
  405. package/.kilocode/workflows/verify.md +0 -270
  406. package/.opencode/commands/dev.md +0 -345
  407. package/.opencode/commands/plan.md +0 -566
  408. package/.opencode/commands/premerge.md +0 -186
  409. package/.opencode/commands/research.md +0 -42
  410. package/.opencode/commands/review.md +0 -451
  411. package/.opencode/commands/rollback.md +0 -721
  412. package/.opencode/commands/ship.md +0 -213
  413. package/.opencode/commands/sonarcloud.md +0 -149
  414. package/.opencode/commands/status.md +0 -90
  415. package/.opencode/commands/validate.md +0 -288
  416. package/.opencode/commands/verify.md +0 -269
  417. package/.roo/commands/dev.md +0 -346
  418. package/.roo/commands/plan.md +0 -567
  419. package/.roo/commands/premerge.md +0 -187
  420. package/.roo/commands/research.md +0 -43
  421. package/.roo/commands/review.md +0 -452
  422. package/.roo/commands/rollback.md +0 -722
  423. package/.roo/commands/ship.md +0 -214
  424. package/.roo/commands/sonarcloud.md +0 -150
  425. package/.roo/commands/status.md +0 -91
  426. package/.roo/commands/validate.md +0 -289
  427. package/.roo/commands/verify.md +0 -270
  428. package/docs/BEADS_GITHUB_SYNC.md +0 -281
  429. package/docs/GREPTILE_SETUP.md +0 -400
  430. package/docs/MANUAL_REVIEW_GUIDE.md +0 -106
  431. package/docs/SETUP.md +0 -663
  432. package/docs/VALIDATION.md +0 -363
  433. package/lib/agents/cline.plugin.json +0 -29
  434. package/lib/agents/copilot.plugin.json +0 -24
  435. package/lib/agents/kilocode.plugin.json +0 -22
  436. package/lib/agents/opencode.plugin.json +0 -23
  437. package/lib/agents/roo.plugin.json +0 -30
  438. package/lib/beads-bootstrap.js +0 -225
  439. package/lib/beads-health-check.js +0 -188
  440. package/lib/commands/commands-reset.js +0 -147
  441. package/opencode.json +0 -67
  442. package/scripts/beads-context.test.js +0 -584
  443. package/scripts/github-beads-sync/comment.mjs +0 -64
  444. package/scripts/github-beads-sync/config.mjs +0 -148
  445. package/scripts/github-beads-sync/github-api.mjs +0 -131
  446. package/scripts/github-beads-sync/index.mjs +0 -356
  447. package/scripts/github-beads-sync/label-mapper.mjs +0 -54
  448. package/scripts/github-beads-sync/mapping.mjs +0 -132
  449. package/scripts/github-beads-sync/reverse-sync-cli.mjs +0 -31
  450. package/scripts/github-beads-sync/reverse-sync.mjs +0 -162
  451. package/scripts/github-beads-sync/run-bd.mjs +0 -161
  452. package/scripts/github-beads-sync/sanitize.mjs +0 -121
  453. package/scripts/github-beads-sync.config.json +0 -26
  454. package/scripts/sync-commands.js +0 -600
@@ -0,0 +1,185 @@
1
+ ---
2
+ name: hermes-forge
3
+ description: >
4
+ Hermes⇄Forge boundary: Hermes CONSUMES Forge state, never a second source of truth. Use
5
+ whenever a Hermes session runs on a Forge repo: at session start, before acting on an issue,
6
+ or when you need CURRENT state. Read state ONLY via `forge orient` / `forge recap
7
+ <issue-id>` (bounded JSON envelope), citing each source's `path`/`authority`; never
8
+ reconstruct it from raw stores or kernel internals. Writeback ONLY via `forge
9
+ comment`/`update`/`create`; NEVER leak Hermes profile or session memory into Forge state.
10
+ Triggers: "orient me / current project state", "where did this fact come from, cite it",
11
+ "orient came back truncated", "persist a decision into Forge", "safe to store in kernel
12
+ state?". NOT the Forge session router over stage skills (kernel), NOT the human "what stage
13
+ am I in" report (status), NOT everyday issue create/update/close/search CRUD (issue-basics),
14
+ NOT ranking the next ready issue (triage-ready), NOT live PR monitoring (shepherd—outside
15
+ Hermes, unseen by orient).
16
+ compatibility: >
17
+ Requires the Forge CLI (`forge`) on PATH in a Forge-initialized repo. Install
18
+ path — like every Forge skill pack (e.g. parallel-deep-research,
19
+ sonarcloud-analysis) this is delivered by the unified Skills CLI; run
20
+ `skills sync` to install it into `.hermes/skills/hermes-forge/`. (`forge setup`
21
+ initializes the skills registry via `skills init` but does not sync packs to
22
+ agents.) Read-only orientation works anywhere; writeback requires a Forge
23
+ Kernel issue backend. CLI-only — no direct file or profile writes into Forge
24
+ state.
25
+ metadata:
26
+ author: forge
27
+ version: "1.0.0"
28
+ roadmap: forge-2agy.9.7.x
29
+ ---
30
+
31
+ # Hermes ⇄ Forge consumption contract
32
+
33
+ Hermes is a *consumer* of Forge project state, not an owner of it. This skill
34
+ defines how a Hermes session reads, cites, and writes back to a Forge project
35
+ without ever becoming a second source of truth.
36
+
37
+ The boundary between what Forge owns and what Hermes owns is specified in the
38
+ Forge repo at `docs/reference/HERMES_INTEGRATION.md` (repo-relative path — this
39
+ skill is synced to `.hermes/skills/hermes-forge/`, so relative links would not
40
+ resolve from the installed location).
41
+
42
+ ## When to use
43
+
44
+ - At the start of any Hermes session on a Forge repo (orientation).
45
+ - Before acting on a specific issue (issue recap).
46
+ - Whenever you need current project state — never reconstruct it from raw files.
47
+
48
+ ## Authority: orient / recap are the only state source
49
+
50
+ The Forge Kernel is the single source of truth. Hermes obtains project state
51
+ **exclusively** through two thin CLI wrappers and must not infer state by
52
+ reading raw issue stores, design files, or kernel internals directly:
53
+
54
+ ```bash
55
+ forge orient --json # bounded project orientation (envelope)
56
+ forge orient --budget 4000 --json
57
+ forge recap <issue-id> --json # bounded per-issue recap (envelope)
58
+ ```
59
+
60
+ `forge orient` and `forge recap <issue-id>` emit the deterministic JSON envelope
61
+ described below (assembly `deterministic-file-assembly-v1`). Parse the JSON; do
62
+ not screen-scrape the human text form.
63
+
64
+ > Note: `forge recap` always requires an issue id — bare `forge recap --json`
65
+ > (no id) prints its usage and exits non-zero rather than returning a summary.
66
+ > Use `forge orient` for project-level orientation, or `forge recap <issue-id>`
67
+ > for a single issue; both emit the deterministic envelope.
68
+
69
+ ### Envelope shape
70
+
71
+ | Field | Meaning |
72
+ | --- | --- |
73
+ | `schema_version` | Contract version (currently `1`). Reject unknown majors. |
74
+ | `kind` | `orientation`, `issue_recap`, or `prime`. |
75
+ | `generated_at` | Assembly timestamp. |
76
+ | `assembly` | `deterministic-file-assembly-v1` — same inputs ⇒ same output. |
77
+ | `token_budget` | Budget accounting (see below). |
78
+ | `sections[]` | Ordered content blocks, each independently cited. |
79
+ | `sources[]` | Deduplicated provenance across all sections. |
80
+ | `next_commands[]` | Suggested follow-up `forge` commands. Prefer these for navigation. |
81
+
82
+ Each `sections[]` entry: `{ id, title, content, sources, truncated, estimated_tokens }`.
83
+
84
+ ## Token budget
85
+
86
+ `forge orient` / `forge recap <issue-id>` are bounded so they fit a context
87
+ window deterministically.
88
+
89
+ - Default budget: **2000** estimated tokens. Minimum honored: **40**.
90
+ - Estimation is approximate: `token_budget.approximate === true`,
91
+ `token_budget.chars_per_token === 4`.
92
+ - `token_budget.requested` is what you asked for; `token_budget.used` is the
93
+ estimate actually emitted.
94
+ - Raise the ceiling with `--budget N` when you need more depth; do not retry
95
+ blindly — request a specific larger budget.
96
+
97
+ ## Citation & provenance model
98
+
99
+ Every fact Hermes surfaces to a user MUST be attributable. Each section carries
100
+ `sources: [{ path, source_kind, authority, role }]`:
101
+
102
+ - `path` — the file the content came from.
103
+ - `source_kind` — the kind of artifact (e.g. design, decision, claim, queue).
104
+ - `authority` — how authoritative the source is. Prefer higher-authority
105
+ sources when two sources conflict; surface the conflict rather than silently
106
+ picking one.
107
+ - `role` — the role the source plays in the section.
108
+
109
+ When Hermes states a project fact, cite at least the `path` and `authority` of
110
+ the backing source. The top-level `sources[]` is the deduplicated set for the
111
+ whole payload.
112
+
113
+ ## Truncation policy
114
+
115
+ Truncation is deterministic, never random:
116
+
117
+ - Non-preserved sections are trimmed in the order given by
118
+ `token_budget.truncation_order`; when the budget is exhausted, sections later
119
+ in that order are trimmed first. Preserved sections are kept whole and trimmed
120
+ only as a last resort if the payload is still over budget. The authoritative
121
+ per-section signal is each section's `truncated` flag and `estimated_tokens` —
122
+ there is no per-section `priority` field; the overall trim order is
123
+ `token_budget.truncation_order`.
124
+ - A trimmed section ends with the literal marker
125
+ `[truncated deterministically by token budget]` and has `truncated: true`.
126
+ - `token_budget.truncated === true` means the payload as a whole was trimmed.
127
+
128
+ Treat any `truncated` section as **incomplete**. Do not present a truncated
129
+ section as exhaustive; if completeness matters, re-request with a higher
130
+ `--budget` or recap the specific issue.
131
+
132
+ ## Writeback path: Hermes → Forge Kernel
133
+
134
+ Evidence and decisions discovered during a Hermes session flow back into the
135
+ Forge Kernel **only** through Forge CLI commands. Use the issue command surface
136
+ documented in the Forge repo at
137
+ `docs/reference/forge-kernel-issue-command-contract.md`:
138
+
139
+ ```bash
140
+ forge comment <id> <body...> # attach evidence, a decision, or a note to an issue
141
+ forge update <id...> [flags] # update issue state/fields
142
+ forge create [title] [flags] # open a new issue for follow-up work
143
+ ```
144
+
145
+ > Note: `forge audit` is verify-only (`forge audit verify`) and does **not**
146
+ > append evidence — record evidence as an issue comment via `forge comment`.
147
+
148
+ These writes land in the Forge Kernel issue store, where they become part of the
149
+ issue's durable history (view them via the issue itself, e.g. `forge show <id>`).
150
+ Note the read/write asymmetry: the bounded `forge orient` / `forge recap`
151
+ envelope is assembled from project docs, `docs/work` artifacts, and the issue
152
+ summary — it surfaces issue/design/decision state but does **not** echo
153
+ individual issue comments back. Do not assume evidence added via `forge comment`
154
+ reappears verbatim in the next orient/recap payload; it lives in the issue
155
+ history, reachable from the issue record.
156
+
157
+ ## No-profile-write guard (hard boundary)
158
+
159
+ Hermes **MUST NOT write Hermes profile** state, conversation memory, or any
160
+ Hermes-native artifact into Forge Kernel state — not into kernel storage, not
161
+ into design/decision files, not into the issue backend. Hermes-native memory
162
+ stays in Hermes' own store.
163
+
164
+ - ✅ Read state via `forge orient` / `forge recap`.
165
+ - ✅ Write evidence/decisions via `forge comment` / `forge update`.
166
+ - ❌ Never persist Hermes profile/session memory into Forge Kernel state.
167
+ - ❌ Never edit Forge state files directly to record Hermes-side context.
168
+
169
+ If a piece of context only matters to Hermes, it belongs in Hermes-native
170
+ memory. If it is a project fact, decision, or evidence item, write it through
171
+ the Forge CLI so it becomes part of the shared, cited source of truth.
172
+
173
+ ## PR shepherd (external scheduler, not orientation)
174
+
175
+ The PR shepherd runs **outside** Hermes. An external scheduler invokes
176
+ `forge shepherd <pr>` as discrete bounded passes — each pass reads CI/check
177
+ state, takes at most one idempotent action (re-run a flaky required check), or
178
+ escalates, then exits. It **never merges** (the human merges in the GitHub UI)
179
+ and **never resolves review threads**.
180
+
181
+ Hermes does not run the shepherd and does not learn shepherd progress through
182
+ `forge orient` (which is deterministic-source orientation with no live PR
183
+ awareness). Shepherd progress is durable on the **PR itself** — its comments and
184
+ labels. When a Hermes session needs PR/CI status, read the PR directly; do not
185
+ expect `orient` to carry it.
@@ -0,0 +1,46 @@
1
+ [
2
+ {
3
+ "query": "I just started a Hermes session on this Forge repo — get me oriented on where the project stands before I touch anything.",
4
+ "should_trigger": true
5
+ },
6
+ {
7
+ "query": "The forge orient envelope came back with the active-work section flagged truncated. Can I treat that as the full list, or do I need to pull more?",
8
+ "should_trigger": true
9
+ },
10
+ {
11
+ "query": "Before I tell the user which approach we settled on, I need to point at the exact source file and how authoritative it is — where does that decision come from?",
12
+ "should_trigger": true
13
+ },
14
+ {
15
+ "query": "I uncovered a design decision in this session that the team needs to keep. What's the correct way to write it back into Forge without dragging my Hermes notes into kernel state?",
16
+ "should_trigger": true
17
+ },
18
+ {
19
+ "query": "Default orientation is clipping the decisions section at 2000 tokens — give me more headroom.",
20
+ "should_trigger": true
21
+ },
22
+ {
23
+ "query": "Don't rebuild the project picture by grepping the design docs yourself — go through the proper bounded orient/recap surface instead.",
24
+ "should_trigger": true
25
+ },
26
+ {
27
+ "query": "Which workflow stage am I sitting in right now, and has any of my work gone stale?",
28
+ "should_trigger": false
29
+ },
30
+ {
31
+ "query": "I'm kicking off a Forge session in Claude — which stage skill do I run to start planning a new feature?",
32
+ "should_trigger": false
33
+ },
34
+ {
35
+ "query": "Watch PR #418, rerun the flaky required check if it trips, and ping me when it's ready to merge.",
36
+ "should_trigger": false
37
+ },
38
+ {
39
+ "query": "Open a bug issue for the checkout timeout, set priority 1, and add a note about the repro steps.",
40
+ "should_trigger": false
41
+ },
42
+ {
43
+ "query": "What's the highest-priority ready issue I should pick up next?",
44
+ "should_trigger": false
45
+ }
46
+ ]
@@ -0,0 +1,111 @@
1
+ ---
2
+ name: issue-basics
3
+ description: >
4
+ Everyday single-issue CRUD over the `forge issue` verbs:
5
+ create/update/show/list/search/close/reopen/comment, set priority/labels/assignee, claim or
6
+ release one issue, add/remove dependency edges, plus backlog `stats`. Use for ANY routine
7
+ one-off issue op: "create an issue/bug/task for X", "update/edit issue <id>", "close or
8
+ reopen this issue", "comment a handoff note on <id>", "list/filter open bugs by
9
+ status/label/priority", "bump this to P1", "reassign to alice", "mark <id> blocked by <id>".
10
+ Also the parity floor migrating off a Beads-style tracker (label/reopen/delete map to forge
11
+ equivalents). Single-operation plumbing only. Does NOT choose, rank, or explain the next
12
+ issue to work on or why it's blocked (use triage-ready); does NOT run
13
+ claim-then-prove-lease-ownership safety (use claim-safety); does NOT drive an issue through
14
+ the plan->dev->validate->ship pipeline or open a PR (use smith or stage skills); does NOT
15
+ report the current stage or what's in flight (use status).
16
+ allowed-tools: Read, Bash(forge:*)
17
+ ---
18
+
19
+ # Issue basics — the CRUD floor
20
+
21
+ Everyday issue operations over the Forge kernel. Every command here is a real
22
+ `forge issue` verb (confirm with `forge issue --help`). The kernel is the single
23
+ source of truth — never hand-edit the issue store.
24
+
25
+ Every `--json` reply is the same envelope: `{ ok, schema_version, command, data,
26
+ next_commands }` on success, or `{ ok:false, error:{ message, exit_code } }` on
27
+ failure. **Gate on `ok`** — do not parse `data` until you confirm `ok:true`.
28
+
29
+ ## The core loop
30
+
31
+ | Need | Command |
32
+ |------|---------|
33
+ | Create an issue | `forge issue create --title "…" --type <task\|bug\|epic\|decision>` |
34
+ | Inspect one issue | `forge issue show <id> [--json]` |
35
+ | List / filter issues | `forge issue list [--status … --type … --priority … --label …] [--json]` |
36
+ | Full-text search | `forge issue search "…" [--json]` |
37
+ | Backlog counts | `forge issue stats [--json]` |
38
+ | Claim work (DB-enforced lease) | `forge issue claim <id>` |
39
+ | Release a claim | `forge issue release <id>` |
40
+ | Update fields | `forge issue update <id> [flags]` |
41
+ | Add a handoff note | `forge issue comment <id> "…"` |
42
+ | Close (one or many) | `forge issue close <id...> --reason "…"` |
43
+ | Dependencies | `forge issue dep add\|remove <id> <blocks-id>` |
44
+
45
+ ## Create — the flags that matter
46
+
47
+ ```bash
48
+ forge issue create --title "Add rate limiting" --type task \
49
+ --priority P1 --label "feature,api,security" --assignee alice \
50
+ --acceptance "429 returned after N req/min; covered by a test"
51
+ ```
52
+
53
+ | Flag | Meaning | Default |
54
+ |------|---------|---------|
55
+ | `--title "…"` | Human title (a bare leading positional also works) | minted id |
56
+ | `--type <…>` | `task` · `bug` · `epic` · `decision` | `task` |
57
+ | `--priority <…>` | `P0`..`P4` (or bare `0`..`4`); `P0` is highest | unset |
58
+ | `--label "a,b"` | Comma-separated set — one flag, split on `,` (repeats do NOT accumulate) | none |
59
+ | `--body "…"` | Long description (`--description` is an accepted alias) | empty |
60
+ | `--assignee <who>` | Persistent assignee | unset |
61
+ | `--acceptance "…"` | Acceptance criteria (`--design`, `--notes` also persist) | unset |
62
+ | `--parent <id>` | Parent/epic id | none |
63
+
64
+ `--status` defaults to `open`. Status vocabulary: `open` · `in_progress` ·
65
+ `review` · `done` · `cancelled`. Unlike `--priority` and `--status` (which reject
66
+ unknown values), `--type` is stored verbatim — a non-canonical value like
67
+ `feature` is accepted without error but carries no kernel behaviour, so stick to
68
+ the four canonical types. Epics and decisions are excluded from the ready queue
69
+ (non-claimability is a queue convention, not enforcement — `forge issue claim`
70
+ currently returns `ok:true` on them too).
71
+
72
+ ## Update — same field flags, plus close
73
+
74
+ `forge issue update <id>` takes `--status`, `--title`, `--body`/`--description`,
75
+ `--priority`, `--label` (reparents the whole set), `--parent`, `--assignee`,
76
+ `--acceptance`, `--design`, `--notes`. `forge issue close <id> --reason "…"`
77
+ records the reason on the close event and accepts multiple ids in one call.
78
+
79
+ ## Migrating from a Beads-style tracker — verb disposition
80
+
81
+ Nothing you relied on silently disappears; a few verbs map onto a `forge` flag or
82
+ are intentionally unsupported:
83
+
84
+ | Old verb | Forge equivalent |
85
+ |----------|------------------|
86
+ | `label` (add/remove) | **No subcommand** — pass the full set via `--label "a,b"` on `create`/`update` (last-value-wins). |
87
+ | `reopen` | `forge issue update <id> --status open`. |
88
+ | `delete` | **Unsupported by design** — the kernel is append-only/event-sourced. Use `forge issue close <id> --reason "…"` instead. |
89
+
90
+ ## Reliability
91
+
92
+ - **Check `ok` before trusting output.** On `ok:false`, read `error.message` and
93
+ fix the input rather than retrying blindly.
94
+ - **Claim before you mutate shared work.** `forge issue claim <id>` takes a
95
+ DB-enforced lease; hand off to the `claim-safety` procedure before acting on a
96
+ claimed issue you intend to change. `forge issue release <id>` if you abandon it.
97
+ - **Record decisions as comments, not memory.** `forge issue comment <id> "…"`
98
+ survives the session; scratch notes do not.
99
+
100
+ ## Fork points
101
+
102
+ Editable conventions — set these once for your team and this skill enforces them.
103
+ It is a canonical source you fork, not a fixed policy.
104
+
105
+ | Knob | Default | How to change |
106
+ |------|---------|---------------|
107
+ | **Default type** | `task` (kernel default) | Decide your create convention — e.g. always pass `--label feature` for user-facing work (feature is a label, not a canonical type), `--type bug` for regressions. |
108
+ | **Default priority** | unset | Adopt a house scale (e.g. new work opens at `P2`, incidents at `P0`) and always pass `--priority`. |
109
+ | **Fields required on create** | `--title` only | Require `--acceptance` (and `--label`/`--assignee`) on every create so issues are actionable from birth. |
110
+ | **Id / reference convention** | kernel-minted ids | Standardize how you cite issues in commits/PRs (e.g. `Closes <id>`) and whether you pass an explicit `--id`. |
111
+ | **Label taxonomy** | free-form | Pin an allowed label set your team agrees on and pass it consistently via `--label "a,b"`. |
@@ -0,0 +1,46 @@
1
+ [
2
+ {
3
+ "query": "Open a bug ticket for the checkout 500 error and mark it P0",
4
+ "should_trigger": true
5
+ },
6
+ {
7
+ "query": "Add a note to forge-abc123 documenting why we chose JWT",
8
+ "should_trigger": true
9
+ },
10
+ {
11
+ "query": "Show me all open issues tagged backend",
12
+ "should_trigger": true
13
+ },
14
+ {
15
+ "query": "Reopen forge-77, it wasn't actually fixed",
16
+ "should_trigger": true
17
+ },
18
+ {
19
+ "query": "Add a dependency so forge-12 is blocked by forge-9",
20
+ "should_trigger": true
21
+ },
22
+ {
23
+ "query": "Claim forge-abc so I can start on it",
24
+ "should_trigger": true
25
+ },
26
+ {
27
+ "query": "What's the next ready issue I should pick up?",
28
+ "should_trigger": false
29
+ },
30
+ {
31
+ "query": "Explain why forge-55 is still blocked and what to unblock first",
32
+ "should_trigger": false
33
+ },
34
+ {
35
+ "query": "Claim this issue and confirm I hold the lease before I change anything",
36
+ "should_trigger": false
37
+ },
38
+ {
39
+ "query": "Drive forge-30 all the way through to a merged PR",
40
+ "should_trigger": false
41
+ },
42
+ {
43
+ "query": "Where am I in the workflow right now and what's in flight?",
44
+ "should_trigger": false
45
+ }
46
+ ]
@@ -0,0 +1,166 @@
1
+ ---
2
+ name: kernel
3
+ description: >
4
+ Forge kernel — umbrella index/router for a Forge project. Reach for this FIRST when
5
+ orienting rather than executing: at session start, when you need the map of how the system
6
+ fits together, or when unsure WHICH skill or `forge` verb a task belongs to. It indexes
7
+ `smith` (end-to-end orchestrator), the stage ladder (plan → dev → validate → ship → review →
8
+ verify), the utility/issue skills, and the day-to-day `forge` CLI verbs. Trigger on "how
9
+ does the Forge workflow work", "which forge command or skill for X", "I'm new here, how is
10
+ Forge set up", or "should this be a Forge issue or a TodoWrite". Index layer only — hand off
11
+ the doing: rank/pick the next ready issue → `triage-ready`; current stage / "where am I" /
12
+ active or stale work → `status`; create/update/close/search one issue → `issue-basics`;
13
+ claim-then-prove ownership before mutating → `claim-safety`; drive one issue from plan to a
14
+ merged PR under gates → `smith`; token-bounded state for the Hermes harness →
15
+ `hermes-forge`.
16
+ allowed-tools: Read, Bash(forge:*)
17
+ ---
18
+
19
+ # Forge kernel surface
20
+
21
+ Forge is a TDD-first workflow harness. The agent-facing surface is **skills + the
22
+ `forge` CLI** — there are no slash-command files. This umbrella skill is the
23
+ entry point: it tells you which stage skill to use and which `forge` verb runs
24
+ each day-to-day operation. Every skill is a thin guide over a real `forge`
25
+ command; the CLI remains the implementation, the skills are the surface.
26
+
27
+ ## Stage skills (the TDD ladder)
28
+
29
+ The default workflow is a configurable ladder of per-stage skills. Use the whole
30
+ flow when it fits, or invoke an individual stage when the active plan permits a
31
+ smaller path.
32
+
33
+ | Stage | Skill | Purpose |
34
+ |-------|-------|---------|
35
+ | utility | `status` | Check current context, active work, recent completions |
36
+ | 1 | `plan` | Design intent → research → branch + worktree + task list |
37
+ | 2 | `dev` | Subagent-driven TDD per task (implementer → spec → quality review) |
38
+ | 3 | `validate` | Type check, lint, code review, security, tests — all fresh output |
39
+ | 4 | `ship` | Push branch and open the PR with design-doc reference |
40
+ | 5 | `review` | Address ALL PR feedback (GitHub Actions, Greptile, SonarCloud) |
41
+ | 6 | `verify` | Post-merge health check (CI on main, close issues) |
42
+
43
+ **Pre-merge gate** (not a numbered stage): before merge, finish the doc updates on
44
+ the feature branch and confirm CI is green, then hand off the PR for manual merge.
45
+ The gate is embedded in `ship` and `review` — it is not a standalone skill.
46
+
47
+ Utility skills outside the linear ladder: `research` (deep web research),
48
+ `rollback` (safe revert operations), `sonarcloud` (code-quality queries),
49
+ `shepherd` (cross-harness PR monitoring).
50
+
51
+ Procedure skills (reusable operations any stage/agent embeds): `claim-safety`
52
+ (claim an issue and PROVE you own the lease via `forge issue owns <id>` before
53
+ mutating it — a claim returning ok:true does not by itself prove ownership).
54
+
55
+ ```
56
+ status → plan → dev → validate → ship → review → verify
57
+ ```
58
+
59
+ ## Orchestrator super-skill
60
+
61
+ `smith` is the flagship: a thin orchestrator that COMPOSES the skills above into
62
+ the right path for a piece of work — pick (`triage-ready`) → claim
63
+ (`claim-safety`) → `plan` → `dev` → `validate` → `ship` → `review` → `verify` —
64
+ driving autonomously between human gates and pausing AT them. The human gates are
65
+ durable kernel EVENTS (`forge gate check|approve|reject|status <issue> <gate>`;
66
+ gates `gate.intent` · `gate.plan-approval` · `gate.merge`), so a gated run is
67
+ resume-safe across compaction. During planning `smith` calibrates how many gates
68
+ the work needs from its size × importance × complexity and proposes that tier at
69
+ the intent gate (the human confirms or overrides). Reach for `smith` to run a
70
+ whole issue end to end under human control; invoke an individual stage skill to
71
+ run a single step.
72
+
73
+ ## Kernel-native skills
74
+
75
+ Read-and-repair skills that work directly against the kernel's issue store. They
76
+ complement the ladder: reach for them to decide *what* to do and to run the
77
+ everyday issue operations, then route into a stage skill to execute.
78
+
79
+ | Skill | Purpose |
80
+ |-------|---------|
81
+ | `triage-ready` | Read-only "what should I work on" — ranks and *explains* the ready queue via `forge issue ready` / `blocked` / `stats` (never `board`), then hands off the pick. |
82
+ | `issue-basics` | The everyday CRUD floor — create/update/claim/release/comment/close/show/list/search/stats over the `forge issue` verbs, plus the label/reopen/delete disposition for teams migrating in. |
83
+
84
+ ## Day-to-day verbs (the `forge` CLI)
85
+
86
+ The kernel verbs are the operations you reach for inside any stage — find work,
87
+ claim it, fix in place, query the board, orient. They are grouped in four
88
+ families. Run them through Bash; never hand-edit the issue store.
89
+
90
+ ### A — Issue lifecycle (the core loop)
91
+
92
+ | Need | Command |
93
+ |------|---------|
94
+ | Find ready work | `forge ready [--json]` |
95
+ | Inspect an issue | `forge show <id> [--json]` |
96
+ | List / filter issues | `forge list [--status …] [--json]` |
97
+ | Create an issue | `forge create --title "…" --type <feature\|bug\|task>` |
98
+ | Claim work (DB-enforced lease) | `forge claim <id>` |
99
+ | Prove you own the lease | `forge issue owns <id>` — exit 0 iff you hold the live lease (see the `claim-safety` skill) |
100
+ | Release a claim | `forge release <id>` |
101
+ | Update fields | `forge update <id> --priority <n>` (etc.) |
102
+ | Add a handoff comment | `forge comment <id> "…"` |
103
+ | Close an issue | `forge close <id> --reason "…"` |
104
+ | Dependencies | `forge issue dep add\|remove <id> <id>` |
105
+ | Search / stats | `forge issue search "…"` · `forge issue stats` |
106
+ | Blocked work | `forge blocked` |
107
+
108
+ ### B — Memory / knowledge
109
+
110
+ `forge remember <note> [--tag <label>]... [--json]` and `forge recall` are live —
111
+ they persist and retrieve project-memory notes from a file-backed store. Only
112
+ `forge knowledge search` is not on the CLI yet; until it lands, capture durable
113
+ decisions as `forge remember` notes or issue comments (`forge comment`).
114
+
115
+ ### C — Board / planning / admin
116
+
117
+ | Need | Command |
118
+ |------|---------|
119
+ | Team board | `forge board [--json]` |
120
+ | Export the issue projection | `forge export [--import]` |
121
+ | Release-readiness gate | `forge release check --target <ref>` |
122
+ | Sync team state | `forge sync` |
123
+
124
+ ### D — Orientation / session
125
+
126
+ | Need | Command |
127
+ |------|---------|
128
+ | Prime a session | `forge prime [--json]` |
129
+ | Full orientation | `forge orient [--json]` |
130
+ | Recap an issue / context | `forge recap [<id>] [--json]` |
131
+
132
+ ## Forge issues vs. TodoWrite — decision table
133
+
134
+ | Situation | Use |
135
+ |-----------|-----|
136
+ | Work spans sessions, has blockers, or needs recovery after compaction | **Forge issues** (`forge create`/`claim`/`close`) |
137
+ | Cross-agent or cross-worktree coordination | **Forge issues** (DB-enforced leases) |
138
+ | Durable decisions, design rationale, handoff notes | **Forge issue comments** |
139
+ | Ephemeral, single-session checklist for the current task | **TodoWrite** |
140
+ | Steps you will finish and discard within this turn | **TodoWrite** |
141
+
142
+ When in doubt, prefer a Forge issue: it survives the session and is visible to
143
+ the team. TodoWrite is for scratch tracking only.
144
+
145
+ ## Session protocol
146
+
147
+ 1. **Orient first.** Start with the `status` skill (or `forge prime` /
148
+ `forge orient`) — never reconstruct project state from raw files.
149
+ 2. **Claim before you build — then prove it.** `forge claim <id>` takes the lease;
150
+ one issue at a time. A claim's ok:true does not by itself prove ownership, so
151
+ confirm with `forge issue owns <id>` before working and again before
152
+ `close`/`release` (the `claim-safety` skill). `forge release <id>` if you abandon it.
153
+ 3. **Work the ladder.** `plan` → `dev` → `validate` → `ship` → `review` →
154
+ `verify`, skipping stages only when the plan allows. The pre-merge doc gate
155
+ runs inside `ship` and `review` before merge — it is not a separate stage.
156
+ 4. **Record evidence as you go.** Progress and decisions go to
157
+ `forge comment <id> "…"`, not to memory.
158
+ 5. **Hand off cleanly.** Close completed issues (`forge close <id> --reason …`)
159
+ and `forge sync` so the team sees the result.
160
+
161
+ ## Core principles
162
+
163
+ - **TDD-first** — write tests before implementation (RED → GREEN → REFACTOR).
164
+ - **Research-first** — understand before building; document decisions.
165
+ - **Security built-in** — OWASP Top 10 analysis for every feature.
166
+ - **Documentation progressive** — update at each stage, verify at the end.
@@ -0,0 +1,50 @@
1
+ [
2
+ {
3
+ "query": "I just cloned this Forge repo and I'm not sure how any of it works — give me the lay of the land: what's the workflow, what skills exist, and where do I even start?",
4
+ "should_trigger": true
5
+ },
6
+ {
7
+ "query": "There are a bunch of forge skills and I can't tell which one to use for what — lay out how they fit together and when I'd reach for each.",
8
+ "should_trigger": true
9
+ },
10
+ {
11
+ "query": "Which forge CLI command adds a dependency between two issues, and what's the verb for proving I hold a claim? Just the reference, don't run anything.",
12
+ "should_trigger": true
13
+ },
14
+ {
15
+ "query": "Is this small cleanup worth filing as a Forge issue, or should I just throw it on a TodoWrite checklist for this session?",
16
+ "should_trigger": true
17
+ },
18
+ {
19
+ "query": "Walk me through the Forge stage ladder from planning to post-merge verify and what each stage owns.",
20
+ "should_trigger": true
21
+ },
22
+ {
23
+ "query": "Give me the reference of all the day-to-day forge issue and board verbs — I want the index, not to execute a command yet.",
24
+ "should_trigger": true
25
+ },
26
+ {
27
+ "query": "What should I pick up next? Rank the ready queue and tell me the top unblocked issue and why.",
28
+ "should_trigger": false
29
+ },
30
+ {
31
+ "query": "Where am I in the workflow right now, what's my active work, and has anything gone stale?",
32
+ "should_trigger": false
33
+ },
34
+ {
35
+ "query": "Create a bug issue titled 'login times out after 30s', priority 1, and link it under the auth epic.",
36
+ "should_trigger": false
37
+ },
38
+ {
39
+ "query": "Claim forge-4h9 for me and confirm I actually hold the lease before I start editing.",
40
+ "should_trigger": false
41
+ },
42
+ {
43
+ "query": "Take forge-7c2 all the way from planning through a merged PR, pausing for my approval at the plan and the merge.",
44
+ "should_trigger": false
45
+ },
46
+ {
47
+ "query": "In the Hermes harness, give me the token-bounded project state to work from — treat forge orient as the source of truth.",
48
+ "should_trigger": false
49
+ }
50
+ ]