forge-workflow 0.0.10 → 0.1.0-beta.3

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 (468) 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 +82 -5
  5. package/.forge/hooks/forge-native-hook.js +431 -0
  6. package/.forge/protected-paths.yaml +157 -0
  7. package/AGENTS.md +151 -61
  8. package/CHANGELOG.md +709 -0
  9. package/CLAUDE.md +9 -118
  10. package/QUICKSTART.md +175 -0
  11. package/README.md +275 -365
  12. package/bin/forge-cmd.js +120 -9
  13. package/bin/forge-preflight.js +26 -5
  14. package/bin/forge.js +532 -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 +121 -0
  29. package/docs/guides/SUPPORT.md +190 -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 +214 -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 +155 -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/activation/ensure-forge-home.js +135 -0
  67. package/lib/adapter-cli.js +307 -0
  68. package/lib/adapters/beads-issue-adapter.js +127 -0
  69. package/lib/adapters/beads-kernel-compat.js +1109 -0
  70. package/lib/adapters/greptile-review-adapter.js +141 -0
  71. package/lib/adapters/kernel-issue-adapter.js +101 -0
  72. package/lib/adapters/pr-state-adapter.js +484 -0
  73. package/lib/adoption-profiles.js +139 -0
  74. package/lib/agents/README.md +2 -6
  75. package/lib/agents/claude.plugin.json +3 -8
  76. package/lib/agents/codex.plugin.json +9 -1
  77. package/lib/agents/cursor.plugin.json +2 -6
  78. package/lib/agents/hermes.plugin.json +22 -0
  79. package/lib/agents-config.js +39 -1236
  80. package/lib/audit-evidence.js +282 -0
  81. package/lib/beads-detect.js +60 -0
  82. package/lib/beads-nudge.js +91 -0
  83. package/lib/beads-setup.js +121 -0
  84. package/lib/beads-sync-scaffold.js +25 -101
  85. package/lib/codex-skills.js +51 -1
  86. package/lib/commands/_aliases.js +248 -0
  87. package/lib/commands/_issue.js +780 -77
  88. package/lib/commands/_manifest.js +93 -0
  89. package/lib/commands/_registry.js +99 -34
  90. package/lib/commands/_resolve-command-opts.js +230 -0
  91. package/lib/commands/_serve-security.js +270 -0
  92. package/lib/commands/adapter.js +12 -0
  93. package/lib/commands/add.js +118 -0
  94. package/lib/commands/audit.js +70 -0
  95. package/lib/commands/blocked.js +5 -0
  96. package/lib/commands/board.js +64 -0
  97. package/lib/commands/claim.js +21 -2
  98. package/lib/commands/claims.js +7 -0
  99. package/lib/commands/clean.js +485 -75
  100. package/lib/commands/close.js +2 -2
  101. package/lib/commands/comment.js +5 -0
  102. package/lib/commands/control.js +148 -0
  103. package/lib/commands/create.js +2 -2
  104. package/lib/commands/dev.js +185 -7
  105. package/lib/commands/doc-gate.js +336 -0
  106. package/lib/commands/doctor.js +156 -0
  107. package/lib/commands/explain.js +15 -0
  108. package/lib/commands/export.js +237 -0
  109. package/lib/commands/gate.js +209 -0
  110. package/lib/commands/hooks.js +377 -0
  111. package/lib/commands/inbox.js +118 -0
  112. package/lib/commands/init.js +604 -0
  113. package/lib/commands/insights.js +79 -0
  114. package/lib/commands/issue.js +12 -1
  115. package/lib/commands/issues.js +17 -0
  116. package/lib/commands/lint.js +5 -0
  117. package/lib/commands/list.js +2 -2
  118. package/lib/commands/memory.js +81 -0
  119. package/lib/commands/merge.js +312 -0
  120. package/lib/commands/migrate.js +362 -0
  121. package/lib/commands/new.js +12 -0
  122. package/lib/commands/options.js +241 -0
  123. package/lib/commands/orient.js +13 -0
  124. package/lib/commands/orphans.js +5 -0
  125. package/lib/commands/patch.js +67 -0
  126. package/lib/commands/plan.js +481 -29
  127. package/lib/commands/pr.js +88 -0
  128. package/lib/commands/preflight.js +211 -0
  129. package/lib/commands/prime.js +13 -0
  130. package/lib/commands/push.js +135 -2
  131. package/lib/commands/ready.js +2 -2
  132. package/lib/commands/recall.js +171 -0
  133. package/lib/commands/recap.js +75 -0
  134. package/lib/commands/recommend.js +0 -1
  135. package/lib/commands/release.js +104 -0
  136. package/lib/commands/remember.js +140 -0
  137. package/lib/commands/role.js +99 -0
  138. package/lib/commands/serve.js +581 -0
  139. package/lib/commands/setup.js +900 -971
  140. package/lib/commands/shepherd.js +501 -0
  141. package/lib/commands/ship.js +59 -1
  142. package/lib/commands/show.js +2 -2
  143. package/lib/commands/stage.js +192 -0
  144. package/lib/commands/stale.js +5 -0
  145. package/lib/commands/status.js +158 -21
  146. package/lib/commands/sync.js +34 -46
  147. package/lib/commands/team.js +4 -1
  148. package/lib/commands/test.js +43 -27
  149. package/lib/commands/update.js +2 -2
  150. package/lib/commands/upgrade.js +47 -0
  151. package/lib/commands/validate.js +43 -18
  152. package/lib/commands/worktree.js +362 -99
  153. package/lib/config-writer.js +202 -0
  154. package/lib/control-plane.js +236 -0
  155. package/lib/core/runtime-graph.js +977 -0
  156. package/lib/dep-guard/keyword-ripple.js +2 -2
  157. package/lib/deprecated-sync-cleanup.js +362 -0
  158. package/lib/detect-agent.js +2 -28
  159. package/lib/detect-worktree.js +35 -9
  160. package/lib/doc-gate/declaration.js +177 -0
  161. package/lib/doc-gate/detect.js +289 -0
  162. package/lib/doc-gate/gate.js +375 -0
  163. package/lib/doc-gate/okf-config.js +128 -0
  164. package/lib/doc-gate/okf.js +429 -0
  165. package/lib/docs-command.js +1161 -6
  166. package/lib/forge-issues.js +382 -11
  167. package/lib/forge-lock.js +262 -0
  168. package/lib/gate-events.js +192 -0
  169. package/lib/global-flags.js +104 -0
  170. package/lib/greptile-match.js +7 -63
  171. package/lib/grounding/context-events.js +230 -0
  172. package/lib/grounding/read-first.js +112 -0
  173. package/lib/harness-capability-matrix.js +380 -0
  174. package/lib/hook-global-installer.js +347 -0
  175. package/lib/hook-renderer.js +541 -0
  176. package/lib/inbox.js +391 -0
  177. package/lib/insights.js +397 -0
  178. package/lib/issue-adapter.js +156 -0
  179. package/lib/issue-backend.js +145 -0
  180. package/lib/issue-render.js +220 -0
  181. package/lib/kernel/backing-issue.js +311 -0
  182. package/lib/kernel/broker.js +1218 -0
  183. package/lib/kernel/cli-broker-factory.js +130 -0
  184. package/lib/kernel/conflict-signal.js +82 -0
  185. package/lib/kernel/evaluators.js +195 -0
  186. package/lib/kernel/fs-class.js +495 -0
  187. package/lib/kernel/issue-command-contract.js +559 -0
  188. package/lib/kernel/issue-id-resolver.js +186 -0
  189. package/lib/kernel/lease-enforcer.js +158 -0
  190. package/lib/kernel/migrations.js +333 -0
  191. package/lib/kernel/owned-kernel.js +43 -0
  192. package/lib/kernel/planning-buckets-schema.js +109 -0
  193. package/lib/kernel/projection-jsonl-writer.js +450 -0
  194. package/lib/kernel/readiness-model.js +329 -0
  195. package/lib/kernel/schema.js +356 -0
  196. package/lib/kernel/sqlite-driver.js +2540 -0
  197. package/lib/kernel/taxonomy-validator.js +394 -0
  198. package/lib/lefthook-check.js +3 -2
  199. package/lib/lefthook-wiring.js +413 -0
  200. package/lib/mcp-config-renderer.js +288 -0
  201. package/lib/memory/graphiti-mcp.js +106 -0
  202. package/lib/memory/router.js +387 -0
  203. package/lib/memory/typed-api.js +102 -0
  204. package/lib/memory-digest.js +195 -0
  205. package/lib/merge-rules.js +395 -0
  206. package/lib/migrate-dry-run.js +466 -0
  207. package/lib/orientation.js +863 -0
  208. package/lib/package-manager-remediation.js +103 -0
  209. package/lib/package-root.js +381 -0
  210. package/lib/patch-intent.js +890 -0
  211. package/lib/plugin-catalog.js +3 -4
  212. package/lib/plugin-manager.js +0 -5
  213. package/lib/pr-bundle.js +186 -0
  214. package/lib/pr-monitor/auto-actions.js +175 -0
  215. package/lib/pr-monitor/differ.js +195 -0
  216. package/lib/pr-monitor/digest.js +206 -0
  217. package/lib/pr-monitor/events.js +0 -0
  218. package/lib/pr-monitor/gather.js +124 -0
  219. package/lib/pr-monitor/journal.js +299 -0
  220. package/lib/pr-monitor/monitor.js +146 -0
  221. package/lib/pr-monitor/render-sticky.js +192 -0
  222. package/lib/pr-monitor/upsert-sticky.js +169 -0
  223. package/lib/pr-monitor/watch-lifecycle.js +95 -0
  224. package/lib/pr-monitor/watch.js +247 -0
  225. package/lib/pr-pull.js +1314 -0
  226. package/lib/pr-shepherd.js +494 -0
  227. package/lib/pr-state-validator.js +59 -0
  228. package/lib/preflight/gates.js +237 -0
  229. package/lib/preflight/runner.js +116 -0
  230. package/lib/project-discovery.js +0 -53
  231. package/lib/project-memory.js +99 -497
  232. package/lib/protected-path-manifest.js +281 -0
  233. package/lib/protected-state-surfaces.js +387 -0
  234. package/lib/release-readiness.js +2105 -0
  235. package/lib/reset.js +59 -45
  236. package/lib/review-adapter.js +68 -0
  237. package/lib/rules-sync.js +260 -0
  238. package/lib/runtime-health.js +241 -20
  239. package/lib/safety-config-renderer.js +268 -0
  240. package/lib/setup-action-log.js +1 -7
  241. package/lib/setup.js +27 -65
  242. package/lib/shell-utils.js +76 -6
  243. package/lib/skills-sync.js +330 -0
  244. package/lib/smart-status/scoring.js +17 -3
  245. package/lib/status/beads-snapshot.js +45 -2
  246. package/lib/status/presenter.js +169 -18
  247. package/lib/status/snapshot.js +186 -0
  248. package/lib/sync-backend.js +202 -0
  249. package/lib/untrusted-content.js +52 -0
  250. package/lib/upgrade-safety.js +251 -0
  251. package/lib/workflow/enforce-stage.js +351 -45
  252. package/lib/workflow/stage-transition.js +115 -0
  253. package/lib/workflow/stages.js +30 -6
  254. package/lib/workflow/state-manager.js +11 -22
  255. package/lib/workflow/state.js +23 -1
  256. package/lib/workflow-profiles.js +17 -5
  257. package/package.json +37 -35
  258. package/rules/documentation.md +19 -0
  259. package/rules/kernel-tracking.md +26 -0
  260. package/rules/security.md +22 -0
  261. package/rules/tdd.md +20 -0
  262. package/rules/workflow.md +27 -0
  263. package/scripts/auto-backing-issue.js +47 -0
  264. package/scripts/beads-context.sh +81 -57
  265. package/scripts/beads-upgrade-smoke.sh +24 -3
  266. package/scripts/bootstrap-windows-tools.sh +78 -0
  267. package/scripts/branch-protection.js +2 -3
  268. package/scripts/check-agents.js +34 -137
  269. package/scripts/commitlint.js +3 -1
  270. package/scripts/conflict-detect.sh +3 -0
  271. package/scripts/dep-guard.sh +22 -3
  272. package/scripts/file-index.sh +3 -0
  273. package/scripts/forge-team/lib/claim.sh +34 -18
  274. package/scripts/forge-team/lib/dashboard.sh +61 -86
  275. package/scripts/forge-team/lib/epic.sh +99 -263
  276. package/scripts/forge-team/lib/hooks.sh +26 -28
  277. package/scripts/forge-team/lib/identity.sh +4 -4
  278. package/scripts/forge-team/lib/sync-github.sh +49 -84
  279. package/scripts/forge-team/lib/verify.sh +93 -83
  280. package/scripts/forge-team/lib/workload.sh +41 -65
  281. package/scripts/forge-team/tests/claim.test.sh +25 -19
  282. package/scripts/forge-team/tests/dashboard.test.sh +31 -46
  283. package/scripts/forge-team/tests/epic.test.sh +52 -71
  284. package/scripts/forge-team/tests/hooks.test.sh +38 -50
  285. package/scripts/forge-team/tests/identity.test.sh +3 -3
  286. package/scripts/forge-team/tests/integration.test.sh +44 -66
  287. package/scripts/forge-team/tests/sync-github.test.sh +50 -83
  288. package/scripts/forge-team/tests/verify.test.sh +37 -46
  289. package/scripts/forge-team/tests/workflow-integration.test.sh +4 -4
  290. package/scripts/forge-team/tests/workload.test.sh +32 -66
  291. package/scripts/gen-command-manifest.js +153 -0
  292. package/scripts/gen-embedded-assets.mjs +129 -0
  293. package/scripts/install.ps1 +139 -0
  294. package/scripts/install.sh +268 -0
  295. package/scripts/lib/release-asset.mjs +84 -0
  296. package/scripts/parity-check.mjs +145 -0
  297. package/scripts/parity-check.test.mjs +58 -0
  298. package/scripts/pin-agentic-workflow-images.js +112 -0
  299. package/scripts/pr-auto-actions.js +93 -0
  300. package/scripts/pr-coordinator.sh +3 -0
  301. package/scripts/pr-verdict-label.js +50 -0
  302. package/scripts/preflight-sonar.eslint.config.mjs +44 -0
  303. package/scripts/preflight.sh +21 -94
  304. package/scripts/protected-state-check.js +104 -0
  305. package/scripts/smart-status.sh +60 -57
  306. package/scripts/spikes/config-race-bench.js +111 -0
  307. package/scripts/spikes/harness-capability-matrix.js +13 -0
  308. package/scripts/spikes/patch-anchor-stability-bench.js +125 -0
  309. package/scripts/spikes/protected-path-manifest.js +20 -0
  310. package/scripts/spikes/skill-auto-invoke-parity.js +292 -0
  311. package/scripts/sync-agent-skills.js +62 -0
  312. package/scripts/sync-utils.sh +3 -0
  313. package/scripts/test-ci-shard.js +13 -6
  314. package/scripts/test.js +95 -12
  315. package/skills/claim-safety/SKILL.md +102 -0
  316. package/skills/claim-safety/evals/evals.json +46 -0
  317. package/{.github/prompts/dev.prompt.md → skills/dev/SKILL.md} +44 -50
  318. package/skills/dev/evals/evals.json +50 -0
  319. package/skills/hermes-forge/SKILL.md +185 -0
  320. package/skills/hermes-forge/evals/evals.json +46 -0
  321. package/skills/issue-basics/SKILL.md +111 -0
  322. package/skills/issue-basics/evals/evals.json +46 -0
  323. package/skills/kernel/SKILL.md +166 -0
  324. package/skills/kernel/evals/evals.json +50 -0
  325. package/skills/memory/SKILL.md +102 -0
  326. package/skills/parallel-deep-research/SKILL.md +14 -11
  327. package/skills/parallel-deep-research/evals/evals.json +11 -27
  328. package/{.github/prompts/plan.prompt.md → skills/plan/SKILL.md} +132 -157
  329. package/skills/plan/evals/evals.json +42 -0
  330. package/skills/research/SKILL.md +195 -0
  331. package/skills/research/evals/evals.json +42 -0
  332. package/{.github/prompts/review.prompt.md → skills/review/SKILL.md} +98 -62
  333. package/skills/review/evals/evals.json +42 -0
  334. package/skills/rollback/SKILL.md +110 -0
  335. package/skills/rollback/evals/evals.json +46 -0
  336. package/skills/rollback/references/methods.md +204 -0
  337. package/{.cursor/commands/rollback.md → skills/rollback/references/workflow-integration.md} +10 -284
  338. package/skills/shepherd/SKILL.md +66 -0
  339. package/skills/shepherd/evals/evals.json +42 -0
  340. package/{.github/prompts/ship.prompt.md → skills/ship/SKILL.md} +81 -45
  341. package/skills/ship/evals/evals.json +42 -0
  342. package/skills/smith/SKILL.md +142 -0
  343. package/skills/smith/evals/evals.json +46 -0
  344. package/skills/smith/references/autonomy-and-gates.md +94 -0
  345. package/{.github/prompts/sonarcloud.prompt.md → skills/sonarcloud/SKILL.md} +14 -3
  346. package/skills/sonarcloud/evals/evals.json +46 -0
  347. package/skills/sonarcloud-analysis/SKILL.md +18 -13
  348. package/skills/sonarcloud-analysis/evals/evals.json +11 -15
  349. package/{.github/prompts/status.prompt.md → skills/status/SKILL.md} +20 -10
  350. package/skills/status/evals/evals.json +50 -0
  351. package/skills/triage-ready/SKILL.md +121 -0
  352. package/skills/triage-ready/evals/evals.json +42 -0
  353. package/{.github/prompts/validate.prompt.md → skills/validate/SKILL.md} +52 -29
  354. package/skills/validate/evals/evals.json +42 -0
  355. package/skills/verify/SKILL.md +299 -0
  356. package/skills/verify/evals/evals.json +50 -0
  357. package/.claude/commands/dev.md +0 -345
  358. package/.claude/commands/plan.md +0 -566
  359. package/.claude/commands/premerge.md +0 -186
  360. package/.claude/commands/research.md +0 -42
  361. package/.claude/commands/review.md +0 -451
  362. package/.claude/commands/rollback.md +0 -721
  363. package/.claude/commands/ship.md +0 -213
  364. package/.claude/commands/sonarcloud.md +0 -152
  365. package/.claude/commands/status.md +0 -90
  366. package/.claude/commands/validate.md +0 -288
  367. package/.claude/commands/verify.md +0 -269
  368. package/.claude/rules/workflow.md +0 -121
  369. package/.cline/workflows/dev.md +0 -342
  370. package/.cline/workflows/plan.md +0 -563
  371. package/.cline/workflows/premerge.md +0 -183
  372. package/.cline/workflows/research.md +0 -39
  373. package/.cline/workflows/review.md +0 -448
  374. package/.cline/workflows/rollback.md +0 -718
  375. package/.cline/workflows/ship.md +0 -210
  376. package/.cline/workflows/sonarcloud.md +0 -146
  377. package/.cline/workflows/status.md +0 -87
  378. package/.cline/workflows/validate.md +0 -285
  379. package/.cline/workflows/verify.md +0 -266
  380. package/.codex/config.toml +0 -11
  381. package/.codex/skills/dev/SKILL.md +0 -345
  382. package/.codex/skills/plan/SKILL.md +0 -566
  383. package/.codex/skills/premerge/SKILL.md +0 -186
  384. package/.codex/skills/research/SKILL.md +0 -42
  385. package/.codex/skills/review/SKILL.md +0 -451
  386. package/.codex/skills/rollback/SKILL.md +0 -721
  387. package/.codex/skills/ship/SKILL.md +0 -213
  388. package/.codex/skills/sonarcloud/SKILL.md +0 -149
  389. package/.codex/skills/status/SKILL.md +0 -90
  390. package/.codex/skills/validate/SKILL.md +0 -288
  391. package/.codex/skills/verify/SKILL.md +0 -269
  392. package/.cursor/commands/dev.md +0 -342
  393. package/.cursor/commands/plan.md +0 -563
  394. package/.cursor/commands/premerge.md +0 -183
  395. package/.cursor/commands/research.md +0 -39
  396. package/.cursor/commands/review.md +0 -448
  397. package/.cursor/commands/ship.md +0 -210
  398. package/.cursor/commands/sonarcloud.md +0 -146
  399. package/.cursor/commands/status.md +0 -87
  400. package/.cursor/commands/validate.md +0 -285
  401. package/.cursor/commands/verify.md +0 -266
  402. package/.cursorrules +0 -149
  403. package/.github/prompts/premerge.prompt.md +0 -188
  404. package/.github/prompts/research.prompt.md +0 -44
  405. package/.github/prompts/rollback.prompt.md +0 -723
  406. package/.github/prompts/verify.prompt.md +0 -271
  407. package/.github/workflows/beads-to-github.yml +0 -89
  408. package/.github/workflows/github-to-beads.yml +0 -100
  409. package/.kilocode/workflows/dev.md +0 -346
  410. package/.kilocode/workflows/plan.md +0 -567
  411. package/.kilocode/workflows/premerge.md +0 -187
  412. package/.kilocode/workflows/research.md +0 -43
  413. package/.kilocode/workflows/review.md +0 -452
  414. package/.kilocode/workflows/rollback.md +0 -722
  415. package/.kilocode/workflows/ship.md +0 -214
  416. package/.kilocode/workflows/sonarcloud.md +0 -150
  417. package/.kilocode/workflows/status.md +0 -91
  418. package/.kilocode/workflows/validate.md +0 -289
  419. package/.kilocode/workflows/verify.md +0 -270
  420. package/.opencode/commands/dev.md +0 -345
  421. package/.opencode/commands/plan.md +0 -566
  422. package/.opencode/commands/premerge.md +0 -186
  423. package/.opencode/commands/research.md +0 -42
  424. package/.opencode/commands/review.md +0 -451
  425. package/.opencode/commands/rollback.md +0 -721
  426. package/.opencode/commands/ship.md +0 -213
  427. package/.opencode/commands/sonarcloud.md +0 -149
  428. package/.opencode/commands/status.md +0 -90
  429. package/.opencode/commands/validate.md +0 -288
  430. package/.opencode/commands/verify.md +0 -269
  431. package/.roo/commands/dev.md +0 -346
  432. package/.roo/commands/plan.md +0 -567
  433. package/.roo/commands/premerge.md +0 -187
  434. package/.roo/commands/research.md +0 -43
  435. package/.roo/commands/review.md +0 -452
  436. package/.roo/commands/rollback.md +0 -722
  437. package/.roo/commands/ship.md +0 -214
  438. package/.roo/commands/sonarcloud.md +0 -150
  439. package/.roo/commands/status.md +0 -91
  440. package/.roo/commands/validate.md +0 -289
  441. package/.roo/commands/verify.md +0 -270
  442. package/docs/BEADS_GITHUB_SYNC.md +0 -281
  443. package/docs/GREPTILE_SETUP.md +0 -400
  444. package/docs/MANUAL_REVIEW_GUIDE.md +0 -106
  445. package/docs/SETUP.md +0 -663
  446. package/docs/VALIDATION.md +0 -363
  447. package/lib/agents/cline.plugin.json +0 -29
  448. package/lib/agents/copilot.plugin.json +0 -24
  449. package/lib/agents/kilocode.plugin.json +0 -22
  450. package/lib/agents/opencode.plugin.json +0 -23
  451. package/lib/agents/roo.plugin.json +0 -30
  452. package/lib/beads-bootstrap.js +0 -225
  453. package/lib/beads-health-check.js +0 -188
  454. package/lib/commands/commands-reset.js +0 -147
  455. package/opencode.json +0 -67
  456. package/scripts/beads-context.test.js +0 -584
  457. package/scripts/github-beads-sync/comment.mjs +0 -64
  458. package/scripts/github-beads-sync/config.mjs +0 -148
  459. package/scripts/github-beads-sync/github-api.mjs +0 -131
  460. package/scripts/github-beads-sync/index.mjs +0 -356
  461. package/scripts/github-beads-sync/label-mapper.mjs +0 -54
  462. package/scripts/github-beads-sync/mapping.mjs +0 -132
  463. package/scripts/github-beads-sync/reverse-sync-cli.mjs +0 -31
  464. package/scripts/github-beads-sync/reverse-sync.mjs +0 -162
  465. package/scripts/github-beads-sync/run-bd.mjs +0 -161
  466. package/scripts/github-beads-sync/sanitize.mjs +0 -121
  467. package/scripts/github-beads-sync.config.json +0 -26
  468. package/scripts/sync-commands.js +0 -600
@@ -0,0 +1,46 @@
1
+ [
2
+ {
3
+ "query": "I just ran forge claim on forge-abc — how do I make sure the lease is really mine before I start editing?",
4
+ "should_trigger": true
5
+ },
6
+ {
7
+ "query": "Two of my agents may have grabbed the same issue at once — how do I tell which one actually holds it?",
8
+ "should_trigger": true
9
+ },
10
+ {
11
+ "query": "Before I close this ticket, confirm nobody reclaimed it while I was working.",
12
+ "should_trigger": true
13
+ },
14
+ {
15
+ "query": "My claim came back ok:true but I'm not convinced I won the race. Can I trust that?",
16
+ "should_trigger": true
17
+ },
18
+ {
19
+ "query": "Prove I own forge-42 before the subagent starts mutating it.",
20
+ "should_trigger": true
21
+ },
22
+ {
23
+ "query": "The lease might have expired mid-task — check I still own it before I release.",
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": "Create a feature issue titled 'Add CSV export'.",
32
+ "should_trigger": false
33
+ },
34
+ {
35
+ "query": "Close forge-19 with reason 'shipped in PR 88'.",
36
+ "should_trigger": false
37
+ },
38
+ {
39
+ "query": "Take forge-30 all the way through to a PR.",
40
+ "should_trigger": false
41
+ },
42
+ {
43
+ "query": "Implement the failing auth tests for this task.",
44
+ "should_trigger": false
45
+ }
46
+ ]
@@ -1,14 +1,25 @@
1
1
  ---
2
2
  name: dev
3
- description: Subagent-driven TDD implementation per task from /plan task list
4
- tools: []
3
+ description: >
4
+ Forge DEV stage — implement an already-planned /plan task list into committed, test-backed
5
+ code. Reads tasks.md + plan.md, then drives each task through a subagent TDD loop
6
+ (implementer → spec-compliance reviewer → code-quality reviewer) with RED-GREEN-REFACTOR,
7
+ HARD-GATE evidence checks, and a spec-gap decision score. Use when a plan and task list
8
+ already exist and it is time to implement — triggers: "/dev", "start the dev stage", "build
9
+ the tasks", "implement tasks.md test-first", "run the implementer/reviewer TDD loop", "write
10
+ the code for the planned tasks one by one", "work through the task list with subagents".
11
+ Per-task coding ONLY. Do NOT use for creating the design doc or task list (that is plan),
12
+ for the post-build type-check/lint/security/test gate (validate), for pushing the branch or
13
+ opening the PR (ship), for addressing PR review feedback (review), or for orchestrating
14
+ several stages / taking an issue end-to-end to a merged PR (smith).
15
+ allowed-tools: Bash, Read, Write, Edit, Grep, Glob
5
16
  ---
6
17
 
7
18
  Implement each task from the /plan task list using a subagent-driven loop: implementer → spec compliance reviewer → code quality reviewer per task.
8
19
 
9
20
  # Dev
10
21
 
11
- This command reads the task list created by `/plan` and implements each task using a three-stage subagent loop. TDD is enforced inside each implementer subagent.
22
+ 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.
12
23
 
13
24
  ## Usage
14
25
 
@@ -24,19 +35,19 @@ This command reads the task list created by `/plan` and implements each task usi
24
35
 
25
36
  ```bash
26
37
  # Find task list and design doc
27
- ls docs/plans/
38
+ ls docs/work/
28
39
  ```
29
40
 
30
41
  Read:
31
- - **Task list**: `docs/plans/YYYY-MM-DD-<slug>-tasks.md` — extract ALL task text upfront
32
- - **Design doc**: `docs/plans/YYYY-MM-DD-<slug>-design.md` — including ambiguity policy section
42
+ - **Task list**: `docs/work/YYYY-MM-DD-<slug>/tasks.md` — extract ALL task text upfront
43
+ - **Design doc**: `docs/work/YYYY-MM-DD-<slug>/plan.md` — including ambiguity policy section
33
44
 
34
45
  ### Step 2: Create decisions log
35
46
 
36
47
  Create an empty decisions log at the start of every /dev session:
37
48
 
38
49
  ```bash
39
- # docs/plans/YYYY-MM-DD-<slug>-decisions.md
50
+ # docs/work/YYYY-MM-DD-<slug>/decisions.md
40
51
  ```
41
52
 
42
53
  Format for each entry:
@@ -74,8 +85,8 @@ Before starting the per-task loop, check for cross-developer conflicts:
74
85
  # Auto-sync to get latest team state (non-blocking)
75
86
  forge sync || true
76
87
 
77
- # Check for conflicts with the current beads issue
78
- bash scripts/conflict-detect.sh --issue <beads-id>
88
+ # Check for conflicts with the current Forge issue
89
+ bash scripts/conflict-detect.sh --issue <forge-id>
79
90
  ```
80
91
 
81
92
  If exit code 2 (validation error): show error message, abort — do not show conflict prompt.
@@ -84,7 +95,7 @@ If exit code 1 (conflicts found):
84
95
  - Display the conflict output to the developer
85
96
  - Ask: "Other developers are working in overlapping areas. Proceed anyway? (y/n)"
86
97
  - If `n`: exit cleanly, no side effects
87
- - If `y`: log override via `bd comments add <id> "Conflict override: proceeding despite overlap with <conflicting-issues>"`, then continue to Per-Task Loop
98
+ - If `y`: log override via `forge comment <id> "Conflict override: proceeding despite overlap with <conflicting-issues>"`, then continue to Per-Task Loop
88
99
  - Audit: record conflict override per OWASP A09
89
100
 
90
101
  If exit code 0: proceed silently to Per-Task Loop.
@@ -194,7 +205,7 @@ Reviewer checks:
194
205
  - Structure: functions not too long, proper separation of concerns
195
206
  - Duplication: no copy-paste that could be extracted
196
207
  - Test coverage: tests cover happy path and at least one error path
197
- - No magic numbers, no commented-out code, no TODO without a Beads issue
208
+ - No magic numbers, no commented-out code, no TODO without a Forge issue
198
209
 
199
210
  If quality issues found: implementer fixes → re-review → repeat until ✅
200
211
 
@@ -213,7 +224,7 @@ Do NOT mark task complete or move to next task until ALL confirmed in this sessi
213
224
  4. Run it fresh — show the actual output. "Last run was fine" is not evidence.
214
225
  5. Tests run fresh — actual output shows passing.
215
226
  6. Implementer has committed (git log shows the commit).
216
- 7. `bash scripts/beads-context.sh update-progress <id> <task-num> <total> "<title>" <commit-sha> <test-count> <gate-count>` ran successfully (exit code 0). If it fails: STOP. Show error. Do not proceed to next task.
227
+ 7. Progress recorded on the Forge issue — `forge comment <id> "task <task-num>/<total> done: <title> (<commit-sha>, <test-count> tests, <gate-count> gates)"` ran successfully (exit code 0). The Forge comment is the kernel-native record. If the recording command errors: STOP, show the error, do not proceed to the next task.
217
228
 
218
229
  Forbidden phrases (these are not evidence):
219
230
  - "should pass"
@@ -274,15 +285,18 @@ Do NOT declare /dev complete until:
274
285
  </HARD-GATE>
275
286
  ```
276
287
 
277
- ### Beads update
288
+ ### Record stage transition
278
289
 
279
290
  ```bash
280
- bash scripts/beads-context.sh validate <id>
281
- bash scripts/beads-context.sh stage-transition <id> dev validate \
282
- --summary "<N tasks done, M decision gates fired>" \
283
- --decisions "<key spec gaps and how they were resolved>" \
284
- --artifacts "<changed source files and test files>" \
285
- --next "<validation priorities lint issues, type concerns>"
291
+ # Confirm the issue carries design + acceptance context.
292
+ forge issue show <id>
293
+
294
+ # Record the dev→validate transition kernel-natively (Stage:/Summary:/Decisions:/Artifacts:/Next: envelope).
295
+ forge comment <id> "Stage: dev complete ready for validate
296
+ Summary: <N tasks done, M decision gates fired>
297
+ Decisions: <key spec gaps and how they were resolved>
298
+ Artifacts: <changed source files and test files>
299
+ Next: <validation priorities — lint issues, type concerns>"
286
300
  ```
287
301
 
288
302
  ---
@@ -299,43 +313,23 @@ Document the gate count in the final commit message.
299
313
 
300
314
  ---
301
315
 
302
- ## Example Output (all tasks complete)
316
+ ## Dynamic Output
303
317
 
304
- ```
305
- ✓ Task 1: Types and interfaces — COMPLETE
306
- Spec: ✅ Quality: ✅ Tests: 4/4 passing Commit: abc1234
307
- Decision gates: 0
308
-
309
- ✓ Task 2: Validation logic — COMPLETE
310
- Spec: ✅ Quality: ✅ Tests: 8/8 passing Commit: def5678
311
- Decision gates: 1 (PROCEED, score 2 — documented in decisions log)
312
-
313
- ✓ Task 3: API endpoint — COMPLETE
314
- Spec: ✅ Quality: ✅ Tests: 6/6 passing Commit: ghi9012
315
- Decision gates: 0
316
-
317
- ✓ Final code review: ✅ (coherent, consistent, correctly integrated)
318
+ The completion summary is generated from the live task list, decisions log, Forge issue state, commits, and validation output at runtime. Do not copy a static example into this skill file; run `/dev` to view the current task/status summary.
318
319
 
319
- Decisions log: docs/plans/2026-02-26-stripe-billing-decisions.md
320
- - Decision 1: RESOLVED (score 2, proceeded with conservative choice)
321
- - Decision gates fired: 1 (plan quality: Good)
322
-
323
- ✓ Beads updated: forge-xyz → implementation complete
320
+ ## Integration with Workflow
324
321
 
325
- Ready for /validate
326
322
  ```
323
+ Utility: /status -> Understand current context before starting
327
324
 
328
- ## Integration with Workflow
325
+ Default template:
326
+ /dev -> Implement each task with subagent-driven TDD (you are here)
327
+ /validate -> Type check, lint, tests, security
328
+ /ship -> Push + create PR
329
+ /review -> Address PR feedback
330
+ /verify -> Post-merge health check
329
331
 
330
- ```
331
- Utility: /status → Understand current context before starting
332
- Stage 1: /plan → Design intent → research → branch + worktree + task list
333
- Stage 2: /dev → Implement each task with subagent-driven TDD (you are here)
334
- Stage 3: /validate → Type check, lint, tests, security — all fresh output
335
- Stage 4: /ship → Push + create PR
336
- Stage 5: /review → Address GitHub Actions, Greptile, SonarCloud
337
- Stage 6: /premerge → Update docs, hand off PR to user
338
- Stage 7: /verify → Post-merge CI check on main
332
+ Pre-merge gate: doc updates + CI-green checkpoint embedded in /ship and /review (not a separate stage).
339
333
  ```
340
334
 
341
335
  ## Tips
@@ -0,0 +1,50 @@
1
+ [
2
+ {
3
+ "query": "/dev",
4
+ "should_trigger": true
5
+ },
6
+ {
7
+ "query": "The plan and task list are done — start implementing the tasks one at a time, tests first.",
8
+ "should_trigger": true
9
+ },
10
+ {
11
+ "query": "Run the implementer then the spec and quality reviewer subagents over each task in tasks.md",
12
+ "should_trigger": true
13
+ },
14
+ {
15
+ "query": "Implement the already-planned tasks one at a time, red-green-refactor each",
16
+ "should_trigger": true
17
+ },
18
+ {
19
+ "query": "Time to write the code for the planned tasks and TDD each one in this worktree",
20
+ "should_trigger": true
21
+ },
22
+ {
23
+ "query": "Work through tasks.md subagent by subagent until every task is committed and reviewed",
24
+ "should_trigger": true
25
+ },
26
+ {
27
+ "query": "Set up the branch, worktree, and TDD task list for this new feature",
28
+ "should_trigger": false
29
+ },
30
+ {
31
+ "query": "Type-check, lint, and run the full test suite before I open the PR",
32
+ "should_trigger": false
33
+ },
34
+ {
35
+ "query": "Push the validated branch and open the pull request",
36
+ "should_trigger": false
37
+ },
38
+ {
39
+ "query": "The PR has open review threads from the bots — fix each finding, reply, and mark them resolved.",
40
+ "should_trigger": false
41
+ },
42
+ {
43
+ "query": "Grab the next ready issue and drive it all the way to a merged PR",
44
+ "should_trigger": false
45
+ },
46
+ {
47
+ "query": "Which workflow stage am I on and what work is in flight right now?",
48
+ "should_trigger": false
49
+ }
50
+ ]
@@ -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
+ ]