forge-workflow 0.0.9 → 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 (479) 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 +151 -61
  8. package/CHANGELOG.md +681 -0
  9. package/CLAUDE.md +9 -106
  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 +466 -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/{TOOLCHAIN.md → forge/TOOLCHAIN.md} +56 -47
  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/reference/TOOLCHAIN.md +658 -0
  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 +225 -28
  81. package/lib/beads-sync-scaffold.js +36 -107
  82. package/lib/codex-skills.js +51 -1
  83. package/lib/commands/_issue.js +744 -70
  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 +66 -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 +22 -2
  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 +851 -979
  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 +329 -11
  140. package/lib/commands/sync.js +34 -46
  141. package/lib/commands/team.js +15 -2
  142. package/lib/commands/test.js +58 -7
  143. package/lib/commands/update.js +2 -2
  144. package/lib/commands/upgrade.js +47 -0
  145. package/lib/commands/validate.js +56 -25
  146. package/lib/commands/worktree.js +308 -128
  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 +184 -0
  151. package/lib/deprecated-sync-cleanup.js +362 -0
  152. package/lib/detect-agent.js +2 -28
  153. package/lib/detect-worktree.js +42 -17
  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 +697 -0
  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/issue-sync/authority.js +100 -0
  174. package/lib/issue-sync/github-pull.js +184 -0
  175. package/lib/issue-sync/import-primitives.js +98 -0
  176. package/lib/issue-sync/legacy-link-bridge.js +436 -0
  177. package/lib/issue-sync/link-store.js +292 -0
  178. package/lib/issue-sync/project-github.js +123 -0
  179. package/lib/issue-sync/reconcile.js +195 -0
  180. package/lib/issue-sync/schema.js +126 -0
  181. package/lib/kernel/backing-issue.js +305 -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/planning-buckets-schema.js +109 -0
  192. package/lib/kernel/projection-jsonl-writer.js +450 -0
  193. package/lib/kernel/readiness-model.js +329 -0
  194. package/lib/kernel/schema.js +356 -0
  195. package/lib/kernel/sqlite-driver.js +2504 -0
  196. package/lib/kernel/taxonomy-validator.js +394 -0
  197. package/lib/lefthook-check.js +8 -4
  198. package/lib/lefthook-wiring.js +413 -0
  199. package/lib/mcp-config-renderer.js +288 -0
  200. package/lib/memory/graphiti-mcp.js +106 -0
  201. package/lib/memory/router.js +387 -0
  202. package/lib/memory/typed-api.js +102 -0
  203. package/lib/memory-digest.js +195 -0
  204. package/lib/merge-rules.js +395 -0
  205. package/lib/migrate-dry-run.js +466 -0
  206. package/lib/orientation.js +863 -0
  207. package/lib/package-manager-remediation.js +103 -0
  208. package/lib/package-root.js +381 -0
  209. package/lib/patch-intent.js +890 -0
  210. package/lib/plugin-catalog.js +3 -4
  211. package/lib/plugin-manager.js +0 -5
  212. package/lib/pr-bundle.js +186 -0
  213. package/lib/pr-monitor/differ.js +195 -0
  214. package/lib/pr-monitor/events.js +0 -0
  215. package/lib/pr-monitor/gather.js +124 -0
  216. package/lib/pr-monitor/journal.js +299 -0
  217. package/lib/pr-monitor/monitor.js +146 -0
  218. package/lib/pr-monitor/render-sticky.js +157 -0
  219. package/lib/pr-monitor/watch-lifecycle.js +95 -0
  220. package/lib/pr-monitor/watch.js +247 -0
  221. package/lib/pr-pull.js +1273 -0
  222. package/lib/pr-shepherd.js +494 -0
  223. package/lib/pr-state-validator.js +59 -0
  224. package/lib/preflight/gates.js +237 -0
  225. package/lib/preflight/runner.js +116 -0
  226. package/lib/project-discovery.js +0 -53
  227. package/lib/project-memory.js +166 -0
  228. package/lib/protected-path-manifest.js +281 -0
  229. package/lib/protected-state-surfaces.js +387 -0
  230. package/lib/release-readiness.js +2089 -0
  231. package/lib/reset.js +59 -45
  232. package/lib/review-adapter.js +68 -0
  233. package/lib/rules-sync.js +260 -0
  234. package/lib/runtime-health.js +332 -23
  235. package/lib/safety-config-renderer.js +268 -0
  236. package/lib/setup-action-log.js +1 -7
  237. package/lib/setup.js +27 -65
  238. package/lib/shell-utils.js +76 -6
  239. package/lib/skills-sync.js +330 -0
  240. package/lib/smart-status/conflicts.js +205 -0
  241. package/lib/smart-status/scoring.js +191 -0
  242. package/lib/status/beads-snapshot.js +145 -0
  243. package/lib/status/presenter.js +216 -0
  244. package/lib/status/snapshot.js +186 -0
  245. package/lib/sync-backend.js +202 -0
  246. package/lib/untrusted-content.js +52 -0
  247. package/lib/upgrade-safety.js +199 -0
  248. package/lib/workflow/enforce-stage.js +298 -47
  249. package/lib/workflow/stage-transition.js +115 -0
  250. package/lib/workflow/stages.js +30 -6
  251. package/lib/workflow/state-manager.js +159 -14
  252. package/lib/workflow/state.js +23 -1
  253. package/lib/workflow-profiles.js +17 -5
  254. package/package.json +46 -36
  255. package/rules/documentation.md +19 -0
  256. package/rules/kernel-tracking.md +26 -0
  257. package/rules/security.md +22 -0
  258. package/rules/tdd.md +20 -0
  259. package/rules/workflow.md +27 -0
  260. package/scripts/auto-backing-issue.js +47 -0
  261. package/scripts/beads-context.sh +165 -22
  262. package/scripts/beads-migrate-to-dolt.sh +7 -0
  263. package/scripts/beads-upgrade-smoke.sh +284 -0
  264. package/scripts/behavioral-judge.sh +115 -11
  265. package/scripts/benchmark.js +349 -63
  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-analyze.js +52 -17
  272. package/scripts/dep-guard-keyword-ripple.js +29 -0
  273. package/scripts/dep-guard-render-review.js +86 -0
  274. package/scripts/dep-guard.sh +64 -232
  275. package/scripts/file-index.sh +3 -0
  276. package/scripts/forge-team/lib/claim.sh +34 -18
  277. package/scripts/forge-team/lib/dashboard.sh +61 -86
  278. package/scripts/forge-team/lib/epic.sh +99 -263
  279. package/scripts/forge-team/lib/hooks.sh +26 -28
  280. package/scripts/forge-team/lib/identity.sh +4 -4
  281. package/scripts/forge-team/lib/sync-github.sh +144 -47
  282. package/scripts/forge-team/lib/verify.sh +93 -83
  283. package/scripts/forge-team/lib/workload.sh +41 -65
  284. package/scripts/forge-team/tests/claim.test.sh +25 -19
  285. package/scripts/forge-team/tests/dashboard.test.sh +31 -46
  286. package/scripts/forge-team/tests/epic.test.sh +52 -71
  287. package/scripts/forge-team/tests/hooks.test.sh +38 -50
  288. package/scripts/forge-team/tests/identity.test.sh +3 -3
  289. package/scripts/forge-team/tests/integration.test.sh +44 -66
  290. package/scripts/forge-team/tests/sync-github.test.sh +183 -79
  291. package/scripts/forge-team/tests/verify.test.sh +37 -46
  292. package/scripts/forge-team/tests/workflow-integration.test.sh +4 -4
  293. package/scripts/forge-team/tests/workload.test.sh +32 -66
  294. package/scripts/gen-command-manifest.js +153 -0
  295. package/scripts/gen-embedded-assets.mjs +129 -0
  296. package/scripts/install.ps1 +139 -0
  297. package/scripts/install.sh +268 -0
  298. package/scripts/lib/beads-migrate-to-dolt.mjs +503 -0
  299. package/scripts/lib/release-asset.mjs +84 -0
  300. package/scripts/parity-check.mjs +145 -0
  301. package/scripts/parity-check.test.mjs +58 -0
  302. package/scripts/pin-agentic-workflow-images.js +112 -0
  303. package/scripts/pr-coordinator.sh +3 -0
  304. package/scripts/preflight-sonar.eslint.config.mjs +44 -0
  305. package/scripts/preflight.sh +108 -0
  306. package/scripts/protected-state-check.js +104 -0
  307. package/scripts/smart-status-score.js +31 -0
  308. package/scripts/smart-status-sessions.js +51 -0
  309. package/scripts/smart-status.sh +117 -369
  310. package/scripts/spikes/config-race-bench.js +111 -0
  311. package/scripts/spikes/harness-capability-matrix.js +13 -0
  312. package/scripts/spikes/patch-anchor-stability-bench.js +125 -0
  313. package/scripts/spikes/protected-path-manifest.js +20 -0
  314. package/scripts/spikes/skill-auto-invoke-parity.js +292 -0
  315. package/scripts/sync-agent-skills.js +62 -0
  316. package/scripts/sync-agentic-workflow.js +48 -0
  317. package/scripts/sync-utils.sh +3 -0
  318. package/scripts/test-ci-shard.js +251 -0
  319. package/scripts/test-dashboard.js +188 -52
  320. package/scripts/test-full-suite.js +186 -0
  321. package/scripts/test-profile.js +278 -0
  322. package/scripts/test.js +302 -28
  323. package/scripts/validate.js +143 -0
  324. package/scripts/validate.sh +18 -1
  325. package/skills/claim-safety/SKILL.md +102 -0
  326. package/skills/claim-safety/evals/evals.json +46 -0
  327. package/{.github/prompts/dev.prompt.md → skills/dev/SKILL.md} +46 -52
  328. package/skills/dev/evals/evals.json +50 -0
  329. package/skills/hermes-forge/SKILL.md +185 -0
  330. package/skills/hermes-forge/evals/evals.json +46 -0
  331. package/skills/issue-basics/SKILL.md +111 -0
  332. package/skills/issue-basics/evals/evals.json +46 -0
  333. package/skills/kernel/SKILL.md +166 -0
  334. package/skills/kernel/evals/evals.json +50 -0
  335. package/skills/memory/SKILL.md +102 -0
  336. package/skills/parallel-deep-research/SKILL.md +14 -11
  337. package/skills/parallel-deep-research/evals/evals.json +11 -27
  338. package/{.github/prompts/plan.prompt.md → skills/plan/SKILL.md} +134 -159
  339. package/skills/plan/evals/evals.json +42 -0
  340. package/skills/research/SKILL.md +195 -0
  341. package/skills/research/evals/evals.json +42 -0
  342. package/{.github/prompts/review.prompt.md → skills/review/SKILL.md} +98 -62
  343. package/skills/review/evals/evals.json +42 -0
  344. package/skills/rollback/SKILL.md +110 -0
  345. package/skills/rollback/evals/evals.json +46 -0
  346. package/skills/rollback/references/methods.md +204 -0
  347. package/{.cursor/commands/rollback.md → skills/rollback/references/workflow-integration.md} +10 -284
  348. package/skills/shepherd/SKILL.md +66 -0
  349. package/skills/shepherd/evals/evals.json +42 -0
  350. package/skills/ship/SKILL.md +251 -0
  351. package/skills/ship/evals/evals.json +42 -0
  352. package/skills/smith/SKILL.md +142 -0
  353. package/skills/smith/evals/evals.json +46 -0
  354. package/skills/smith/references/autonomy-and-gates.md +94 -0
  355. package/{.github/prompts/sonarcloud.prompt.md → skills/sonarcloud/SKILL.md} +14 -3
  356. package/skills/sonarcloud/evals/evals.json +46 -0
  357. package/skills/sonarcloud-analysis/SKILL.md +18 -13
  358. package/skills/sonarcloud-analysis/evals/evals.json +11 -15
  359. package/skills/status/SKILL.md +102 -0
  360. package/skills/status/evals/evals.json +50 -0
  361. package/skills/triage-ready/SKILL.md +121 -0
  362. package/skills/triage-ready/evals/evals.json +42 -0
  363. package/{.github/prompts/validate.prompt.md → skills/validate/SKILL.md} +52 -29
  364. package/skills/validate/evals/evals.json +42 -0
  365. package/skills/verify/SKILL.md +299 -0
  366. package/skills/verify/evals/evals.json +50 -0
  367. package/.claude/commands/dev.md +0 -345
  368. package/.claude/commands/plan.md +0 -566
  369. package/.claude/commands/premerge.md +0 -186
  370. package/.claude/commands/research.md +0 -42
  371. package/.claude/commands/review.md +0 -451
  372. package/.claude/commands/rollback.md +0 -721
  373. package/.claude/commands/ship.md +0 -213
  374. package/.claude/commands/sonarcloud.md +0 -152
  375. package/.claude/commands/status.md +0 -90
  376. package/.claude/commands/validate.md +0 -288
  377. package/.claude/commands/verify.md +0 -269
  378. package/.claude/rules/workflow.md +0 -121
  379. package/.cline/workflows/dev.md +0 -342
  380. package/.cline/workflows/plan.md +0 -563
  381. package/.cline/workflows/premerge.md +0 -183
  382. package/.cline/workflows/research.md +0 -39
  383. package/.cline/workflows/review.md +0 -448
  384. package/.cline/workflows/rollback.md +0 -718
  385. package/.cline/workflows/ship.md +0 -210
  386. package/.cline/workflows/sonarcloud.md +0 -146
  387. package/.cline/workflows/status.md +0 -87
  388. package/.cline/workflows/validate.md +0 -285
  389. package/.cline/workflows/verify.md +0 -266
  390. package/.codex/config.toml +0 -11
  391. package/.codex/skills/dev/SKILL.md +0 -345
  392. package/.codex/skills/plan/SKILL.md +0 -566
  393. package/.codex/skills/premerge/SKILL.md +0 -186
  394. package/.codex/skills/research/SKILL.md +0 -42
  395. package/.codex/skills/review/SKILL.md +0 -451
  396. package/.codex/skills/rollback/SKILL.md +0 -721
  397. package/.codex/skills/ship/SKILL.md +0 -213
  398. package/.codex/skills/sonarcloud/SKILL.md +0 -149
  399. package/.codex/skills/status/SKILL.md +0 -90
  400. package/.codex/skills/validate/SKILL.md +0 -288
  401. package/.codex/skills/verify/SKILL.md +0 -269
  402. package/.cursor/commands/dev.md +0 -342
  403. package/.cursor/commands/plan.md +0 -563
  404. package/.cursor/commands/premerge.md +0 -183
  405. package/.cursor/commands/research.md +0 -39
  406. package/.cursor/commands/review.md +0 -448
  407. package/.cursor/commands/ship.md +0 -210
  408. package/.cursor/commands/sonarcloud.md +0 -146
  409. package/.cursor/commands/status.md +0 -87
  410. package/.cursor/commands/validate.md +0 -285
  411. package/.cursor/commands/verify.md +0 -266
  412. package/.cursorrules +0 -149
  413. package/.github/prompts/premerge.prompt.md +0 -188
  414. package/.github/prompts/research.prompt.md +0 -44
  415. package/.github/prompts/rollback.prompt.md +0 -723
  416. package/.github/prompts/ship.prompt.md +0 -215
  417. package/.github/prompts/status.prompt.md +0 -92
  418. package/.github/prompts/verify.prompt.md +0 -271
  419. package/.github/workflows/beads-to-github.yml +0 -56
  420. package/.github/workflows/github-to-beads.yml +0 -97
  421. package/.kilocode/workflows/dev.md +0 -346
  422. package/.kilocode/workflows/plan.md +0 -567
  423. package/.kilocode/workflows/premerge.md +0 -187
  424. package/.kilocode/workflows/research.md +0 -43
  425. package/.kilocode/workflows/review.md +0 -452
  426. package/.kilocode/workflows/rollback.md +0 -722
  427. package/.kilocode/workflows/ship.md +0 -214
  428. package/.kilocode/workflows/sonarcloud.md +0 -150
  429. package/.kilocode/workflows/status.md +0 -91
  430. package/.kilocode/workflows/validate.md +0 -289
  431. package/.kilocode/workflows/verify.md +0 -270
  432. package/.opencode/commands/dev.md +0 -345
  433. package/.opencode/commands/plan.md +0 -566
  434. package/.opencode/commands/premerge.md +0 -186
  435. package/.opencode/commands/research.md +0 -42
  436. package/.opencode/commands/review.md +0 -451
  437. package/.opencode/commands/rollback.md +0 -721
  438. package/.opencode/commands/ship.md +0 -213
  439. package/.opencode/commands/sonarcloud.md +0 -149
  440. package/.opencode/commands/status.md +0 -90
  441. package/.opencode/commands/validate.md +0 -288
  442. package/.opencode/commands/verify.md +0 -269
  443. package/.roo/commands/dev.md +0 -346
  444. package/.roo/commands/plan.md +0 -567
  445. package/.roo/commands/premerge.md +0 -187
  446. package/.roo/commands/research.md +0 -43
  447. package/.roo/commands/review.md +0 -452
  448. package/.roo/commands/rollback.md +0 -722
  449. package/.roo/commands/ship.md +0 -214
  450. package/.roo/commands/sonarcloud.md +0 -150
  451. package/.roo/commands/status.md +0 -91
  452. package/.roo/commands/validate.md +0 -289
  453. package/.roo/commands/verify.md +0 -270
  454. package/docs/BEADS_GITHUB_SYNC.md +0 -255
  455. package/docs/GREPTILE_SETUP.md +0 -400
  456. package/docs/MANUAL_REVIEW_GUIDE.md +0 -106
  457. package/docs/SETUP.md +0 -663
  458. package/docs/VALIDATION.md +0 -363
  459. package/lib/agents/cline.plugin.json +0 -29
  460. package/lib/agents/copilot.plugin.json +0 -24
  461. package/lib/agents/kilocode.plugin.json +0 -22
  462. package/lib/agents/opencode.plugin.json +0 -23
  463. package/lib/agents/roo.plugin.json +0 -30
  464. package/lib/beads-health-check.js +0 -143
  465. package/lib/commands/commands-reset.js +0 -147
  466. package/opencode.json +0 -67
  467. package/scripts/beads-context.test.js +0 -567
  468. package/scripts/github-beads-sync/comment.mjs +0 -64
  469. package/scripts/github-beads-sync/config.mjs +0 -148
  470. package/scripts/github-beads-sync/github-api.mjs +0 -131
  471. package/scripts/github-beads-sync/index.mjs +0 -332
  472. package/scripts/github-beads-sync/label-mapper.mjs +0 -54
  473. package/scripts/github-beads-sync/mapping.mjs +0 -78
  474. package/scripts/github-beads-sync/reverse-sync-cli.mjs +0 -31
  475. package/scripts/github-beads-sync/reverse-sync.mjs +0 -138
  476. package/scripts/github-beads-sync/run-bd.mjs +0 -161
  477. package/scripts/github-beads-sync/sanitize.mjs +0 -121
  478. package/scripts/github-beads-sync.config.json +0 -26
  479. package/scripts/sync-commands.js +0 -600
@@ -0,0 +1,102 @@
1
+ ---
2
+ name: claim-safety
3
+ description: >
4
+ Claim a Forge issue and then PROVE you hold the live lease before you touch it, using `forge
5
+ issue owns <id>` (exit 0 iff you hold the single unexpired lease). Use this whenever winning
6
+ the claim matters: right after `forge claim`, before you `dev`/edit/`close`/`release` a
7
+ claimed issue, when two agents or a subagent fan-out contend for the same work, or before
8
+ any irreversible step. A claim's `ok:true` does NOT prove you won — duplicate replays return
9
+ it and expired leases get reclaimed; only `owns` proves it, so re-verify before
10
+ close/release. Trigger on "claim this issue safely", "did I actually win the lease",
11
+ "verify/prove ownership", "claim conflict", "two agents grabbed the same issue", "check I
12
+ still own it before closing", or before ANY mutation of a claimed issue. NOT for plain
13
+ single-issue create/update/close/comment with no ownership question (that is issue-basics),
14
+ and NOT for read-only selecting or ranking the next ready issue without claiming (that is
15
+ triage-ready).
16
+ allowed-tools: Read, Bash(forge:*)
17
+ ---
18
+
19
+ # Claim safety — claim, then prove you own the lease
20
+
21
+ Claiming is not owning. The Forge kernel keys a claim's idempotency on
22
+ `claim.create:<issue_id>:<actor>`, so a **same-key duplicate replay returns
23
+ `ok:true`** echoing the *current* call's `claim_id`. A genuine cross-actor
24
+ conflict returns `ok:false` (the partial-UNIQUE active-lease index guarantees one
25
+ lease) — but `ok:true` **alone does not prove sole ownership**. A live lease can
26
+ also be **reclaimed on expiry** (an expired lease is superseded by the next
27
+ claimant). Therefore every worker MUST verify ownership before mutating a claimed
28
+ issue, and RE-verify before `close`/`release`.
29
+
30
+ This is a reusable, standalone procedure: any skill or agent that mutates a
31
+ claimed issue embeds it (it is NOT folded into one orchestrator).
32
+
33
+ ## The verification primitive
34
+
35
+ ```bash
36
+ forge issue owns <id> # exit 0 iff YOU hold the live lease; non-zero otherwise
37
+ forge issue owns <id> --json # { ok:true, data:{ owned, claimed_by, expired, actor, expires_at } }
38
+ ```
39
+
40
+ `owns` resolves your actor the same way the kernel does — `FORGE_ACTOR` →
41
+ `FORGE_SESSION_ID` → default `forge` — then reports `owned:true` iff you hold the
42
+ **single active claim** AND that lease **has not expired**. It exits `0` when you
43
+ own it and non-zero (conflict, code 4) when you do not, with a clear "you do not
44
+ own the lease for `<id>` (held by `<actor>`)" message. It is a strict READ — it
45
+ never mutates kernel state. (`data.claimed_by` is lease-derived; there is no
46
+ `claims` command.)
47
+
48
+ ## Procedure
49
+
50
+ 1. **Select** work — `forge issue ready --json` (see the `triage-ready` skill).
51
+ Never claim epics/decisions or defer-windowed items.
52
+ 2. **Claim** — `FORGE_ACTOR=<your-actor> forge claim <id>`. Always run under a
53
+ distinct actor so a losing claim reaches the conflict guard instead of
54
+ collapsing to a shared-actor duplicate.
55
+ 3. **Prove ownership BEFORE working** — `forge issue owns <id>`.
56
+ - **exit 0 (OWNED)** → the lease is yours; proceed to work.
57
+ - **non-zero (NOT OWNED)** → you lost the race, or your claim collapsed to a
58
+ foreign/duplicate-collapsed claim. Do NOT work the issue. **Reselect** via
59
+ `forge issue ready --json` and start over at step 1.
60
+ 4. **Work** the issue (`dev`/edit/etc.).
61
+ 5. **RE-verify before `close`/`release`** — a live lease can be reclaimed on
62
+ expiry while you worked. Run `forge issue owns <id>` again:
63
+ - **OWNED** → `forge release check --target <release-ref> --json` (release-readiness; omit `--target` to use the project default), then
64
+ `forge close <id> --reason "…"` or `forge release <id>`.
65
+ - **NOT OWNED** → the lease was reclaimed (likely expired). Do NOT close/
66
+ release someone else's lease; reselect and, if the work is still needed,
67
+ re-claim and reconcile.
68
+
69
+ ## Contract (what each result means)
70
+
71
+ | `forge claim` result | Meaning | Action |
72
+ |----------------------|---------|--------|
73
+ | `ok:false` (conflict, code 4) | A live lease is held by another actor | Reselect (`ready`) |
74
+ | `ok:true` | Provisionally yours — **not proof** (duplicate replays also return ok:true) | **Run `forge issue owns <id>`** |
75
+
76
+ | `forge issue owns` | Meaning | Action |
77
+ |--------------------|---------|--------|
78
+ | exit 0, `owned:true` | You hold the live, unexpired lease | Work / close / release |
79
+ | non-zero, `owned:false` | Someone else holds it, or your lease expired | Reselect; never mutate |
80
+
81
+ ## Fork points
82
+
83
+ - **Actor source** — how `<your-actor>` is derived (`FORGE_ACTOR` explicit id →
84
+ `FORGE_SESSION_ID` → default `forge`). Use a distinct per-agent actor so
85
+ contending claims reach the conflict guard rather than collapsing to a duplicate.
86
+ - **Expiry / lease TTL** — whether claims carry an `expires_at` and how long;
87
+ `owns` treats an expired lease as NOT owned (it can be reclaimed).
88
+ - **Re-verify cadence** — verify after claim and again before `close`/`release`;
89
+ a longer task may re-verify more often (e.g. before each irreversible step).
90
+ - **Reselection policy** — on NOT-OWNED, how the next item is chosen (ranking /
91
+ filters live in the `triage-ready` skill).
92
+ - **Fail-closed posture** — with no usable clock/state, treat ownership as NOT
93
+ proven (mirror the readiness model's "no usable clock ⇒ not workable").
94
+
95
+ ## Reliability notes
96
+
97
+ - A genuine cross-actor conflict returns `ok:false` — there is no phantom
98
+ `ok:true`-on-conflict. The real hazards are (a) a duplicate replay's `ok:true`
99
+ and (b) expiry-driven reclaim. `owns` closes both.
100
+ - Full multi-agent safety depends on the actor-identity kernel fix (distinct
101
+ actors per agent, kernel `d71a824b`): without distinct actors, two agents
102
+ share one idempotency key and `owns` cannot tell them apart.
@@ -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:
@@ -71,11 +82,11 @@ Do NOT write any code until ALL confirmed:
71
82
  Before starting the per-task loop, check for cross-developer conflicts:
72
83
 
73
84
  ```bash
74
- # Auto-sync to get latest team state
75
- bash scripts/sync-utils.sh auto-sync
85
+ # Auto-sync to get latest team state (non-blocking)
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
+ ]