geneseed 3.12.0 → 3.13.0

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 (218) hide show
  1. package/CHANGELOG.md +121 -0
  2. package/README.md +2 -2
  3. package/SHIPPED.md +1 -1
  4. package/adapters/bob/README.md +1 -1
  5. package/adapters/claude-code/README.md +1 -1
  6. package/adapters/openclaude/README.md +1 -1
  7. package/adapters/opencode/README.md +3 -3
  8. package/docs/README.md +41 -22
  9. package/docs/concepts/agents.md +3 -1
  10. package/docs/concepts/collaboration.md +3 -1
  11. package/docs/concepts/exclusions.md +4 -2
  12. package/docs/concepts/footprint.md +3 -1
  13. package/docs/concepts/foreman-mode.md +3 -1
  14. package/docs/concepts/hook-gates.md +61 -0
  15. package/docs/concepts/hooks.md +8 -56
  16. package/docs/concepts/host-matrix.md +38 -0
  17. package/docs/concepts/hosts.md +6 -32
  18. package/docs/concepts/loop-branch.md +66 -0
  19. package/docs/concepts/loop-bricks.md +48 -0
  20. package/docs/concepts/loop-contracts.md +33 -0
  21. package/docs/concepts/loop-gates.md +30 -0
  22. package/docs/concepts/loop-notes.md +43 -0
  23. package/docs/concepts/loop-risk.md +36 -0
  24. package/docs/concepts/loop-templates.md +50 -0
  25. package/docs/concepts/loops.md +24 -116
  26. package/docs/concepts/lsp.md +2 -0
  27. package/docs/concepts/memory.md +3 -1
  28. package/docs/concepts/notebook.md +3 -1
  29. package/docs/concepts/rules.md +4 -2
  30. package/docs/concepts/skills.md +3 -1
  31. package/docs/concepts/themes.md +3 -1
  32. package/docs/extending.md +23 -8
  33. package/docs/guides/autostart.md +3 -1
  34. package/docs/guides/choose-your-setup.md +5 -80
  35. package/docs/guides/headless.md +5 -3
  36. package/docs/guides/install-agent-md.md +37 -0
  37. package/docs/guides/install-bob.md +20 -0
  38. package/docs/guides/install-claude-code.md +22 -0
  39. package/docs/guides/install-clone.md +34 -0
  40. package/docs/guides/install-openclaude.md +25 -0
  41. package/docs/guides/install-opencode.md +35 -0
  42. package/docs/guides/install-scripted.md +21 -0
  43. package/docs/guides/install.md +9 -118
  44. package/docs/guides/loop-finish.md +54 -0
  45. package/docs/guides/loop-running.md +66 -0
  46. package/docs/guides/loop-which-template.md +35 -0
  47. package/docs/guides/mcp-filesystem.md +41 -0
  48. package/docs/guides/mcp-gitlab.md +66 -0
  49. package/docs/guides/mcp-markitdown.md +36 -0
  50. package/docs/guides/mcp.md +8 -137
  51. package/docs/guides/migrate.md +3 -1
  52. package/docs/guides/project-context.md +4 -2
  53. package/docs/guides/read-non-markdown.md +17 -0
  54. package/docs/guides/run-a-loop.md +64 -0
  55. package/docs/guides/run-anywhere.md +2 -0
  56. package/docs/guides/setup-doctrines.md +55 -0
  57. package/docs/guides/setup-footprint.md +48 -0
  58. package/docs/guides/uninstall.md +3 -1
  59. package/docs/guides/upgrade.md +3 -1
  60. package/docs/guides/verify.md +3 -1
  61. package/docs/guides/wiki.md +3 -1
  62. package/docs/guides/worktree.md +3 -1
  63. package/docs/reference/about.md +3 -1
  64. package/docs/reference/cli.md +2 -0
  65. package/docs/reference/env-context.md +40 -0
  66. package/docs/reference/environment.md +10 -59
  67. package/docs/reference/glossary.md +3 -1
  68. package/docs/reference/loop-actions.md +20 -0
  69. package/docs/reference/opencode-plugins.md +14 -118
  70. package/docs/reference/plugin-activity.md +20 -0
  71. package/docs/reference/plugin-context.md +27 -0
  72. package/docs/reference/plugin-guard.md +27 -0
  73. package/docs/reference/plugin-learn.md +27 -0
  74. package/docs/reference/plugin-notify.md +20 -0
  75. package/docs/reference/plugin-ponytail.md +19 -0
  76. package/docs/reference/plugin-workflow.md +25 -0
  77. package/docs/reference/troubleshoot-doctor.md +50 -0
  78. package/docs/reference/troubleshoot-hooks.md +99 -0
  79. package/docs/reference/troubleshoot-install.md +108 -0
  80. package/docs/reference/troubleshoot-tools.md +56 -0
  81. package/docs/reference/troubleshoot-update.md +23 -0
  82. package/docs/reference/troubleshoot-web.md +66 -0
  83. package/docs/reference/troubleshooting.md +13 -337
  84. package/docs/understand/a-day.md +3 -1
  85. package/docs/understand/enforced-vs-asked.md +3 -1
  86. package/docs/understand/harness.md +2 -0
  87. package/docs/understand/machine-bob.md +17 -0
  88. package/docs/understand/machine-claude.md +35 -0
  89. package/docs/understand/machine-opencode.md +36 -0
  90. package/docs/understand/on-your-machine.md +12 -55
  91. package/docs/understand/take-it-out.md +13 -0
  92. package/docs/web-ui.md +35 -15
  93. package/harness.config.json +1 -1
  94. package/js/README.md +11 -3
  95. package/js/cli-table.json +27 -1
  96. package/js/hosts/mcp.mjs +1 -1
  97. package/js/hosts/native.mjs +43 -5
  98. package/js/inspect/checks-build.mjs +28 -0
  99. package/js/loop/catalog.mjs +12 -1
  100. package/js/loop/cli.mjs +28 -6
  101. package/js/loop/graph.mjs +18 -0
  102. package/js/loop/registry.mjs +196 -0
  103. package/js/loop/score.mjs +45 -6
  104. package/js/loop/state.mjs +125 -11
  105. package/js/maintain/setup.mjs +1 -1
  106. package/js/web/actions.mjs +25 -0
  107. package/js/web/api.mjs +13 -0
  108. package/js/web/docs.mjs +64 -12
  109. package/js/web/routes.mjs +5 -1
  110. package/package.json +1 -1
  111. package/src/agents/explorer.md +2 -2
  112. package/src/agents/researcher.md +3 -3
  113. package/src/bricks/README.md +3 -1
  114. package/src/bricks/adr-challenge.md +20 -0
  115. package/src/bricks/adr-draft.md +15 -0
  116. package/src/bricks/characterize.md +17 -0
  117. package/src/bricks/ci-fix.md +2 -1
  118. package/src/bricks/ci-triage.md +20 -0
  119. package/src/bricks/compat-check.md +16 -0
  120. package/src/bricks/done-check.md +16 -0
  121. package/src/bricks/fitness-define.md +22 -0
  122. package/src/bricks/flake-check.md +17 -0
  123. package/src/bricks/flake-repro.md +18 -0
  124. package/src/bricks/identify.md +6 -3
  125. package/src/bricks/migration-plan.md +21 -0
  126. package/src/bricks/mutation-check.md +18 -0
  127. package/src/bricks/plan.md +6 -6
  128. package/src/bricks/red-test.md +16 -0
  129. package/src/bricks/review.md +5 -3
  130. package/src/bricks/spec.md +18 -0
  131. package/src/bricks/upgrade-scout.md +16 -0
  132. package/src/loops/api-endpoint.json +31 -0
  133. package/src/loops/architecture-decision.json +22 -0
  134. package/src/loops/bugfix.json +1 -0
  135. package/src/loops/ci-repair.json +19 -0
  136. package/src/loops/deps-upgrade.json +29 -0
  137. package/src/loops/enforce-architecture-rule.json +28 -0
  138. package/src/loops/feature.json +8 -5
  139. package/src/loops/fix-flaky-tests.json +30 -0
  140. package/src/loops/legacy-refactor.json +26 -0
  141. package/src/loops/legacy-tests.json +29 -0
  142. package/src/loops/refactor.json +5 -1
  143. package/src/loops/remove-dead-code.json +30 -0
  144. package/src/loops/spec-first-feature.json +29 -0
  145. package/src/loops/tdd.json +25 -0
  146. package/src/loops/update-contract.json +33 -0
  147. package/src/skills/brick-forge.md +3 -1
  148. package/src/skills/bruno-collection-generator.md +3 -3
  149. package/src/skills/bruno-test-writer.md +3 -3
  150. package/src/skills/ci-fix.md +3 -3
  151. package/src/skills/consolidate-memory.md +4 -4
  152. package/src/skills/council.md +1 -1
  153. package/src/skills/fresh-eyes.md +1 -1
  154. package/src/skills/git-archaeology.md +1 -1
  155. package/src/skills/git-rescue.md +4 -3
  156. package/src/skills/handoff.md +1 -1
  157. package/src/skills/herdr.md +1 -1
  158. package/src/skills/learn-mode.md +2 -2
  159. package/src/skills/loop.md +22 -10
  160. package/src/skills/opencode-theme.md +3 -3
  161. package/src/skills/ponytail.md +1 -1
  162. package/src/skills/profile.md +3 -4
  163. package/src/skills/prose.md +2 -3
  164. package/src/skills/quiz.md +1 -1
  165. package/src/skills/react-view-transitions/SKILL.md +1 -1
  166. package/src/skills/react-view-transitions/VENDOR.md +8 -3
  167. package/src/skills/research.md +3 -3
  168. package/src/skills/review-response.md +2 -2
  169. package/src/skills/rule.md +3 -3
  170. package/src/skills/security-audit.md +4 -4
  171. package/src/skills/teach.md +1 -1
  172. package/src/skills/wiki.md +3 -3
  173. package/src/skills/workflow.md +4 -4
  174. package/src/skills/worktree.md +2 -2
  175. package/web/dist/assets/Activity-Ca2Aruu7.js +1 -0
  176. package/web/dist/assets/ActivityDetail-Bo7v4Z_r.js +1 -0
  177. package/web/dist/assets/Dashboard-BuMq46aT.js +2 -0
  178. package/web/dist/assets/Docs-BzccCllG.js +5 -0
  179. package/web/dist/assets/FilterInput-CBcJBQPI.js +1 -0
  180. package/web/dist/assets/GreenhouseView-BCIKcnGG.js +2 -0
  181. package/web/dist/assets/Installs-DMFJvq7s.js +2 -0
  182. package/web/dist/assets/JournalView-o1rmd1_1.js +1 -0
  183. package/web/dist/assets/Laws-BANxq_I_.js +3 -0
  184. package/web/dist/assets/Library-DW4x0fbh.js +1 -0
  185. package/web/dist/assets/Loops-DEBibbBP.js +2 -0
  186. package/web/dist/assets/{Markdown-qjM2_ofS.js → Markdown-CdTX0kLe.js} +14 -14
  187. package/web/dist/assets/OperatorHudView-CLD0fYaA.js +2 -0
  188. package/web/dist/assets/Personal-6uMJvyBG.js +1 -0
  189. package/web/dist/assets/Tabs-BubnyZhF.js +1 -0
  190. package/web/dist/assets/activity-CObqyxkL.js +1 -0
  191. package/web/dist/assets/{api-CyMRbU2x.js → api-D_ixdyEY.js} +1 -1
  192. package/web/dist/assets/drawable-C_x5xncq.js +1 -0
  193. package/web/dist/assets/index-CMPgezFm.js +2 -0
  194. package/web/dist/assets/index-DMsT4Aa6.css +1 -0
  195. package/web/dist/assets/{react-B9Z_tXRV.js → react-Bbzhmq4v.js} +1 -1
  196. package/web/dist/assets/rolldown-runtime-hePW80VL.js +1 -0
  197. package/web/dist/assets/sections-Dg23Hel5.js +1 -0
  198. package/web/dist/assets/usePoll-BOqeunzF.js +1 -0
  199. package/web/dist/index.html +6 -5
  200. package/web/dist/assets/Activity-GaaZWXTY.js +0 -1
  201. package/web/dist/assets/ActivityDetail-4t7d45Du.js +0 -1
  202. package/web/dist/assets/Dashboard-CYn7Tp16.js +0 -2
  203. package/web/dist/assets/Docs-BeFKLg2T.js +0 -5
  204. package/web/dist/assets/FilterInput-CVyqmYWM.js +0 -1
  205. package/web/dist/assets/GreenhouseView-C6ibc8IE.js +0 -2
  206. package/web/dist/assets/Installs-DRYjYnxs.js +0 -2
  207. package/web/dist/assets/JournalView-1HbU1mfg.js +0 -1
  208. package/web/dist/assets/Laws-DFoG8JWB.js +0 -3
  209. package/web/dist/assets/Library-DDjgNwz_.js +0 -1
  210. package/web/dist/assets/Loops-D9VEoO0F.js +0 -1
  211. package/web/dist/assets/OperatorHudView-Bs7paWmh.js +0 -2
  212. package/web/dist/assets/Personal-BY5n4gTw.js +0 -1
  213. package/web/dist/assets/Tabs-ho-EYD8i.js +0 -1
  214. package/web/dist/assets/drawable-CLS9drMb.js +0 -1
  215. package/web/dist/assets/index-CX_hXMi5.css +0 -1
  216. package/web/dist/assets/index-Cjr7XCA3.js +0 -2
  217. package/web/dist/assets/sections-GalMS0Zv.js +0 -1
  218. package/web/dist/assets/usePoll-O0sJEw1Y.js +0 -1
package/docs/extending.md CHANGED
@@ -408,11 +408,12 @@ The `geneseed-` prefix and the `.js` suffix are mechanically load-bearing: the b
408
408
  1. `adapters/opencode/plugins/geneseed-<name>.js` — ESM, zero dependencies. The factory-export
409
409
  convention is real (OpenCode requires it) but **ungated**; the only generic gate on plugin
410
410
  source is `node --check` (the one spawn in `authoringProblems`).
411
- 2. `docs/reference/opencode-plugins.md` — a `## geneseed-<name>` section (gated: every plugin
412
- file needs one). The count in its intro renders from `{N_PLUGINS}`.
413
- 3. `docs/understand/on-your-machine.md` — a row in the OpenCode map table (Piece · What it does
411
+ 2. `docs/reference/plugin-<name>.md` — one page titled `geneseed-<name>`, `section: "OpenCode plugins"`,
412
+ linked from the list in `docs/reference/opencode-plugins.md` (gated: every plugin file needs
413
+ both). The count in the overview's intro renders from `{N_PLUGINS}`.
414
+ 3. `docs/understand/machine-opencode.md` — a row in the OpenCode map table (Piece · What it does
414
415
  for you · Kind · Cost · Turn it off). **Hand-written and ungated** beyond the table parsing.
415
- 4. `docs/concepts/hosts.md` — check the capability matrix still tells the truth.
416
+ 4. `docs/concepts/host-matrix.md` — check the capability matrix still tells the truth.
416
417
  5. `README.md` — **three** sites: the badge, the `N plugins` prose, and the 🔌 Plugins row.
417
418
  6. `SHIPPED.md` — the bare name inside `plugins (…)`; that list must equal the directory exactly,
418
419
  in both directions (`tests/unit/web_api.test.mjs:1655`).
@@ -440,12 +441,26 @@ throws). The same file is what GitHub shows, so write for both
440
441
  (`docFrontmatter` in `js/web/docs.mjs`):
441
442
 
442
443
  - `group` must match an id in `docs/_groups.json` — gated by `docs_tree.test.mjs`.
444
+ - `section` (optional, a non-empty string — gated by `docs_tree.test.mjs`) files the page under
445
+ a sub-part of its folder in the console's list, breadcrumb and Previous / Next; without one it
446
+ sits under **General**. Sections order by the smallest `order` among their pages, pages within
447
+ a section by `order` (`bySection` in `js/web/docs.mjs`). `description` (optional) is the
448
+ list row's second line. Keep a page to about 700 words: a longer one becomes a section of
449
+ short pages, each standing alone (its own intro line, links to its siblings).
443
450
  - `kind` ∈ `markdown | concept | map | glossary | about | cli`; anything else 404s. `map` is a
444
451
  concept page whose Piece/Kind/Cost table the console turns into the clickable map.
445
- - `harness: "claude"|"opencode"` hides the page from the other host — keep it for how-tos that
446
- cannot run elsewhere; a reference page says its host in its title instead.
452
+ - `harness: "opencode"|"claude"|"openclaude"|"bob"` hides the page from the other hosts — keep it
453
+ for how-tos that cannot run elsewhere; a reference page says its host in its title instead.
454
+ `claude` is the Claude-engine family: it shows to Claude Code, OpenClaude and Bob alike.
455
+ To name several hosts, give a JSON list: `harness: ["claude", "openclaude"]` shows to exactly
456
+ those hosts — inside a list `claude` is Claude Code alone, never the family — so that page
457
+ is hidden from Bob. The value is JSON like every frontmatter value; `[claude, openclaude]`
458
+ unquoted is refused by `tests/unit/docs_tree.test.mjs`.
447
459
  - Link pages with relative `.md` links; the console rewrites them to `#/docs/<id>`. A host-only
448
- passage is `<!--harness:x-->` + a visible `*(OpenCode only)*` / `*(Claude Code only)*` line.
460
+ passage is `<!--harness:x-->` + a visible `*(OpenCode only)*` / `*(Claude Code only)*` /
461
+ `*(OpenClaude only)*` / `*(IBM Bob only)*` line, with the same family rule as pages. A
462
+ passage for several hosts lists them, `<!--harness:claude,openclaude-->`, labelled
463
+ `*(Claude Code and OpenClaude only)*` (names in the marker's order, joined by *and*).
449
464
  - No `{N_*}` token in `understand/` or `guides/` — GitHub would show it raw.
450
465
  - `kind: "markdown"` pulls from a repo file via `source:`, traversal-guarded, optionally sliced to
451
466
  one section with `anchor:` + `slice: true`.
@@ -615,7 +630,7 @@ only, at best, on its presence.
615
630
  | Per-law Principle lines | `web/src/pages/Laws.jsx` | presence and class only, never accuracy |
616
631
  | 588 themed constitution titles (42 keys × 14 voices) — `LEX_<ID>` (one per law), `DOC_<ID>` (one per doctrine rule), `PACK_<NAME>` | `themes/*.json` | key presence only — a shipped placeholder is green. `LEX_*` and `DOC_*` are held across the template too, and in both directions; `PACK_*` only across the voices |
617
632
  | The README keyword enumerations | `README.md`, `docs/concepts/rules.md` | nothing |
618
- | The per-host map of what lands on a machine | `docs/understand/on-your-machine.md` | table shape only, never accuracy |
633
+ | The per-host map of what lands on a machine | `docs/understand/machine-opencode.md`, `docs/understand/machine-claude.md` | table shape only, never accuracy |
619
634
  | Section labels and page subtitles | `web/src/lib/sections.js`, `web/src/pages/Docs/index.jsx` | nothing |
620
635
  | `THEME_BLURBS` (8 of 14), `ART` (8 of 14) | `js/maintain/setup.mjs`, `js/ui/anim.mjs` | nothing — missing entries fall back silently |
621
636
  | `LOADED_SIGIL` uniqueness | `themes/*.json` | nothing, and it is load-bearing for theme detection |
@@ -1,8 +1,10 @@
1
1
  ---
2
2
  group: guides
3
- order: 10
3
+ order: 27
4
4
  title: "Start the web console at login"
5
5
  kind: "concept"
6
+ section: "Keep it running"
7
+ description: "Keep the web console running from login."
6
8
  ---
7
9
  The web console is the only long-running Geneseed process. `geneseed web start` launches it as a background process on `127.0.0.1:4747` and returns immediately. A login item that runs this command once, with `--no-browser`, leaves the console ready whenever you open [http://127.0.0.1:4747](http://127.0.0.1:4747).
8
10
 
@@ -1,10 +1,12 @@
1
1
  ---
2
2
  group: guides
3
- order: 2
3
+ order: 10
4
4
  title: "Choose your setup"
5
5
  kind: "concept"
6
+ section: "Set up"
7
+ description: "The voice and working style: theme, posture and mode, and where the other setup choices are."
6
8
  ---
7
- The setup wizard asks a handful of questions before it builds. Every one has a safe default, so you can accept them all and move on. This page says what each one changes, so you can pick on purpose, and how to change it later.
9
+ The setup wizard asks a handful of questions before it builds. Every one has a safe default, so you can accept them all and move on. Three pages say what each one changes, so you can pick on purpose: this one covers the voice and how the agent works with you; [Doctrine packs and single rules](setup-doctrines.md) covers which practices bind; [Footprint, loop trust and changing later](setup-footprint.md) covers the token cost, how far a loop goes, and how to change any of it.
8
10
 
9
11
  All of these choices are made **at build time**. The build writes them into the files your agent loads. Nothing switches at runtime. Rebuilds, re-themes and upgrades keep each install's choices, because they are recorded in small marker files beside the install.
10
12
 
@@ -52,83 +54,6 @@ geneseed build --emit opencode-global --mode direct # back to the default
52
54
 
53
55
  More in [Foreman mode](../concepts/foreman-mode.md).
54
56
 
55
- ## Loop trust: how far a loop goes before it asks
56
-
57
- The `loop` skill scores every change it validates and stops to ask once the score passes a threshold. `--trust` sets the preset the skill starts a loop with; the user can still name another one per loop.
58
-
59
- - **prudent**: asks early, on anything past a rename.
60
- - **balanced** *(default)*: logic changes and new files pass with a note; API changes and deletions stop.
61
- - **aggressive**: only an architecture-level change stops the loop.
62
-
63
- The preset lives in the `loop` skill only, so it costs nothing in the always-on instructions.
64
-
65
- ```
66
- geneseed build --emit opencode-global --trust prudent
67
- ```
68
-
69
- ## Doctrine packs: which practices bind
70
-
71
- The harness's rules come in tiers (see [Rules](../concepts/rules.md)). The Ethos and the Rules are always on. The **doctrines** are practices rather than principles, and they ship as packs you choose:
72
-
73
- | Pack | What it governs |
74
- | --- | --- |
75
- | **craft** | how code is written: reuse first, house conventions, docs updated in the same change, the smallest diff |
76
- | **rigor** | how work is proven: idempotence, honest tests, cover-and-verify, gates that can actually fail |
77
- | **ops** | how the machine is driven: tool discovery, commands that return, complete teardowns |
78
- | **process** | how a session runs: planning, context economy, docs first, bounded loops, and consent before every commit and push |
79
- | **comms** | how answers are presented: stable reference codes on tracked items, and a diagram or table only where it earns its place |
80
-
81
- Every pack is enabled by default. To keep only some packs, or none:
82
-
83
- ```
84
- geneseed build --emit opencode-global --doctrines craft,rigor # two packs
85
- geneseed build --emit opencode-global --doctrines none # Ethos and Rules only
86
- ```
87
-
88
- The packs always load in the same order (craft, rigor, ops, process, comms), whatever order you type them in. A pack you leave out still ships on disk under `doctrines/`, so you can read it before you turn it on. A clone can set its own default in `harness.config.json` with a `doctrines` array.
89
-
90
- **Dropping `process` changes what the machine does, not only what the agent reads.** The *Consent Before Push* rule in that pack is enforced at the tool boundary as well as in the prose:
91
-
92
- - On Claude Code and OpenClaude, the git hook stays wired but stops asking before a commit or push.
93
- - On OpenCode, a fresh install no longer gets the `git commit*` and `git push*` ask entries in `opencode.json`. On an existing install, entries that are already there are left in place and reported, because Geneseed cannot tell its own entries from ones you typed.
94
-
95
- The refusals of destructive git and `rm -rf` belong to the always-on Rules, not to the pack, so they stay in every build. See [Enforced vs. asked](../understand/enforced-vs-asked.md).
96
-
97
- ## One rule at a time
98
-
99
- A pack is all-or-nothing. `--exclude-rules` drops single doctrine rules instead. It takes rule addresses, written `<pack> <n>` or `<pack>.<n>`:
100
-
101
- ```
102
- geneseed build --emit opencode-global --exclude-rules "process 7"
103
- geneseed build --emit opencode-global --exclude-rules "process 5,craft 2"
104
- geneseed build --emit opencode-global --exclude-rules none
105
- ```
106
-
107
- The number in an address is the rule's position in its pack, so it can change if a rule is added or removed. To see the current addresses, pass an address that does not exist: the build refuses it and lists every valid address. The web console's **Constitution** page has one switch per rule. You stage the changes there and apply them in a single rebuild.
108
-
109
- Excluding *Consent Before Push* (`process 5` today) takes the commit and push consent gate with it, exactly as dropping the whole `process` pack does. The console and the wizard both warn you before applying it. A pack whose every rule is excluded drops out of the build entirely. See [Exclusions](../concepts/exclusions.md) for excluding whole folders instead.
110
-
111
- ## Footprint: how much loads every turn
112
-
113
- Footprint controls how much of the rules text sits inside `AGENT.md`, which is loaded on every turn. It changes the token cost, not which rules apply:
114
-
115
- - **lean** *(default)*: each rule appears in a hand-written short form, with a pointer to the full text. The full text ships beside `AGENT.md`, and the agent reads it when a rule's nuance matters.
116
- - **full**: every rule's complete text and rationale is inline. This costs the most tokens. It can help a smaller model, which applies a rule's nuance more reliably when the reasoning is always in front of it.
117
-
118
- ```
119
- geneseed build --emit opencode-global --footprint full
120
- ```
121
-
122
- Both footprints install the same agents, skills, hooks and plugins. More in [Footprint](../concepts/footprint.md).
123
-
124
- ## Changing a choice later
125
-
126
- You have three ways to change a choice:
127
-
128
- - **Re-run the wizard** with `geneseed setup`. It pre-selects what the install already has, so holding Enter cannot widen a set you narrowed on purpose. The wizard does not ask about single rules, but it keeps any rule exclusions already in place.
129
- - **Use the web console** (`geneseed web`). **Settings** and the **Harnesses** page change theme, footprint and the rest per install. **Constitution** toggles packs and rules.
130
- - **Run the build yourself.** Watch out: a flag you leave out takes the *generator's* default, not your install's current value. `geneseed status --json` prints, for every install, the exact `geneseed build` command that rebuilds it as it is. Start from that command and change the one flag you want.
131
-
132
57
  ---
133
58
 
134
- **Next:** [Verify it works](verify.md)
59
+ **Next:** [Doctrine packs and single rules](setup-doctrines.md)
@@ -1,8 +1,10 @@
1
1
  ---
2
2
  group: guides
3
- order: 11
3
+ order: 29
4
4
  title: "Run in CI / headless"
5
5
  kind: "concept"
6
+ section: "OpenCode extras"
7
+ description: "Run OpenCode with the harness in CI, without a terminal."
6
8
  harness: "opencode"
7
9
  ---
8
10
  Once the harness is installed for OpenCode (global or per repo), OpenCode can run **non-interactively**, without its terminal UI. The harness's rules, agents and skills then apply in scripts and pipelines too:
@@ -17,6 +19,6 @@ cat issue.md | opencode run "triage this and propose a fix plan" # pipe inp
17
19
 
18
20
  ## Things to know
19
21
 
20
- - **Permission prompts still apply, and in CI nobody can answer them.** Any command the config marks `ask` blocks a non-interactive run: `rm -rf`, and `git commit` and `git push` whenever the *Consent Before Push* rule is built in (it is part of the `process` pack; see [Choose your setup](choose-your-setup.md)). A CI job that has to commit should set those commands back to `"allow"` in its own `permission.bash` map, or limit the run to read-only work. Do not disable the guards wholesale.
22
+ - **Permission prompts still apply, and in CI nobody can answer them.** Any command the config marks `ask` blocks a non-interactive run: `rm -rf`, and `git commit` and `git push` whenever the *Consent Before Push* rule is built in (it is part of the `process` pack; see [Doctrine packs and single rules](setup-doctrines.md)). A CI job that has to commit should set those commands back to `"allow"` in its own `permission.bash` map, or limit the run to read-only work. Do not disable the guards wholesale.
21
23
  - **`--pure`** runs OpenCode without any local or global config. Use it to reproduce a bug without the harness in the way, or to confirm that a behaviour comes from the harness.
22
- - **The plugins still load.** The context plugin injects the repo's docs, and the learn plugin still writes memory when the session goes idle. To change their behaviour for a run, set `GENESEED_GUARD=warn` or `off`, `GENESEED_CONTEXT_INJECT=off`, or `GENESEED_DEBUG=1`. See [Environment](../reference/environment.md) and [OpenCode plugins](../reference/opencode-plugins.md).
24
+ - **The plugins still load.** The context plugin injects the repo's docs, and the learn plugin still writes memory when the session goes idle. To change their behaviour for a run, set `GENESEED_GUARD=warn` or `off`, `GENESEED_CONTEXT_INJECT=off`, or `GENESEED_DEBUG=1`. See [Context and memory variables](../reference/env-context.md) and [OpenCode plugins](../reference/opencode-plugins.md).
@@ -0,0 +1,37 @@
1
+ ---
2
+ group: guides
3
+ order: 7
4
+ title: "Install for any AGENT.md tool"
5
+ kind: "concept"
6
+ section: "Install"
7
+ description: "The plain bundle for Codex CLI, Cursor, Gemini CLI and the like, or a prompt for a machine with no runtime."
8
+ ---
9
+ The setup wizard runs this for you (see [Install](install.md)). Use the commands directly when you script an install, or when you want a scope the wizard did not offer you.
10
+
11
+ ```
12
+ geneseed build # renders the plain bundle into ./Harness
13
+ ```
14
+
15
+ Point your tool's instructions or rules setting at `Harness/AGENT.md`. If the tool only loads one specific filename, rename or symlink the file (`AGENT.md` to `AGENTS.md` or `CLAUDE.md`). The rules then rest on the agent's own discipline, because these tools have no hooks or plugins to enforce anything (see [Enforced vs. asked](../understand/enforced-vs-asked.md)).
16
+
17
+ Some of these tools also load skills. Their own docs list where:
18
+
19
+ - **Codex CLI** loads a root `AGENTS.md` and `~/.codex/AGENTS.md`, and skills from `~/.codex/skills` or `.agents/skills`.
20
+ - **Cursor** loads `AGENTS.md`, and skills from `.cursor/skills`, `.agents/skills` or `.claude/skills`.
21
+ - **Gemini CLI** reads `GEMINI.md` by default. Set `context.fileName` in its `settings.json` to include `AGENTS.md`. Skills load from `.gemini/skills` or `.agents/skills`.
22
+
23
+ Copy or symlink the bundle's `skills/` to `.agents/skills/` and all three of them see it.
24
+
25
+ ## No runtime on the target machine
26
+
27
+ If the machine that will use the harness cannot run Node, run this once on a machine that can:
28
+
29
+ ```
30
+ npx geneseed prompt --theme neutral > install-geneseed.md
31
+ ```
32
+
33
+ This produces one self-contained prompt that recreates the whole file tree. Paste it into any capable agent on the target machine. There is nothing to install and no build step. Any theme works the same way.
34
+
35
+ ---
36
+
37
+ **Next:** [Verify it works](verify.md) · [Choose your setup](choose-your-setup.md) · [What lands on your machine](../understand/on-your-machine.md)
@@ -0,0 +1,20 @@
1
+ ---
2
+ group: guides
3
+ order: 6
4
+ title: "Install for IBM Bob"
5
+ kind: "concept"
6
+ section: "Install"
7
+ description: "The IBM Bob install, global or per repo, and how its hooks differ."
8
+ ---
9
+ The setup wizard runs this for you (see [Install](install.md)). Use the commands directly when you script an install, or when you want a scope the wizard did not offer you.
10
+
11
+ ```
12
+ geneseed build --emit bob-global # ~/.bob
13
+ geneseed build --emit bob --out /path/to/repo --root /path/to/repo # one repo
14
+ ```
15
+
16
+ Bob is shaped like Claude Code, so it gets the same agents and skills. Per repo, the preamble goes into a root `AGENTS.md` and the rest into `.bob/`. Globally, everything goes under `~/.bob` (`$BOB_CONFIG_DIR` moves it), and the preamble rides `rules/geneseed.md`, because Bob does not auto-load a global `AGENTS.md`. Bob's hooks refuse an action with exit code 2, and Bob has no `SubagentStop` or `PreCompact` events. Bob support has not yet been verified against a live install.
17
+
18
+ ---
19
+
20
+ **Next:** [Verify it works](verify.md) · [Choose your setup](choose-your-setup.md) · [What lands on your machine](../understand/on-your-machine.md)
@@ -0,0 +1,22 @@
1
+ ---
2
+ group: guides
3
+ order: 4
4
+ title: "Install for Claude Code"
5
+ kind: "concept"
6
+ section: "Install"
7
+ description: "The Claude Code install, global or per repo, and the hook shim every hook calls."
8
+ ---
9
+ The setup wizard runs this for you (see [Install](install.md)). Use the commands directly when you script an install, or when you want a scope the wizard did not offer you.
10
+
11
+ ```
12
+ geneseed build --emit claude-global # ~/.claude, every repo
13
+ geneseed build --emit claude --out /path/to/repo --root /path/to/repo # one repo
14
+ ```
15
+
16
+ The install writes `CLAUDE.md`, `agents/`, `skills/`, `memory/` and `notebook/`, plus hooks in Claude Code's `settings.json`. Hooks are commands Claude Code runs around each tool call. They gate risky actions and load project context (see [Hooks](../concepts/hooks.md)). For a project install the hooks go into `.claude/settings.local.json`, which stays out of git because it names a path on your machine.
17
+
18
+ Every hook calls `geneseed-hook <verb>` through one stable file, the **hook shim** at `~/.geneseed/bin/geneseed-hook` (`geneseed-hook.cmd` on Windows). The shim knows where Node and Geneseed live. If you move or replace Geneseed, one rebuild rewrites the shim and every install works again. `GENESEED_HOME` moves the shim's folder.
19
+
20
+ ---
21
+
22
+ **Next:** [Verify it works](verify.md) · [Choose your setup](choose-your-setup.md) · [What lands on your machine](../understand/on-your-machine.md)
@@ -0,0 +1,34 @@
1
+ ---
2
+ group: guides
3
+ order: 2
4
+ title: "Install from a clone"
5
+ kind: "concept"
6
+ section: "Install"
7
+ description: "Install from a git clone when npm is out of reach, or when you want to change the harness."
8
+ ---
9
+ Clone the repository when npm is out of reach (for example, a corporate network with no registry access), or when you want to change the harness rather than just use it. A clone needs **git** as well as Node 22.3 or newer. git is what updates the clone.
10
+
11
+ Each OS has a one-step installer at the root of the clone. It checks for Node and git. If one is missing, it names what to install and where to get it, then stops. **It never installs anything itself.** When the checks pass, it runs the setup wizard and offers to open the web console.
12
+
13
+ ```bash
14
+ git clone https://github.com/Arylmera/Geneseed.git
15
+ cd Geneseed
16
+ ./install # macOS, Linux, or a POSIX shell on Windows
17
+ ```
18
+
19
+ - **macOS**: you can also double-click `install.command` in the Finder. It opens in Terminal.
20
+ - **Windows**: double-click `install.cmd` in Explorer, or run it from cmd or PowerShell. It needs no bash, WSL or PowerShell script.
21
+
22
+ ```powershell
23
+ git clone https://github.com/Arylmera/Geneseed.git
24
+ cd Geneseed
25
+ .\install.cmd
26
+ ```
27
+
28
+ Later, run the launcher in the clone: `./geneseed setup` (Windows: `.\geneseed.cmd setup`) re-runs the wizard, and bare `./geneseed` opens the web console. Both launchers need `node` on `PATH`. If it is not there (some version managers only patch interactive shells), set `GENESEED_NODE` to the absolute path of the Node binary.
29
+
30
+ From a clone, every `geneseed …` command on these pages is `./geneseed …` (Windows: `.\geneseed.cmd …`). To drop the `./`, see [Run geneseed from anywhere](run-anywhere.md).
31
+
32
+ ---
33
+
34
+ **Next:** [Verify it works](verify.md) · [Install](install.md)
@@ -0,0 +1,25 @@
1
+ ---
2
+ group: guides
3
+ order: 5
4
+ title: "Install for OpenClaude"
5
+ kind: "concept"
6
+ section: "Install"
7
+ description: "The OpenClaude install: Claude Code's pieces under OpenClaude's own config folder."
8
+ ---
9
+ The setup wizard runs this for you (see [Install](install.md)). Use the commands directly when you script an install, or when you want a scope the wizard did not offer you.
10
+
11
+ ```
12
+ geneseed build --emit openclaude-global # ~/.openclaude
13
+ geneseed build --emit openclaude --out /path/to/repo --root /path/to/repo # one repo
14
+ ```
15
+
16
+ [OpenClaude](https://openclaude.gitlawb.com/) is a fork of Claude Code that can drive any model. You get the same agents, skills and hooks as Claude Code, under a different config directory. OpenClaude never reads `~/.claude` or a project `.claude/`, so the two installs can sit side by side. The differences:
17
+
18
+ - Per repo, the preamble is written to `.openclaude/CLAUDE.md` rather than a root file, and the hooks go into `.openclaude/settings.local.json`.
19
+ - `$OPENCLAUDE_CONFIG_DIR` moves the global directory (default `~/.openclaude`).
20
+
21
+ OpenClaude support has not yet been verified against a live install.
22
+
23
+ ---
24
+
25
+ **Next:** [Verify it works](verify.md) · [Choose your setup](choose-your-setup.md) · [What lands on your machine](../understand/on-your-machine.md)
@@ -0,0 +1,35 @@
1
+ ---
2
+ group: guides
3
+ order: 3
4
+ title: "Install for OpenCode"
5
+ kind: "concept"
6
+ section: "Install"
7
+ description: "The OpenCode install, global (recommended) or per repo."
8
+ ---
9
+ The setup wizard runs this for you (see [Install](install.md)). Use the commands directly when you script an install, or when you want a scope the wizard did not offer you.
10
+
11
+ ## Global (recommended)
12
+
13
+ ```
14
+ geneseed build --emit opencode-global
15
+ ```
16
+
17
+ This writes into OpenCode's config directory: `$OPENCODE_CONFIG_DIR`, else `$XDG_CONFIG_HOME/opencode`, else `~/.config/opencode` (on Windows too: `C:\Users\<you>\.config\opencode`). The install contains `AGENT.md`, `agents/`, `skills/`, the plugins, the `memory/` store, and a merged `opencode.json` whose `instructions` key points at `AGENT.md`. Every repo you open in OpenCode inherits it. You do not need a per-repo file, because the context plugin finds each repo's docs by itself (see [Project context](project-context.md)).
18
+
19
+ The install is non-destructive. A manifest (`.geneseed-manifest.json`) records the files Geneseed owns. A rebuild replaces and prunes only those files, and never touches your own agents, skills, plugins or memory.
20
+
21
+ ## Per repo
22
+
23
+ ```
24
+ geneseed build --emit opencode --out /path/to/repo --root /path/to/repo
25
+ ```
26
+
27
+ This writes the bundle (`AGENT.md`, `agents/`, `skills/`, `memory/`, `notebook/`) and OpenCode's own layer (`opencode.json` and `.opencode/`) into one repository. You can commit them or not. To keep the bundle in a subfolder, point `--out` at the subfolder and keep `--root` on the repo, so instruction paths resolve from the project root:
28
+
29
+ ```
30
+ geneseed build --emit opencode --out /path/to/repo/Harness --root /path/to/repo
31
+ ```
32
+
33
+ ---
34
+
35
+ **Next:** [Verify it works](verify.md) · [Choose your setup](choose-your-setup.md) · [What lands on your machine](../understand/on-your-machine.md)
@@ -0,0 +1,21 @@
1
+ ---
2
+ group: guides
3
+ order: 8
4
+ title: "Install without the wizard"
5
+ kind: "concept"
6
+ section: "Install"
7
+ description: "The build command to run in a script, a CI job, or a shell with no terminal."
8
+ ---
9
+ `setup` needs an interactive terminal. In a script, a CI job, or any shell without one, it stops with exit code 1 and prints the build command to run instead:
10
+
11
+ ```
12
+ geneseed build --emit opencode-global --theme neutral
13
+ ```
14
+
15
+ `geneseed build` takes the same flags as the generator `geneseed-build`. `--emit` picks the host and its scope: `files`, `opencode`, `opencode-global`, `claude`, `claude-global`, `bob`, `bob-global`, `openclaude` or `openclaude-global`. A `-global` emit writes into the tool's own config directory. A project emit writes into the repo you name with `--out <repo> --root <repo>`. All the other flags (`--theme`, `--footprint`, `--posture`, `--mode`, `--trust`, `--doctrines`, `--exclude-rules`) are covered in [Choose your setup](choose-your-setup.md) and the two pages after it.
16
+
17
+ To test a build before writing anything, use `geneseed validate` with the same flags. See [Verify](verify.md).
18
+
19
+ ---
20
+
21
+ **Next:** [Choose your setup](choose-your-setup.md) · [Install](install.md)
@@ -3,6 +3,8 @@ group: guides
3
3
  order: 1
4
4
  title: "Install"
5
5
  kind: "concept"
6
+ section: "Install"
7
+ description: "The one-command install, what it needs, and the page for each host."
6
8
  ---
7
9
  Geneseed builds a harness (the rules, agents, skills and hooks your AI coding tool loads; see [What a harness is](../understand/harness.md)) and installs it into the tool you already use. Most people need one command.
8
10
 
@@ -26,135 +28,24 @@ This puts three commands on your `PATH`: `geneseed` (the CLI you type), `genesee
26
28
 
27
29
  Next: [Verify it works](verify.md). To see what the install just wrote, read [What lands on your machine](../understand/on-your-machine.md).
28
30
 
29
- ## From a clone
30
-
31
- Clone the repository when npm is out of reach (for example, a corporate network with no registry access), or when you want to change the harness rather than just use it. A clone needs **git** as well as Node 22.3 or newer. git is what updates the clone.
32
-
33
- Each OS has a one-step installer at the root of the clone. It checks for Node and git. If one is missing, it names what to install and where to get it, then stops. **It never installs anything itself.** When the checks pass, it runs the setup wizard and offers to open the web console.
34
-
35
- ```bash
36
- git clone https://github.com/Arylmera/Geneseed.git
37
- cd Geneseed
38
- ./install # macOS, Linux, or a POSIX shell on Windows
39
- ```
40
-
41
- - **macOS**: you can also double-click `install.command` in the Finder. It opens in Terminal.
42
- - **Windows**: double-click `install.cmd` in Explorer, or run it from cmd or PowerShell. It needs no bash, WSL or PowerShell script.
43
-
44
- ```powershell
45
- git clone https://github.com/Arylmera/Geneseed.git
46
- cd Geneseed
47
- .\install.cmd
48
- ```
49
-
50
- Later, run the launcher in the clone: `./geneseed setup` (Windows: `.\geneseed.cmd setup`) re-runs the wizard, and bare `./geneseed` opens the web console. Both launchers need `node` on `PATH`. If it is not there (some version managers only patch interactive shells), set `GENESEED_NODE` to the absolute path of the Node binary.
51
-
52
- From a clone, every `geneseed …` command on these pages is `./geneseed …` (Windows: `.\geneseed.cmd …`). To drop the `./`, see [Run geneseed from anywhere](run-anywhere.md).
53
-
54
31
  ## Prerequisites
55
32
 
56
33
  - **Node 22.3 or newer.** This is the only hard requirement. Geneseed has zero runtime dependencies, and nothing it installs needs a second interpreter.
57
34
  - **Your agent tool**: OpenCode (recommended), Claude Code, IBM Bob, OpenClaude, or any tool that reads a root instructions file.
58
35
  - **git**, for a clone only. A clone updates itself with `git pull`.
59
- - *Optional:* a document converter (MarkItDown, Pandoc or Docling) if you want the agent to read PDFs and Office files. See [MCP servers](mcp.md#reading-non-markdown-docs).
60
-
61
- ## Without the wizard
62
-
63
- `setup` needs an interactive terminal. In a script, a CI job, or any shell without one, it stops with exit code 1 and prints the build command to run instead:
64
-
65
- ```
66
- geneseed build --emit opencode-global --theme neutral
67
- ```
68
-
69
- `geneseed build` takes the same flags as the generator `geneseed-build`. `--emit` picks the host and its scope: `files`, `opencode`, `opencode-global`, `claude`, `claude-global`, `bob`, `bob-global`, `openclaude` or `openclaude-global`. A `-global` emit writes into the tool's own config directory. A project emit writes into the repo you name with `--out <repo> --root <repo>`. All the other flags (`--theme`, `--footprint`, `--posture`, `--mode`, `--trust`, `--doctrines`, `--exclude-rules`) are covered in [Choose your setup](choose-your-setup.md).
70
-
71
- To test a build before writing anything, use `geneseed validate` with the same flags. See [Verify](verify.md).
36
+ - *Optional:* a document converter (MarkItDown, Pandoc or Docling) if you want the agent to read PDFs and Office files. See [Reading non-markdown docs](read-non-markdown.md).
72
37
 
73
38
  ## Install paths, one per host
74
39
 
75
40
  The wizard runs one of these for you. Use them directly when you script an install, or when you want a scope the wizard did not offer you.
76
41
 
77
- ### OpenCode, global (recommended)
78
-
79
- ```
80
- geneseed build --emit opencode-global
81
- ```
82
-
83
- This writes into OpenCode's config directory: `$OPENCODE_CONFIG_DIR`, else `$XDG_CONFIG_HOME/opencode`, else `~/.config/opencode` (on Windows too: `C:\Users\<you>\.config\opencode`). The install contains `AGENT.md`, `agents/`, `skills/`, the plugins, the `memory/` store, and a merged `opencode.json` whose `instructions` key points at `AGENT.md`. Every repo you open in OpenCode inherits it. You do not need a per-repo file, because the context plugin finds each repo's docs by itself (see [Project context](project-context.md)).
84
-
85
- The install is non-destructive. A manifest (`.geneseed-manifest.json`) records the files Geneseed owns. A rebuild replaces and prunes only those files, and never touches your own agents, skills, plugins or memory.
86
-
87
- ### OpenCode, per repo
88
-
89
- ```
90
- geneseed build --emit opencode --out /path/to/repo --root /path/to/repo
91
- ```
92
-
93
- This writes the bundle (`AGENT.md`, `agents/`, `skills/`, `memory/`, `notebook/`) and OpenCode's own layer (`opencode.json` and `.opencode/`) into one repository. You can commit them or not. To keep the bundle in a subfolder, point `--out` at the subfolder and keep `--root` on the repo, so instruction paths resolve from the project root:
94
-
95
- ```
96
- geneseed build --emit opencode --out /path/to/repo/Harness --root /path/to/repo
97
- ```
98
-
99
- ### Claude Code
100
-
101
- ```
102
- geneseed build --emit claude-global # ~/.claude, every repo
103
- geneseed build --emit claude --out /path/to/repo --root /path/to/repo # one repo
104
- ```
105
-
106
- The install writes `CLAUDE.md`, `agents/`, `skills/`, `memory/` and `notebook/`, plus hooks in Claude Code's `settings.json`. Hooks are commands Claude Code runs around each tool call. They gate risky actions and load project context (see [Hooks](../concepts/hooks.md)). For a project install the hooks go into `.claude/settings.local.json`, which stays out of git because it names a path on your machine.
107
-
108
- Every hook calls `geneseed-hook <verb>` through one stable file, the **hook shim** at `~/.geneseed/bin/geneseed-hook` (`geneseed-hook.cmd` on Windows). The shim knows where Node and Geneseed live. If you move or replace Geneseed, one rebuild rewrites the shim and every install works again. `GENESEED_HOME` moves the shim's folder.
109
-
110
- ### OpenClaude
111
-
112
- ```
113
- geneseed build --emit openclaude-global # ~/.openclaude
114
- geneseed build --emit openclaude --out /path/to/repo --root /path/to/repo # one repo
115
- ```
116
-
117
- [OpenClaude](https://openclaude.gitlawb.com/) is a fork of Claude Code that can drive any model. You get the same agents, skills and hooks as Claude Code, under a different config directory. OpenClaude never reads `~/.claude` or a project `.claude/`, so the two installs can sit side by side. The differences:
118
-
119
- - Per repo, the preamble is written to `.openclaude/CLAUDE.md` rather than a root file, and the hooks go into `.openclaude/settings.local.json`.
120
- - `$OPENCLAUDE_CONFIG_DIR` moves the global directory (default `~/.openclaude`).
121
-
122
- OpenClaude support has not yet been verified against a live install.
123
-
124
- ### IBM Bob
125
-
126
- ```
127
- geneseed build --emit bob-global # ~/.bob
128
- geneseed build --emit bob --out /path/to/repo --root /path/to/repo # one repo
129
- ```
130
-
131
- Bob is shaped like Claude Code, so it gets the same agents and skills. Per repo, the preamble goes into a root `AGENTS.md` and the rest into `.bob/`. Globally, everything goes under `~/.bob` (`$BOB_CONFIG_DIR` moves it), and the preamble rides `rules/geneseed.md`, because Bob does not auto-load a global `AGENTS.md`. Bob's hooks refuse an action with exit code 2, and Bob has no `SubagentStop` or `PreCompact` events. Bob support has not yet been verified against a live install.
132
-
133
- ### Any AGENT.md tool
134
-
135
- ```
136
- geneseed build # renders the plain bundle into ./Harness
137
- ```
138
-
139
- Point your tool's instructions or rules setting at `Harness/AGENT.md`. If the tool only loads one specific filename, rename or symlink the file (`AGENT.md` to `AGENTS.md` or `CLAUDE.md`). The rules then rest on the agent's own discipline, because these tools have no hooks or plugins to enforce anything (see [Enforced vs. asked](../understand/enforced-vs-asked.md)).
140
-
141
- Some of these tools also load skills. Their own docs list where:
142
-
143
- - **Codex CLI** loads a root `AGENTS.md` and `~/.codex/AGENTS.md`, and skills from `~/.codex/skills` or `.agents/skills`.
144
- - **Cursor** loads `AGENTS.md`, and skills from `.cursor/skills`, `.agents/skills` or `.claude/skills`.
145
- - **Gemini CLI** reads `GEMINI.md` by default. Set `context.fileName` in its `settings.json` to include `AGENTS.md`. Skills load from `.gemini/skills` or `.agents/skills`.
146
-
147
- Copy or symlink the bundle's `skills/` to `.agents/skills/` and all three of them see it.
148
-
149
- ### No runtime on the target machine
150
-
151
- If the machine that will use the harness cannot run Node, run this once on a machine that can:
152
-
153
- ```
154
- npx geneseed prompt --theme neutral > install-geneseed.md
155
- ```
42
+ - [OpenCode](install-opencode.md): global (recommended) or per repo.
43
+ - [Claude Code](install-claude-code.md): global or per repo, with hooks.
44
+ - [OpenClaude](install-openclaude.md): Claude Code's pieces under OpenClaude's own folder.
45
+ - [IBM Bob](install-bob.md): global or per repo.
46
+ - [Any AGENT.md tool](install-agent-md.md): the plain bundle, or a machine with no runtime.
156
47
 
157
- This produces one self-contained prompt that recreates the whole file tree. Paste it into any capable agent on the target machine. There is nothing to install and no build step. Any theme works the same way.
48
+ No npm? Install [from a clone](install-clone.md). Scripting it? See [Install without the wizard](install-scripted.md).
158
49
 
159
50
  ---
160
51
 
@@ -0,0 +1,54 @@
1
+ ---
2
+ group: guides
3
+ order: 24
4
+ title: "Finish a loop"
5
+ kind: "concept"
6
+ section: "Loops"
7
+ description: "How a loop ends and gets merged, how to drive one by hand, and fixes for what goes wrong."
8
+ ---
9
+ How a loop ends, how to drive the engine by hand, and what to do when a loop misbehaves. To start one, see [Run a loop](run-a-loop.md).
10
+
11
+ ## The end: you merge
12
+
13
+ On `$close` the agent removes `LOOP.md` in one last commit. That commit is outside the loop's exemption, so the git gate asks you: saying yes is how you close the loop. The agent then reports the iteration count, the soft iterations to review, the notes, and the branch.
14
+
15
+ **The loop never merges.** Open a pull request from `loop/<slug>`, or review the branch, and merge it yourself. Merging a loop branch always asks, with no exception. Remove the worktree when you are done (`git worktree remove ../<repo>-loop-<slug>`).
16
+
17
+ ## Running one by hand (advanced)
18
+
19
+ You can drive the engine without the agent, which helps when you debug a template. Work from a worktree on a `loop/*` branch:
20
+
21
+ ```bash
22
+ geneseed loop check --graph my-loop.json # validate a graph file (keep it outside the worktree)
23
+ geneseed loop init --title "Rate limit /orders" \
24
+ --requirement "429 after 100 requests a minute per key" \
25
+ --graph tdd --preset prudent --contracts 'api/openapi.yaml'
26
+ geneseed loop next # what to do now, as one JSON object
27
+ ```
28
+
29
+ Then repeat `geneseed loop next` and act on what it prints:
30
+
31
+ | `next` prints | You run |
32
+ | --- | --- |
33
+ | `{node, validate: true}` | `geneseed loop score --declared` (or, for a setup brick, `--actions … --write-set '…' --intent …`) |
34
+ | `{node}` | the brick's prompt, then `git status --porcelain \| geneseed loop record --outcome <outcome>` (the iteration head adds `--card '<json>'` when it reports `more`) |
35
+ | `{verify, run}` | exactly the printed `run` command, which pipes the staged numstat into `geneseed loop score --diff` |
36
+ | `{awaiting}` | `geneseed loop decide --verdict ok\|no\|amend --note "…"` |
37
+ | `{commit: true, message_file}` | `git add -A && git commit -F <message_file> && git push -u origin HEAD:loop/<slug>` |
38
+ | `{terminal}` | nothing more: `$close` or `$stop` |
39
+
40
+ Every flag is in `geneseed loop --help`. The full cycle, including discards and notes, is in [Loops](../concepts/loops.md).
41
+
42
+ ## Troubleshooting
43
+
44
+ | Symptom | Cause and fix |
45
+ | --- | --- |
46
+ | It stopped as blocking on a small change | The diff touched a file outside the iteration's declared write set, which raises the score to at least the API weight. Check the reasons it shows. Answer ok if the file belongs to the change, or amend with a note to keep it out. |
47
+ | The git gate asks on every iteration's commit | Only one exact shape is exempt. A `cd …` prefix, `git -C`, a quoted refspec (`"HEAD:loop/x"`), `git commit -m` or a message-file path with a space all fall back to asking. Make sure the session works from the worktree itself. |
48
+ | The final `close` commit asks | Expected. The loop is over, and that ask is your consent to close it. |
49
+ | `mutation-check` reported `unavailable` | No mutation tool is configured. The loop continues and records the gap in `LOOP.md`'s notes. Add PIT, Stryker, mutmut or cargo-mutants to make it bite. |
50
+ | `ci-repair` closed at once with "CI does not run for <sha>" | CI has no run for the pushed commit. Enable your pipeline on `loop/*` branches and check that `gh` is logged in. |
51
+ | `geneseed loop init` says `LOOP.md already exists` | A loop is already running in this worktree. Resume it with `geneseed loop next`, or start the new one in another worktree. |
52
+ | `init` prints `problems` | The graph fails `loop check`, for example a cycle not declared as a loop, or a brick that is missing or unavailable. Fix the graph, or pick a shipped template. |
53
+ | A loop is missing from **Loops › Active** | Only loops started with `geneseed loop init` from a version with the registry appear there. Look in the worktree's `LOOP.md` instead. |
54
+ | The agent does not know about loops | The install predates the `loop` skill. Run `geneseed rebuild-all`, then start a new session. |