geneseed 3.12.0 → 3.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (218) hide show
  1. package/CHANGELOG.md +121 -0
  2. package/README.md +2 -2
  3. package/SHIPPED.md +1 -1
  4. package/adapters/bob/README.md +1 -1
  5. package/adapters/claude-code/README.md +1 -1
  6. package/adapters/openclaude/README.md +1 -1
  7. package/adapters/opencode/README.md +3 -3
  8. package/docs/README.md +41 -22
  9. package/docs/concepts/agents.md +3 -1
  10. package/docs/concepts/collaboration.md +3 -1
  11. package/docs/concepts/exclusions.md +4 -2
  12. package/docs/concepts/footprint.md +3 -1
  13. package/docs/concepts/foreman-mode.md +3 -1
  14. package/docs/concepts/hook-gates.md +61 -0
  15. package/docs/concepts/hooks.md +8 -56
  16. package/docs/concepts/host-matrix.md +38 -0
  17. package/docs/concepts/hosts.md +6 -32
  18. package/docs/concepts/loop-branch.md +66 -0
  19. package/docs/concepts/loop-bricks.md +48 -0
  20. package/docs/concepts/loop-contracts.md +33 -0
  21. package/docs/concepts/loop-gates.md +30 -0
  22. package/docs/concepts/loop-notes.md +43 -0
  23. package/docs/concepts/loop-risk.md +36 -0
  24. package/docs/concepts/loop-templates.md +50 -0
  25. package/docs/concepts/loops.md +24 -116
  26. package/docs/concepts/lsp.md +2 -0
  27. package/docs/concepts/memory.md +3 -1
  28. package/docs/concepts/notebook.md +3 -1
  29. package/docs/concepts/rules.md +4 -2
  30. package/docs/concepts/skills.md +3 -1
  31. package/docs/concepts/themes.md +3 -1
  32. package/docs/extending.md +23 -8
  33. package/docs/guides/autostart.md +3 -1
  34. package/docs/guides/choose-your-setup.md +5 -80
  35. package/docs/guides/headless.md +5 -3
  36. package/docs/guides/install-agent-md.md +37 -0
  37. package/docs/guides/install-bob.md +20 -0
  38. package/docs/guides/install-claude-code.md +22 -0
  39. package/docs/guides/install-clone.md +34 -0
  40. package/docs/guides/install-openclaude.md +25 -0
  41. package/docs/guides/install-opencode.md +35 -0
  42. package/docs/guides/install-scripted.md +21 -0
  43. package/docs/guides/install.md +9 -118
  44. package/docs/guides/loop-finish.md +54 -0
  45. package/docs/guides/loop-running.md +66 -0
  46. package/docs/guides/loop-which-template.md +35 -0
  47. package/docs/guides/mcp-filesystem.md +41 -0
  48. package/docs/guides/mcp-gitlab.md +66 -0
  49. package/docs/guides/mcp-markitdown.md +36 -0
  50. package/docs/guides/mcp.md +8 -137
  51. package/docs/guides/migrate.md +3 -1
  52. package/docs/guides/project-context.md +4 -2
  53. package/docs/guides/read-non-markdown.md +17 -0
  54. package/docs/guides/run-a-loop.md +64 -0
  55. package/docs/guides/run-anywhere.md +2 -0
  56. package/docs/guides/setup-doctrines.md +55 -0
  57. package/docs/guides/setup-footprint.md +48 -0
  58. package/docs/guides/uninstall.md +3 -1
  59. package/docs/guides/upgrade.md +3 -1
  60. package/docs/guides/verify.md +3 -1
  61. package/docs/guides/wiki.md +3 -1
  62. package/docs/guides/worktree.md +3 -1
  63. package/docs/reference/about.md +3 -1
  64. package/docs/reference/cli.md +2 -0
  65. package/docs/reference/env-context.md +40 -0
  66. package/docs/reference/environment.md +10 -59
  67. package/docs/reference/glossary.md +3 -1
  68. package/docs/reference/loop-actions.md +20 -0
  69. package/docs/reference/opencode-plugins.md +14 -118
  70. package/docs/reference/plugin-activity.md +20 -0
  71. package/docs/reference/plugin-context.md +27 -0
  72. package/docs/reference/plugin-guard.md +27 -0
  73. package/docs/reference/plugin-learn.md +27 -0
  74. package/docs/reference/plugin-notify.md +20 -0
  75. package/docs/reference/plugin-ponytail.md +19 -0
  76. package/docs/reference/plugin-workflow.md +25 -0
  77. package/docs/reference/troubleshoot-doctor.md +50 -0
  78. package/docs/reference/troubleshoot-hooks.md +99 -0
  79. package/docs/reference/troubleshoot-install.md +108 -0
  80. package/docs/reference/troubleshoot-tools.md +56 -0
  81. package/docs/reference/troubleshoot-update.md +23 -0
  82. package/docs/reference/troubleshoot-web.md +66 -0
  83. package/docs/reference/troubleshooting.md +13 -337
  84. package/docs/understand/a-day.md +3 -1
  85. package/docs/understand/enforced-vs-asked.md +3 -1
  86. package/docs/understand/harness.md +2 -0
  87. package/docs/understand/machine-bob.md +17 -0
  88. package/docs/understand/machine-claude.md +35 -0
  89. package/docs/understand/machine-opencode.md +36 -0
  90. package/docs/understand/on-your-machine.md +12 -55
  91. package/docs/understand/take-it-out.md +13 -0
  92. package/docs/web-ui.md +35 -15
  93. package/harness.config.json +1 -1
  94. package/js/README.md +11 -3
  95. package/js/cli-table.json +27 -1
  96. package/js/hosts/mcp.mjs +1 -1
  97. package/js/hosts/native.mjs +43 -5
  98. package/js/inspect/checks-build.mjs +28 -0
  99. package/js/loop/catalog.mjs +12 -1
  100. package/js/loop/cli.mjs +28 -6
  101. package/js/loop/graph.mjs +18 -0
  102. package/js/loop/registry.mjs +196 -0
  103. package/js/loop/score.mjs +45 -6
  104. package/js/loop/state.mjs +125 -11
  105. package/js/maintain/setup.mjs +1 -1
  106. package/js/web/actions.mjs +25 -0
  107. package/js/web/api.mjs +13 -0
  108. package/js/web/docs.mjs +64 -12
  109. package/js/web/routes.mjs +5 -1
  110. package/package.json +1 -1
  111. package/src/agents/explorer.md +2 -2
  112. package/src/agents/researcher.md +3 -3
  113. package/src/bricks/README.md +3 -1
  114. package/src/bricks/adr-challenge.md +20 -0
  115. package/src/bricks/adr-draft.md +15 -0
  116. package/src/bricks/characterize.md +17 -0
  117. package/src/bricks/ci-fix.md +2 -1
  118. package/src/bricks/ci-triage.md +20 -0
  119. package/src/bricks/compat-check.md +16 -0
  120. package/src/bricks/done-check.md +16 -0
  121. package/src/bricks/fitness-define.md +22 -0
  122. package/src/bricks/flake-check.md +17 -0
  123. package/src/bricks/flake-repro.md +18 -0
  124. package/src/bricks/identify.md +6 -3
  125. package/src/bricks/migration-plan.md +21 -0
  126. package/src/bricks/mutation-check.md +18 -0
  127. package/src/bricks/plan.md +6 -6
  128. package/src/bricks/red-test.md +16 -0
  129. package/src/bricks/review.md +5 -3
  130. package/src/bricks/spec.md +18 -0
  131. package/src/bricks/upgrade-scout.md +16 -0
  132. package/src/loops/api-endpoint.json +31 -0
  133. package/src/loops/architecture-decision.json +22 -0
  134. package/src/loops/bugfix.json +1 -0
  135. package/src/loops/ci-repair.json +19 -0
  136. package/src/loops/deps-upgrade.json +29 -0
  137. package/src/loops/enforce-architecture-rule.json +28 -0
  138. package/src/loops/feature.json +8 -5
  139. package/src/loops/fix-flaky-tests.json +30 -0
  140. package/src/loops/legacy-refactor.json +26 -0
  141. package/src/loops/legacy-tests.json +29 -0
  142. package/src/loops/refactor.json +5 -1
  143. package/src/loops/remove-dead-code.json +30 -0
  144. package/src/loops/spec-first-feature.json +29 -0
  145. package/src/loops/tdd.json +25 -0
  146. package/src/loops/update-contract.json +33 -0
  147. package/src/skills/brick-forge.md +3 -1
  148. package/src/skills/bruno-collection-generator.md +3 -3
  149. package/src/skills/bruno-test-writer.md +3 -3
  150. package/src/skills/ci-fix.md +3 -3
  151. package/src/skills/consolidate-memory.md +4 -4
  152. package/src/skills/council.md +1 -1
  153. package/src/skills/fresh-eyes.md +1 -1
  154. package/src/skills/git-archaeology.md +1 -1
  155. package/src/skills/git-rescue.md +4 -3
  156. package/src/skills/handoff.md +1 -1
  157. package/src/skills/herdr.md +1 -1
  158. package/src/skills/learn-mode.md +2 -2
  159. package/src/skills/loop.md +22 -10
  160. package/src/skills/opencode-theme.md +3 -3
  161. package/src/skills/ponytail.md +1 -1
  162. package/src/skills/profile.md +3 -4
  163. package/src/skills/prose.md +2 -3
  164. package/src/skills/quiz.md +1 -1
  165. package/src/skills/react-view-transitions/SKILL.md +1 -1
  166. package/src/skills/react-view-transitions/VENDOR.md +8 -3
  167. package/src/skills/research.md +3 -3
  168. package/src/skills/review-response.md +2 -2
  169. package/src/skills/rule.md +3 -3
  170. package/src/skills/security-audit.md +4 -4
  171. package/src/skills/teach.md +1 -1
  172. package/src/skills/wiki.md +3 -3
  173. package/src/skills/workflow.md +4 -4
  174. package/src/skills/worktree.md +2 -2
  175. package/web/dist/assets/Activity-Ca2Aruu7.js +1 -0
  176. package/web/dist/assets/ActivityDetail-Bo7v4Z_r.js +1 -0
  177. package/web/dist/assets/Dashboard-BuMq46aT.js +2 -0
  178. package/web/dist/assets/Docs-BzccCllG.js +5 -0
  179. package/web/dist/assets/FilterInput-CBcJBQPI.js +1 -0
  180. package/web/dist/assets/GreenhouseView-BCIKcnGG.js +2 -0
  181. package/web/dist/assets/Installs-DMFJvq7s.js +2 -0
  182. package/web/dist/assets/JournalView-o1rmd1_1.js +1 -0
  183. package/web/dist/assets/Laws-BANxq_I_.js +3 -0
  184. package/web/dist/assets/Library-DW4x0fbh.js +1 -0
  185. package/web/dist/assets/Loops-DEBibbBP.js +2 -0
  186. package/web/dist/assets/{Markdown-qjM2_ofS.js → Markdown-CdTX0kLe.js} +14 -14
  187. package/web/dist/assets/OperatorHudView-CLD0fYaA.js +2 -0
  188. package/web/dist/assets/Personal-6uMJvyBG.js +1 -0
  189. package/web/dist/assets/Tabs-BubnyZhF.js +1 -0
  190. package/web/dist/assets/activity-CObqyxkL.js +1 -0
  191. package/web/dist/assets/{api-CyMRbU2x.js → api-D_ixdyEY.js} +1 -1
  192. package/web/dist/assets/drawable-C_x5xncq.js +1 -0
  193. package/web/dist/assets/index-CMPgezFm.js +2 -0
  194. package/web/dist/assets/index-DMsT4Aa6.css +1 -0
  195. package/web/dist/assets/{react-B9Z_tXRV.js → react-Bbzhmq4v.js} +1 -1
  196. package/web/dist/assets/rolldown-runtime-hePW80VL.js +1 -0
  197. package/web/dist/assets/sections-Dg23Hel5.js +1 -0
  198. package/web/dist/assets/usePoll-BOqeunzF.js +1 -0
  199. package/web/dist/index.html +6 -5
  200. package/web/dist/assets/Activity-GaaZWXTY.js +0 -1
  201. package/web/dist/assets/ActivityDetail-4t7d45Du.js +0 -1
  202. package/web/dist/assets/Dashboard-CYn7Tp16.js +0 -2
  203. package/web/dist/assets/Docs-BeFKLg2T.js +0 -5
  204. package/web/dist/assets/FilterInput-CVyqmYWM.js +0 -1
  205. package/web/dist/assets/GreenhouseView-C6ibc8IE.js +0 -2
  206. package/web/dist/assets/Installs-DRYjYnxs.js +0 -2
  207. package/web/dist/assets/JournalView-1HbU1mfg.js +0 -1
  208. package/web/dist/assets/Laws-DFoG8JWB.js +0 -3
  209. package/web/dist/assets/Library-DDjgNwz_.js +0 -1
  210. package/web/dist/assets/Loops-D9VEoO0F.js +0 -1
  211. package/web/dist/assets/OperatorHudView-Bs7paWmh.js +0 -2
  212. package/web/dist/assets/Personal-BY5n4gTw.js +0 -1
  213. package/web/dist/assets/Tabs-ho-EYD8i.js +0 -1
  214. package/web/dist/assets/drawable-CLS9drMb.js +0 -1
  215. package/web/dist/assets/index-CX_hXMi5.css +0 -1
  216. package/web/dist/assets/index-Cjr7XCA3.js +0 -2
  217. package/web/dist/assets/sections-GalMS0Zv.js +0 -1
  218. package/web/dist/assets/usePoll-O0sJEw1Y.js +0 -1
@@ -0,0 +1,66 @@
1
+ ---
2
+ group: guides
3
+ order: 23
4
+ title: "While a loop runs"
5
+ kind: "concept"
6
+ section: "Loops"
7
+ description: "What a running loop commits, when it stops to ask you, where to watch it, and how to stop or resume it."
8
+ ---
9
+ A loop started with [Run a loop](run-a-loop.md) works on its own `loop/<slug>` branch. This is what you see while it runs, and how to step in.
10
+
11
+ Each iteration is one commit on `loop/<slug>`, pushed as it lands. Work done before the first iteration, such as reproducing a bug, is its own commit, numbered iteration 0. Every change ends at one of three levels:
12
+
13
+ | Level | What you see |
14
+ | --- | --- |
15
+ | **silent** | Only the commit and its trailers. |
16
+ | **soft** | The commit lands, and the final report lists it under "to review". |
17
+ | **blocking** | The agent stops and asks you before anything is committed. |
18
+
19
+ ## When it asks you
20
+
21
+ The agent ends its turn and shows you what it is waiting on:
22
+
23
+ - **A blocking score**: the change it plans (before it runs) or the staged diff (after), with the reasons for the score. One file outside the declared write set, more than 20 deleted lines, or a file that matches the loop's `contracts` is enough.
24
+ - **A human gate**: some bricks always stop for you, whatever the preset. An ADR that survived its skeptic (`adr-challenge`), an architecture rule and its allowlist (`fitness-define`), a contract migration plan (`migration-plan`) and a feature spec (`spec`) are all gated.
25
+ - **Launch**, under `prudent`: the graph it is about to run.
26
+
27
+ Answer in the agent's session, in your own words:
28
+
29
+ | You say | What happens |
30
+ | --- | --- |
31
+ | ok / go ahead | It continues. On a gate held on a failure, ok follows that failure's edge, which usually stops the loop. |
32
+ | no | The loop stops at that node. |
33
+ | amend, with a note ("keep the old field until v3") | The same brick runs again with your note added to `LOOP.md`. A gate can be amended three times per iteration; a fourth amend stops the loop. |
34
+ | amend, at the `prudent` launch prompt | The loop stops ("graph to amend") with your note: nothing has run yet, so ask again for the loop you want. |
35
+
36
+ The agent passes your answer on as `geneseed loop decide --verdict ok|no|amend --note "<your words>"`. The console never answers for you.
37
+
38
+ ## Where to watch
39
+
40
+ - **Console: Loops › Active.** Every registered loop, awaiting ones first: the branch, `iteration N / max`, the current node on its ring, what an awaiting loop waits on, and the iteration history.
41
+ - **`LOOP.md`** at the worktree root: the title, the requirement, the preset, the contracts, the notes the bricks left, and the engine's state.
42
+ - **The commits.** Each one carries the iteration, the bricks it ran, its declared and actual risk, the decision and the test state:
43
+
44
+ ```bash
45
+ git log --format='%h %s%n%(trailers)' loop/<slug>
46
+ ```
47
+
48
+ While a loop runs on its `loop/*` branch, the git gate lets exactly one commit-and-push shape through without asking, the one the agent uses to close each iteration. Any other git command still asks, as usual. Bob has no ask prompt, so there the commit and push gate logs a warning instead of asking.
49
+
50
+ ## Stop, resume, and what ends a loop
51
+
52
+ - **Stop.** Interrupt the agent whenever you like. The state is `LOOP.md` plus the branch, so nothing is lost.
53
+ - **Resume.** Ask "resume the loop" in a session opened in the worktree, or run `geneseed loop next` there. The same goes after you answered a question in a new session.
54
+
55
+ A loop ends one of two ways:
56
+
57
+ | End | When |
58
+ | --- | --- |
59
+ | `$close` | The iteration head reports nothing left to do. Some templates first run an independent `done-check`. |
60
+ | `$stop` | A brick reported an outcome wired to stop (a red baseline in `baseline-green`, say), you answered no, a gate was amended a fourth time, two iterations in a row produced no diff, an inner retry ring ran out twice in one iteration, a read-only brick changed files, or the iteration ceiling was reached (the template's `max`, never above 20). |
61
+
62
+ On `$stop` the agent reports the reason and leaves the branch as it is.
63
+
64
+ ---
65
+
66
+ **Next:** [Finish a loop](loop-finish.md)
@@ -0,0 +1,35 @@
1
+ ---
2
+ group: guides
3
+ order: 22
4
+ title: "Which loop template"
5
+ kind: "concept"
6
+ section: "Loops"
7
+ description: "Pick a loop template by what you want to do."
8
+ ---
9
+ [Run a loop](run-a-loop.md) takes a template by name, or lets the agent compose a graph from the bricks. Pick one by what you want to do:
10
+
11
+ | I want to… | Template | Category |
12
+ | --- | --- | --- |
13
+ | Record a design decision as an ADR before any code changes | `architecture-decision` | architecture |
14
+ | Make a rule hold everywhere (a test with an allowlist, then one violation fixed per iteration) | `enforce-architecture-rule` | architecture |
15
+ | Change an API, schema or event that has live consumers, without breaking them | `update-contract` | architecture |
16
+ | Pin untested legacy behaviour with characterization tests, production code untouched | `legacy-tests` | tests |
17
+ | Write each failing test before the code that passes it | `tdd` | tests |
18
+ | Fix a test that fails only sometimes, at its root cause | `fix-flaky-tests` | tests |
19
+ | Fix a reported bug, starting from a failing reproduction | `bugfix` | development |
20
+ | Build a feature in planned iterations | `feature` | development |
21
+ | Pin the acceptance criteria in a spec you review first, then build it | `spec-first-feature` | development |
22
+ | Add or change HTTP endpoints, each with a Bruno request and a security pass | `api-endpoint` | development |
23
+ | Restructure code that the tests already cover | `refactor` | refactoring |
24
+ | Refactor code that has no tests yet | `legacy-refactor` | refactoring |
25
+ | Delete unused code, one coherent group per iteration | `remove-dead-code` | refactoring |
26
+ | Upgrade dependencies one package or group at a time | `deps-upgrade` | day-to-day |
27
+ | Turn a red CI run green on a `loop/*` branch | `ci-repair` | day-to-day |
28
+
29
+ The console's **Loops › Templates** shows each one as a ring, with its bricks and which of them stop for you.
30
+
31
+ What each template's bricks do: [Loop templates](../concepts/loop-templates.md).
32
+
33
+ ---
34
+
35
+ **Next:** [While a loop runs](loop-running.md)
@@ -0,0 +1,41 @@
1
+ ---
2
+ group: guides
3
+ order: 19
4
+ title: "Filesystem (MCP)"
5
+ kind: "concept"
6
+ section: "Set up"
7
+ description: "File access limited to the folders you list, and the placeholder path to replace."
8
+ ---
9
+ One of the [MCP server](mcp.md) presets. Where each host keeps the config, and how to check the server connected, are on that page.
10
+
11
+ [`@modelcontextprotocol/server-filesystem`](https://github.com/modelcontextprotocol/servers/tree/main/src/filesystem) gives the agent file access limited to the folders you list, through `npx`. **The allowed folders are command-line arguments.** The server refuses any path outside them, so grant the narrowest set that works, not `$HOME` or `/`.
12
+
13
+ <!--harness:opencode-->
14
+ *(OpenCode only)*
15
+
16
+ ```json
17
+ {
18
+ "mcp": {
19
+ "filesystem": {
20
+ "type": "local",
21
+ "command": ["npx", "-y", "@modelcontextprotocol/server-filesystem", "/path/to/project"],
22
+ "enabled": true
23
+ }
24
+ }
25
+ }
26
+ ```
27
+ <!--/harness-->
28
+
29
+ <!--harness:claude-->
30
+ *(Claude Code only)*
31
+
32
+ ```json
33
+ { "mcpServers": { "filesystem": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/project"] } } }
34
+ ```
35
+ <!--/harness-->
36
+
37
+ > **Replace the placeholder.** The preset ships with the literal path `/path/to/allowed/dir`. If you enable the server without changing it, the server runs but can reach nothing. This is the classic "the filesystem MCP sees nothing" problem.
38
+
39
+ ---
40
+
41
+ **Next:** [Check the servers connected](mcp.md)
@@ -0,0 +1,66 @@
1
+ ---
2
+ group: guides
3
+ order: 18
4
+ title: "GitLab (MCP)"
5
+ kind: "concept"
6
+ section: "Set up"
7
+ description: "Merge requests, issues and CI from the agent: token scopes, the config block, a second instance."
8
+ ---
9
+ One of the [MCP server](mcp.md) presets. Where each host keeps the config, and how to check the server connected, are on that page.
10
+
11
+ > **Never commit a real token.** The presets ship with an empty `GITLAB_PERSONAL_ACCESS_TOKEN` and a sample filesystem path. Fill them in your own config, never in a tracked file.
12
+
13
+ [`@zereight/mcp-gitlab`](https://github.com/zereight/gitlab-mcp) provides repository, merge request, issue and CI tools over the GitLab API. It runs through `npx`, so nothing is installed globally. The same command serves gitlab.com and any self-hosted instance.
14
+
15
+ **1. Create a personal access token** on the instance (User Settings → Access Tokens) with the scopes `api` and `read_repository`. Treat it like a password.
16
+
17
+ **2. Register the server.**
18
+
19
+ <!--harness:opencode-->
20
+ *(OpenCode only)*
21
+
22
+ ```json
23
+ {
24
+ "mcp": {
25
+ "gitlab": {
26
+ "type": "local",
27
+ "command": ["npx", "-y", "@zereight/mcp-gitlab"],
28
+ "environment": {
29
+ "GITLAB_PERSONAL_ACCESS_TOKEN": "glpat-…",
30
+ "GITLAB_API_URL": "https://gitlab.com/api/v4"
31
+ },
32
+ "enabled": true
33
+ }
34
+ }
35
+ }
36
+ ```
37
+ <!--/harness-->
38
+
39
+ <!--harness:claude-->
40
+ *(Claude Code only)*
41
+
42
+ ```json
43
+ {
44
+ "mcpServers": {
45
+ "gitlab": {
46
+ "command": "npx",
47
+ "args": ["-y", "@zereight/mcp-gitlab"],
48
+ "env": {
49
+ "GITLAB_PERSONAL_ACCESS_TOKEN": "glpat-…",
50
+ "GITLAB_API_URL": "https://gitlab.com/api/v4"
51
+ }
52
+ }
53
+ }
54
+ }
55
+ ```
56
+
57
+ You can also register it with `claude mcp add`.
58
+ <!--/harness-->
59
+
60
+ Keep the `/api/v4` suffix on the URL.
61
+
62
+ **A second instance** (gitlab.com plus a self-hosted server, for example) is a copy of the same block under a new name, such as `gitlab-acme`, with its own `GITLAB_API_URL` and token. The preset covers the first instance only. You add the copy by hand.
63
+
64
+ ---
65
+
66
+ **Next:** [Filesystem (MCP)](mcp-filesystem.md)
@@ -0,0 +1,36 @@
1
+ ---
2
+ group: guides
3
+ order: 17
4
+ title: "MarkItDown (MCP)"
5
+ kind: "concept"
6
+ section: "Set up"
7
+ description: "Convert PDF and Office files to markdown: uvx or pipx, OCR extras, corporate TLS."
8
+ ---
9
+ One of the [MCP server](mcp.md) presets. Where each host keeps the config, and how to check the server connected, are on that page.
10
+
11
+ [MarkItDown](https://github.com/microsoft/markitdown) (Microsoft) converts PDF, Word, Excel, PowerPoint and HTML to markdown. It exposes one tool, `convert_to_markdown(uri)`, which accepts `file:`, `http:`, `https:` and `data:` URIs.
12
+
13
+ **1. Make the command resolve.**
14
+
15
+ - **`uvx` (recommended, nothing to install).** If you have [uv](https://docs.astral.sh/uv/), `uvx markitdown-mcp` fetches and caches the server on first use. This is the command the preset uses.
16
+ - **`pipx`.** Without uv, run `pipx install markitdown-mcp`, then use `markitdown-mcp` alone as the command (OpenCode: `["markitdown-mcp"]`; Claude: `"command": "markitdown-mcp"`, no args).
17
+
18
+ ```
19
+ uvx markitdown-mcp --help # uv route: confirm it resolves
20
+ pipx install markitdown-mcp && markitdown-mcp --help # pipx route
21
+ ```
22
+
23
+ For scanned or image-only PDFs, which otherwise come back empty, add the OCR extras: `uvx --with "markitdown[all]" markitdown-mcp`, or `pipx inject markitdown-mcp "markitdown[all]"`.
24
+
25
+ **2. Corporate TLS (only behind an SSL-inspecting proxy).** uv ships its own root certificates and ignores the OS trust store, so a proxy's internal certificate fails with `invalid peer certificate: UnknownIssuer`. Point uv at the OS store rather than turning verification off:
26
+
27
+ ```
28
+ export UV_SYSTEM_CERTS=true # older uv: UV_NATIVE_TLS=true
29
+ # fallback: export SSL_CERT_FILE=/path/to/corporate-root-ca.pem
30
+ ```
31
+
32
+ **3. Register it**, with the console toggle or one of the blocks in [MCP servers](mcp.md). Then restart your agent.
33
+
34
+ ---
35
+
36
+ **Next:** [Reading non-markdown docs](read-non-markdown.md)
@@ -1,8 +1,10 @@
1
1
  ---
2
2
  group: guides
3
- order: 8
3
+ order: 16
4
4
  title: "MCP servers"
5
5
  kind: "concept"
6
+ section: "Set up"
7
+ description: "Where MCP config lives for each host, the three presets, and how to check a server connected."
6
8
  ---
7
9
  MCP (Model Context Protocol) servers give your agent extra tools: converting a PDF, opening a merge request, reading files outside the repo. Geneseed ships three ready-made server **presets** (MarkItDown, GitLab and Filesystem) that you can switch on without writing JSON by hand.
8
10
 
@@ -37,113 +39,11 @@ The same MarkItDown server in both shapes:
37
39
 
38
40
  The reference OpenCode config ships MarkItDown enabled and the GitLab and Filesystem entries disabled, so a merge never switches on a server that has no credentials yet. Fill in the blanks, then switch the server on.
39
41
 
40
- ## MarkItDown
42
+ ## The presets
41
43
 
42
- [MarkItDown](https://github.com/microsoft/markitdown) (Microsoft) converts PDF, Word, Excel, PowerPoint and HTML to markdown. It exposes one tool, `convert_to_markdown(uri)`, which accepts `file:`, `http:`, `https:` and `data:` URIs.
43
-
44
- **1. Make the command resolve.**
45
-
46
- - **`uvx` (recommended, nothing to install).** If you have [uv](https://docs.astral.sh/uv/), `uvx markitdown-mcp` fetches and caches the server on first use. This is the command the preset uses.
47
- - **`pipx`.** Without uv, run `pipx install markitdown-mcp`, then use `markitdown-mcp` alone as the command (OpenCode: `["markitdown-mcp"]`; Claude: `"command": "markitdown-mcp"`, no args).
48
-
49
- ```
50
- uvx markitdown-mcp --help # uv route: confirm it resolves
51
- pipx install markitdown-mcp && markitdown-mcp --help # pipx route
52
- ```
53
-
54
- For scanned or image-only PDFs, which otherwise come back empty, add the OCR extras: `uvx --with "markitdown[all]" markitdown-mcp`, or `pipx inject markitdown-mcp "markitdown[all]"`.
55
-
56
- **2. Corporate TLS (only behind an SSL-inspecting proxy).** uv ships its own root certificates and ignores the OS trust store, so a proxy's internal certificate fails with `invalid peer certificate: UnknownIssuer`. Point uv at the OS store rather than turning verification off:
57
-
58
- ```
59
- export UV_SYSTEM_CERTS=true # older uv: UV_NATIVE_TLS=true
60
- # fallback: export SSL_CERT_FILE=/path/to/corporate-root-ca.pem
61
- ```
62
-
63
- **3. Register it**, with the console toggle or one of the blocks above. Then restart your agent.
64
-
65
- ## GitLab
66
-
67
- [`@zereight/mcp-gitlab`](https://github.com/zereight/gitlab-mcp) provides repository, merge request, issue and CI tools over the GitLab API. It runs through `npx`, so nothing is installed globally. The same command serves gitlab.com and any self-hosted instance.
68
-
69
- **1. Create a personal access token** on the instance (User Settings → Access Tokens) with the scopes `api` and `read_repository`. Treat it like a password.
70
-
71
- **2. Register the server.**
72
-
73
- <!--harness:opencode-->
74
- *(OpenCode only)*
75
-
76
- ```json
77
- {
78
- "mcp": {
79
- "gitlab": {
80
- "type": "local",
81
- "command": ["npx", "-y", "@zereight/mcp-gitlab"],
82
- "environment": {
83
- "GITLAB_PERSONAL_ACCESS_TOKEN": "glpat-…",
84
- "GITLAB_API_URL": "https://gitlab.com/api/v4"
85
- },
86
- "enabled": true
87
- }
88
- }
89
- }
90
- ```
91
- <!--/harness-->
92
-
93
- <!--harness:claude-->
94
- *(Claude Code only)*
95
-
96
- ```json
97
- {
98
- "mcpServers": {
99
- "gitlab": {
100
- "command": "npx",
101
- "args": ["-y", "@zereight/mcp-gitlab"],
102
- "env": {
103
- "GITLAB_PERSONAL_ACCESS_TOKEN": "glpat-…",
104
- "GITLAB_API_URL": "https://gitlab.com/api/v4"
105
- }
106
- }
107
- }
108
- }
109
- ```
110
-
111
- You can also register it with `claude mcp add`.
112
- <!--/harness-->
113
-
114
- Keep the `/api/v4` suffix on the URL.
115
-
116
- **A second instance** (gitlab.com plus a self-hosted server, for example) is a copy of the same block under a new name, such as `gitlab-acme`, with its own `GITLAB_API_URL` and token. The preset covers the first instance only. You add the copy by hand.
117
-
118
- ## Filesystem
119
-
120
- [`@modelcontextprotocol/server-filesystem`](https://github.com/modelcontextprotocol/servers/tree/main/src/filesystem) gives the agent file access limited to the folders you list, through `npx`. **The allowed folders are command-line arguments.** The server refuses any path outside them, so grant the narrowest set that works, not `$HOME` or `/`.
121
-
122
- <!--harness:opencode-->
123
- *(OpenCode only)*
124
-
125
- ```json
126
- {
127
- "mcp": {
128
- "filesystem": {
129
- "type": "local",
130
- "command": ["npx", "-y", "@modelcontextprotocol/server-filesystem", "/path/to/project"],
131
- "enabled": true
132
- }
133
- }
134
- }
135
- ```
136
- <!--/harness-->
137
-
138
- <!--harness:claude-->
139
- *(Claude Code only)*
140
-
141
- ```json
142
- { "mcpServers": { "filesystem": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/project"] } } }
143
- ```
144
- <!--/harness-->
145
-
146
- > **Replace the placeholder.** The preset ships with the literal path `/path/to/allowed/dir`. If you enable the server without changing it, the server runs but can reach nothing. This is the classic "the filesystem MCP sees nothing" problem.
44
+ - [MarkItDown](mcp-markitdown.md): converts PDF, Word, Excel, PowerPoint and HTML to markdown.
45
+ - [GitLab](mcp-gitlab.md): repository, merge request, issue and CI tools over the GitLab API.
46
+ - [Filesystem](mcp-filesystem.md): file access limited to the folders you list.
147
47
 
148
48
  ## Verify
149
49
 
@@ -163,33 +63,4 @@ Restart your agent, then list the servers:
163
63
 
164
64
  Being listed is not the same as working. A local server appears in the list whether or not its command actually launches.
165
65
 
166
- ## A server won't connect
167
-
168
- Work through these in order:
169
-
170
- 1. **Does the command resolve?** Run the exact command in a fresh terminal: `uvx markitdown-mcp --help`, or `npx -y @modelcontextprotocol/server-filesystem --help`. "command not found" means the binary is not on the `PATH` your agent starts from. Use the `uvx` or `npx` form, which needs only uv or Node, or point at the absolute path of the binary. This is the most common cause for MarkItDown.
171
- 2. **Filesystem sees nothing?** The allowed folder is still the placeholder, or it points at a path that does not exist.
172
- 3. **GitLab will not connect?** Almost always a missing or under-scoped token, or a wrong `GITLAB_API_URL`. Keep the `/api/v4` suffix.
173
- 4. **Right file?** Editing a file the host does not read fails silently.
174
-
175
- <!--harness:opencode-->
176
- *(OpenCode only)*
177
-
178
- OpenCode reads `opencode.jsonc` if it exists, otherwise `opencode.json`, both in the project root and in `~/.config/opencode/`. The console toggle always writes the file OpenCode actually reads.
179
- <!--/harness-->
180
-
181
- <!--harness:claude-->
182
- *(Claude Code only)*
183
-
184
- Claude Code reads `.mcp.json` in the project and the `mcpServers` block in `~/.claude.json`. `claude mcp list` shows which servers actually loaded.
185
- <!--/harness-->
186
-
187
- ## Reading non-markdown docs
188
-
189
- The agent's doc discovery only sees markdown. The `ingest` skill teaches the agent to convert a PDF, Word, PowerPoint, Excel or HTML file, or a URL, to markdown before reading it. Install one converter and the skill uses it:
190
-
191
- - **MarkItDown**: the broadest. Use the MCP server above (preferred on a host with MCP: nothing to install per call, one cheap tool), or `pip install markitdown`.
192
- - **Pandoc**: excellent for Office and HTML, and a single binary.
193
- - **Docling** (IBM): best for complex tables and scanned PDFs.
194
-
195
- When an MCP converter is available, the skill prefers it. A prompt like *"convert file:///path/to/spec.pdf to markdown"* then just works. The skill never installs a converter silently. If none is present, it tells you which one to add.
66
+ Listed but not connecting? See [Model, agent and MCP problems](../reference/troubleshoot-tools.md). To have the agent read PDFs and Office files, see [Reading non-markdown docs](read-non-markdown.md).
@@ -1,8 +1,10 @@
1
1
  ---
2
2
  group: guides
3
- order: 13
3
+ order: 26
4
4
  title: "Migrate from a clone to npm"
5
5
  kind: "concept"
6
+ section: "Keep it running"
7
+ description: "Move an old clone install to the npm package."
6
8
  ---
7
9
  If you installed Geneseed by cloning the repository and now want to use the npm package, one command moves every install you already have, without touching your own settings.
8
10
 
@@ -1,8 +1,10 @@
1
1
  ---
2
2
  group: guides
3
- order: 6
3
+ order: 14
4
4
  title: "Project context"
5
5
  kind: "concept"
6
+ section: "Set up"
7
+ description: "Choose which of a repo's docs the agent loads."
6
8
  ---
7
9
  At the start of every session, the harness shows the agent your repo's own documentation. Usually you have nothing to configure. This page explains what gets loaded and what each choice costs, so you know when to override it.
8
10
 
@@ -84,4 +86,4 @@ By default, the plugin delivers the context invisibly. It prepends the context t
84
86
  - `GENESEED_DEBUG=1` logs what was discovered and how it was delivered.
85
87
  <!--/harness-->
86
88
 
87
- All the knobs are listed in [Environment](../reference/environment.md). For knowledge that belongs to you rather than to one repo, see [Wiki](wiki.md).
89
+ All the knobs are listed in [Context and memory variables](../reference/env-context.md). For knowledge that belongs to you rather than to one repo, see [Wiki](wiki.md).
@@ -0,0 +1,17 @@
1
+ ---
2
+ group: guides
3
+ order: 20
4
+ title: "Reading non-markdown docs"
5
+ kind: "concept"
6
+ section: "Set up"
7
+ description: "Let the agent read PDF, Word, PowerPoint, Excel and HTML through a converter."
8
+ ---
9
+ The agent's doc discovery only sees markdown. The `ingest` skill teaches the agent to convert a PDF, Word, PowerPoint, Excel or HTML file, or a URL, to markdown before reading it. Install one converter and the skill uses it:
10
+
11
+ - **MarkItDown**: the broadest. Use [its MCP server](mcp-markitdown.md) (preferred on a host with MCP: nothing to install per call, one cheap tool), or `pip install markitdown`.
12
+ - **Pandoc**: excellent for Office and HTML, and a single binary.
13
+ - **Docling** (IBM): best for complex tables and scanned PDFs.
14
+
15
+ When an MCP converter is available, the skill prefers it. A prompt like *"convert file:///path/to/spec.pdf to markdown"* then just works. The skill never installs a converter silently. If none is present, it tells you which one to add.
16
+
17
+ Converter not found, or an MCP converter listed but not connecting? See [Model, agent and MCP problems](../reference/troubleshoot-tools.md).
@@ -0,0 +1,64 @@
1
+ ---
2
+ group: guides
3
+ order: 21
4
+ title: "Run a loop"
5
+ kind: "concept"
6
+ section: "Loops"
7
+ description: "Start a loop: what you need, how to ask, which template, and how much it does before it asks."
8
+ ---
9
+ A **loop** works one requirement as small iterations. Each one is planned, applied, tested, reviewed, scored for risk and committed on its own branch. You ask for it in plain words. The agent drives `geneseed loop`, which decides every step, and stops for you only when a change is risky or a step needs your sign-off. The loop never merges: the branch is yours to review.
10
+
11
+ This page is the how-to. For how the engine works (rings, scoring, trailers), see [Loops](../concepts/loops.md). Once it runs, see [While a loop runs](loop-running.md) and [Finish a loop](loop-finish.md).
12
+
13
+ ## Before you start
14
+
15
+ | You need | Why |
16
+ | --- | --- |
17
+ | An install that carries the `loop` skill | The skill is what talks to `geneseed loop`. After upgrading Geneseed, run `geneseed rebuild-all` so every install gets the current skill. |
18
+ | A git repository with a remote named `origin` | Every iteration ends with `git push -u origin HEAD:loop/<slug>`. With no remote, the agent reports and stops. |
19
+ | A test command the agent can run | The `test` brick runs the project's suite, and most templates retry `apply` until it passes. |
20
+ | For `ci-repair`: CI that runs on `loop/*` branches, and the `gh` CLI | `ci-triage` reads the checks of the HEAD commit with `gh run list --commit`. |
21
+ | For `legacy-tests`: a mutation tool (PIT, Stryker, mutmut, cargo-mutants) | Optional. Without one, `mutation-check` reports `unavailable` and the loop carries on, with a note saying so. |
22
+
23
+ Check the catalogue the CLI sees from your repo:
24
+
25
+ ```bash
26
+ geneseed loop check
27
+ ```
28
+
29
+ It lists every template and brick, marks the unavailable ones and says why, and names every project or global brick that overrides a shipped one.
30
+
31
+ ## Start a loop
32
+
33
+ Ask the agent, naming a template or not:
34
+
35
+ ```text
36
+ run a tdd loop to add rate limiting to the /orders endpoint
37
+ run a bugfix loop for issue 412: totals round the wrong way on refunds
38
+ start a loop to remove the dead code knip reports in src/billing
39
+ run a ci-repair loop on this branch, prudent
40
+ ```
41
+
42
+ The agent then:
43
+
44
+ 1. Creates a worktree on a new branch, `git worktree add ../<repo>-loop-<slug> -b loop/<slug>`, and works from there. Your own checkout is not touched.
45
+ 2. Picks the template you named (see [Which loop template](loop-which-template.md)). If you named none, it runs `geneseed loop check` and composes a graph from the available bricks, validated with `geneseed loop check --graph <file>`.
46
+ 3. Runs `geneseed loop init --title … --requirement … --graph <template> --preset <preset>`. This writes `LOOP.md` at the worktree root and registers the loop so the console can show it.
47
+
48
+ ## Trust: how far it goes before it asks
49
+
50
+ Before each change, and again after it, the loop scores its risk and compares the score with a **trust preset**:
51
+
52
+ | Preset | What gets through without asking |
53
+ | --- | --- |
54
+ | `prudent` | Little beyond renames. It also asks you to approve the graph before the first node runs. |
55
+ | `balanced` *(default)* | Logic changes and new files. API changes and deletions stop. |
56
+ | `aggressive` | Everything short of an architecture-level change. |
57
+
58
+ - **Install default.** The `--trust` choice your install was built with (`geneseed build --emit <target> --trust prudent`; see [Footprint, loop trust and changing later](setup-footprint.md)).
59
+ - **One loop.** Say it when you start: "run it prudent", "aggressive is fine for this one".
60
+ - **Mid-loop.** Pick another preset in the console under **Loops › Active**, or edit the `preset` field in `LOOP.md`. It applies from the next score, not to what already ran.
61
+
62
+ ---
63
+
64
+ **Next:** [Which loop template](loop-which-template.md)
@@ -3,6 +3,8 @@ group: guides
3
3
  order: 9
4
4
  title: "Run geneseed from anywhere"
5
5
  kind: "concept"
6
+ section: "Install"
7
+ description: "Put the geneseed command on your PATH from a clone."
6
8
  ---
7
9
  **Installed from npm? You have nothing to do.** `npm install -g geneseed` already puts `geneseed`, `geneseed-build` and `geneseed-hook` on your `PATH`.
8
10
 
@@ -0,0 +1,55 @@
1
+ ---
2
+ group: guides
3
+ order: 11
4
+ title: "Doctrine packs and single rules"
5
+ kind: "concept"
6
+ section: "Set up"
7
+ description: "Which practice packs bind, and how to drop a single rule."
8
+ ---
9
+ Part of [Choose your setup](choose-your-setup.md). Like every setup choice, packs and rules are fixed **at build time**: change one by rebuilding, not by editing the output.
10
+
11
+ ## Doctrine packs: which practices bind
12
+
13
+ The harness's rules come in tiers (see [Rules](../concepts/rules.md)). The Ethos and the Rules are always on. The **doctrines** are practices rather than principles, and they ship as packs you choose:
14
+
15
+ | Pack | What it governs |
16
+ | --- | --- |
17
+ | **craft** | how code is written: reuse first, house conventions, docs updated in the same change, the smallest diff |
18
+ | **rigor** | how work is proven: idempotence, honest tests, cover-and-verify, gates that can actually fail |
19
+ | **ops** | how the machine is driven: tool discovery, commands that return, complete teardowns |
20
+ | **process** | how a session runs: planning, context economy, docs first, bounded loops, and consent before every commit and push |
21
+ | **comms** | how answers are presented: stable reference codes on tracked items, and a diagram or table only where it earns its place |
22
+
23
+ Every pack is enabled by default. To keep only some packs, or none:
24
+
25
+ ```
26
+ geneseed build --emit opencode-global --doctrines craft,rigor # two packs
27
+ geneseed build --emit opencode-global --doctrines none # Ethos and Rules only
28
+ ```
29
+
30
+ The packs always load in the same order (craft, rigor, ops, process, comms), whatever order you type them in. A pack you leave out still ships on disk under `doctrines/`, so you can read it before you turn it on. A clone can set its own default in `harness.config.json` with a `doctrines` array.
31
+
32
+ **Dropping `process` changes what the machine does, not only what the agent reads.** The *Consent Before Push* rule in that pack is enforced at the tool boundary as well as in the prose:
33
+
34
+ - On Claude Code and OpenClaude, the git hook stays wired but stops asking before a commit or push.
35
+ - On OpenCode, a fresh install no longer gets the `git commit*` and `git push*` ask entries in `opencode.json`. On an existing install, entries that are already there are left in place and reported, because Geneseed cannot tell its own entries from ones you typed.
36
+
37
+ The refusals of destructive git and `rm -rf` belong to the always-on Rules, not to the pack, so they stay in every build. See [Enforced vs. asked](../understand/enforced-vs-asked.md).
38
+
39
+ ## One rule at a time
40
+
41
+ A pack is all-or-nothing. `--exclude-rules` drops single doctrine rules instead. It takes rule addresses, written `<pack> <n>` or `<pack>.<n>`:
42
+
43
+ ```
44
+ geneseed build --emit opencode-global --exclude-rules "process 7"
45
+ geneseed build --emit opencode-global --exclude-rules "process 5,craft 2"
46
+ geneseed build --emit opencode-global --exclude-rules none
47
+ ```
48
+
49
+ The number in an address is the rule's position in its pack, so it can change if a rule is added or removed. To see the current addresses, pass an address that does not exist: the build refuses it and lists every valid address. The web console's **Constitution** page has one switch per rule. You stage the changes there and apply them in a single rebuild.
50
+
51
+ Excluding *Consent Before Push* (`process 5` today) takes the commit and push consent gate with it, exactly as dropping the whole `process` pack does. The console and the wizard both warn you before applying it. A pack whose every rule is excluded drops out of the build entirely. See [Exclusions](../concepts/exclusions.md) for excluding whole folders instead.
52
+
53
+ ---
54
+
55
+ **Next:** [Footprint, loop trust and changing later](setup-footprint.md)
@@ -0,0 +1,48 @@
1
+ ---
2
+ group: guides
3
+ order: 12
4
+ title: "Footprint, loop trust and changing later"
5
+ kind: "concept"
6
+ section: "Set up"
7
+ description: "How much loads every turn, how far a loop goes before it asks, and how to change a choice."
8
+ ---
9
+ Part of [Choose your setup](choose-your-setup.md): the last build-time choices, and how to change any of them once the install exists.
10
+
11
+ ## Footprint: how much loads every turn
12
+
13
+ Footprint controls how much of the rules text sits inside `AGENT.md`, which is loaded on every turn. It changes the token cost, not which rules apply:
14
+
15
+ - **lean** *(default)*: each rule appears in a hand-written short form, with a pointer to the full text. The full text ships beside `AGENT.md`, and the agent reads it when a rule's nuance matters.
16
+ - **full**: every rule's complete text and rationale is inline. This costs the most tokens. It can help a smaller model, which applies a rule's nuance more reliably when the reasoning is always in front of it.
17
+
18
+ ```
19
+ geneseed build --emit opencode-global --footprint full
20
+ ```
21
+
22
+ Both footprints install the same agents, skills, hooks and plugins. More in [Footprint](../concepts/footprint.md).
23
+
24
+ ## Loop trust: how far a loop goes before it asks
25
+
26
+ The `loop` skill scores every change it validates and stops to ask once the score passes a threshold. `--trust` sets the preset the skill starts a loop with; the user can still name another one per loop.
27
+
28
+ - **prudent**: asks early, on anything past a rename.
29
+ - **balanced** *(default)*: logic changes and new files pass with a note; API changes and deletions stop.
30
+ - **aggressive**: only an architecture-level change stops the loop.
31
+
32
+ The preset lives in the `loop` skill only, so it costs nothing in the always-on instructions.
33
+
34
+ ```
35
+ geneseed build --emit opencode-global --trust prudent
36
+ ```
37
+
38
+ ## Changing a choice later
39
+
40
+ You have three ways to change a choice:
41
+
42
+ - **Re-run the wizard** with `geneseed setup`. It pre-selects what the install already has, so holding Enter cannot widen a set you narrowed on purpose. The wizard does not ask about single rules, but it keeps any rule exclusions already in place.
43
+ - **Use the web console** (`geneseed web`). **Settings** and the **Harnesses** page change theme, footprint and the rest per install. **Constitution** toggles packs and rules.
44
+ - **Run the build yourself.** Watch out: a flag you leave out takes the *generator's* default, not your install's current value. `geneseed status --json` prints, for every install, the exact `geneseed build` command that rebuilds it as it is. Start from that command and change the one flag you want.
45
+
46
+ ---
47
+
48
+ **Next:** [Verify it works](verify.md)
@@ -1,8 +1,10 @@
1
1
  ---
2
2
  group: guides
3
- order: 5
3
+ order: 28
4
4
  title: "Uninstall"
5
5
  kind: "concept"
6
+ section: "Keep it running"
7
+ description: "Remove an install, and what stays behind."
6
8
  ---
7
9
  `geneseed uninstall` removes one install at a time. It deletes only what Geneseed wrote and keeps anything you would not be able to rebuild.
8
10