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,58 @@
1
+ # Manual Review Guide
2
+
3
+ Manual review remains required even when AI review tools are configured.
4
+
5
+ ## Workflow Boundary
6
+
7
+ `/review` is an agent workflow stage. It is not currently documented as a standalone `forge review` CLI command. Use GitHub, `gh`, adapter tools, and the installed agent review skill for PR review work.
8
+
9
+ Default stage context:
10
+
11
+ ```text
12
+ /plan -> /dev -> /validate -> /ship -> /review -> /verify
13
+ ```
14
+
15
+ These are the 6 workflow stages. Pre-merge is not a stage or a `/premerge` command — it is a documentation-and-handoff gate embedded in `/ship` and `/review`.
16
+
17
+ ## Review Inputs
18
+
19
+ Check all available inputs:
20
+
21
+ - GitHub Actions and required checks
22
+ - human review comments
23
+ - Greptile or other review-bot comments, when configured
24
+ - SonarCloud or code-scanning findings, when configured
25
+ - local validation evidence from `bun run check`
26
+ - design and task artifacts under `docs/work/YYYY-MM-DD-<slug>/`
27
+
28
+ ## Checklist
29
+
30
+ - The PR description matches the diff.
31
+ - The change stays inside scope.
32
+ - User-facing commands are verified against current code.
33
+ - Security-sensitive claims are backed by code, tests, or configured CI.
34
+ - Tests or validation evidence match the risk of the change.
35
+ - Documentation changes do not present future roadmap work as ready now.
36
+ - Review threads are replied to and resolved where the platform supports it.
37
+
38
+ ## Greptile
39
+
40
+ If Greptile is configured for the repository, use the repo's review-thread resolution script when available (it handles Greptile and any other review author):
41
+
42
+ ```bash
43
+ bash .claude/scripts/review-resolve.sh list <pr-number> --unresolved
44
+ ```
45
+
46
+ Then reply to each thread with the fix, rejection reason, or follow-up issue.
47
+
48
+ ## Final State
49
+
50
+ Before calling review complete:
51
+
52
+ ```bash
53
+ gh pr checks <pr-number>
54
+ gh pr view <pr-number> --json reviews,comments,statusCheckRollup
55
+ ```
56
+
57
+ All completed required checks should be passing, and unresolved comments should either be fixed or explicitly answered.
58
+
@@ -0,0 +1,56 @@
1
+ # Migration Guide
2
+
3
+ Use this guide when moving older Forge docs, habits, or installed scaffolding toward the v0.0.11 public framing.
4
+
5
+ ## What Changed
6
+
7
+ Forge is now documented as a local runtime control plane for AI-assisted engineering. The TDD-first workflow is still the default template, but it is no longer the only public explanation of Forge.
8
+
9
+ ## From Stage-Only Docs
10
+
11
+ Old docs often describe Forge as a fixed seven-, eight-, or nine-stage workflow. Replace that with:
12
+
13
+ ```text
14
+ Default template: /plan -> /dev -> /validate -> /ship -> /review -> /verify
15
+ ```
16
+
17
+ These are the 6 workflow stages. Pre-merge is not a stage or a `/premerge` command — it is a documentation-and-handoff gate embedded in `/ship` and `/review`. A composable `research` skill runs as a phase of `/plan` or standalone. Then add the boundary:
18
+
19
+ ```text
20
+ These are agent workflow stages. Not every stage is a standalone forge CLI command.
21
+ ```
22
+
23
+ ## From `forge setup` Only
24
+
25
+ Use both entry points correctly:
26
+
27
+ - `forge init` creates the `.forge/` adoption skeleton.
28
+ - `forge setup` installs agent instructions, skills, harness files, local Beads compatibility, and optional setup material.
29
+ - `forge setup --sync` is deprecated and retained only to remove old generated Beads/GitHub sync scaffolding when present.
30
+
31
+ ## From Singular Agent Flags
32
+
33
+ Replace stale examples that use the old singular agent flag form with:
34
+
35
+ ```bash
36
+ forge setup --agents codex
37
+ forge setup --agents claude,cursor
38
+ ```
39
+
40
+ ## Version Labels
41
+
42
+ - `0.0.11` is the package version for this public docs/readiness release.
43
+ - `0.0.10` is the previous published package version.
44
+ - Internal labels such as `0.0.19` or `v3` describe roadmap slices or historical codenames. Do not present them as current package versions.
45
+
46
+ ## Safe Upgrade Path
47
+
48
+ 1. Update docs and examples first.
49
+ 2. Run `bun run check`.
50
+ 3. Run `npm pack --dry-run`.
51
+ 4. Open a PR.
52
+ 5. After merge, refresh DeepWiki and verify generated pages against repository docs.
53
+
54
+ ## Rollback
55
+
56
+ If migration creates confusion, revert the release PR or open a corrective docs PR. Do not publish a package version unless README, CHANGELOG, quickstart, support docs, and package metadata agree.
@@ -0,0 +1,118 @@
1
+ # Setup Guide
2
+
3
+ This guide covers supported Forge adoption paths. Use [Quickstart](../../QUICKSTART.md) for the shortest path and [Support](SUPPORT.md) when setup fails.
4
+
5
+ ## Prerequisites
6
+
7
+ - Git
8
+ - Node.js and Bun
9
+ - GitHub CLI if using PR or sync workflows
10
+ - Optional: Beads (`bd`) as an opt-out issue backend (issue commands use the built-in kernel backend by default)
11
+
12
+ ## Install
13
+
14
+ ```bash
15
+ bun add -D forge-workflow
16
+ ```
17
+
18
+ The package exposes `forge`, `forge-workflow`, and `forge-preflight`.
19
+
20
+ `install.sh` is a thin bootstrapper. It installs or invokes `forge-workflow` and delegates setup to the package; it is not a separate implementation of setup behavior.
21
+
22
+ ## Fresh Repository Runtime Skeleton
23
+
24
+ Use `forge init` when you want only the local `.forge/` adoption skeleton:
25
+
26
+ ```bash
27
+ bunx forge init --profile minimal --classification standard --harness codex --yes
28
+ ```
29
+
30
+ Supported options:
31
+
32
+ ```text
33
+ --profile minimal|standard|full
34
+ --classification critical|standard|refactor
35
+ --harness claude,cursor,codex
36
+ --yes
37
+ --force
38
+ --dry-run
39
+ ```
40
+
41
+ `forge init` creates `.forge/config.yaml`, `.forge/patch.md`, and `.forge/protected-paths.yaml`. It does not install agent instructions.
42
+
43
+ ## Agent Setup
44
+
45
+ Use `forge setup` when you want agent-facing files:
46
+
47
+ ```bash
48
+ bunx forge setup --agents codex --yes
49
+ ```
50
+
51
+ Safe examples:
52
+
53
+ ```bash
54
+ bunx forge setup --agents claude,cursor
55
+ bunx forge setup --agents claude cursor
56
+ bunx forge setup --all --quick
57
+ bunx forge setup --path ./my-project --agents codex --dry-run
58
+ bunx forge setup --merge smart --agents claude,cursor
59
+ ```
60
+
61
+ Use `--agents`, not `--agent`.
62
+
63
+ ## Agent Notes
64
+
65
+ Forge currently supports Claude Code, Codex, and Cursor. Hermes support is planned.
66
+
67
+ - Claude Code: installs `.claude/commands`, rules, and skills when selected.
68
+ - Cursor: installs Cursor rules and links back to `AGENTS.md`.
69
+ - Codex: uses `AGENTS.md` and may use Codex skills when installed.
70
+
71
+ Exact generated files depend on selected agents and existing repository files. Use `--dry-run` before applying setup to a mature repo.
72
+
73
+ ## Issue Backend
74
+
75
+ Forge issue commands (`forge ready`, `forge show`, `forge claim`, `forge create`, `forge close`) use the built-in **kernel** backend by default. No install or initialization is required — a fresh clone can track issues immediately.
76
+
77
+ ## Beads (Opt-Out Backend)
78
+
79
+ Beads (`bd`) is an optional opt-out backend for teams that prefer Dolt-backed sync internals. Select it (precedence, highest first) with `--issue-backend beads`, `FORGE_ISSUE_BACKEND=beads`, or `issueBackend: beads` in `.forge/config.yaml`; only then is `bd` required. Prefer the current Beads installer documented by Beads itself and this repo's toolchain docs. On Windows, avoid stale global install examples if they hit EPERM or shim issues; use the PowerShell installer path described in [Toolchain](../reference/TOOLCHAIN.md).
80
+
81
+ When Beads is selected, health checks:
82
+
83
+ ```bash
84
+ bd doctor
85
+ bd dolt status
86
+ forge sync
87
+ ```
88
+
89
+ If a feature worktree reports `database "forge" not found on Dolt server`, diagnose in the root checkout before changing issue state. This applies only to the Beads backend.
90
+
91
+ ## Deprecated GitHub Sync Cleanup
92
+
93
+ To remove old generated GitHub/Beads sync files from an existing install:
94
+
95
+ ```bash
96
+ bunx forge setup --sync
97
+ ```
98
+
99
+ `forge setup --sync` is deprecated. It now removes old generated Beads/GitHub sync files instead of creating new sync workflows. Future GitHub issue sync belongs to Forge Kernel/server authority, not Beads runtime files or metadata commits.
100
+
101
+ ## Validate Setup
102
+
103
+ ```bash
104
+ bunx forge status --json
105
+ bunx forge board --json
106
+ bun run check
107
+ ```
108
+
109
+ ## Troubleshooting
110
+
111
+ Use [Support and troubleshooting](SUPPORT.md) for:
112
+
113
+ - Beads/Dolt database errors
114
+ - Windows locked files
115
+ - protected-state blocks
116
+ - branch-protection push failures
117
+ - validation failures
118
+ - DeepWiki refresh drift
@@ -0,0 +1,185 @@
1
+ # Support And Troubleshooting
2
+
3
+ Start here when Forge setup, Beads, protected state, GitHub sync, worktrees, validation, or release readiness fails.
4
+
5
+ ## First Checks
6
+
7
+ ```bash
8
+ git status --short --branch
9
+ git remote show origin
10
+ bun --version
11
+ node --version
12
+ bun run check
13
+ ```
14
+
15
+ If the failure involves Beads:
16
+
17
+ ```bash
18
+ bd doctor
19
+ bd dolt status
20
+ forge sync
21
+ ```
22
+
23
+ If `forge` wrappers fail because Beads is unavailable, use direct `git`, `gh`, and `bd` commands only after identifying the source of truth.
24
+
25
+ For branch-specific checks, resolve the default branch first:
26
+
27
+ ```powershell
28
+ $defaultBranch = git remote show origin | Select-String 'HEAD branch' | ForEach-Object { $_.ToString().Split(':')[-1].Trim() }
29
+ ```
30
+
31
+ ## FAQ
32
+
33
+ ### Is DeepWiki the source of truth?
34
+
35
+ No. DeepWiki is generated from the repository. Fix README, CHANGELOG, quickstart, docs, CLI files, and tests first, then refresh DeepWiki.
36
+
37
+ ### Is Forge only the seven-stage TDD workflow?
38
+
39
+ No. The default template is TDD-first, but Forge is a runtime control plane with local state, gates, adapters, issue wrappers, validation evidence, and recovery surfaces.
40
+
41
+ ### Are `/review` and `/verify` CLI commands?
42
+
43
+ They are agent workflow stages. Do not document them as `forge review` or `forge verify` unless those CLI commands exist in the current code.
44
+
45
+ ### Does protected state always block edits?
46
+
47
+ Only when `scripts/protected-state-check.js` is wired into the active hook or CI path. The model is real, but enforcement depends on configuration.
48
+
49
+ ### Can agents publish releases?
50
+
51
+ Agents can prepare a release PR and validation evidence. Publishing is out of scope unless the user explicitly requests it.
52
+
53
+ ## Beads And Dolt Recovery
54
+
55
+ Common errors:
56
+
57
+ - `Beads is not initialized in this project.`
58
+ - `database "forge" not found on Dolt server`
59
+ - `database locked`
60
+ - stale `.beads/backup` data
61
+ - Windows EPERM or locked files during worktree cleanup
62
+
63
+ Triage:
64
+
65
+ ```bash
66
+ bd doctor
67
+ bd dolt status
68
+ bd dolt pull
69
+ bd dolt push
70
+ ```
71
+
72
+ If the Dolt server is serving the wrong database or data directory, stop and diagnose before closing or rewriting issue state. Use the root checkout when the feature worktree has an incomplete `.beads` runtime.
73
+
74
+ Recovery guidance:
75
+
76
+ - Preserve current state first: copy `.beads/backup` or export a Beads backup if the command is available.
77
+ - Prefer `forge sync` when Beads is configured and healthy.
78
+ - Use `bd close`, `bd comments`, or `bd dep` directly only for operations Forge does not wrap or when wrappers fail.
79
+ - Do not create follow-up PRs just to commit Beads runtime metadata. `.beads/` is local non-versioned state; shared state must flow through the configured sync/server authority or an explicit projection/import path.
80
+ - Do not hand-edit `.beads` live state unless a recovery procedure explicitly requires it.
81
+ - Success proof is concrete: `bd doctor` exits cleanly, `bd dolt status` is understandable, and `forge ready` or `forge show <id>` can read current issue state.
82
+
83
+ ## GitHub Sync
84
+
85
+ `forge setup --sync` is deprecated and removes old generated GitHub/Beads sync scaffolding. `forge sync` still runs local Beads/Dolt sync operations when configured. Future GitHub issue sync belongs to Forge Kernel/server authority.
86
+
87
+ Modern sync should use snapshot, backup, server authority, or explicit projection files, not stale examples that edit or commit live `.beads/issues.jsonl` directly.
88
+
89
+ When sync fails:
90
+
91
+ ```bash
92
+ gh auth status
93
+ bd doctor
94
+ bd dolt status
95
+ ```
96
+
97
+ ```powershell
98
+ gh run list --branch $defaultBranch --limit 10
99
+ ```
100
+
101
+ Check whether GitHub owns the field you are trying to update. GitHub owns shared remote issue fields; Forge/Beads owns local workflow context and recovery metadata.
102
+
103
+ ## Worktrees
104
+
105
+ Create isolated work:
106
+
107
+ ```bash
108
+ forge worktree create <slug> --branch <branch-name>
109
+ ```
110
+
111
+ Remove it:
112
+
113
+ ```bash
114
+ forge worktree remove <slug>
115
+ ```
116
+
117
+ If removal fails on Windows:
118
+
119
+ 1. Stop any active `node`, `bun`, `gh`, or Dolt process using the worktree.
120
+ 2. Run `git worktree list`.
121
+ 3. Prove the branch is preserved: `git status --short --branch` and `git log --oneline -1`.
122
+ 4. Retry `forge worktree remove <slug>`.
123
+ 5. If Git already unregistered the worktree but files remain locked, wait for the process to exit before deleting the leftover directory.
124
+
125
+ Never delete a worktree before verifying that its branch is pushed or intentionally disposable.
126
+
127
+ ## Branch Protection
128
+
129
+ Branch protection can reject direct pushes to `master` or `main` with `GH006`. That is expected for code changes.
130
+
131
+ Beads runtime metadata is not a branch-protection exception. If shared state is required, use the configured sync/server authority or an explicit projection/import path; do not open metadata-only PRs for live `.beads/` files.
132
+
133
+ Recovery:
134
+
135
+ ```bash
136
+ git status --short --branch
137
+ gh pr checks <pr-number>
138
+ ```
139
+
140
+ ```powershell
141
+ git fetch origin $defaultBranch
142
+ ```
143
+
144
+ If shared metadata cannot sync, diagnose the sync/server authority path instead of pushing live `.beads/` state to the protected branch.
145
+
146
+ ## Rollback And Recovery Paths
147
+
148
+ Choose the rollback path by surface:
149
+
150
+ - Release documentation confusion: revert the release PR or open a corrective docs PR. Do not publish while README, CHANGELOG, Quickstart, package metadata, and release docs disagree.
151
+ - Setup-generated files: rerun `forge setup --dry-run` first, then rerun setup with the intended `--merge` mode. Preserve existing instruction files before replacing them.
152
+ - Beads metadata: prefer `forge sync`, server authority, or explicit projection/import paths. Avoid direct `.beads` edits unless a documented recovery path requires them.
153
+ - Failed GitHub sync commit: inspect the workflow run, preserve the generated backup or snapshot, then replay through the configured sync workflow or a follow-up branch.
154
+ - Worktree cleanup: prove the branch is pushed or disposable before removal, then remove through `forge worktree remove <slug>` or Git's worktree command if Forge is unavailable.
155
+
156
+ ## Protected State
157
+
158
+ Protected surfaces include `.beads`, `.forge`, generated agent harness files, workflows, lockfiles, extension manifests, secrets, immutable Git internals, and append-only logs.
159
+
160
+ If a protected-state check blocks a file:
161
+
162
+ 1. Read the repair hint.
163
+ 2. Use the owning command or API surface.
164
+ 3. For Forge-owned writes, set `FORGE_PROTECTED_STATE_ALLOWED_SURFACES` only for the surfaces that command owns.
165
+ 4. For Beads metadata after merge, keep `.beads/` local and diagnose the sync/server authority path when shared state is required.
166
+
167
+ ## Validation Failures
168
+
169
+ `bun run check` runs:
170
+
171
+ 1. `bun run typecheck`
172
+ 2. `bun run lint`
173
+ 3. `bun audit`
174
+ 4. `node scripts/test.js --validate`
175
+
176
+ Fix the first failing stage first. Do not hide a validation failure by documenting that it "should pass"; rerun the command and record the fresh result.
177
+
178
+ ## Known Limitations
179
+
180
+ - Package version remains separate from docs readiness until release/publish occurs.
181
+ - `forge migrate` is dry-run only.
182
+ - Protected-state enforcement depends on hooks/CI wiring.
183
+ - Review adapters currently focus on review adapters and Greptile-shaped scaffolding.
184
+ - DeepWiki can lag after merge until refreshed.
185
+ - Some external services require credentials and branch protection setup outside Forge.
@@ -0,0 +1,74 @@
1
+ # Workflow Templates
2
+
3
+ Forge's workflow is a core product surface, not a side note. The default template gives agents a known path for planning, development, validation, shipping, review, and post-merge verification, with a pre-merge documentation gate that finishes docs and hands off the PR inside the ship and review stages.
4
+
5
+ ## Default Template
6
+
7
+ The full default template is:
8
+
9
+ ```text
10
+ /plan -> /dev -> /validate -> /ship -> /review -> /verify
11
+ ```
12
+
13
+ Projects can use the full template or smaller profile-specific paths. The important boundary is that these are agent workflow stages, not necessarily standalone `forge <stage>` CLI commands.
14
+
15
+ ## Why It Matters
16
+
17
+ The template gives AI-assisted work a repeatable operating model:
18
+
19
+ - `/plan` captures intent, research, branch/worktree setup, and tasks.
20
+ - `/dev` implements through a TDD-oriented loop.
21
+ - `/validate` gathers evidence from project checks.
22
+ - `/ship` prepares a reviewable PR.
23
+ - `/review` handles PR feedback and evaluator findings.
24
+ - `/verify` proves post-merge health when the workflow type requires it.
25
+
26
+ Before merge, a pre-merge documentation gate finishes documentation and handoff context. It is not a numbered stage or a `/premerge` command; it runs inside the `/ship` and `/review` stages.
27
+
28
+ The value is not the exact number of stages. The value is recoverable state, known handoff points, validation evidence, and clear ownership while agents work.
29
+
30
+ ## Customization Model
31
+
32
+ Forge treats the default workflow as a configurable template over runtime building blocks:
33
+
34
+ - stages can be skipped or shortened by workflow type,
35
+ - project setup can choose different harness targets,
36
+ - `.forge/config.yaml` records adoption profile and harness choices,
37
+ - `forge options lint`, `forge options diff`, and `forge options stages` inspect the resolved config,
38
+ - future work can add or replace stages through skills, adapters, and extension manifests.
39
+
40
+ Customization should stay explicit. Do not silently remove validation, review, or state handoff steps from high-risk work.
41
+
42
+ ## Workflow Types
43
+
44
+ Current docs describe these profiles:
45
+
46
+ | Type | Intended use | Typical path |
47
+ | --- | --- | --- |
48
+ | Critical | Security, auth, payments, migrations, breaking changes | Full template |
49
+ | Standard | Normal features and enhancements | Plan through review |
50
+ | Simple | Small fixes and focused changes | Shorter dev, validate, ship path |
51
+ | Hotfix | Production emergencies | Short path with urgent validation |
52
+ | Docs | Documentation-only changes | Verify and ship |
53
+ | Refactor | Behavior-preserving cleanup | Plan, dev, validate, ship |
54
+
55
+ Profile docs must be checked against `lib/workflow-profiles.js` and `AGENTS.md` before release because command files, skills, and runtime profiles can drift.
56
+
57
+ ## Skills Direction
58
+
59
+ Forge is moving toward skills as the portable agent-facing package format. Current v0.0.11 packaging still includes command projections for several agents, and Codex already receives stage workflows as `.codex/skills/<stage>/SKILL.md`.
60
+
61
+ See [Skills and command projections](../reference/SKILLS.md) for the current source-of-truth boundary.
62
+
63
+ ## Live Feature Rollout
64
+
65
+ When a planned feature becomes real, update docs in this order:
66
+
67
+ 1. Verify the code, tests, package contents, and CLI output.
68
+ 2. Move the feature from roadmap or experimental docs into ready-now docs.
69
+ 3. Update README, Quickstart, this guide, and the relevant reference page.
70
+ 4. Add migration or support notes if the feature changes setup, state, validation, or workflow behavior.
71
+ 5. Refresh DeepWiki after merge and record the generated index date and commit.
72
+
73
+ Do not document future workflow customization as ready-now until the command, skill, or runtime surface exists and has validation evidence.
74
+
@@ -0,0 +1,183 @@
1
+ # Forge Memory
2
+
3
+ Forge gives agents **durable project memory** through two verbs:
4
+
5
+ ```bash
6
+ forge remember "<note>" [--tag <label>]... # write a lasting fact
7
+ forge recall "[query]" [--limit N] # read it back
8
+ ```
9
+
10
+ Both route through a small **backend router** (`lib/memory/router.js`). The
11
+ backend is chosen by `memory.backend` in `.forge/config.yaml`:
12
+
13
+ | Backend | Storage | Needs | When |
14
+ |---|---|---|---|
15
+ | **`local`** (default) | kernel `kernel_memories` table, FTS5-indexed | nothing — offline, instant | always the floor |
16
+ | **`graphiti`** _(experimental)_ | temporal **knowledge graph** over MCP | graph DB + LLM | evolving, relational, temporal recall |
17
+
18
+ `local` and `graphiti` are the only public `memory.backend` values.
19
+
20
+ > **The local backend is the default and the guaranteed offline floor.** You do
21
+ > not need to configure anything to use `forge remember` / `forge recall`. The
22
+ > Graphiti backend is strictly **opt-in** and never changes the default path.
23
+ >
24
+ > **`graphiti` is experimental — its runtime emitter is not yet shipped.**
25
+ > Selecting it today still writes the local kernel floor (the graph emit is a
26
+ > best-effort no-op), so `recall` always reads back from the kernel. The config
27
+ > and `forge doctor` reachability checks work; the write-through emit is a
28
+ > fast-follow.
29
+
30
+ Precedence for selecting the backend:
31
+ `FORGE_MEMORY_BACKEND` env → `memory.backend` in config → `local`.
32
+
33
+ Check the active backend any time:
34
+
35
+ ```bash
36
+ forge doctor # reports the memory backend (+ graphiti reachability, non-fatal)
37
+ ```
38
+
39
+ ## Local (default) — nothing to set up
40
+
41
+ Notes persist to the kernel `kernel_memories` table (the per-repo Forge Kernel
42
+ SQLite store under `.git/forge/`), indexed by **FTS5** for token-AND BM25 recall.
43
+ No services, no network, no keys. This is what ships and what most projects
44
+ should use. `recall` with no query returns the newest notes plus a total count;
45
+ a query does full-text BM25 matching (every token must appear, in any order). The
46
+ same kernel table also holds what `forge insights` learns; those records are
47
+ recallable with a query or `--all` (the default no-query listing shows only your
48
+ `remember` notes). (An older flat `.forge/memory/notes.jsonl` is imported once on
49
+ first use, then retired.)
50
+
51
+ ## Opt into Graphiti (knowledge-graph memory)
52
+
53
+ [Graphiti](https://github.com/getzep/graphiti) (getzep/graphiti) is a Python
54
+ framework that turns notes ("episodes") into a **bi-temporal knowledge graph**:
55
+ an LLM extracts entities and facts, every fact carries two timelines (when it
56
+ was true in the world, and when the system learned it), and superseded facts are
57
+ **invalidated, not deleted** — so you can query "what is true now" or "what was
58
+ true at time T", with a pointer back to the source (provenance). It is served to
59
+ any MCP agent through Graphiti's **MCP server**; Forge only wires it in.
60
+
61
+ Forge does **not** bundle or reimplement Graphiti. Forge ships the config +
62
+ router seam and documents how to run Graphiti; when `memory.backend` resolves to
63
+ `graphiti` (and the config passes the same validity check `forge doctor` uses),
64
+ **`forge setup` automatically writes the MCP server entry** into `.mcp.json`
65
+ (Claude) and `.cursor/mcp.json` (Cursor) from the descriptor in
66
+ `lib/memory/graphiti-mcp.js`. For other harnesses (e.g. Codex `config.toml`) you
67
+ add the server entry yourself (template below). Design rationale and trade-offs:
68
+ [`docs/work/2026-07-06-graphiti-memory/research.md`](../work/2026-07-06-graphiti-memory/research.md).
69
+
70
+ ### 1. Turn it on (config)
71
+
72
+ Set the backend in `.forge/config.yaml` — additive and reversible:
73
+
74
+ ```yaml
75
+ memory:
76
+ backend: graphiti
77
+ graphiti:
78
+ # --- active today (validated by the router / forge doctor) ---
79
+ transport: stdio # stdio | http
80
+ mcpServerPath: ./graphiti/mcp_server # required — path to the Graphiti checkout's mcp_server dir
81
+ graphDb: falkordb # falkordb | falkordb-lite | neo4j
82
+ apiKeyEnv: OPENAI_API_KEY # referenced by NAME — never store the key here
83
+ # --- reserved: NO EFFECT yet (the descriptor emits ${VAR} env references, not these values) ---
84
+ dbUri: redis://localhost:6379
85
+ llmProvider: openai
86
+ model: gpt-5.5
87
+ groupId: <your-project>
88
+ ```
89
+
90
+ Only `mcpServerPath` is required today (it's what `forge doctor` checks and what
91
+ the descriptor threads into the launch args). The keys under "reserved" still
92
+ have no effect — the rendered entry references env vars (`${VAR}`), not these
93
+ literal values — set them now only if you like, they are no-ops until a renderer
94
+ consumes them.
95
+
96
+ Forge exposes the MCP server as a harness-agnostic **descriptor** (see
97
+ `lib/memory/graphiti-mcp.js`, `buildGraphitiServerDescriptor`) and `forge setup`
98
+ wires it into the right place for Claude (`.mcp.json`) and Cursor
99
+ (`.cursor/mcp.json`), preserving any servers you already have there. Codex
100
+ (`config.toml`) is not auto-wired yet. The descriptor's env values are `${VAR}`
101
+ references only — Forge never writes a secret into any committed config. The
102
+ rendered entry looks like:
103
+
104
+ ```json
105
+ "graphiti-memory": {
106
+ "transport": "stdio",
107
+ "command": "uv",
108
+ "args": ["run","--isolated","--directory","./graphiti/mcp_server",
109
+ "--project",".","main.py","--transport","stdio"],
110
+ "env": {
111
+ "FALKORDB_URI": "${FALKORDB_URI}",
112
+ "OPENAI_API_KEY": "${OPENAI_API_KEY}",
113
+ "MODEL_NAME": "${MODEL_NAME}",
114
+ "GROUP_ID": "${GRAPHITI_GROUP_ID}"
115
+ }
116
+ }
117
+ ```
118
+
119
+ ### 2. Run the graph DB + MCP server
120
+
121
+ Graphiti needs a **graph database** and an **LLM/embedder**. The documented
122
+ default is **FalkorDB** (a light, Redis-based graph DB via Docker) with an
123
+ OpenAI-compatible model. Roughly:
124
+
125
+ ```bash
126
+ # a) graph DB (FalkorDB) — or run the Graphiti combined Docker Compose
127
+ docker run -p 6379:6379 -it --rm falkordb/falkordb:latest
128
+
129
+ # b) the Graphiti MCP server (from a graphiti checkout)
130
+ git clone https://github.com/getzep/graphiti
131
+ cd graphiti/mcp_server
132
+ export OPENAI_API_KEY=sk-... # or point at an OpenAI-compatible endpoint
133
+ uv run --isolated --directory . --project . main.py --transport stdio
134
+ ```
135
+
136
+ Set `memory.graphiti.mcpServerPath` in `.forge/config.yaml` to the checkout's
137
+ `mcp_server` directory so `forge doctor` can see it.
138
+
139
+ **Alternatives** (all documented in the design doc):
140
+
141
+ - **Graph DB:** FalkorDB (Docker, default) · FalkorDB-lite (embedded, Python
142
+ 3.12+, no server) · Neo4j (production). Set `memory.graphiti.graphDb` +
143
+ `dbUri` accordingly (Neo4j uses `NEO4J_URI` plus `NEO4J_USER` and
144
+ `NEO4J_PASSWORD`).
145
+ - **LLM/embedder:** OpenAI (best quality) · any OpenAI-compatible endpoint
146
+ (OpenRouter, DeepSeek, Together) · **Ollama** for a fully local/offline stack
147
+ (`ollama pull deepseek-r1:7b` + `ollama pull nomic-embed-text`). Set
148
+ `memory.graphiti.llmProvider` / `model` / `apiKeyEnv`.
149
+
150
+ ### 3. Use it
151
+
152
+ Once wired, **agents** call the graph directly over MCP:
153
+
154
+ - `add_memory` — record a durable fact/decision as an episode (scope with
155
+ `group_id`). Ingestion is LLM-backed, so treat writes as async.
156
+ - `search_memory_facts` — retrieve facts/edges (with validity windows) before
157
+ assuming.
158
+ - `search_nodes` — find entities and summaries.
159
+
160
+ The **`memory` skill** ([`skills/memory/SKILL.md`](../../skills/memory/SKILL.md))
161
+ teaches agents when and how to use these. `forge remember` / `forge recall` keep
162
+ working from the CLI — when the graph backend is selected they still write to the
163
+ local kernel store as a safety floor, so a note is never lost.
164
+
165
+ ## Privacy & cost (read before enabling)
166
+
167
+ - **Privacy:** with an LLM provider like OpenAI, **every note you add as an
168
+ episode is sent to that LLM** for entity/fact extraction. For private dev
169
+ notes this matters — use the Ollama/local path if that is a concern.
170
+ - **Cost + latency:** `add_memory` fires **multiple LLM calls** per episode, so
171
+ writes are billable and take from sub-second to a couple of seconds. Prefer
172
+ async ingest; retrieval is cheap.
173
+ - **Ops:** you run and maintain a graph DB + the (experimental) Graphiti MCP
174
+ server. This is a real jump from "write a note to the local kernel store" —
175
+ which is exactly why it is opt-in and the local backend stays the default.
176
+
177
+ ## Turning it off
178
+
179
+ Remove `memory.backend` (and the `memory.graphiti` block) from
180
+ `.forge/config.yaml` — the router falls straight back to `local`. Your local
181
+ kernel notes were never touched. If a `graphiti-memory` entry is in your agent's
182
+ MCP config — whether `forge setup` wrote it when you enabled Graphiti, or you
183
+ added it by hand — delete it too.