geneseed 3.9.0 → 3.11.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 (219) hide show
  1. package/CHANGELOG.md +89 -1
  2. package/DESIGN.md +1 -1
  3. package/README.md +52 -71
  4. package/SHIPPED.md +3 -3
  5. package/adapters/bob/README.md +18 -2
  6. package/adapters/claude-code/README.md +17 -12
  7. package/adapters/openclaude/README.md +2 -2
  8. package/adapters/opencode/README.md +4 -4
  9. package/adapters/opencode/plugins/geneseed-context.js +78 -8
  10. package/bin/build-driver.mjs +2 -0
  11. package/bin/geneseed-cli.mjs +17 -0
  12. package/bin/geneseed-hook.mjs +3 -1
  13. package/docs/README.md +42 -0
  14. package/docs/_groups.json +18 -0
  15. package/docs/candidate-hosts.md +12 -5
  16. package/docs/concepts/agents.md +44 -0
  17. package/docs/concepts/collaboration.md +62 -0
  18. package/docs/concepts/exclusions.md +55 -0
  19. package/docs/concepts/footprint.md +52 -0
  20. package/docs/concepts/foreman-mode.md +69 -0
  21. package/docs/concepts/hooks.md +101 -0
  22. package/docs/concepts/hosts.md +55 -0
  23. package/docs/concepts/lsp.md +50 -0
  24. package/docs/{web → concepts}/memory.md +2 -2
  25. package/docs/{web → concepts}/notebook.md +2 -2
  26. package/docs/concepts/rules.md +52 -0
  27. package/docs/concepts/skills.md +49 -0
  28. package/docs/concepts/themes.md +50 -0
  29. package/docs/extending.md +27 -21
  30. package/docs/guides/autostart.md +70 -0
  31. package/docs/guides/choose-your-setup.md +120 -0
  32. package/docs/guides/headless.md +22 -0
  33. package/docs/guides/install.md +161 -0
  34. package/docs/guides/mcp.md +195 -0
  35. package/docs/guides/migrate.md +41 -0
  36. package/docs/guides/project-context.md +87 -0
  37. package/docs/guides/run-anywhere.md +45 -0
  38. package/docs/guides/uninstall.md +51 -0
  39. package/docs/guides/upgrade.md +65 -0
  40. package/docs/guides/verify.md +65 -0
  41. package/docs/guides/wiki.md +69 -0
  42. package/docs/guides/worktree.md +47 -0
  43. package/docs/reference/about.md +7 -0
  44. package/docs/reference/cli.md +7 -0
  45. package/docs/reference/environment.md +99 -0
  46. package/docs/reference/glossary.md +33 -0
  47. package/docs/reference/opencode-plugins.md +131 -0
  48. package/docs/reference/troubleshooting.md +350 -0
  49. package/docs/token-footprint.md +26 -21
  50. package/docs/understand/a-day.md +77 -0
  51. package/docs/understand/enforced-vs-asked.md +64 -0
  52. package/docs/understand/harness.md +36 -0
  53. package/docs/understand/on-your-machine.md +76 -0
  54. package/docs/web-ui.md +2 -2
  55. package/harness.config.json +1 -1
  56. package/js/README.md +7 -6
  57. package/js/build/driver.mjs +26 -95
  58. package/js/build/emit-claude.mjs +76 -81
  59. package/js/build/generate.mjs +12 -2
  60. package/js/build/render.mjs +4 -0
  61. package/js/build/source.mjs +6 -0
  62. package/js/build/stubs.mjs +18 -2
  63. package/js/cli-table.json +6 -6
  64. package/js/hosts/hooks.mjs +86 -54
  65. package/js/hosts/hosts.mjs +5 -21
  66. package/js/hosts/installs.mjs +4 -6
  67. package/js/hosts/mcp.mjs +4 -14
  68. package/js/hosts/native.mjs +27 -50
  69. package/js/hosts/opencode.mjs +1 -1
  70. package/js/hosts/settings.mjs +17 -79
  71. package/js/inspect/checks-authoring.mjs +9 -4
  72. package/js/inspect/checks-repo.mjs +45 -1
  73. package/js/inspect/diff.mjs +11 -3
  74. package/js/inspect/doctor.mjs +4 -4
  75. package/js/inspect/excludes.mjs +0 -4
  76. package/js/inspect/inventory.mjs +1 -1
  77. package/js/inspect/registry.mjs +20 -3
  78. package/js/inspect/status.mjs +11 -6
  79. package/js/lib/node-floor.mjs +30 -0
  80. package/js/maintain/migrate.mjs +5 -5
  81. package/js/maintain/setup.mjs +112 -26
  82. package/js/maintain/uninstall.mjs +8 -42
  83. package/js/maintain/update.mjs +4 -15
  84. package/js/ui/cli.mjs +2 -2
  85. package/js/web/actions.mjs +4 -5
  86. package/js/web/api.mjs +7 -4
  87. package/js/web/daemon.mjs +52 -0
  88. package/js/web/docs.mjs +149 -65
  89. package/js/web/server.mjs +5 -2
  90. package/package.json +6 -5
  91. package/registry.json +7 -0
  92. package/src/AGENT.md.tmpl +73 -52
  93. package/src/laws/universal.md +3 -0
  94. package/src/ontology/universal.md +1 -1
  95. package/src/postures/mentor.md +1 -0
  96. package/src/skills/daydream/SKILL.md +10 -3
  97. package/src/skills/daydream/VENDOR.md +10 -2
  98. package/src/skills/daydream/instructions.md +2 -2
  99. package/src/skills/explain-changes/SKILL.md +1 -1
  100. package/src/skills/explain-changes/VENDOR.md +1 -1
  101. package/src/skills/geneseed.md +1 -1
  102. package/src/skills/learn-mode.md +89 -0
  103. package/src/skills/pipeline.md +2 -2
  104. package/src/skills/quiz.md +2 -1
  105. package/src/skills/react-view-transitions/SKILL.md +1 -1
  106. package/src/skills/react-view-transitions/VENDOR.md +7 -2
  107. package/src/skills/teach.md +2 -1
  108. package/src/skills/token-report/SKILL.md +2 -3
  109. package/src/skills/token-report/VENDOR.md +2 -3
  110. package/src/skills/token-report/scripts/token_report.mjs +7 -121
  111. package/src/skills/workflow.md +1 -1
  112. package/themes/_TEMPLATE.json +1 -0
  113. package/themes/biker.json +1 -0
  114. package/themes/commentator.json +1 -0
  115. package/themes/cyberpunk.json +1 -0
  116. package/themes/gamer.json +1 -0
  117. package/themes/imperial.json +1 -0
  118. package/themes/joker.json +1 -0
  119. package/themes/marvin.json +1 -0
  120. package/themes/mean.json +1 -0
  121. package/themes/military.json +1 -0
  122. package/themes/neutral.json +1 -0
  123. package/themes/pirate.json +1 -0
  124. package/themes/sports.json +1 -0
  125. package/themes/verstappen.json +1 -0
  126. package/themes/wizard.json +1 -0
  127. package/web/dist/assets/Activity-C52LEb-2.js +1 -0
  128. package/web/dist/assets/ActivityDetail-CjNLRvXg.js +1 -0
  129. package/web/dist/assets/Dashboard-B6_sSCHi.js +2 -0
  130. package/web/dist/assets/Docs-Dj7BmCSA.js +5 -0
  131. package/web/dist/assets/{GreenhouseView-Bq1QmaGO.js → GreenhouseView-BALwjQsA.js} +1 -1
  132. package/web/dist/assets/Installs-BbffDQm3.js +2 -0
  133. package/web/dist/assets/JournalView-JpAQ8Hqe.js +1 -0
  134. package/web/dist/assets/Laws-DK7eCWSm.js +3 -0
  135. package/web/dist/assets/Library-CoamHelE.js +1 -0
  136. package/web/dist/assets/{Markdown-CkFyfgNf.js → Markdown-qjM2_ofS.js} +5 -5
  137. package/web/dist/assets/{OperatorHudView-B-HVBqfY.js → OperatorHudView-DVx1HlBx.js} +1 -1
  138. package/web/dist/assets/Personal-eaXb1zcj.js +1 -0
  139. package/web/dist/assets/{Tabs-_pjUFIEI.js → Tabs-BmGtt8E2.js} +1 -1
  140. package/web/dist/assets/api-Dc8f3ca-.js +1 -0
  141. package/web/dist/assets/drawable-Du_PZrQj.js +1 -0
  142. package/web/dist/assets/index-Bz_KMRDH.css +1 -0
  143. package/web/dist/assets/index-CNFH7o55.js +2 -0
  144. package/web/dist/index.html +3 -2
  145. package/QUICKSTART.md +0 -50
  146. package/SETUP.md +0 -1183
  147. package/adapters/copilot/README.md +0 -105
  148. package/docs/web/_groups.json +0 -45
  149. package/docs/web/about.md +0 -6
  150. package/docs/web/adapters-claude-code.md +0 -8
  151. package/docs/web/adapters-opencode-loads.md +0 -8
  152. package/docs/web/adapters-opencode-spec.md +0 -8
  153. package/docs/web/adapters-opencode.md +0 -8
  154. package/docs/web/agents.md +0 -8
  155. package/docs/web/authoring.md +0 -11
  156. package/docs/web/autostart.md +0 -9
  157. package/docs/web/claude-hooks.md +0 -37
  158. package/docs/web/cli.md +0 -6
  159. package/docs/web/collaboration.md +0 -27
  160. package/docs/web/configure-wiki.md +0 -9
  161. package/docs/web/design.md +0 -7
  162. package/docs/web/env-knobs.md +0 -9
  163. package/docs/web/exclusions.md +0 -27
  164. package/docs/web/first-session.md +0 -28
  165. package/docs/web/footprint.md +0 -38
  166. package/docs/web/foreman-mode.md +0 -33
  167. package/docs/web/glossary.md +0 -6
  168. package/docs/web/harnesses.md +0 -30
  169. package/docs/web/headless.md +0 -9
  170. package/docs/web/ingest-docs.md +0 -9
  171. package/docs/web/install-paths.md +0 -9
  172. package/docs/web/install-quick.md +0 -35
  173. package/docs/web/lsp-overview.md +0 -37
  174. package/docs/web/mcp-claude-code.md +0 -10
  175. package/docs/web/mcp-filesystem.md +0 -9
  176. package/docs/web/mcp-gitlab.md +0 -9
  177. package/docs/web/mcp-markitdown.md +0 -9
  178. package/docs/web/mcp-overview.md +0 -34
  179. package/docs/web/mcp-trouble.md +0 -9
  180. package/docs/web/mcp-verify.md +0 -9
  181. package/docs/web/migrate.md +0 -39
  182. package/docs/web/model.md +0 -20
  183. package/docs/web/pipelines.md +0 -24
  184. package/docs/web/plugin-activity.md +0 -23
  185. package/docs/web/plugin-context.md +0 -26
  186. package/docs/web/plugin-guard.md +0 -24
  187. package/docs/web/plugin-learn.md +0 -27
  188. package/docs/web/plugin-notify.md +0 -24
  189. package/docs/web/plugin-ponytail.md +0 -23
  190. package/docs/web/plugin-setup.md +0 -7
  191. package/docs/web/plugin-workflow.md +0 -25
  192. package/docs/web/plugins.md +0 -17
  193. package/docs/web/project-context.md +0 -9
  194. package/docs/web/rules.md +0 -30
  195. package/docs/web/run-anywhere.md +0 -9
  196. package/docs/web/self-improve.md +0 -8
  197. package/docs/web/setup-choices.md +0 -64
  198. package/docs/web/skills.md +0 -8
  199. package/docs/web/themes-author.md +0 -20
  200. package/docs/web/themes.md +0 -9
  201. package/docs/web/token-footprint.md +0 -7
  202. package/docs/web/trouble.md +0 -38
  203. package/docs/web/upgrade.md +0 -9
  204. package/docs/web/verify.md +0 -30
  205. package/docs/web/wiki.md +0 -7
  206. package/docs/web/worktree.md +0 -10
  207. package/docs/wiki.md +0 -43
  208. package/web/dist/assets/Activity-DAzV-qQj.js +0 -1
  209. package/web/dist/assets/ActivityDetail-CwEwMtKl.js +0 -1
  210. package/web/dist/assets/Dashboard-C2ELBW-X.js +0 -2
  211. package/web/dist/assets/Docs-iZrvQP8J.js +0 -2
  212. package/web/dist/assets/Installs-BiqR8xdO.js +0 -2
  213. package/web/dist/assets/JournalView-6wilG5Zd.js +0 -1
  214. package/web/dist/assets/Laws-D8YXD_XE.js +0 -3
  215. package/web/dist/assets/Library-DwuTZ2-L.js +0 -1
  216. package/web/dist/assets/Personal-BbUTmZQR.js +0 -1
  217. package/web/dist/assets/drawable-CoIulEH2.js +0 -1
  218. package/web/dist/assets/index-BMwSp8BP.js +0 -2
  219. package/web/dist/assets/index-CDPDk2vj.css +0 -1
package/CHANGELOG.md CHANGED
@@ -8,7 +8,95 @@ label. For the capability ↔ spec map, see [SHIPPED.md](SHIPPED.md).
8
8
 
9
9
  ## [Unreleased]
10
10
 
11
- _Nothing yet._
11
+ ## [3.11.0] — 2026-10-03
12
+
13
+ **Upgrading:** re-emit after installing (`geneseed rebuild-all`) — it also repairs a dead hook
14
+ shim and restarts a console left running on old code.
15
+
16
+ ### Added
17
+ - **`learn-mode` skill** (user-invoked): you design at checkpoints, the agent writes only what an
18
+ answered checkpoint approved. State lives in `.geneseed/learn.md`, anchored by two lines in
19
+ `AGENT.md`'s Mode section; no hook changes. Inspired by nykooi1/vibe-wise (MIT), rewritten.
20
+ - **One-step installers** — `install` / `install.cmd` / `install.command` check Node ≥ 22.3 and
21
+ git with per-OS hints (they never install anything), then run setup and offer the web console.
22
+ - **Setup lists the tools it can install into** — OpenCode, Claude Code, IBM Bob and OpenClaude,
23
+ each found on PATH or shown with its install link — and asks before going on when none is present.
24
+
25
+ ### Changed
26
+ - **The documentation is one tree, read on GitHub and in the console.** `docs/understand/`,
27
+ `docs/guides/`, `docs/concepts/` and `docs/reference/` replace `docs/web/`, `SETUP.md`,
28
+ `QUICKSTART.md` and `docs/wiki.md`; `docs/README.md` is the index. Install paths, every
29
+ configuration knob and MCP setup now live in `docs/guides/`; environment variables and
30
+ troubleshooting (organised by symptom) in `docs/reference/`. Every page was audited against
31
+ the code first, and a dozen wrong or stale claims were corrected on the way.
32
+ - **New: Understand**, four pages for developers new to agent harnesses — what a harness is,
33
+ what lands on your machine (per host: every file and hook, what it does, what it costs, how to
34
+ turn it off), a day with it, and what is enforced versus only asked.
35
+ - **Console Docs tab**: a three-column handbook with an "on this page" margin and glossary cards
36
+ for the terms a page uses; Understand renders as a step-by-step track with progress; "what
37
+ lands on your machine" is an interactive map; the Overview offers a dismissible "New here?"
38
+ card. Relative `.md` links work in both places.
39
+ - **The glossary** is a markdown table (`docs/reference/glossary.md`) with a developer analogy
40
+ per term, so GitHub readers get it too.
41
+
42
+ ### Fixed
43
+ - **Docs no longer claim a foreman pipeline merges on its own.** It hands back an uncommitted
44
+ worktree; the session re-runs the proof and merges only once you accept. The Claude hooks page
45
+ no longer says dropping the process pack loses the git gate — destructive git is still refused.
46
+ - The console's CLI reference printed every command as `harness <verb>`; it says `geneseed`.
47
+ - The `pipeline` skill said the parent merges on the crew's own proof without re-verifying; it
48
+ re-runs the proof and merges only once you accept, as foreman mode always said.
49
+ - **Dead hooks are said out loud.** When the machine's hook shim points at a folder that no
50
+ longer exists, every Claude Code, Bob and OpenClaude hook is silently off. Every `geneseed`
51
+ command now warns about it on stderr (`GENESEED_NO_SHIM_CHECK=1` silences it), and the `gates`
52
+ row of `geneseed status` reads `DEAD` instead of `armed`. `geneseed rebuild-all` repairs it.
53
+ - **Scratch installs stay out of the install list.** Installs built under the OS temp folder
54
+ (agent scratchpads, throwaway tests) are no longer registered, and existing ones are dropped,
55
+ so `rebuild-all` and `status` only cover real installs.
56
+ - **A console running old code says so.** After an upgrade replaced the console's files, a
57
+ still-running console served a page that could not load. `geneseed web status` and a banner on
58
+ the console now say when it is out of date, the banner restarts it, and `rebuild-all`
59
+ restarts a stale console by itself.
60
+ - **An old Node gets one sentence.** Below Node 22.3 every Geneseed command — including `npx`,
61
+ a global npm install and the hooks — says which Node it needs instead of crashing with a
62
+ stack trace.
63
+ - **The end of setup tells the truth for every host.** It names the file each tool really loads
64
+ and where it is, the hooks wired for Claude Code, Bob and OpenClaude, whether memory learning
65
+ is on, the right tool to restart, and where to read what was installed. A successful Claude
66
+ Code install no longer ends on "expected AGENT.md … but it is not there".
67
+
68
+ ## [3.10.0] — 2026-10-01
69
+
70
+ **Upgrading:** re-emit after installing (`geneseed rebuild-all`). A Copilot install is no longer
71
+ maintained: `geneseed uninstall` it before upgrading, or leave its files as they are — nothing
72
+ re-emits them any more. Breaking for Copilot users only; every other host gains features.
73
+
74
+ ### Removed
75
+ - **GitHub Copilot is no longer a host** — dropped for lack of support and of cross-tool
76
+ support. `--emit copilot` / `--emit copilot-global`, the `--host copilot` hook dialect, the
77
+ Copilot agent dialect, its MCP target, the setup and web-console options and
78
+ `adapters/copilot/` are gone. Geneseed now emits for OpenCode, Claude Code, Bob and
79
+ OpenClaude, plus the plain `AGENT.md` bundle (#166).
80
+
81
+ ### Fixed
82
+ - **The session files reach the session.** The root file names `user-rules.md`, `PROFILE.md`,
83
+ the Memory and Notebook indexes, `wiki.jsonc` and `context.json` for session start, but on a
84
+ Claude-shaped install (Claude Code, Bob, OpenClaude) the context hook only looked at the repo
85
+ root — so none of them were ever injected, and the root told the model they sit "beside this
86
+ file", where they are not. The hook and the OpenCode context plugin now inject them from the
87
+ install's own folder as a `SESSION FILES` block, skipping any file still at its seed; the root
88
+ gives each host's real path; Claude-shaped installs now seed `context.json`; and the OpenCode
89
+ plugin finds `wiki.jsonc` on a project install (#167).
90
+ - **Bob folder skills know where they live.** Bob hands a skill's text without its directory, so
91
+ a folder skill's `<this-skill-directory>/…` paths were unresolvable; the Bob emit now writes the
92
+ real path. `daydream` gained its missing frontmatter, `react-view-transitions` is named after
93
+ its folder, and `doctor` checks every folder skill's `name`/`description` (#164).
94
+
95
+ ### Changed
96
+ - **A lighter lean root.** Restated prose is full-footprint only: the laws, Ethos, doctrine,
97
+ posture and mode intros, §3's dispatch envelope and council roster (they live in the
98
+ parallel-agents and council skills), §10 Scripts, and the folder-skill list on hosts that list
99
+ skills natively. The lean Claude root drops from ~33k to ~29k characters (#165).
12
100
 
13
101
  ## [3.9.0] — 2026-09-30
14
102
 
package/DESIGN.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  **The spec behind the harness. Read this before changing structure.**
6
6
 
7
- [← Back to README](README.md) · [Setup guide](SETUP.md)
7
+ [← Back to README](README.md) · [Docs](docs/README.md)
8
8
 
9
9
  </div>
10
10
 
package/README.md CHANGED
@@ -10,11 +10,11 @@
10
10
  [![Node >= 22.3](https://img.shields.io/badge/node-%3E%3D22.3-5fa04e)](package.json)
11
11
  [![zero dependencies](https://img.shields.io/badge/deps-zero-success)](package.json)
12
12
  [![Themes](https://img.shields.io/badge/themes-14-9cf)](themes/)
13
- [![Skills](https://img.shields.io/badge/skills-53-blueviolet)](src/skills/)
13
+ [![Skills](https://img.shields.io/badge/skills-54-blueviolet)](src/skills/)
14
14
  [![Agents](https://img.shields.io/badge/agents-18-orange)](src/agents/)
15
15
  [![Laws](https://img.shields.io/badge/laws-9-critical)](src/laws/universal.md)
16
16
  [![Plugins](https://img.shields.io/badge/plugins-7-teal)](adapters/opencode/plugins/)
17
- [![OpenCode · Claude Code · Bob · Copilot · OpenClaude · AGENT.md](https://img.shields.io/badge/works%20with-OpenCode%20·%20Claude%20Code%20·%20Bob%20·%20Copilot%20·%20OpenClaude%20·%20AGENT.md-1f6feb)](#-supported-harnesses)
17
+ [![OpenCode · Claude Code · Bob · OpenClaude · AGENT.md](https://img.shields.io/badge/works%20with-OpenCode%20·%20Claude%20Code%20·%20Bob%20·%20OpenClaude%20·%20AGENT.md-1f6feb)](#-supported-harnesses)
18
18
 
19
19
  [**Why**](#-1--why-geneseed) · [**Setup**](#-2--setup) · [**Web & terminal**](#-3--web--terminal) · [**What you get**](#-4--what-you-get)
20
20
 
@@ -24,7 +24,7 @@
24
24
 
25
25
  <p align="center"><img src="docs/assets/demo.svg" alt="geneseed setup, then two laws catching a force-push and a credential at the tool boundary" width="760"></p>
26
26
 
27
- **Geneseed compiles your agent's rules instead of asking you to write them.** One source in `src/` renders into a ready-made harness for OpenCode, Claude Code, Bob, Copilot, OpenClaude, or any `AGENT.md` tool: a constitution of laws and doctrines, a roster of capability agents, native skills, a memory convention — and, wherever the host has a hook surface, gates that *enforce* the laws at the tool boundary instead of hoping the model remembers them.
27
+ **Geneseed compiles your agent's rules instead of asking you to write them.** One source in `src/` renders into a ready-made harness for OpenCode, Claude Code, Bob, OpenClaude, or any `AGENT.md` tool: a constitution of laws and doctrines, a roster of capability agents, native skills, a memory convention — and, wherever the host has a hook surface, gates that *enforce* the laws at the tool boundary instead of hoping the model remembers them.
28
28
 
29
29
  ```bash
30
30
  npx geneseed setup
@@ -36,12 +36,12 @@ Want to read what it leaves behind before installing anything? [**geneseed-demo*
36
36
 
37
37
  A hand-written instructions file is prose the model may or may not honour, copied into every repo and drifting in each one. Geneseed is a build, and that changes four things:
38
38
 
39
- - **Laws are enforced, not suggested.** A force-push, a `reset --hard`, or a credential written into a tracked file is caught by a hook *before* the tool runs, in the host's own dialect — a prompt on Claude Code, Copilot and OpenClaude, a hard block on OpenCode, exit 2 on Bob. The gates fail closed, and every catch is one line in a ledger that `geneseed status` counts.
40
- - **One source, six targets.** Skills are byte-identical on every host; only the wiring differs. Every commit renders all 317 emit configurations, and a second emit into the same tree must change nothing.
39
+ - **Laws are enforced, not suggested.** A force-push, a `reset --hard`, or a credential written into a tracked file is caught by a hook *before* the tool runs, in the host's own dialect — a prompt on Claude Code and OpenClaude, a hard block on OpenCode, exit 2 on Bob. The gates fail closed, and every catch is one line in a ledger that `geneseed status` counts.
40
+ - **One source, five targets.** Skills are byte-identical on every host; only the wiring differs. Every commit renders all 261 emit configurations, and a second emit into the same tree must change nothing.
41
41
  - **Costs are measured, not guessed.** Zero runtime dependencies. The hook path loads in about 14 ms per tool call. The default *lean* footprint keeps the always-on context small and puts the full rationale one read away — the numbers are in [docs/token-footprint.md](docs/token-footprint.md).
42
42
  - **It follows you.** Install once, globally; every repo inherits it. One `git pull` or `npm install -g geneseed@latest` rebuilds every active install.
43
43
 
44
- This page is the overview. Four parts: **why** it exists, how to **set it up**, the two ways to **drive it** (web console & command line), and **what you get**. For every install path, configuration knob, and troubleshooting step, read the full [Setup guide](SETUP.md).
44
+ This page is the overview. **New to agent harnesses?** Start with [Understand](docs/understand/harness.md) — four short pages on what a harness is, what lands on your machine, what changes in your day, and what is enforced versus only asked. Everything else — every install path, configuration knob, and troubleshooting step — is in the **[documentation](docs/README.md)**, which the web console also renders.
45
45
 
46
46
  ---
47
47
 
@@ -83,38 +83,43 @@ npm install -g geneseed # then plain `geneseed <command>` from any directo
83
83
  npm install -g geneseed@latest # …and that is also the update
84
84
  ```
85
85
 
86
- **[QUICKSTART.md](QUICKSTART.md)** walks this in 5 minutes. Every other route (Claude Code, plain `AGENT.md`, per-repo installs, MCP servers, troubleshooting) lives in the full **[Setup guide](SETUP.md)**.
86
+ Every other route (Claude Code, Bob, OpenClaude, plain `AGENT.md`, per-repo installs) is in the **[install guide](docs/guides/install.md)**.
87
87
 
88
88
  ### 🧬 The long way — a git checkout
89
89
 
90
- Cloning still works and is what you want if you intend to *change* the harness rather than use it. It needs **git** and the same **Node ≥ 22.3** as everything else — there is nothing extra to install.
90
+ Cloning is the route when npm is out of reach (a corporate network with no registry access) or when you intend to *change* the harness rather than use it. It needs **git** and the same **Node ≥ 22.3** as everything else — there is nothing extra to install.
91
+
92
+ **One step: run the installer at the root of the clone.** It checks that Node ≥ 22.3 and git are there and, when one is missing, says exactly what to install and where (on a managed PC: Software Center / Company Portal) — it never installs anything itself. Then it runs the setup wizard — which opens by listing the AI coding tools it can install into (OpenCode, Claude Code, IBM Bob, OpenClaude), each `ok` or with its install link, and asks before going on when none is there — and offers to open the web console.
91
93
 
92
94
  ```bash
93
95
  git clone https://github.com/Arylmera/Geneseed.git
94
96
  cd Geneseed
95
- ./geneseed setup # the wizard — bare `./geneseed` opens the web console
97
+ ./install # prerequisites, then the wizard
96
98
  ```
97
99
 
98
- **Windows** — native, no bash, WSL, curl, or unzip; works from cmd or PowerShell:
100
+ **macOS** — or double-click `install.command` in the Finder (it opens in Terminal). **Linux** — `./install` from any shell. On both, a missing prerequisite comes with the platform's own fix: Homebrew or the Command Line Tools on macOS, nvm/NodeSource or the package manager on Linux.
101
+
102
+ **Windows** — native, no bash, WSL, curl, unzip or PowerShell script; double-click `install.cmd` in Explorer, or from cmd or PowerShell:
99
103
 
100
104
  ```powershell
101
105
  git clone https://github.com/Arylmera/Geneseed.git
102
106
  cd Geneseed
103
- .\geneseed.cmd setup # the wizard — bare .\geneseed.cmd opens the web console
104
- # PowerShell runs a .cmd directly, so this is the PowerShell spelling too
107
+ .\install.cmd # prerequisites, then the wizard
105
108
  ```
106
109
 
110
+ Afterwards, `./geneseed setup` (`.\geneseed.cmd setup`) re-runs the wizard and bare `./geneseed` (`.\geneseed.cmd`) opens the web console. PowerShell runs a `.cmd` directly, so that is the PowerShell spelling too.
111
+
107
112
  Both launchers are thin shims over the Node CLI: they need `node` (22.3+) on `PATH`, and nothing else. Set `GENESEED_NODE` to an absolute path if `node` is not on `PATH` — under a version manager that only patches interactive shells, say. The wizard is plain text prompts on every console, old or new.
108
113
 
109
114
  ### 🟩 One runtime — Node, and nothing else
110
115
 
111
- Node ≥ 22.3 is the entire dependency list — every command, all five hook verbs, the web console and both generators run from it, and nothing any bundle ships needs a second interpreter. The details, and the few honest edges, are in [SETUP.md → One runtime](SETUP.md#-one-runtime--node-and-nothing-else).
116
+ Node ≥ 22.3 is the entire dependency list — every command, all five hook verbs, the web console and both generators run from it, and nothing any bundle ships needs a second interpreter.
112
117
 
113
118
  ### ✅ After installing
114
119
 
115
- - **Verify** — open your agent in any repo: the first reply starts with the readiness sigil and your project's docs are already in context. `geneseed doctor` should print `ok`.
116
- - **Run it from anywhere** — a global `npm install -g geneseed` already does this. From a checkout, `./geneseed link` writes a launcher shim into `~/.local/bin`; `.\geneseed.cmd link` writes a shim into `%LOCALAPPDATA%\Geneseed\bin` and adds it to your user PATH (open a new terminal).
117
- - **Everything else** — other tools (Claude Code, plain `AGENT.md`), per-repo installs, MCP servers, environment knobs, troubleshooting: **[SETUP.md](SETUP.md)**.
120
+ - **Verify** — open your agent in any repo: the first reply starts with the readiness sigil and your project's docs are already in context. `geneseed doctor` should print `ok`. More in [Verify it works](docs/guides/verify.md).
121
+ - **Run it from anywhere** — a global `npm install -g geneseed` already does this; from a checkout see [Run geneseed from anywhere](docs/guides/run-anywhere.md).
122
+ - **Something wrong?** [Troubleshooting](docs/reference/troubleshooting.md) is organised by what you see.
118
123
 
119
124
  ---
120
125
 
@@ -137,14 +142,7 @@ geneseed web stop # stop the daemon
137
142
  geneseed web status # is it running, and where
138
143
  ```
139
144
 
140
- The left rail mirrors the harness's own shape:
141
-
142
- | Group | Views |
143
- | --- | --- |
144
- | *(ungrouped)* | **Dashboard** — live readout of what's deployed (voice, capabilities, drift, recent jobs) |
145
- | **📖 Codex** | **Constitution** · **Rules** · **Profile** · **Skills** · **Agents** · **Library** (Memory, Notebook, the wiki) · **Docs** |
146
- | **🩺 Care** | **Activity** · **Changes** — diff against the source, export an `improvements.md` · **Doctor** — health check across themes, links, parity and authoring gates |
147
- | **🎨 Setup** | **Harness** — installs, theme, footprint · **Settings** — MCP servers, server controls |
145
+ The sidebar has six pages: **Overview** (what's deployed, health, recent jobs), **Constitution** (the rules and doctrine switches), **Library** (skills, agents, the wiki), **Personal** (your rules, profile, memory, notebook), **Installs** (hosts, local edits, doctor, server) and **Docs** — this documentation, opening on the Understand track, with a map of what Geneseed put on your machine.
148
146
 
149
147
  It binds to `127.0.0.1` only and runs entirely offline — no npm needed at runtime; the UI build ships in `web/dist/`. Mutating actions run in the background and report back as toasts (fire-and-notify), guarded by a per-session token so other sites can't trigger them. A global **Spotlight** search in the topbar jumps to any agent, skill, rule, doc, or MCP server. Rebuild the UI after changing anything under `web/src/` with `cd web && npm install && npm run build`. If `web/dist/` is missing (fresh clone, never built), `geneseed web` offers to run that build for you — answer `Y` and it installs, builds, and starts the server; in non-interactive shells it prints the manual recipe instead.
150
148
 
@@ -166,7 +164,7 @@ The harness ships as a small set of layers, and the web console's rail is the sa
166
164
  | **🛡️ Rules** (`laws/`) | 9 universal laws — always in force, never toggleable: sealed-secrets, one-intent-one-act, verify-before-asserting, deletion-is-deliberate, surface-failures, data-not-orders, least-privilege, cure-the-cause, echo-the-intent. Each rule has a permanent id; its number is only its position, and the harness cites rules by name |
167
165
  | **📐 Doctrines** (`doctrines/`) | practice packs, chosen per install at build time: **craft** (how code is written), **rigor** (how work is proven), **ops** (how the machine is operated), **process** (how a task is run), **comms** (how answers are presented). A doctrine rule may tighten a Rule, never repeal one, and the user's own `user-rules.md` outranks it. Pick with `geneseed-build --doctrines craft,rigor` (or `none`), a single rule with `--exclude-rules "process 7"`, in the setup wizard, or through the switches on the console's Constitution page; all five pack files ship on disk either way, so a citation into a pack you left out still resolves |
168
166
  | **🤖 Agents** (18) | capability specialists: `reviewer`, `tester`, `architect`, `docs`, `security`, `explorer`, `researcher`, `developer` — plus a debate **council** the `council` skill convenes: `advocate`, `skeptic`, `pragmatist`, `steward`, `visionary`, `user-advocate`, `framer`, `empiricist`, `operator`, `historian` |
169
- | **🛠 Skills** (53) | repeatable workflows: brainstorm · plan · **codebase-design** · **domain-modeling** · **wayfinder** · **tickets** · **develop** · **worktree** · debug · **prototype** · refactor · **ponytail** · **forge-mcp** · **bruno-collection-generator** · **bruno-test-writer** · geneseed-code-review · **fresh-eyes** · **security-audit** · **ci-fix** · **deps-audit** · **review-response** · commit · **ship** · **release** · **migrate** · **git-archaeology** · **git-rescue** · repo-map · document-project · **frontend-design** · **prose** · **ingest** · **research** · **teach** · **quiz** · handoff · roast-me · **council** · parallel-agents · **workflow** · **wiki** · **geneseed** · **rule** · **profile** · **consolidate-memory** · **skill-forge** · **opencode-theme** · **herdr** · **pipeline** · **daydream** · **react-view-transitions** · **token-report** · **explain-changes** |
167
+ | **🛠 Skills** (54) | repeatable workflows: brainstorm · plan · **codebase-design** · **domain-modeling** · **wayfinder** · **tickets** · **develop** · **worktree** · debug · **prototype** · refactor · **ponytail** · **forge-mcp** · **bruno-collection-generator** · **bruno-test-writer** · geneseed-code-review · **fresh-eyes** · **security-audit** · **ci-fix** · **deps-audit** · **review-response** · commit · **ship** · **release** · **migrate** · **git-archaeology** · **git-rescue** · repo-map · document-project · **frontend-design** · **prose** · **ingest** · **research** · **teach** · **quiz** · **learn-mode** · handoff · roast-me · **council** · parallel-agents · **workflow** · **wiki** · **geneseed** · **rule** · **profile** · **consolidate-memory** · **skill-forge** · **opencode-theme** · **herdr** · **pipeline** · **daydream** · **react-view-transitions** · **token-report** · **explain-changes** |
170
168
  | **🔌 Plugins** (OpenCode) | `geneseed-context` injects project docs *and your machine wiki* every session (and across compaction); `geneseed-learn` distils memory at session end; `geneseed-guard` enforces the safety Laws and protected wiki folders at the tool boundary; `geneseed-workflow` registers the `workflow` tool that runs saved orchestration scripts; `geneseed-notify` sends a native OS notification when a long run finishes; `geneseed-ponytail` holds a minimal-code mode (`/ponytail lite\|full\|ultra\|off`), opt-in, injecting the laziest-that-works ruleset every turn so it doesn't drift; `geneseed-activity` streams what each session is doing to the web console's Activity view |
171
169
  | **🧠 Memory** (`memory/`) | one-fact-per-file durable knowledge, indexed by `MEMORY.md` (git-ignored, personal) |
172
170
  | **📓 Notebook** (`notebook/`) | the agent's sovereign space — any medium (code, tools, data, notes), self-ruled via a seed-once charter, always git-ignored; only its `.gitignore` is build-asserted |
@@ -197,62 +195,47 @@ Fourteen themes ship — each a single JSON file in `themes/` carrying voice tok
197
195
  | 🏟️ **sports** | play-by-play commentary |
198
196
  | 🏍 **biker** · 🎤 **commentator** · 🃏 **joker** · 🤖 **marvin** · 😤 **mean** · 🏎 **verstappen** | community-added voices for fun |
199
197
 
200
- Pick with `--theme NAME` or via the setup wizard. The theme is remembered in a `.geneseed-theme` marker, so later upgrades preserve it. `doctor` checks every theme defines the same keys, so flavour drift is impossible. Adding a new voice token to `themes/_TEMPLATE.json`? Run `geneseed-build --sync-themes` to fill it into every theme (template's placeholder value, reported for restyling) before `doctor` is expected to pass again.
198
+ Pick with `--theme NAME` or via the setup wizard; upgrades remember it. More in [Themes](docs/concepts/themes.md).
201
199
 
202
200
  ### 🪶 Footprint (lean vs full)
203
201
 
204
- A second per-install dial, **footprint**, sets how much of the constitution `AGENT.md` carries *inline* every turn — a token-cost knob, not a change to which Rules apply (every Rule is always in force, and so is the whole of the Ethos).
205
-
206
- | Footprint | The Ethos + Sections 1–2 of `AGENT.md` | Trade-off |
207
- | --- | --- | --- |
208
- | **lean** *(default)* | the Ethos, each Rule and each active doctrine rule in their **authored** short form; then pointers to the full text | lighter every turn; rationale is one on-demand read away |
209
- | **full** | the Ethos, every Rule and every active doctrine rule at complete text **and** rationale, inlined | maximum guidance density; largest per-turn token cost |
210
-
211
- **Lean is authored, not cut.** The Ethos, every Rule and every doctrine rule carry a hand-written lean form beside their full text (`LEAN` blocks in `src/`), so a rule's lean footprint is decided by its author and not by where its first full stop happens to fall — the earlier first-sentence cut shipped Rule II as one 36-character line and dropped its stop-and-ask mechanism, and shipped a doctrine rule like *Change as little as the task requires.* as six words with no verb to act on.
212
-
213
- Both footprints put the full text on disk beside `AGENT.md`: `laws/`, `ontology/` and `doctrines/` all ship in the bundle at **full** text whatever the footprint, and **all five pack files ship whether or not the pack was built in** — which is what lets a citation into an inactive pack resolve. So lean is a context/token optimization, **not** a rules cut.
214
-
215
- Lean is the default: the rationale is one read away and the context it frees is paid back on every turn. Switch to **full** when token cost is a non-issue or you run a smaller model, which leans harder on always-present rationale. Set it with `--footprint lean|full`, the Settings toggle, the per-harness dropdown in the Harnesses tab, or the setup wizard. It's remembered in a `.geneseed-footprint` marker and preserved across rebuilds, on every host (OpenCode, Claude Code, Bob, Copilot).
216
-
217
- Either way the harness is otherwise identical — same files, Rules, capabilities, and guards; lean only relocates the *reasoning* to on-demand (and adds the standalone law, ontology and doctrine files to global/Claude/Bob installs). The one behavioural edge: with the rationale always in context, **full** applies a rule's nuance more reliably on subtle edge cases — or with a weaker model that may not reach for the pointer.
218
-
219
- Want to check a build before it touches anything real? `geneseed validate --theme NAME --emit MODE --out TARGET` renders and validates into a throwaway sandbox — nothing under `--out`/`--root` is written — and exits non-zero on any problem. Details: [SETUP.md](SETUP.md#dry-run-a-build-validate).
202
+ A second per-install dial sets how much of the constitution the root file carries *inline* every turn — a token-cost knob, not a change to which Rules apply. **lean** (the default) carries each rule's hand-written short form and points to the full text on disk; **full** inlines every rule with its rationale. Every rule is in force either way. More in [Footprint](docs/concepts/footprint.md) and [Choose your setup](docs/guides/choose-your-setup.md).
220
203
 
221
204
  ---
222
205
 
223
206
  ## 🔌 Supported harnesses
224
207
 
225
- One source, six emit targets. Geneseed builds into whichever host you point it
208
+ One source, five emit targets. Geneseed builds into whichever host you point it
226
209
  at — each with a per-repo and a global (`-global`) variant — plus a portable
227
210
  `files` bundle any `AGENT.md`-aware tool can read. **OpenCode** runs its own
228
- engine (JS plugins, colour themes, LSP); **Claude Code**, **Bob**, **Copilot**
211
+ engine (JS plugins, colour themes, LSP); **Claude Code**, **Bob**
229
212
  and **OpenClaude** share one Claude-shaped engine that diverges only by host dialect.
230
213
 
231
214
  The harness — its Rules, Agents, Skills, Memory convention, and preamble voice —
232
215
  is **identical on every host**. What differs is how much of it the host can
233
216
  *automate* for you (via plugins or hooks) versus carry as preamble discipline.
234
217
 
235
- | Capability | OpenCode | Claude Code | Bob | Copilot | OpenClaude |
236
- | --- | :---: | :---: | :---: | :---: | :---: |
237
- | **Instructions file** | `AGENT.md` + `opencode.json` | `CLAUDE.md` | `AGENTS.md` + `rules/geneseed.md` | `AGENTS.md` / `copilot-instructions.md` | `CLAUDE.md` (in `.openclaude/` per repo) |
238
- | **Agents** (capability specialists) | ✅ native | ✅ | ✅ | ✅ `.agent.md` | ✅ |
239
- | **Skills** (byte-identical) | ✅ | ✅ | ✅ | ✅ | ✅ |
240
- | **Memory & Notebook** | ✅ | ✅ | ✅ | ✅ | ✅ |
241
- | **Context injection** | ⚙️ plugin | 🪝 hook | 🪝 hook¹ | 🪝 hook³ | 🪝 hook⁴ |
242
- | **Memory write-back** (learn) | ⚙️ plugin | 🪝 hook | 🪝 hook¹ | 🪝 hook³ | 🪝 hook⁴ |
243
- | **Git-gate consent** (process 5) | ⚙️ plugin | 🪝 hook | 🪝 hook¹ (warn) | 🪝 hook³ | 🪝 hook⁴ |
244
- | **Rule-gate consent** (process 1) | ⚙️ plugin² | 🪝 hook | 🪝 hook¹ (warn) | 🪝 hook³ | 🪝 hook⁴ |
245
- | **Laws I / IV at the boundary** | ⚙️ plugin (block) | 🪝 hook (ask) | 🪝 hook¹ (exit 2) | 🪝 hook³ (ask) | 🪝 hook⁴ (ask) |
246
- | **Sovereign-repo excludes** | ⚙️ plugin | ✅ `claudeMdExcludes` | ✅ rules-shadow | ➖ none | ✅ `claudeMdExcludes` |
247
- | **MCP server wiring** | ✅ `mcp` | ✅ `mcpServers` | ✅ `mcp.json` | ✅ `mcp-config.json` | ✅ `mcpServers` |
248
- | **Colour themes** | ✅ full palette | ➖ | ➖ | ➖ | ➖ |
249
- | **LSP · workflow runner · primary-agent · `/`-commands** | ✅ | ➖ | ➖ | ➖ | ➖ |
250
-
251
- <sub>✅ native support · ⚙️ OpenCode plugin · 🪝 `settings.json` hook · 📄 carried by preamble prose only · ➖ no host mechanism (harness discipline still applies) · ¹ Bob's own hook contract: global hooks in `~/.bob/settings/settings.json`, Claude's event names but stdout ignored on `PreToolUse` — a refusal is **exit code 2**. So Laws I/IV exit 2, the consent rules are a stderr line, `SessionStart` context is plain stdout, `Stop` runs learn; `SubagentStop`/`PreCompact` are not Bob events and are not written. Unverified live (no Bob install on the authoring machine); the harness still holds via the rules preamble. · ² OpenCode's `tool.execute.before` can only allow or throw, with no "ask the user" tier, so the rule gate is a one-shot speed bump there rather than a prompt. · ³ Copilot's `~/.copilot/settings.json` hooks (`sessionStart`, `preToolUse`, `agentStop`, `preCompact`) wired by the **global** emit only; `preToolUse` has an ask tier, so every rule asks as on Claude Code. Unverified live (no Copilot CLI on the authoring machine). · ⁴ OpenClaude is a Claude Code fork: Claude's hook groups and verdicts verbatim, in `~/.openclaude/settings.json` (global) or `.openclaude/settings.local.json` (per repo). Unverified live (no OpenClaude install on the authoring machine).</sub>
218
+ | Capability | OpenCode | Claude Code | Bob | OpenClaude |
219
+ | --- | :---: | :---: | :---: | :---: |
220
+ | **Instructions file** | `AGENT.md` + `opencode.json` | `CLAUDE.md` | `AGENTS.md` + `rules/geneseed.md` | `CLAUDE.md` (in `.openclaude/` per repo) |
221
+ | **Agents** (capability specialists) | ✅ native | ✅ | ✅ | ✅ |
222
+ | **Skills** (byte-identical) | ✅ | ✅ | ✅ | ✅ |
223
+ | **Memory & Notebook** | ✅ | ✅ | ✅ | ✅ |
224
+ | **Context injection** | ⚙️ plugin | 🪝 hook | 🪝 hook¹ | 🪝 hook³ |
225
+ | **Memory write-back** (learn) | ⚙️ plugin | 🪝 hook | 🪝 hook¹ | 🪝 hook³ |
226
+ | **Git-gate consent** (process 5) | ⚙️ plugin | 🪝 hook | 🪝 hook¹ (warn) | 🪝 hook³ |
227
+ | **Rule-gate consent** (process 1) | ⚙️ plugin² | 🪝 hook | 🪝 hook¹ (warn) | 🪝 hook³ |
228
+ | **Laws I / IV at the boundary** | ⚙️ plugin (block) | 🪝 hook (ask) | 🪝 hook¹ (exit 2) | 🪝 hook³ (ask) |
229
+ | **Sovereign-repo excludes** | ⚙️ plugin | ✅ `claudeMdExcludes` | ✅ rules-shadow | ✅ `claudeMdExcludes` |
230
+ | **MCP server wiring** | ✅ `mcp` | ✅ `mcpServers` | ✅ `mcp.json` | ✅ `mcpServers` |
231
+ | **Colour themes** | ✅ full palette | ➖ | ➖ | ➖ |
232
+ | **LSP · workflow runner · primary-agent · `/`-commands** | ✅ | ➖ | ➖ | ➖ |
233
+
234
+ <sub>✅ native support · ⚙️ OpenCode plugin · 🪝 `settings.json` hook · 📄 carried by preamble prose only · ➖ no host mechanism (harness discipline still applies) · ¹ Bob's own hook contract: global hooks in `~/.bob/settings/settings.json`, Claude's event names but stdout ignored on `PreToolUse` — a refusal is **exit code 2**. So Laws I/IV exit 2, the consent rules are a stderr line, `SessionStart` context is plain stdout, `Stop` runs learn; `SubagentStop`/`PreCompact` are not Bob events and are not written. Unverified live (no Bob install on the authoring machine); the harness still holds via the rules preamble. · ² OpenCode's `tool.execute.before` can only allow or throw, with no "ask the user" tier, so the rule gate is a one-shot speed bump there rather than a prompt. · ³ OpenClaude is a Claude Code fork: Claude's hook groups and verdicts verbatim, in `~/.openclaude/settings.json` (global) or `.openclaude/settings.local.json` (per repo). Unverified live (no OpenClaude install on the authoring machine).</sub>
252
235
 
253
236
  **Reading the matrix.** Everything above the divider is at full parity — no host
254
237
  drops an Agent, Skill, or the memory convention. The asymmetry is entirely in
255
- *automation mechanism*: OpenCode's plugin surface and the Claude/Bob/Copilot/OpenClaude hook
238
+ *automation mechanism*: OpenCode's plugin surface and the Claude/Bob/OpenClaude hook
256
239
  surfaces enforce a few Rules for you, each in the tier its host offers (a prompt on
257
240
  Claude Code, a hard block or a logged warning where the host has no prompt to
258
241
  give), and what no host can automate rides the preamble. The OpenCode-only extras (themes, LSP,
@@ -260,7 +243,7 @@ workflow runner, primary-agent) have no analogue on a Claude-shaped host.
260
243
 
261
244
  Per-host wiring in depth: **[OpenCode](adapters/opencode/README.md)** ·
262
245
  **[Claude Code](adapters/claude-code/README.md)** ·
263
- **[Bob](adapters/bob/README.md)** · **[Copilot](adapters/copilot/README.md)** ·
246
+ **[Bob](adapters/bob/README.md)** ·
264
247
  **[OpenClaude](adapters/openclaude/README.md)**.
265
248
  Token cost per host: **[docs/token-footprint.md](docs/token-footprint.md)**.
266
249
 
@@ -292,9 +275,10 @@ Geneseed/
292
275
  ├── themes/ voice token maps (14 themes shipped)
293
276
  ├── web/ Vite + React UI source; the committed web/dist/ build is what ships
294
277
  ├── tests/ Node test suites, golden.mjs (every emit config) and mutate.mjs
295
- ├── docs/ guides (web-ui, wiki, …) + docs/web/ (the console's Docs pages);
278
+ ├── docs/ understand/ guides/ concepts/ reference/ — the docs, also the console's
279
+ │ Docs pages; maintainer notes beside them (extending, design-history…);
296
280
  │ specs/, reviews/, superpowers/ are local working docs — git-ignored
297
- ├── adapters/ per-host glue (opencode/, claude-code/, bob/, copilot/, openclaude/)
281
+ ├── adapters/ per-host glue (opencode/, claude-code/, bob/, openclaude/)
298
282
  └── .github/workflows/ ci.yml (doctor + tests) · publish.yml (npm, OIDC, manual only)
299
283
  ```
300
284
 
@@ -324,19 +308,17 @@ geneseed rebuild-all # re-render every registered install in its own theme + m
324
308
  ./geneseed upgrade # just the content refresh (remembers theme + emit mode)
325
309
  ```
326
310
 
327
- **Local edits survive.** The self-improvement loops let the agent refine its deployed agent/skill files in place. Before setup, re-theme, or upgrade overwrites them, any drift is auto-exported to a markdown **improvements file** under `improvements/` *inside the deployed harness dir* (e.g. `~/.config/opencode/improvements/` for the global install) — beside the install it describes, untouched by rebuilds and uninstall. Hand it to an agent in this repo to back-port the changes into `src/`. On demand: `./geneseed diff --out FILE`, or the **Changes** page in the web console.
328
-
329
- Details and precedence rules: [SETUP.md → Upgrade](SETUP.md#upgrade).
311
+ **Local edits survive.** If the agent refined its deployed agent/skill files in place, an upgrade exports that drift to an `improvements/` file inside the install before overwriting. Details: [Upgrade](docs/guides/upgrade.md).
330
312
 
331
313
  ## 📚 Documentation
332
314
 
333
315
  | Page | Read it when… |
334
316
  | --- | --- |
335
- | **[SETUP.md](SETUP.md)** | Installing — every path, configuration knob, env var, verify, troubleshooting |
317
+ | **[docs/](docs/README.md)** | Using Geneseed — Understand, Guides (install, setup choices, MCP, wiki, upgrade, uninstall…), Concepts and Reference (CLI, environment, troubleshooting, glossary) |
336
318
  | **[DESIGN.md](DESIGN.md)** | Changing structure — the spec and the decisions behind it |
337
319
  | **[SHIPPED.md](SHIPPED.md)** | What's in the harness today — capabilities ↔ the spec behind each |
320
+ | **[docs/extending.md](docs/extending.md)** | Adding to the harness — what each kind of addition costs |
338
321
  | **[docs/web-ui.md](docs/web-ui.md)** | The web console — every view, the launch/daemon/PWA surface, security model |
339
- | **[docs/wiki.md](docs/wiki.md)** | The machine wiki — your personal knowledge base, setup and writing model |
340
322
  | **[docs/token-footprint.md](docs/token-footprint.md)** | What the harness costs in context-window tokens, per host |
341
323
  | **[docs/opencode-plugin-setup.md](docs/opencode-plugin-setup.md)** | Installing the OpenCode plugins — the one-time wiring they all share |
342
324
  | **[CHANGELOG.md](CHANGELOG.md)** | What changed between versions |
@@ -345,7 +327,6 @@ Details and precedence rules: [SETUP.md → Upgrade](SETUP.md#upgrade).
345
327
  | ⤷ [HOW-OPENCODE-LOADS.md](adapters/opencode/HOW-OPENCODE-LOADS.md) | Why a file shows up twice; plugin loading |
346
328
  | **[adapters/claude-code/](adapters/claude-code/README.md)** | The Claude Code hook adapter |
347
329
  | **[adapters/bob/](adapters/bob/README.md)** | The IBM Bob adapter — Claude-shaped, rules-file preamble |
348
- | **[adapters/copilot/](adapters/copilot/README.md)** | The GitHub Copilot adapter — global hooks (`sessionStart`, `preToolUse`, `agentStop`, `preCompact`) |
349
330
  | **[adapters/openclaude/](adapters/openclaude/README.md)** | The OpenClaude adapter — the Claude engine under `~/.openclaude` / `.openclaude/` |
350
331
  | **[src/memory/README.md](src/memory/README.md)** | The memory convention |
351
332
  | **[src/notebook/README.md](src/notebook/README.md)** | The agent's own freeform-space convention |
package/SHIPPED.md CHANGED
@@ -20,7 +20,7 @@ historical references, not files distributed with the repo.
20
20
  > **On version numbers.** [`harness.config.json`](harness.config.json)'s `version` is a
21
21
  > human-readable label only. The canonical identity of an installed harness is the
22
22
  > **source fingerprint** stamped in `.geneseed-version` (see `geneseed version`), not the
23
- > string. Current label: **3.9.0**.
23
+ > string. Current label: **3.11.0**.
24
24
 
25
25
  ## Capabilities
26
26
 
@@ -29,7 +29,7 @@ Every row below is present in the tree today; "Spec" names the design record.
29
29
  | Capability | What it is | Spec |
30
30
  | --- | --- | --- |
31
31
  | **Themed generator** | One neutral `src/` → 14 themed bundles via `geneseed-build` (zero dependencies); structure stays theme-independent | [DESIGN.md](DESIGN.md) |
32
- | **Laws / Agents / Skills / Memory / Notebook** | 9 laws, 18 agents, 53 skills, the memory convention, and the agent's sovereign notebook | `2026-06-11-notebook-sovereign-space` · `2026-06-10-notebook-agent-own-space` |
32
+ | **Laws / Agents / Skills / Memory / Notebook** | 9 laws, 18 agents, 54 skills, the memory convention, and the agent's sovereign notebook | `2026-06-11-notebook-sovereign-space` · `2026-06-10-notebook-agent-own-space` |
33
33
  | **Three-tier constitution** | The governance surface splits into an always-on **Ontology** (Telos, Evidence, Decisions, Conduct — the Pact absorbed into Telos), the nine always-on **Invariants**, and five toggleable **Doctrine** packs (craft, rigor, ops, process, comms) addressed `<pack> <n>`. Every rule carries a permanent id; its number is its position, computed at render time, and a citation renders as the rule's principle name. Packs are chosen at build time with `--doctrines` or the setup wizard; the whole catalogue ships on disk either way, so a citation into an inactive pack still resolves. Precedence, in order: Ontology + Invariants, then the user's `user-rules.md`, then the active Doctrines, then `PROFILE.md`. `doctor`'s `constitutionProblems` gates rule ids (declared, unique, never a retired one), the per-rule Principle column, every `{{LAW:<id>}}` / `{{DOCTRINE:<id>}}` citation in `src/`, and the rule that an always-on tier may never cite a toggleable one | `2026-08-19-three-tier-constitution-design` |
34
34
  | **`doctor`** | One check: unresolved tokens, dead/non-hermetic links, theme-key parity, authoring gates, rendered-bundle drift | `2026-06-07-theme-aware-doctor-diff` |
35
35
  | **`diff` + improvements export** | Deployed-vs-source drift report; export an `improvements.md` back-port | `2026-06-12-improvements-export` |
@@ -37,7 +37,7 @@ Every row below is present in the tree today; "Spec" names the design record.
37
37
  | **Terminal rendering** | There is no full-screen control panel: `tui` and `menu` are verbs that say so and print the command list. The display-width and glyph layer ships on, behind `status` and the install animation | `2026-06-07-tui-refactor-polish` · `2026-06-08-tui-modern-refresh` · `2026-06-11-windows-tui` |
38
38
  | **Web console** | Local browser UI (Dashboard; Codex: Constitution, Rules, Profile, Skills, Agents, Library, Docs; Care: Activity, Changes, Doctor; Setup: Harness, Settings), auto-build, in-app docs menu | `2026-06-12-web-ui-v2` · `2026-06-12-web-auto-build` · `2026-06-13-docs-menu` |
39
39
  | **OpenCode adapter** | Native agents/skills mapping + plugins (context, learn, guard, workflow, notify, ponytail, activity); global-emit link integrity; JSONC config target | `2026-06-07-opencode-adapter-features` · `2026-06-07-global-emit-link-integrity` · `2026-06-12-opencode-jsonc-target` · `2026-06-16-ponytail-minimal-code-mode` |
40
- | **Host hooks, per dialect** | Every host gets the hook surface its runtime offers, spoken in that runtime's own verdict dialect via `--host`: Claude Code asks (`permissionDecision`), OpenClaude asks exactly as Claude does (a Claude Code fork, under `~/.openclaude` / `.openclaude/`), Copilot asks as Claude does (`sessionStart`, `preToolUse`, `agentStop`, `preCompact` in `~/.copilot/settings.json`, global scope only), Bob refuses by exit code 2 (five Claude-named events, nested `~/.bob/settings/settings.json`, no subagent event), OpenCode's guard throws. Laws I/IV are the hard tier everywhere; the consent rules ask where a host can ask and warn where it cannot. `tool-gate` fuses the two gates for hosts that run one command per event; `PreCompact` runs `learn` before Claude compacts; every block or ask lands in `notebook/gates.jsonl` on every host | [copilot](adapters/copilot/README.md) · [bob](adapters/bob/README.md) · [claude-code](adapters/claude-code/README.md) · [candidate hosts](docs/candidate-hosts.md) |
40
+ | **Host hooks, per dialect** | Every host gets the hook surface its runtime offers, spoken in that runtime's own verdict dialect via `--host`: Claude Code asks (`permissionDecision`), OpenClaude asks exactly as Claude does (a Claude Code fork, under `~/.openclaude` / `.openclaude/`), Bob refuses by exit code 2 (five Claude-named events, nested `~/.bob/settings/settings.json`, no subagent event), OpenCode's guard throws. Laws I/IV are the hard tier everywhere; the consent rules ask where a host can ask and warn where it cannot. `tool-gate` fuses the two gates for hosts that run one command per event; `PreCompact` runs `learn` before Claude compacts; every block or ask lands in `notebook/gates.jsonl` on every host | [bob](adapters/bob/README.md) · [claude-code](adapters/claude-code/README.md) · [candidate hosts](docs/candidate-hosts.md) |
41
41
  | **Workflow primitive** | Saved, code-driven subagent orchestration (`workflow` tool + runtime); shipped scripts include `dispatch` — decompose a goal, route each subtask to its owning agent, converge | `2026-06-09-opencode-workflow-primitive` |
42
42
  | **Per-agent memory** | Each capability agent keeps durable lessons in `memory/agents/<name>.md`: read at dispatch, written back mechanically by `learn` on session/subagent end (OpenCode plugin + Claude `SubagentStop`; Bob has no subagent event); `learn --consolidate` rebuilds the index | `2026-07-04-orchestration-memory-upgrade` |
43
43
  | **Wiki integration** | Machine-wide knowledge base (`wiki.jsonc`): eager/lazy loading, conventions, protected folders enforced at the tool boundary | `2026-06-11-wiki-knowledge-base` |
@@ -1,6 +1,6 @@
1
1
  # 🤖 IBM Bob adapter
2
2
 
3
- > [← Back to README](../../README.md) · [Setup guide](../../SETUP.md) · [Claude Code adapter](../claude-code/README.md) · [OpenCode adapter](../opencode/README.md)
3
+ > [← Back to README](../../README.md) · [Install guide](../../docs/guides/install.md) · [Claude Code adapter](../claude-code/README.md) · [OpenCode adapter](../opencode/README.md)
4
4
 
5
5
  [IBM Bob](https://bob.ibm.com) is **Claude-Code-shaped**: a project `.bob/`
6
6
  layer, an `AGENTS.md` instructions file, `SKILL.md` skills, subagents, and a
@@ -23,7 +23,8 @@ limitation to be aware of on a shared repo.
23
23
  - `agents/<name>.md` — the **Claude subagent dialect** verbatim (`name` +
24
24
  `description` + a `disallowedTools:` denylist for read-only agents).
25
25
  - `skills/<name>/SKILL.md` — **byte-identical** to every other host; skills
26
- are model-invoked via the `skill` tool.
26
+ are model-invoked via the `skill` tool. The one exception is the folder skills'
27
+ own directory — see *Bob-ism 3*.
27
28
  - `rules/geneseed.md` — a **slim shadow stub** (see *Bob-ism 1* below).
28
29
  - `settings.json` — Geneseed's lifecycle hooks (gitignored by the emit's
29
30
  `.bob/.gitignore`, see the caveat below).
@@ -64,6 +65,21 @@ never gets one; the `rules/geneseed.md` shadow above covers the same
64
65
  project-bypasses-global need. An older Bob install that wrote a stale exclude is
65
66
  **self-healed** (the entry is removed) on the next emit.
66
67
 
68
+ ## Bob-ism 3 — a folder skill is told where it lives
69
+
70
+ A folder skill (`explain-changes`, `token-report`, `daydream`, …) ships scripts or
71
+ prompts beside its `SKILL.md` and names them `<this-skill-directory>/…`. Claude Code
72
+ answers that placeholder itself — it gives the model each skill's base directory on load.
73
+ Bob gives the skill's text only, so the model was left with a path it could not resolve
74
+ and fell back to searching the filesystem. The Bob emit therefore writes the directory in:
75
+
76
+ - per repo, relative to the workspace root — `node .bob/skills/token-report/scripts/…` —
77
+ which is where Bob runs commands, and stays valid in a teammate's checkout;
78
+ - globally, the absolute path under `~/.bob/skills/`.
79
+
80
+ `doctor` also requires every folder skill's `SKILL.md` to open with a frontmatter whose
81
+ `name` is the folder's and which has a `description` — what any host registers a skill from.
82
+
67
83
  ## Hooks — Bob's own protocol
68
84
 
69
85
  Bob documents lifecycle hooks (its hooks page and the 2.0.2 changelog; see
@@ -1,6 +1,6 @@
1
1
  # 🪝 Claude Code adapter
2
2
 
3
- > [← Back to README](../../README.md) · [Setup guide](../../SETUP.md) · [OpenCode adapter](../opencode/README.md)
3
+ > [← Back to README](../../README.md) · [Install guide](../../docs/guides/install.md) · [OpenCode adapter](../opencode/README.md)
4
4
 
5
5
  Optional. Claude Code supports lifecycle **hooks**, so a team using it can make
6
6
  parts of the harness fire automatically instead of relying on agent
@@ -14,10 +14,11 @@ bin/geneseed-hook.mjs …` — so at user scope they would fire and fail in ever
14
14
  repo that doesn't vendor the harness. A generated global install wires
15
15
  absolute-path hooks instead — `geneseed setup` does that for you.) It:
16
16
 
17
- - on **PreToolUse** (matcher `Bash`), **on an install that built the `process` pack in**,
18
- runs `harness git-gate` — the tool-boundary half of Doctrine process 5 (*consent before
19
- every commit and push*). Drop that pack and this hook is not written at all; the
20
- invariant-territory refusals (`rm -rf`, force-push) stay in every build. The hook inspects
17
+ - on **PreToolUse** (matcher `Bash`), runs `geneseed-hook git-gate` — the tool-boundary
18
+ half of Doctrine process 5 (*consent before every commit and push*) and of the
19
+ destructive-git Rule. Drop the `process` pack (or exclude process 5) and the hook stays,
20
+ wired with `--no-consent`: commits and pushes pass without asking, while the
21
+ invariant-territory refusals (force-push, `reset --hard`) stay in every build. The hook inspects
21
22
  command and, when it runs a `git commit` or `git push` (bare, flagged, `-C <path>`,
22
23
  or chained like `git add . && git commit … && git push`), returns
23
24
  `permissionDecision: "ask"` so Claude Code **prompts on every such call**. Crucially
@@ -31,27 +32,31 @@ absolute-path hooks instead — `geneseed setup` does that for you.) It:
31
32
  `create_or_update_file` / `merge_pull_request`, which bypass Bash. To gate those too,
32
33
  widen the matcher to `"Bash|mcp__github__.*"` — `git-gate` ignores any payload it
33
34
  doesn't recognise as a commit/push, so over-matching the tool surface is harmless.
35
+ - on **PreToolUse** (matcher `Write|Edit|MultiEdit|NotebookEdit`), runs
36
+ `geneseed-hook rule-gate` — refuses a write that would put a credential into a tracked
37
+ file, and asks first on the first write to `user-rules.md` or a memory file (whether
38
+ something you want kept is a rule or a fact is your call). Ordinary edits pass.
34
39
  - on **SessionStart** (`startup`/`clear` only — a fresh context), prints `AGENT.md`
35
- so the harness is in context from the first turn, then runs `harness context` to
40
+ so the harness is in context from the first turn, then runs `geneseed-hook context` to
36
41
  **inject the project context** directly into the session — so the project-context load is
37
42
  by the hook, not left to the agent to remember (lazy entries are only listed). On
38
- **`resume`** it runs `harness context` *without* re-`cat`ting `AGENT.md`: the resumed
43
+ **`resume`** it runs `geneseed-hook context` *without* re-`cat`ting `AGENT.md`: the resumed
39
44
  conversation already carries the harness, so re-injecting the static file each resume
40
45
  is pure token waste — only the (possibly changed) project context is refreshed;
41
- - on **Stop**, runs `harness learn` over the session to capture durable memories.
46
+ - on **Stop**, runs `geneseed-hook learn` over the session to capture durable memories.
42
47
  Claude Code pipes the hook payload (with the session's `transcript_path`) to the
43
48
  command on stdin; `learn` reads that, flattens the transcript, distils new
44
49
  memories, and **writes them into the bundle's `memory/` while updating
45
50
  `MEMORY.md`** — deduping against what is already stored. No `< /dev/null` and no
46
51
  redirection: the stdin payload is the whole point.
47
- - on **SubagentStop**, runs the *same* `harness learn` command. `learn` reads the
52
+ - on **SubagentStop**, runs the *same* `geneseed-hook learn` command. `learn` reads the
48
53
  payload's `hook_event_name`, sees a subagent dispatch, and routes it to the
49
54
  per-agent lesson path instead of the shared store: it distils at most one durable
50
55
  lesson and appends it to `memory/agents/<agent-name>.md` (capped, newest kept). If
51
56
  the payload does not name the subagent, the step is a silent no-op — never a
52
57
  crash, never a wrong write. This is the parity twin of the OpenCode learn plugin's
53
58
  child-session branch.
54
- - on **PreCompact**, runs the same `harness learn` once more. `learn` distils the
59
+ - on **PreCompact**, runs the same `geneseed-hook learn` once more. `learn` distils the
55
60
  *tail* of the transcript, so per-turn Stop is a sliding window over the session —
56
61
  and auto-compaction is the moment that window is about to be summarised away.
57
62
  This captures memory *before* the summary; the SessionStart `compact` matcher
@@ -68,11 +73,11 @@ the commands are identical (`node bin/geneseed-hook.mjs …`).
68
73
 
69
74
  Why inject rather than instruct? The constitution tells the agent to read the project
70
75
  context at startup, but startup rituals are exactly what agents skip. The
71
- `harness context` hook removes the choice: the eager files' contents land in
76
+ `geneseed-hook context` hook removes the choice: the eager files' contents land in
72
77
  context before the first turn regardless of agent discipline. On tools without
73
78
  hooks or plugins, the AGENT.md prose still carries the rule.
74
79
 
75
- > **Auto-discovery (parity with OpenCode).** `harness context` no longer needs a
80
+ > **Auto-discovery (parity with OpenCode).** `geneseed-hook context` no longer needs a
76
81
  > hand-filled `context.json`: with no manifest (or just the empty stub) it
77
82
  > **auto-discovers the repo's docs by convention** — root `AGENTS.md`/`AGENT.md`/
78
83
  > `CLAUDE.md`/`README.md`/`CONTRIBUTING.md` injected eager, `docs/`/`adr/`/monorepo
@@ -1,6 +1,6 @@
1
1
  # 🦀 OpenClaude adapter
2
2
 
3
- > [← Back to README](../../README.md) · [Setup guide](../../SETUP.md) · [Claude Code adapter](../claude-code/README.md) · [OpenCode adapter](../opencode/README.md)
3
+ > [← Back to README](../../README.md) · [Install guide](../../docs/guides/install.md) · [Claude Code adapter](../claude-code/README.md) · [OpenCode adapter](../opencode/README.md)
4
4
 
5
5
  [OpenClaude](https://openclaude.gitlawb.com/) (`@gitlawb/openclaude`, binary
6
6
  `openclaude`) is an open-source coding-agent CLI that "originated from the Claude
@@ -58,7 +58,7 @@ which root file OpenClaude already loads (`AGENTS.md` when present, else
58
58
  ## Not supported
59
59
 
60
60
  - **Workflows.** OpenClaude ships its `WorkflowTool` disabled, so the `workflow`
61
- skill falls back to parallel agents, as on Bob and Copilot.
61
+ skill falls back to parallel agents, as on Bob.
62
62
  - **Live verification.** The emit follows OpenClaude's source (`src/utils/envUtils.ts`,
63
63
  `src/utils/claudemd.ts`, `src/utils/config.ts`, `src/types/hooks.ts`) as of
64
64
  2026-09. It has not been run against an installed OpenClaude yet.
@@ -1,6 +1,6 @@
1
1
  # 🔌 OpenCode adapter
2
2
 
3
- > [← Back to README](../../README.md) · [Setup guide](../../SETUP.md) · [How OpenCode loads](HOW-OPENCODE-LOADS.md) · [Global harness spec](GLOBAL-HARNESS-SPEC.md)
3
+ > [← Back to README](../../README.md) · [Install guide](../../docs/guides/install.md) · [How OpenCode loads](HOW-OPENCODE-LOADS.md) · [Global harness spec](GLOBAL-HARNESS-SPEC.md)
4
4
 
5
5
  [OpenCode](https://opencode.ai) is `AGENTS.md`-native and has first-class
6
6
  **subagents** and **commands**, so Geneseed fits it cleanly. Pick the depth you
@@ -211,7 +211,7 @@ the harness live entirely in the global config dir with zero per-repo files.
211
211
  install). Per wiki: eager entries inject in full, lazy entries list, and the
212
212
  `conventions` / `inbox` / `protected` metadata is surfaced — on the **same**
213
213
  budgets, compaction and transform paths as the project context. Schema and
214
- behaviour: [SETUP.md → Wiki](../../SETUP.md#wiki--your-own-knowledge-base-optional).
214
+ behaviour: [the wiki guide](../../docs/guides/wiki.md).
215
215
 
216
216
  It needs no model, writes nothing, skips the learn plugin's throwaway sessions, and
217
217
  swallows every error. Output mirrors `geneseed-hook context`.
@@ -468,9 +468,9 @@ OpenCode runs, so the command has to resolve — the `uvx` form above needs only
468
468
  call). No uv? `pipx install markitdown-mcp` and swap the command to `["markitdown-mcp"]`.
469
469
  Or drop the block entirely — the skill falls back to a CLI converter (MarkItDown /
470
470
  Pandoc / Docling) and never installs one silently. Listed but not connecting? The
471
- command isn't on PATH — see [SETUP.md → MCP server won't connect](../../SETUP.md#mcp-server-wont-connect).
471
+ command isn't on PATH — see [the MCP guide](../../docs/guides/mcp.md).
472
472
  Full runbook, including the corporate-TLS (`UV_SYSTEM_CERTS`) step and the OCR extras:
473
- [SETUP.md → MarkItDown via MCP](../../SETUP.md#markitdown-via-mcp-opencode).
473
+ [the MCP guide](../../docs/guides/mcp.md).
474
474
 
475
475
  ## Optional add-on — git-worktree isolation (third-party, not vendored)
476
476