geneseed 3.10.0 → 3.12.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 (227) hide show
  1. package/CHANGELOG.md +96 -0
  2. package/DESIGN.md +1 -1
  3. package/README.md +27 -45
  4. package/SHIPPED.md +2 -2
  5. package/adapters/bob/README.md +1 -1
  6. package/adapters/claude-code/README.md +17 -12
  7. package/adapters/openclaude/README.md +1 -1
  8. package/adapters/opencode/README.md +4 -4
  9. package/adapters/opencode/plugins/geneseed-guard.js +157 -2
  10. package/bin/build-driver.mjs +2 -0
  11. package/bin/geneseed-cli.mjs +21 -0
  12. package/bin/geneseed-hook.mjs +2 -0
  13. package/docs/README.md +42 -0
  14. package/docs/_groups.json +18 -0
  15. package/docs/concepts/agents.md +44 -0
  16. package/docs/concepts/collaboration.md +62 -0
  17. package/docs/concepts/exclusions.md +55 -0
  18. package/docs/concepts/footprint.md +52 -0
  19. package/docs/concepts/foreman-mode.md +69 -0
  20. package/docs/concepts/hooks.md +101 -0
  21. package/docs/concepts/hosts.md +55 -0
  22. package/docs/concepts/loops.md +165 -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 +32 -21
  30. package/docs/guides/autostart.md +70 -0
  31. package/docs/guides/choose-your-setup.md +134 -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 +37 -0
  47. package/docs/reference/opencode-plugins.md +133 -0
  48. package/docs/reference/troubleshooting.md +350 -0
  49. package/docs/understand/a-day.md +77 -0
  50. package/docs/understand/enforced-vs-asked.md +64 -0
  51. package/docs/understand/harness.md +36 -0
  52. package/docs/understand/on-your-machine.md +76 -0
  53. package/docs/web-ui.md +13 -2
  54. package/harness.config.json +1 -1
  55. package/js/README.md +27 -4
  56. package/js/build/driver.mjs +14 -8
  57. package/js/build/generate.mjs +22 -7
  58. package/js/build/render.mjs +5 -0
  59. package/js/build/source.mjs +11 -1
  60. package/js/cli-table.json +236 -1
  61. package/js/hosts/gitref.mjs +99 -0
  62. package/js/hosts/hooks.mjs +88 -1
  63. package/js/hosts/installs.mjs +21 -0
  64. package/js/hosts/mcp.mjs +1 -1
  65. package/js/hosts/settings.mjs +13 -1
  66. package/js/inspect/checks-authoring.mjs +15 -3
  67. package/js/inspect/diff.mjs +3 -0
  68. package/js/inspect/doctor.mjs +3 -2
  69. package/js/inspect/inventory.mjs +2 -1
  70. package/js/inspect/registry.mjs +20 -3
  71. package/js/inspect/status.mjs +8 -3
  72. package/js/lib/node-floor.mjs +30 -0
  73. package/js/loop/catalog.mjs +116 -0
  74. package/js/loop/cli.mjs +151 -0
  75. package/js/loop/graph.mjs +145 -0
  76. package/js/loop/score.mjs +143 -0
  77. package/js/loop/state.mjs +322 -0
  78. package/js/maintain/migrate.mjs +4 -2
  79. package/js/maintain/setup.mjs +109 -21
  80. package/js/maintain/update.mjs +4 -15
  81. package/js/ui/cli.mjs +2 -2
  82. package/js/web/actions.mjs +9 -3
  83. package/js/web/api.mjs +41 -2
  84. package/js/web/daemon.mjs +94 -4
  85. package/js/web/docs.mjs +149 -65
  86. package/js/web/handler.mjs +1 -0
  87. package/js/web/jobs.mjs +3 -1
  88. package/js/web/server.mjs +10 -5
  89. package/package.json +6 -4
  90. package/registry.json +21 -0
  91. package/src/AGENT.md.tmpl +6 -0
  92. package/src/bricks/README.md +32 -0
  93. package/src/bricks/_template.md +32 -0
  94. package/src/bricks/apply.md +17 -0
  95. package/src/bricks/baseline-green.md +17 -0
  96. package/src/bricks/bruno-test.md +16 -0
  97. package/src/bricks/ci-fix.md +17 -0
  98. package/src/bricks/deps-audit.md +14 -0
  99. package/src/bricks/docs-update.md +15 -0
  100. package/src/bricks/identify.md +20 -0
  101. package/src/bricks/lint.md +14 -0
  102. package/src/bricks/plan.md +17 -0
  103. package/src/bricks/reproduce.md +16 -0
  104. package/src/bricks/review.md +17 -0
  105. package/src/bricks/security-scan.md +17 -0
  106. package/src/bricks/test.md +14 -0
  107. package/src/doctrines/process.md +11 -8
  108. package/src/loops/bugfix.json +22 -0
  109. package/src/loops/feature.json +21 -0
  110. package/src/loops/refactor.json +20 -0
  111. package/src/postures/mentor.md +1 -0
  112. package/src/skills/brick-forge.md +46 -0
  113. package/src/skills/geneseed.md +1 -1
  114. package/src/skills/learn-mode.md +89 -0
  115. package/src/skills/loop.md +99 -0
  116. package/src/skills/pipeline.md +2 -2
  117. package/src/skills/quiz.md +2 -1
  118. package/src/skills/teach.md +2 -1
  119. package/themes/_TEMPLATE.json +3 -0
  120. package/themes/biker.json +3 -0
  121. package/themes/commentator.json +3 -0
  122. package/themes/cyberpunk.json +3 -0
  123. package/themes/gamer.json +3 -0
  124. package/themes/imperial.json +3 -0
  125. package/themes/joker.json +3 -0
  126. package/themes/marvin.json +3 -0
  127. package/themes/mean.json +3 -0
  128. package/themes/military.json +3 -0
  129. package/themes/neutral.json +3 -0
  130. package/themes/pirate.json +3 -0
  131. package/themes/sports.json +3 -0
  132. package/themes/verstappen.json +3 -0
  133. package/themes/wizard.json +3 -0
  134. package/web/dist/assets/Activity-GaaZWXTY.js +1 -0
  135. package/web/dist/assets/ActivityDetail-4t7d45Du.js +1 -0
  136. package/web/dist/assets/Dashboard-CYn7Tp16.js +2 -0
  137. package/web/dist/assets/Docs-BeFKLg2T.js +5 -0
  138. package/web/dist/assets/{GreenhouseView-D0cbCJ5m.js → GreenhouseView-C6ibc8IE.js} +1 -1
  139. package/web/dist/assets/Installs-DRYjYnxs.js +2 -0
  140. package/web/dist/assets/JournalView-1HbU1mfg.js +1 -0
  141. package/web/dist/assets/Laws-DFoG8JWB.js +3 -0
  142. package/web/dist/assets/Library-DDjgNwz_.js +1 -0
  143. package/web/dist/assets/Loops-D9VEoO0F.js +1 -0
  144. package/web/dist/assets/{Markdown-CkFyfgNf.js → Markdown-qjM2_ofS.js} +5 -5
  145. package/web/dist/assets/{OperatorHudView-CiAkAkQL.js → OperatorHudView-Bs7paWmh.js} +1 -1
  146. package/web/dist/assets/Personal-BY5n4gTw.js +1 -0
  147. package/web/dist/assets/Tabs-ho-EYD8i.js +1 -0
  148. package/web/dist/assets/api-CyMRbU2x.js +1 -0
  149. package/web/dist/assets/drawable-CLS9drMb.js +1 -0
  150. package/web/dist/assets/index-CX_hXMi5.css +1 -0
  151. package/web/dist/assets/index-Cjr7XCA3.js +2 -0
  152. package/web/dist/index.html +3 -2
  153. package/QUICKSTART.md +0 -50
  154. package/SETUP.md +0 -1148
  155. package/docs/web/_groups.json +0 -45
  156. package/docs/web/about.md +0 -6
  157. package/docs/web/adapters-claude-code.md +0 -8
  158. package/docs/web/adapters-opencode-loads.md +0 -8
  159. package/docs/web/adapters-opencode-spec.md +0 -8
  160. package/docs/web/adapters-opencode.md +0 -8
  161. package/docs/web/agents.md +0 -8
  162. package/docs/web/authoring.md +0 -11
  163. package/docs/web/autostart.md +0 -9
  164. package/docs/web/claude-hooks.md +0 -37
  165. package/docs/web/cli.md +0 -6
  166. package/docs/web/collaboration.md +0 -27
  167. package/docs/web/configure-wiki.md +0 -9
  168. package/docs/web/design.md +0 -7
  169. package/docs/web/env-knobs.md +0 -9
  170. package/docs/web/exclusions.md +0 -26
  171. package/docs/web/first-session.md +0 -28
  172. package/docs/web/footprint.md +0 -38
  173. package/docs/web/foreman-mode.md +0 -33
  174. package/docs/web/glossary.md +0 -6
  175. package/docs/web/harnesses.md +0 -30
  176. package/docs/web/headless.md +0 -9
  177. package/docs/web/ingest-docs.md +0 -9
  178. package/docs/web/install-paths.md +0 -9
  179. package/docs/web/install-quick.md +0 -35
  180. package/docs/web/lsp-overview.md +0 -37
  181. package/docs/web/mcp-claude-code.md +0 -10
  182. package/docs/web/mcp-filesystem.md +0 -9
  183. package/docs/web/mcp-gitlab.md +0 -9
  184. package/docs/web/mcp-markitdown.md +0 -9
  185. package/docs/web/mcp-overview.md +0 -34
  186. package/docs/web/mcp-trouble.md +0 -9
  187. package/docs/web/mcp-verify.md +0 -9
  188. package/docs/web/migrate.md +0 -39
  189. package/docs/web/model.md +0 -20
  190. package/docs/web/pipelines.md +0 -24
  191. package/docs/web/plugin-activity.md +0 -23
  192. package/docs/web/plugin-context.md +0 -26
  193. package/docs/web/plugin-guard.md +0 -24
  194. package/docs/web/plugin-learn.md +0 -27
  195. package/docs/web/plugin-notify.md +0 -24
  196. package/docs/web/plugin-ponytail.md +0 -23
  197. package/docs/web/plugin-setup.md +0 -7
  198. package/docs/web/plugin-workflow.md +0 -25
  199. package/docs/web/plugins.md +0 -17
  200. package/docs/web/project-context.md +0 -9
  201. package/docs/web/rules.md +0 -30
  202. package/docs/web/run-anywhere.md +0 -9
  203. package/docs/web/self-improve.md +0 -8
  204. package/docs/web/setup-choices.md +0 -64
  205. package/docs/web/skills.md +0 -8
  206. package/docs/web/themes-author.md +0 -20
  207. package/docs/web/themes.md +0 -9
  208. package/docs/web/token-footprint.md +0 -7
  209. package/docs/web/trouble.md +0 -38
  210. package/docs/web/upgrade.md +0 -9
  211. package/docs/web/verify.md +0 -30
  212. package/docs/web/wiki.md +0 -7
  213. package/docs/web/worktree.md +0 -10
  214. package/docs/wiki.md +0 -43
  215. package/web/dist/assets/Activity-BjVp522q.js +0 -1
  216. package/web/dist/assets/ActivityDetail-8ep1bspW.js +0 -1
  217. package/web/dist/assets/Dashboard-OkC_PCH6.js +0 -2
  218. package/web/dist/assets/Docs-CKPWz00o.js +0 -2
  219. package/web/dist/assets/Installs-BtGGdoTt.js +0 -2
  220. package/web/dist/assets/JournalView-Ckl4dmzR.js +0 -1
  221. package/web/dist/assets/Laws-CLpdRRk8.js +0 -3
  222. package/web/dist/assets/Library-wPPuKQrI.js +0 -1
  223. package/web/dist/assets/Personal-D8CnDo9v.js +0 -1
  224. package/web/dist/assets/Tabs-B4HNrrCs.js +0 -1
  225. package/web/dist/assets/drawable-BiwaOo6x.js +0 -1
  226. package/web/dist/assets/index-C1yil5j1.js +0 -2
  227. package/web/dist/assets/index-CDPDk2vj.css +0 -1
@@ -1,45 +0,0 @@
1
- [
2
- {
3
- "id": "start",
4
- "label": "Get started"
5
- },
6
- {
7
- "id": "concepts",
8
- "label": "Core concepts"
9
- },
10
- {
11
- "id": "howto",
12
- "label": "How-to"
13
- },
14
- {
15
- "id": "mcp",
16
- "label": "MCP servers"
17
- },
18
- {
19
- "id": "lsp",
20
- "label": "Language servers",
21
- "harness": "opencode"
22
- },
23
- {
24
- "id": "plugins",
25
- "label": "Plugins",
26
- "harness": "opencode"
27
- },
28
- {
29
- "id": "hooks",
30
- "label": "Hooks",
31
- "harness": "claude"
32
- },
33
- {
34
- "id": "reference",
35
- "label": "Reference"
36
- },
37
- {
38
- "id": "extend",
39
- "label": "Extend"
40
- },
41
- {
42
- "id": "deeper",
43
- "label": "Deeper"
44
- }
45
- ]
package/docs/web/about.md DELETED
@@ -1,6 +0,0 @@
1
- ---
2
- group: deeper
3
- order: 6
4
- title: "About — version, license, links"
5
- kind: "about"
6
- ---
@@ -1,8 +0,0 @@
1
- ---
2
- group: deeper
3
- order: 4
4
- title: "Claude Code adapter"
5
- kind: "markdown"
6
- harness: "claude"
7
- source: "adapters/claude-code/README.md"
8
- ---
@@ -1,8 +0,0 @@
1
- ---
2
- group: deeper
3
- order: 3
4
- title: "OpenCode — how it loads"
5
- kind: "markdown"
6
- harness: "opencode"
7
- source: "adapters/opencode/HOW-OPENCODE-LOADS.md"
8
- ---
@@ -1,8 +0,0 @@
1
- ---
2
- group: deeper
3
- order: 2
4
- title: "OpenCode — global harness spec"
5
- kind: "markdown"
6
- harness: "opencode"
7
- source: "adapters/opencode/GLOBAL-HARNESS-SPEC.md"
8
- ---
@@ -1,8 +0,0 @@
1
- ---
2
- group: deeper
3
- order: 1
4
- title: "OpenCode adapter"
5
- kind: "markdown"
6
- harness: "opencode"
7
- source: "adapters/opencode/README.md"
8
- ---
@@ -1,8 +0,0 @@
1
- ---
2
- group: concepts
3
- order: 2
4
- title: "Agents"
5
- kind: "concept"
6
- link: {"hash": "#/section/agents", "label": "Browse the catalog →"}
7
- ---
8
- {N_AGENTS} capability specialists — `reviewer`, `tester`, `architect`, `developer`, `docs`, `security`, `explorer`, `researcher`, plus a debate **council** the [[council]] skill convenes (`advocate`, `skeptic`, `pragmatist`, `steward`, `visionary`, `user-advocate`, `framer`, `empiricist`, `operator`, `historian`). You delegate by capability, not by folder: the harness picks the right specialist from the request.
@@ -1,11 +0,0 @@
1
- ---
2
- group: extend
3
- order: 0
4
- title: "Edit the source"
5
- kind: "concept"
6
- ---
7
- Everything theme-independent lives under `src/` — the constitution (`ontology/`, `laws/`, `doctrines/`), the `postures/` and `modes/` registers, agents, skills, memory and notebook conventions, and the `AGENT.md.tmpl` entrypoint. Voice tokens live under `themes/` as one JSON file per theme. After editing, `geneseed build --emit opencode-global` (or `geneseed update`) re-renders the deployed bundle. The `doctor` action verifies the result: unresolved theme tokens, dead links, hermetic escapes, theme-key parity, and that the committed bundle matches a fresh render.
8
-
9
- Each agent and skill also carries a lifecycle status — `experimental`, `approved` or `deprecated` — recorded in `registry.json` at the repo root alongside its version, owner and add-date. The file is maintainer-side: it is never rendered into a bundle, so a status costs no session context. Adding a spec means adding its row; `doctor` fails on a spec with no row and on a row with no spec, and the catalog badges anything that is not `approved`. The same pass refuses to let a credential ship, and holds every vendored skill folder to an immutable upstream commit rather than a moving branch.
10
-
11
- A skill you wrote yourself and dropped into the install has no row and never will — the registry describes what Geneseed ships. Those read **personal** and gather under their own class in the Skills ledger, apart from the six-class taxonomy they were never given a place in. A badge reading **no status** means something else entirely: `registry.json` could not be read at all, so nothing is known about anything — run `doctor`.
@@ -1,9 +0,0 @@
1
- ---
2
- group: start
3
- order: 5
4
- title: "Start the web UI at login"
5
- kind: "markdown"
6
- anchor: "start-the-web-ui-at-login"
7
- source: "SETUP.md"
8
- slice: true
9
- ---
@@ -1,37 +0,0 @@
1
- ---
2
- group: hooks
3
- order: 0
4
- title: "How Geneseed binds to Claude Code"
5
- kind: "concept"
6
- ---
7
- Claude Code has no `instructions` array and no JS plugin dir — the harness reaches it through **`settings.json` hooks** instead: the same capabilities the OpenCode plugins provide, each driven by a `geneseed-hook` subcommand. `CLAUDE.md` itself auto-loads by location, so it needs no hook at all.
8
-
9
- ### The hooks
10
-
11
- - **Context injection** — `SessionStart` (startup, clear, resume) runs `geneseed-hook context`: auto-discovers the repo's docs by convention and injects them before your first turn, plus your machine wiki. It honours the same `GENESEED_CONTEXT` manifest as the OpenCode context plugin.
12
- - **Git gate** — `PreToolUse` on Bash runs `geneseed-hook git-gate`: a `git commit` or `git push` anywhere in the command line — a compound one-liner and a `-C <path>` form included — asks first, at the tool boundary and before the shell runs it (**Doctrine process 5**). It is the one hook that rides a doctrine pack: an install built without **process** never gets this group, because a boundary that keeps asking for a rule the install did not adopt is a gate arguing with its own harness.
13
- - **Rule gate** — `PreToolUse` on the write tools runs `geneseed-hook rule-gate`: a write to `user-rules.md` or to a memory file asks first, because whether something you want kept is a standing rule or a durable fact is *your* call, settled through the [rule skill](#/docs/skills) (**Doctrine process 1**). Ordinary edits are untouched.
14
- - **Tool gate** — `geneseed-hook tool-gate` is the git gate and the rule gate fused behind one command, for hosts whose hook config has no per-tool matcher (Bob). Claude Code matches per tool, so its `settings.json` wires the two gates above instead.
15
- - **Learn** — `Stop` and `SubagentStop` run `geneseed-hook learn`: distils durable memories into the install's `memory/` store at session end; a subagent's stop routes to the per-agent lesson path (`memory/agents/<name>.md`).
16
-
17
- ### Where they live
18
-
19
- The emit merges the hook groups surgically into your `settings.json` (global `~/.claude/settings.json`, or the project's), preserving every other key and any hooks of your own. The install manifest records exactly which groups Geneseed owns, so an upgrade replaces and an uninstall removes precisely those — never yours.
20
-
21
- ### The hook shim
22
-
23
- Hooks run with the project as their working directory, so every command has to be an absolute path. Rather than write the interpreter and this checkout into your `settings.json`, the emit points every hook at one stable file — the **hook shim**, at `~/.geneseed/bin/geneseed-hook` (`geneseed-hook.cmd` on Windows). The shim holds the two volatile paths; the config holds none.
24
-
25
- That indirection is what lets the checkout move. Before it, relocating or replacing the clone silently broke the gates in every install at once, and the only repair was re-emitting every config. Now a single build rewrites the shim and every install is live again. The shim is refreshed on **every** emit, so an ordinary `geneseed build` is the repair; `geneseed doctor` reports it if it was ever stale.
26
-
27
- Set `GENESEED_HOME` to keep the shim somewhere other than `~/.geneseed`.
28
-
29
- The shim prints nothing of its own, deliberately: the gates return success on every path and signal their verdict as JSON on **stdout**, so a single stray byte from the shim would corrupt that verdict and turn a blocking gate into a silently permissive one.
30
-
31
- ### Verify
32
-
33
- Open Claude Code in any repo: the first reply opens with the readiness sigil and your project's docs are already in context. End a session and check the install's `memory/` dir for distilled files.
34
-
35
- ---
36
-
37
- **Deeper:** [Claude Code adapter](#/docs/adapters-claude-code)
package/docs/web/cli.md DELETED
@@ -1,6 +0,0 @@
1
- ---
2
- group: reference
3
- order: 0
4
- title: "CLI — every subcommand"
5
- kind: "cli"
6
- ---
@@ -1,27 +0,0 @@
1
- ---
2
- group: concepts
3
- order: 11
4
- title: "The collaboration layer"
5
- kind: "concept"
6
- ---
7
- Beside the [constitution](#/docs/rules), a handful of mechanisms shape *how* the agent works with you — the two registers, the mutual contract, how memory binds, and who you are. All of them are plain content in `AGENT.md` and its neighbours, so they ride to every host (OpenCode, Claude, Bob, OpenClaude) unchanged.
8
-
9
- ### Postures — the register
10
-
11
- A **posture** is the relationship register the agent works in, chosen by *you* at setup and fixed at build time so it holds steady instead of drifting back toward plain execution mid-session. Five ship: **peer** (default — a candid equal), **mentor** (explains the why), **expert** (maximum density), **assistant** (precise, low-initiative), **artisan** (peer with toolsmith reflexes). Posture is orthogonal to theme: theme is the *voice*, posture is the *relationship*. Change it in the setup wizard, from the **Harnesses** page here (the per-install posture dropdown, next to voice and footprint), or with `geneseed-build --posture <name>`. A rebuild or re-theme preserves it.
12
-
13
- ### Modes — how work executes
14
-
15
- A **mode** is the session's operating register — *how* work gets executed, as opposed to posture's *relationship* register. Two ship: **direct** (default — the agent works every task itself, turn by turn) and **foreman** (the session triages incoming tasks: trivial ones get a direct answer, substantial ones spawn an isolated pipeline — a crew of an analyst, a developer, and a tester, plus whatever specialists the task needs — that reports back and merges only once its own tests and lint pass, while the session keeps answering you). Expect foreman mode to cost more per substantial task, in exchange for a session that never blocks on one. Change it in the setup wizard, from the **Harnesses** page here (the per-install mode dropdown, next to posture), or with `geneseed-build --mode <name>`; switch back any time with `--mode direct`. A rebuild or re-theme preserves it. See [Foreman mode](#/docs/foreman-mode) and [agent pipelines](#/docs/pipelines) for the dedicated pages.
16
-
17
- ### The Pact — a two-way contract
18
-
19
- Where the Rules bind the agent, the **Pact** binds the collaboration — and it is not a layer beside them: it is stated inside **Telos**, the first Ethos section, the tier that is always in force, so it holds in every task and every repository. It carries three ranked laws — protect the user, the code's future maintainer included; serve their intent; keep the agent's own honesty — each yielding only to the one above, and — unusually — names what *you* owe back: don't punish candour that honours the pact, give context up front, decide when shown a fork. Your half is not enforceable against you; the agent's half is binding on it.
20
-
21
- ### Typed memory — binding force
22
-
23
- A memory may carry an optional `force` — **constraint** (imposed, not the agent's to relax), **choice** (revisable with consent), **conviction** (revisable on evidence), or **tempered** (a relaxed constraint). When new evidence contradicts a forced memory, the Bridge rule requires revising it in the open rather than dropping it silently.
24
-
25
- ### Your profile — identity
26
-
27
- `PROFILE.md`, seeded once beside `AGENT.md` and never overwritten, holds *who you are*: role, habits, register preferences. It is identity, not rules — it colours how the agent works but never binds (precedence is the Ethos and the Rules, then `user-rules.md`, then the active Doctrines, then the profile). Edit it here under the **Profile** tab, or in the file directly — or let the agent draft it: the [[profile]] skill interviews you (who you are, how you work, how you like answers pitched) and writes the file only with your consent, routing anything that is really a standing rule to `user-rules.md` instead.
@@ -1,9 +0,0 @@
1
- ---
2
- group: howto
3
- order: 1
4
- title: "Configure a wiki (knowledge base)"
5
- kind: "markdown"
6
- anchor: "wiki-your-own-knowledge-base-optional"
7
- source: "SETUP.md"
8
- slice: true
9
- ---
@@ -1,7 +0,0 @@
1
- ---
2
- group: deeper
3
- order: 0
4
- title: "DESIGN.md — the spec"
5
- kind: "markdown"
6
- source: "DESIGN.md"
7
- ---
@@ -1,9 +0,0 @@
1
- ---
2
- group: reference
3
- order: 1
4
- title: "Environment variables"
5
- kind: "markdown"
6
- anchor: "environment-knobs"
7
- source: "SETUP.md"
8
- slice: true
9
- ---
@@ -1,26 +0,0 @@
1
- ---
2
- group: concepts
3
- order: 9
4
- title: "Sovereign repos (exclusions)"
5
- kind: "concept"
6
- link: {"hash": "#/harness", "label": "Manage in Harness →"}
7
- ---
8
- A **sovereign repo** is a folder where every GLOBAL harness install goes fully dormant: hooks stay silent and the global preamble (`AGENT.md`/`CLAUDE.md`) is never loaded there. A repo that ships its own agent config you don't want a global harness layered onto is the usual case.
9
-
10
- ### Total dormancy, not a filter
11
-
12
- Exclusion is all-or-nothing per folder — it doesn't trim which Rules apply or which Skills load, the global harness simply never engages inside that tree. A per-repo Geneseed install in the same folder is unaffected; exclusions only ever suppress GLOBAL installs.
13
-
14
- ### How it's wired, per host
15
-
16
- - **Claude Code** — native suppression via `claudeMdExcludes` in the repo's `.claude/settings.local.json`.
17
- - **OpenClaude** — the same `claudeMdExcludes`, in the repo's `.openclaude/settings.local.json`.
18
- - **Bob** — a shadow `rules/geneseed.md` stub that shadows the global one (never overwrites a hand-written stub already there).
19
- - **OpenCode** — the hook entry's sovereign-bypass guard and its twin in the plugins short-circuit at session start.
20
-
21
- ### Manage it
22
-
23
- - **CLI** — `harness exclude add <path>` / `remove <path>` / `list`.
24
- - **This console** — the **Excluded folders** card on the **Harnesses** page (shown once a global install exists).
25
-
26
- Exclusions live in each global install's own `excludes.json`, so add/remove re-wires every global install in one call — nothing to repeat per host.
@@ -1,28 +0,0 @@
1
- ---
2
- group: start
3
- order: 3
4
- title: "Your first session"
5
- kind: "concept"
6
- ---
7
- Once installed, the agent doesn't change *how* you talk to your tool — it changes what the tool already knows when you do.
8
-
9
- ### What loaded automatically
10
-
11
- - **`AGENT.md`** — the [constitution](#/docs/rules): the {N_ONTOLOGY} Ethos sections, {N_LAWS} always-on Rules, and the {N_DOCTRINE_RULES} doctrine rules from the packs this install built in.
12
- - **Your repo's docs** — `README.md`, `CONTRIBUTING.md`, anything under `docs/` the harness discovers.
13
- - **Your machine's wiki** (if you [set one up](#/docs/configure-wiki)) — eager entries and a lazy listing of the rest.
14
- - **The skill and agent catalogue** — invokable by name.
15
-
16
- ### Try these prompts
17
-
18
- - *"Use the **profile** skill"* — a short interview that drafts `PROFILE.md` (seeded empty at install), so the agent knows who you are and how you like answers pitched.
19
- - *"Use the **brainstorm** skill on this feature request."*
20
- - *"Delegate to the **reviewer** agent on the staged diff."*
21
- - *"Use **brainstorm** then **plan** for how to add X."*
22
- - *"Use **council** to debate whether we should ship Y now."*
23
-
24
- Skills are repeatable workflows; agents are capability specialists. You invoke them by name in plain English.
25
-
26
- ---
27
-
28
- **Catalog:** [Skills](#/section/skills) · [Agents](#/section/agents) · [Constitution](#/laws)
@@ -1,38 +0,0 @@
1
- ---
2
- group: concepts
3
- order: 8
4
- title: "Footprint (lean vs full)"
5
- kind: "concept"
6
- link: {"hash": "#/settings", "label": "Toggle it in Settings →"}
7
- ---
8
- **Footprint** controls how much of the [constitution](#/docs/rules) your agent carries *inline* in `AGENT.md` every turn. Two states — **lean** (the default) and **full** — set per install. It's a token-cost dial, not a change to which rules apply: whatever this install adopted is in force at either setting, and across lean and full the emitted files are otherwise identical — same Agents, Skills, plugins, commands, Memory, and Notebook. (The dial that *does* change which rules apply is the [doctrine packs](#/docs/setup-choices), a separate choice.)
9
-
10
- ### The difference
11
-
12
- - **Full** — `AGENT.md` inlines the Ethos, every Rule and every rule of the **active** doctrine packs, complete text and reasoning included, on every single turn.
13
- - **Lean** — each Rule and each doctrine rule is carried as its **heading + an authored short form** — the rule and its mechanism, written by hand rather than cut at the first full stop — each tier closing with a pointer to its complete text shipped beside `AGENT.md` — the agent reads the reasoning on demand when a rule's application is unclear. The Ethos is condensed the same way, as **one authored short form for the whole tier**: it is flowing prose rather than numbered blocks, so cutting it section by section would have left orphan fragments instead of a shorter argument.
14
-
15
- ### What ships on disk either way
16
-
17
- Neither setting hides text from the agent; they hide it from *every turn*.
18
-
19
- - **Lean** writes `laws/`, `ontology/` and `doctrines/` in full text into the install, beside `AGENT.md`, because the inline copy has lost text the agent may still need.
20
- - **Full** writes `doctrines/` for the mirror-image reason: full inlines only the packs this install built in, so the ones it left out have to be on disk for a citation into them to resolve, and for you to read before turning one on.
21
-
22
- ### Which to choose
23
-
24
- - Keep **lean** — the default — on long sessions, large repos, or cost-sensitive runs, trusting the agent to pull the complete text when it needs the *why*. Lean is **safe**: that text still ships, and the harness explicitly points the agent there before acting on secrets, deletion, git history, scope, or untrusted content. It's an optimization, not a rules cut.
25
- - Switch to **full** if token cost is a non-issue, you want the reasoning always present, or you run a smaller/cheaper model — with the *why* eagerly in context, a model applies a rule's nuance more reliably.
26
-
27
- ### How to set it
28
-
29
- It's set-and-forget — stored in the `.geneseed-footprint` marker, preserved across every rebuild, identical on every host (OpenCode, Claude Code, Bob, OpenClaude). Changing it re-emits the install.
30
-
31
- - **Settings** — the **Footprint** toggle flips the current install (full ⇄ lean) and rebuilds it in place.
32
- - **Harness tab** — on an active install, a per-harness dropdown sets it for that install independently, then **Apply**. On a host that is not installed yet, it is step 2 of **Install…**.
33
- - **Setup / re-theme wizard** — asks for footprint alongside voice, posture, mode, and doctrine packs.
34
- - **CLI** — `geneseed-build --footprint lean` (with any `--emit`).
35
-
36
- ---
37
-
38
- **Related:** [The constitution](#/docs/rules) · [Voice vs structure](#/docs/themes) · [Token footprint — the numbers](#/docs/token-footprint)
@@ -1,33 +0,0 @@
1
- ---
2
- group: concepts
3
- order: 12
4
- title: "Foreman mode"
5
- kind: "concept"
6
- link: {"hash": "#/harness", "label": "Set the mode in Harness →"}
7
- ---
8
- **Mode** is the session's *operating* register — how work gets executed — one of four build-time dials, beside posture (the *relationship* register), [doctrine packs](#/docs/setup-choices) (which practice rules bind) and footprint (how much of the constitution loads inline). Two modes ship, set at build time so the choice holds steady instead of drifting mid-session, and preserved across every rebuild and re-theme.
9
-
10
- ### direct — the default
11
-
12
- The agent works every task itself, turn by turn — exactly as it does without the dial. Nothing spawns; you talk to one agent from start to finish. Keep it unless you specifically want the session managing work for you.
13
-
14
- ### foreman — a session that triages
15
-
16
- The session becomes a triage layer instead of a single worker. It sorts each incoming request:
17
-
18
- - **Trivial** — answered directly, in-line, just like direct mode.
19
- - **Substantial** — handed to an isolated [agent pipeline](#/docs/pipelines): a crew that runs on its own, reports back, and merges only once its own tests and lint pass.
20
-
21
- Because the crew runs apart from the conversation, the session stays responsive — you keep talking to the foreman while the work proceeds. Expect foreman to cost more per substantial task (a crew runs instead of one agent), in exchange for a session that never blocks on a long job.
22
-
23
- ### How to set it
24
-
25
- Set-and-forget, stored beside the install and preserved across rebuilds and re-themes:
26
-
27
- - **Harness tab** — on an active install, the per-install **Mode** dropdown (beside Voice, Footprint, and Posture), then **Apply**. On a host that is not installed yet, the same four choices are steps inside **Install…**.
28
- - **Setup / re-theme wizard** — asks for mode alongside voice, posture, doctrine packs, and footprint.
29
- - **CLI** — `geneseed-build --mode foreman`; switch back with `--mode direct`.
30
-
31
- ---
32
-
33
- **Related:** [Agent pipelines](#/docs/pipelines) · [The collaboration layer](#/docs/collaboration)
@@ -1,6 +0,0 @@
1
- ---
2
- group: reference
3
- order: 2
4
- title: "Glossary (in your deployed voice)"
5
- kind: "glossary"
6
- ---
@@ -1,30 +0,0 @@
1
- ---
2
- group: start
3
- order: 4
4
- title: "Supported harnesses"
5
- kind: "concept"
6
- ---
7
- One source, **five emit targets** — each with a per-repo and a global (`-global`) variant, plus a portable `files` bundle any `AGENT.md`-aware tool can read. **OpenCode** runs its own engine (JS plugins, colour themes, LSP); **Claude Code**, **Bob**, and **OpenClaude** share one Claude-shaped engine that diverges only by host dialect.
8
-
9
- The harness *content* — the constitution (Ethos, Rules, Doctrines), Agents, Skills, Memory, and the preamble voice — is **identical on every host**: one build renders the same text for all five targets. What differs is how much of it the host can *automate* (via plugins or hooks) versus carry as preamble discipline.
10
-
11
- | Capability | OpenCode | Claude | Bob | OpenClaude |
12
- | --- | :---: | :---: | :---: | :---: |
13
- | Agents · Skills · Memory | ✅ | ✅ | ✅ | ✅ |
14
- | Context injection | ⚙️ plugin | 🪝 hook | 🪝 hook¹ | 🪝 hook² |
15
- | Memory write-back (learn) | ⚙️ plugin | 🪝 hook | 🪝 hook¹ | 🪝 hook² |
16
- | Git-gate consent (Consent Before Push) | ⚙️ plugin | 🪝 hook | 🪝 hook¹ | 🪝 hook² |
17
- | Sovereign-repo excludes | ⚙️ plugin | ✅ | ✅ | ✅ |
18
- | MCP server wiring | ✅ | ✅ | ✅ | ✅ |
19
- | Colour themes | ✅ | ➖ | ➖ | ➖ |
20
- | LSP · workflows · primary-agent · `/`-commands | ✅ | ➖ | ➖ | ➖ |
21
-
22
- ✅ native · ⚙️ OpenCode plugin · 🪝 `settings.json` hook · 📄 preamble prose only · ➖ no host mechanism (harness discipline still applies). ¹ Bob honours Claude-dialect hooks best-effort — inert if unsupported, harness still holds via the preamble. ² OpenClaude is a Claude Code fork: Claude's hooks verbatim, under `~/.openclaude` or a repo's `.openclaude/`.
23
-
24
- **The git-gate row is the one capability that is not always present**, on any host. It implements **Consent Before Push** (`process 5`), so it is wired only on an install that built the **process** [doctrine pack](#/docs/setup-choices) in — drop that pack and the boundary drops with it, because a gate that keeps asking for a rule the install never adopted is a gate arguing with its own harness. One asymmetry: on OpenCode that holds for a *fresh* install, but a pack-off rebuild of an install whose `opencode.json` already carries a `git commit*` entry leaves it in place and reports it — Geneseed cannot tell its own entry from one you typed, so it removes neither ([doctrine packs](#/docs/setup-choices)). The invariant-territory refusals in the same neighbourhood (`rm -rf`, a force-push) are the Rules' territory, not the pack's, and stay in every build.
25
-
26
- **No host drops an Agent, Skill, or the memory convention.** The asymmetry is otherwise entirely in *automation mechanism*: OpenCode's plugins and Claude/Bob/OpenClaude's hooks enforce a few of these rules for you at the tool boundary; what no host can automate rides the preamble. The OpenCode-only extras (themes, LSP, workflow runner, primary-agent) have no analogue on a Claude-shaped host.
27
-
28
- ---
29
-
30
- **Deeper:** [The harness model](#/docs/model) · [Footprint per host](#/docs/footprint)
@@ -1,9 +0,0 @@
1
- ---
2
- group: howto
3
- order: 6
4
- title: "Run in CI / headless"
5
- kind: "markdown"
6
- anchor: "headless-ci-opencode"
7
- source: "SETUP.md"
8
- slice: true
9
- ---
@@ -1,9 +0,0 @@
1
- ---
2
- group: howto
3
- order: 3
4
- title: "Read PDFs / Office docs"
5
- kind: "markdown"
6
- anchor: "reading-non-markdown-docs"
7
- source: "SETUP.md"
8
- slice: true
9
- ---
@@ -1,9 +0,0 @@
1
- ---
2
- group: howto
3
- order: 0
4
- title: "Choose your install path"
5
- kind: "markdown"
6
- anchor: "choose-your-path"
7
- source: "SETUP.md"
8
- slice: true
9
- ---
@@ -1,35 +0,0 @@
1
- ---
2
- group: start
3
- order: 0
4
- title: "Install in 5 minutes"
5
- kind: "concept"
6
- ---
7
- Two steps. The only prerequisite is **Node ≥ 22.3** — Geneseed ships as an npm package with zero dependencies.
8
-
9
- ### 1. Run the setup wizard
10
-
11
- ```
12
- npx geneseed setup
13
- ```
14
-
15
- The same command on macOS, Linux and Windows (cmd, PowerShell, or any POSIX shell). The wizard asks for a theme and an install mode (OpenCode global is recommended — one install, every repo inherits it), then builds and offers a health check.
16
-
17
- To keep the command around: `npm install -g geneseed`, then plain `geneseed …` from any directory.
18
-
19
- ### 2. Open your agent
20
-
21
- Open OpenCode (or Claude Code, Bob, OpenClaude, or any `AGENT.md`-aware tool) in any repo. The first reply opens with the readiness sigil (`✅` neutral / `🧬` imperial / your theme's equivalent) and your project's docs are already in context.
22
-
23
- ### Prefer a clone?
24
-
25
- ```
26
- git clone https://github.com/Arylmera/Geneseed.git
27
- cd Geneseed
28
- ./geneseed setup # Windows: .\geneseed.cmd setup
29
- ```
30
-
31
- A checkout needs **git** and the same **Node ≥ 22.3** as everything else — there is nothing extra to install — and is what you want if you intend to change the harness rather than use it. Already installed this way? [Migrate to npx](#/docs/migrate) moves every install across in one pass.
32
-
33
- ---
34
-
35
- **Next:** [Posture, doctrines & footprint](#/docs/setup-choices) · [Verify it works](#/docs/verify) · [What you just installed](#/docs/model) · [Install by hand instead](#/docs/install-paths)
@@ -1,37 +0,0 @@
1
- ---
2
- group: lsp
3
- order: 0
4
- title: "Code intelligence (LSP)"
5
- kind: "concept"
6
- link: {"hash": "#/docs/adapters-opencode", "label": "OpenCode adapter →"}
7
- ---
8
- OpenCode can drive Language Server Protocol servers so the agent sees real diagnostics, type errors, and go-to-definition — not just text. Geneseed turns this on for every language OpenCode ships a server for.
9
-
10
- ### What's covered out of the box
11
-
12
- | Language | Server | You install? |
13
- |---|---|---|
14
- | JavaScript / TypeScript / React / React Native | typescript-language-server | No — OpenCode self-downloads |
15
- | Python | pyright | No — OpenCode self-downloads |
16
- | Java | jdtls | **JDK 21+** (OpenCode downloads jdtls itself) |
17
- | SQL / PostgreSQL / Oracle | *none — by design* | — |
18
-
19
- One server covers JavaScript, TypeScript, React, and React Native — they are all TS/JS, so no extra server is needed.
20
-
21
- ### The one prerequisite the harness can't self-install
22
-
23
- OpenCode downloads the JS-runtime servers automatically on first use. It cannot install a JVM, and jdtls needs one — so the setup wizard checks for it and prints an install hint if missing:
24
-
25
- - **Java 21+** — `brew install openjdk@21`, SDKMAN `sdk install java 21-tem`, or your distro's JDK.
26
-
27
- ### Why no SQL server
28
-
29
- A SQL language server is dialect-locked — a Postgres server flags Oracle SQL as errors and vice versa — and a `.sql` file can map to only one server, with no signal for which dialect a repo uses. Rather than guess wrong for half of all SQL codebases, we ship none. A project that knows its dialect can add the matching server in its own `opencode.json` under the `lsp` key.
30
-
31
- ### How it's wired
32
-
33
- `"lsp": true` in your emitted `opencode.json` enables every built-in server (LSP is off by default). To turn auto-download off (air-gapped machines), set `OPENCODE_DISABLE_LSP_DOWNLOAD=true` and pre-install each server.
34
-
35
- ---
36
-
37
- **Verify:** open a `.ts` and a `.py` file in a session and ask the agent for diagnostics — the first open triggers the download.
@@ -1,10 +0,0 @@
1
- ---
2
- group: mcp
3
- order: 4
4
- title: "Claude Code"
5
- kind: "markdown"
6
- harness: "claude"
7
- anchor: "claude-code"
8
- source: "SETUP.md"
9
- slice: true
10
- ---
@@ -1,9 +0,0 @@
1
- ---
2
- group: mcp
3
- order: 3
4
- title: "Filesystem"
5
- kind: "markdown"
6
- anchor: "filesystem"
7
- source: "SETUP.md"
8
- slice: true
9
- ---
@@ -1,9 +0,0 @@
1
- ---
2
- group: mcp
3
- order: 2
4
- title: "GitLab"
5
- kind: "markdown"
6
- anchor: "gitlab-one-entry-per-instance"
7
- source: "SETUP.md"
8
- slice: true
9
- ---
@@ -1,9 +0,0 @@
1
- ---
2
- group: mcp
3
- order: 1
4
- title: "MarkItDown (PDF/Office)"
5
- kind: "markdown"
6
- anchor: "markitdown-via-mcp"
7
- source: "SETUP.md"
8
- slice: true
9
- ---
@@ -1,34 +0,0 @@
1
- ---
2
- group: mcp
3
- order: 0
4
- title: "MCP overview"
5
- kind: "concept"
6
- ---
7
- The Harness ships **three** ready-to-wire MCP servers as presets — **MarkItDown** (PDF/Office → Markdown), **GitLab** (shipped as two entries, one per instance), and **Filesystem** (scoped file access) — four config entries in all. Each is a *local* server the agent launches on demand: registering one only points the agent at a command — *you* install the tool (or let `npx`/`pipx` fetch it) and supply any credentials.
8
-
9
- ### Where they live
10
-
11
- <!--harness:opencode-->
12
- They sit under the `mcp` key of an `opencode.json` (global `~/.config/opencode/opencode.json` or per-repo), each entry shaped:
13
-
14
- ```json
15
- "<name>": { "type": "local", "command": ["…"], "environment": {}, "enabled": true }
16
- ```
17
- <!--/harness-->
18
- <!--harness:claude-->
19
- They live in `.mcp.json` under `mcpServers` — note the key is `env` (not `environment`) and the command and its args are split into `command` + `args`. See [Claude Code wiring](#/docs/mcp-claude-code).
20
- <!--/harness-->
21
-
22
- <!--harness:opencode-->
23
- ### Toggle them without hand-editing JSON
24
-
25
- `./geneseed` → **Settings** → **MCP servers** toggles any of the presets into your project or global `opencode.json` — and enables, disables, or removes them — for you. The reference config ships MarkItDown enabled and the GitLab / Filesystem entries disabled, so a merge never activates a credential-less server: fill the blanks, then flip the one(s) you want on.
26
- <!--/harness-->
27
-
28
- > **Never commit a real token.** The presets ship with **empty** `GITLAB_PERSONAL_ACCESS_TOKEN` placeholders (and a sample filesystem path) — fill them in your own config, never in a tracked file (universal Law I — secrets).
29
-
30
- ---
31
-
32
- **Wire one up:** [MarkItDown](#/docs/mcp-markitdown) · [GitLab](#/docs/mcp-gitlab) · [Filesystem](#/docs/mcp-filesystem) · [Verify](#/docs/mcp-verify) · [Won't connect?](#/docs/mcp-trouble)
33
-
34
- > **Listed ≠ working.** A `local` server is just a command the agent runs — it appears in the list whether or not that command actually launches. The usual cause of "shown but not working" is the command not being on PATH (e.g. `markitdown-mcp` with no `uvx`/pipx install) or a filesystem entry left on its placeholder path. [Walk the fixes →](#/docs/mcp-trouble)
@@ -1,9 +0,0 @@
1
- ---
2
- group: mcp
3
- order: 6
4
- title: "Won't connect?"
5
- kind: "markdown"
6
- anchor: "mcp-server-wont-connect"
7
- source: "SETUP.md"
8
- slice: true
9
- ---
@@ -1,9 +0,0 @@
1
- ---
2
- group: mcp
3
- order: 5
4
- title: "Verify"
5
- kind: "markdown"
6
- anchor: "verify"
7
- source: "SETUP.md"
8
- slice: true
9
- ---