geneseed 3.11.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.
- package/CHANGELOG.md +160 -0
- package/README.md +5 -5
- package/SHIPPED.md +2 -2
- package/adapters/bob/README.md +1 -1
- package/adapters/claude-code/README.md +1 -1
- package/adapters/openclaude/README.md +1 -1
- package/adapters/opencode/README.md +3 -3
- package/adapters/opencode/plugins/geneseed-guard.js +157 -2
- package/bin/geneseed-cli.mjs +4 -0
- package/docs/README.md +41 -22
- package/docs/concepts/agents.md +3 -1
- package/docs/concepts/collaboration.md +3 -1
- package/docs/concepts/exclusions.md +4 -2
- package/docs/concepts/footprint.md +3 -1
- package/docs/concepts/foreman-mode.md +4 -2
- package/docs/concepts/hook-gates.md +61 -0
- package/docs/concepts/hooks.md +8 -56
- package/docs/concepts/host-matrix.md +38 -0
- package/docs/concepts/hosts.md +6 -32
- package/docs/concepts/loop-branch.md +66 -0
- package/docs/concepts/loop-bricks.md +48 -0
- package/docs/concepts/loop-contracts.md +33 -0
- package/docs/concepts/loop-gates.md +30 -0
- package/docs/concepts/loop-notes.md +43 -0
- package/docs/concepts/loop-risk.md +36 -0
- package/docs/concepts/loop-templates.md +50 -0
- package/docs/concepts/loops.md +73 -0
- package/docs/concepts/lsp.md +2 -0
- package/docs/concepts/memory.md +3 -1
- package/docs/concepts/notebook.md +3 -1
- package/docs/concepts/rules.md +4 -2
- package/docs/concepts/skills.md +3 -1
- package/docs/concepts/themes.md +3 -1
- package/docs/extending.md +28 -8
- package/docs/guides/autostart.md +3 -1
- package/docs/guides/choose-your-setup.md +5 -66
- package/docs/guides/headless.md +5 -3
- package/docs/guides/install-agent-md.md +37 -0
- package/docs/guides/install-bob.md +20 -0
- package/docs/guides/install-claude-code.md +22 -0
- package/docs/guides/install-clone.md +34 -0
- package/docs/guides/install-openclaude.md +25 -0
- package/docs/guides/install-opencode.md +35 -0
- package/docs/guides/install-scripted.md +21 -0
- package/docs/guides/install.md +9 -118
- package/docs/guides/loop-finish.md +54 -0
- package/docs/guides/loop-running.md +66 -0
- package/docs/guides/loop-which-template.md +35 -0
- package/docs/guides/mcp-filesystem.md +41 -0
- package/docs/guides/mcp-gitlab.md +66 -0
- package/docs/guides/mcp-markitdown.md +36 -0
- package/docs/guides/mcp.md +8 -137
- package/docs/guides/migrate.md +3 -1
- package/docs/guides/project-context.md +4 -2
- package/docs/guides/read-non-markdown.md +17 -0
- package/docs/guides/run-a-loop.md +64 -0
- package/docs/guides/run-anywhere.md +2 -0
- package/docs/guides/setup-doctrines.md +55 -0
- package/docs/guides/setup-footprint.md +48 -0
- package/docs/guides/uninstall.md +3 -1
- package/docs/guides/upgrade.md +3 -1
- package/docs/guides/verify.md +3 -1
- package/docs/guides/wiki.md +3 -1
- package/docs/guides/worktree.md +3 -1
- package/docs/reference/about.md +3 -1
- package/docs/reference/cli.md +2 -0
- package/docs/reference/env-context.md +40 -0
- package/docs/reference/environment.md +10 -59
- package/docs/reference/glossary.md +7 -1
- package/docs/reference/loop-actions.md +20 -0
- package/docs/reference/opencode-plugins.md +14 -116
- package/docs/reference/plugin-activity.md +20 -0
- package/docs/reference/plugin-context.md +27 -0
- package/docs/reference/plugin-guard.md +27 -0
- package/docs/reference/plugin-learn.md +27 -0
- package/docs/reference/plugin-notify.md +20 -0
- package/docs/reference/plugin-ponytail.md +19 -0
- package/docs/reference/plugin-workflow.md +25 -0
- package/docs/reference/troubleshoot-doctor.md +50 -0
- package/docs/reference/troubleshoot-hooks.md +99 -0
- package/docs/reference/troubleshoot-install.md +108 -0
- package/docs/reference/troubleshoot-tools.md +56 -0
- package/docs/reference/troubleshoot-update.md +23 -0
- package/docs/reference/troubleshoot-web.md +66 -0
- package/docs/reference/troubleshooting.md +13 -337
- package/docs/understand/a-day.md +3 -1
- package/docs/understand/enforced-vs-asked.md +3 -1
- package/docs/understand/harness.md +2 -0
- package/docs/understand/machine-bob.md +17 -0
- package/docs/understand/machine-claude.md +35 -0
- package/docs/understand/machine-opencode.md +36 -0
- package/docs/understand/on-your-machine.md +12 -55
- package/docs/understand/take-it-out.md +13 -0
- package/docs/web-ui.md +36 -5
- package/harness.config.json +1 -1
- package/js/README.md +32 -2
- package/js/build/driver.mjs +14 -8
- package/js/build/generate.mjs +10 -6
- package/js/build/render.mjs +5 -0
- package/js/build/source.mjs +5 -1
- package/js/cli-table.json +261 -0
- package/js/hosts/gitref.mjs +99 -0
- package/js/hosts/hooks.mjs +88 -1
- package/js/hosts/installs.mjs +21 -0
- package/js/hosts/mcp.mjs +1 -1
- package/js/hosts/native.mjs +43 -5
- package/js/inspect/checks-authoring.mjs +10 -0
- package/js/inspect/checks-build.mjs +28 -0
- package/js/inspect/diff.mjs +3 -0
- package/js/inspect/doctor.mjs +2 -1
- package/js/inspect/inventory.mjs +1 -0
- package/js/inspect/status.mjs +1 -1
- package/js/loop/catalog.mjs +127 -0
- package/js/loop/cli.mjs +173 -0
- package/js/loop/graph.mjs +163 -0
- package/js/loop/registry.mjs +196 -0
- package/js/loop/score.mjs +182 -0
- package/js/loop/state.mjs +436 -0
- package/js/maintain/migrate.mjs +4 -2
- package/js/maintain/setup.mjs +1 -1
- package/js/web/actions.mjs +34 -3
- package/js/web/api.mjs +51 -2
- package/js/web/daemon.mjs +43 -5
- package/js/web/docs.mjs +64 -12
- package/js/web/handler.mjs +1 -0
- package/js/web/jobs.mjs +3 -1
- package/js/web/routes.mjs +5 -1
- package/js/web/server.mjs +5 -3
- package/package.json +1 -1
- package/registry.json +14 -0
- package/src/AGENT.md.tmpl +2 -0
- package/src/agents/explorer.md +2 -2
- package/src/agents/researcher.md +3 -3
- package/src/bricks/README.md +34 -0
- package/src/bricks/_template.md +32 -0
- package/src/bricks/adr-challenge.md +20 -0
- package/src/bricks/adr-draft.md +15 -0
- package/src/bricks/apply.md +17 -0
- package/src/bricks/baseline-green.md +17 -0
- package/src/bricks/bruno-test.md +16 -0
- package/src/bricks/characterize.md +17 -0
- package/src/bricks/ci-fix.md +18 -0
- package/src/bricks/ci-triage.md +20 -0
- package/src/bricks/compat-check.md +16 -0
- package/src/bricks/deps-audit.md +14 -0
- package/src/bricks/docs-update.md +15 -0
- package/src/bricks/done-check.md +16 -0
- package/src/bricks/fitness-define.md +22 -0
- package/src/bricks/flake-check.md +17 -0
- package/src/bricks/flake-repro.md +18 -0
- package/src/bricks/identify.md +23 -0
- package/src/bricks/lint.md +14 -0
- package/src/bricks/migration-plan.md +21 -0
- package/src/bricks/mutation-check.md +18 -0
- package/src/bricks/plan.md +17 -0
- package/src/bricks/red-test.md +16 -0
- package/src/bricks/reproduce.md +16 -0
- package/src/bricks/review.md +19 -0
- package/src/bricks/security-scan.md +17 -0
- package/src/bricks/spec.md +18 -0
- package/src/bricks/test.md +14 -0
- package/src/bricks/upgrade-scout.md +16 -0
- package/src/doctrines/process.md +11 -8
- package/src/loops/api-endpoint.json +31 -0
- package/src/loops/architecture-decision.json +22 -0
- package/src/loops/bugfix.json +23 -0
- package/src/loops/ci-repair.json +19 -0
- package/src/loops/deps-upgrade.json +29 -0
- package/src/loops/enforce-architecture-rule.json +28 -0
- package/src/loops/feature.json +24 -0
- package/src/loops/fix-flaky-tests.json +30 -0
- package/src/loops/legacy-refactor.json +26 -0
- package/src/loops/legacy-tests.json +29 -0
- package/src/loops/refactor.json +24 -0
- package/src/loops/remove-dead-code.json +30 -0
- package/src/loops/spec-first-feature.json +29 -0
- package/src/loops/tdd.json +25 -0
- package/src/loops/update-contract.json +33 -0
- package/src/skills/brick-forge.md +48 -0
- package/src/skills/bruno-collection-generator.md +3 -3
- package/src/skills/bruno-test-writer.md +3 -3
- package/src/skills/ci-fix.md +3 -3
- package/src/skills/consolidate-memory.md +4 -4
- package/src/skills/council.md +1 -1
- package/src/skills/fresh-eyes.md +1 -1
- package/src/skills/geneseed.md +1 -1
- package/src/skills/git-archaeology.md +1 -1
- package/src/skills/git-rescue.md +4 -3
- package/src/skills/handoff.md +1 -1
- package/src/skills/herdr.md +1 -1
- package/src/skills/learn-mode.md +2 -2
- package/src/skills/loop.md +111 -0
- package/src/skills/opencode-theme.md +3 -3
- package/src/skills/ponytail.md +1 -1
- package/src/skills/profile.md +3 -4
- package/src/skills/prose.md +2 -3
- package/src/skills/quiz.md +1 -1
- package/src/skills/react-view-transitions/SKILL.md +1 -1
- package/src/skills/react-view-transitions/VENDOR.md +8 -3
- package/src/skills/research.md +3 -3
- package/src/skills/review-response.md +2 -2
- package/src/skills/rule.md +3 -3
- package/src/skills/security-audit.md +4 -4
- package/src/skills/teach.md +1 -1
- package/src/skills/wiki.md +3 -3
- package/src/skills/workflow.md +4 -4
- package/src/skills/worktree.md +2 -2
- package/themes/_TEMPLATE.json +2 -0
- package/themes/biker.json +2 -0
- package/themes/commentator.json +2 -0
- package/themes/cyberpunk.json +2 -0
- package/themes/gamer.json +2 -0
- package/themes/imperial.json +2 -0
- package/themes/joker.json +2 -0
- package/themes/marvin.json +2 -0
- package/themes/mean.json +2 -0
- package/themes/military.json +2 -0
- package/themes/neutral.json +2 -0
- package/themes/pirate.json +2 -0
- package/themes/sports.json +2 -0
- package/themes/verstappen.json +2 -0
- package/themes/wizard.json +2 -0
- package/web/dist/assets/Activity-Ca2Aruu7.js +1 -0
- package/web/dist/assets/ActivityDetail-Bo7v4Z_r.js +1 -0
- package/web/dist/assets/Dashboard-BuMq46aT.js +2 -0
- package/web/dist/assets/Docs-BzccCllG.js +5 -0
- package/web/dist/assets/FilterInput-CBcJBQPI.js +1 -0
- package/web/dist/assets/GreenhouseView-BCIKcnGG.js +2 -0
- package/web/dist/assets/Installs-DMFJvq7s.js +2 -0
- package/web/dist/assets/JournalView-o1rmd1_1.js +1 -0
- package/web/dist/assets/Laws-BANxq_I_.js +3 -0
- package/web/dist/assets/Library-DW4x0fbh.js +1 -0
- package/web/dist/assets/Loops-DEBibbBP.js +2 -0
- package/web/dist/assets/{Markdown-qjM2_ofS.js → Markdown-CdTX0kLe.js} +14 -14
- package/web/dist/assets/OperatorHudView-CLD0fYaA.js +2 -0
- package/web/dist/assets/Personal-6uMJvyBG.js +1 -0
- package/web/dist/assets/Tabs-BubnyZhF.js +1 -0
- package/web/dist/assets/activity-CObqyxkL.js +1 -0
- package/web/dist/assets/{api-Dc8f3ca-.js → api-D_ixdyEY.js} +1 -1
- package/web/dist/assets/drawable-C_x5xncq.js +1 -0
- package/web/dist/assets/index-CMPgezFm.js +2 -0
- package/web/dist/assets/index-DMsT4Aa6.css +1 -0
- package/web/dist/assets/{react-B9Z_tXRV.js → react-Bbzhmq4v.js} +1 -1
- package/web/dist/assets/rolldown-runtime-hePW80VL.js +1 -0
- package/web/dist/assets/sections-Dg23Hel5.js +1 -0
- package/web/dist/assets/usePoll-BOqeunzF.js +1 -0
- package/web/dist/index.html +6 -5
- package/web/dist/assets/Activity-C52LEb-2.js +0 -1
- package/web/dist/assets/ActivityDetail-CjNLRvXg.js +0 -1
- package/web/dist/assets/Dashboard-B6_sSCHi.js +0 -2
- package/web/dist/assets/Docs-Dj7BmCSA.js +0 -5
- package/web/dist/assets/FilterInput-CVyqmYWM.js +0 -1
- package/web/dist/assets/GreenhouseView-BALwjQsA.js +0 -2
- package/web/dist/assets/Installs-BbffDQm3.js +0 -2
- package/web/dist/assets/JournalView-JpAQ8Hqe.js +0 -1
- package/web/dist/assets/Laws-DK7eCWSm.js +0 -3
- package/web/dist/assets/Library-CoamHelE.js +0 -1
- package/web/dist/assets/OperatorHudView-DVx1HlBx.js +0 -2
- package/web/dist/assets/Personal-eaXb1zcj.js +0 -1
- package/web/dist/assets/Tabs-BmGtt8E2.js +0 -1
- package/web/dist/assets/drawable-Du_PZrQj.js +0 -1
- package/web/dist/assets/index-Bz_KMRDH.css +0 -1
- package/web/dist/assets/index-CNFH7o55.js +0 -2
- package/web/dist/assets/sections-GalMS0Zv.js +0 -1
- package/web/dist/assets/usePoll-O0sJEw1Y.js +0 -1
package/docs/guides/install.md
CHANGED
|
@@ -3,6 +3,8 @@ group: guides
|
|
|
3
3
|
order: 1
|
|
4
4
|
title: "Install"
|
|
5
5
|
kind: "concept"
|
|
6
|
+
section: "Install"
|
|
7
|
+
description: "The one-command install, what it needs, and the page for each host."
|
|
6
8
|
---
|
|
7
9
|
Geneseed builds a harness (the rules, agents, skills and hooks your AI coding tool loads; see [What a harness is](../understand/harness.md)) and installs it into the tool you already use. Most people need one command.
|
|
8
10
|
|
|
@@ -26,135 +28,24 @@ This puts three commands on your `PATH`: `geneseed` (the CLI you type), `genesee
|
|
|
26
28
|
|
|
27
29
|
Next: [Verify it works](verify.md). To see what the install just wrote, read [What lands on your machine](../understand/on-your-machine.md).
|
|
28
30
|
|
|
29
|
-
## From a clone
|
|
30
|
-
|
|
31
|
-
Clone the repository when npm is out of reach (for example, a corporate network with no registry access), or when you want to change the harness rather than just use it. A clone needs **git** as well as Node 22.3 or newer. git is what updates the clone.
|
|
32
|
-
|
|
33
|
-
Each OS has a one-step installer at the root of the clone. It checks for Node and git. If one is missing, it names what to install and where to get it, then stops. **It never installs anything itself.** When the checks pass, it runs the setup wizard and offers to open the web console.
|
|
34
|
-
|
|
35
|
-
```bash
|
|
36
|
-
git clone https://github.com/Arylmera/Geneseed.git
|
|
37
|
-
cd Geneseed
|
|
38
|
-
./install # macOS, Linux, or a POSIX shell on Windows
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
- **macOS**: you can also double-click `install.command` in the Finder. It opens in Terminal.
|
|
42
|
-
- **Windows**: double-click `install.cmd` in Explorer, or run it from cmd or PowerShell. It needs no bash, WSL or PowerShell script.
|
|
43
|
-
|
|
44
|
-
```powershell
|
|
45
|
-
git clone https://github.com/Arylmera/Geneseed.git
|
|
46
|
-
cd Geneseed
|
|
47
|
-
.\install.cmd
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
Later, run the launcher in the clone: `./geneseed setup` (Windows: `.\geneseed.cmd setup`) re-runs the wizard, and bare `./geneseed` opens the web console. Both launchers need `node` on `PATH`. If it is not there (some version managers only patch interactive shells), set `GENESEED_NODE` to the absolute path of the Node binary.
|
|
51
|
-
|
|
52
|
-
From a clone, every `geneseed …` command on these pages is `./geneseed …` (Windows: `.\geneseed.cmd …`). To drop the `./`, see [Run geneseed from anywhere](run-anywhere.md).
|
|
53
|
-
|
|
54
31
|
## Prerequisites
|
|
55
32
|
|
|
56
33
|
- **Node 22.3 or newer.** This is the only hard requirement. Geneseed has zero runtime dependencies, and nothing it installs needs a second interpreter.
|
|
57
34
|
- **Your agent tool**: OpenCode (recommended), Claude Code, IBM Bob, OpenClaude, or any tool that reads a root instructions file.
|
|
58
35
|
- **git**, for a clone only. A clone updates itself with `git pull`.
|
|
59
|
-
- *Optional:* a document converter (MarkItDown, Pandoc or Docling) if you want the agent to read PDFs and Office files. See [
|
|
60
|
-
|
|
61
|
-
## Without the wizard
|
|
62
|
-
|
|
63
|
-
`setup` needs an interactive terminal. In a script, a CI job, or any shell without one, it stops with exit code 1 and prints the build command to run instead:
|
|
64
|
-
|
|
65
|
-
```
|
|
66
|
-
geneseed build --emit opencode-global --theme neutral
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
`geneseed build` takes the same flags as the generator `geneseed-build`. `--emit` picks the host and its scope: `files`, `opencode`, `opencode-global`, `claude`, `claude-global`, `bob`, `bob-global`, `openclaude` or `openclaude-global`. A `-global` emit writes into the tool's own config directory. A project emit writes into the repo you name with `--out <repo> --root <repo>`. All the other flags (`--theme`, `--footprint`, `--posture`, `--mode`, `--doctrines`, `--exclude-rules`) are covered in [Choose your setup](choose-your-setup.md).
|
|
70
|
-
|
|
71
|
-
To test a build before writing anything, use `geneseed validate` with the same flags. See [Verify](verify.md).
|
|
36
|
+
- *Optional:* a document converter (MarkItDown, Pandoc or Docling) if you want the agent to read PDFs and Office files. See [Reading non-markdown docs](read-non-markdown.md).
|
|
72
37
|
|
|
73
38
|
## Install paths, one per host
|
|
74
39
|
|
|
75
40
|
The wizard runs one of these for you. Use them directly when you script an install, or when you want a scope the wizard did not offer you.
|
|
76
41
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
This writes into OpenCode's config directory: `$OPENCODE_CONFIG_DIR`, else `$XDG_CONFIG_HOME/opencode`, else `~/.config/opencode` (on Windows too: `C:\Users\<you>\.config\opencode`). The install contains `AGENT.md`, `agents/`, `skills/`, the plugins, the `memory/` store, and a merged `opencode.json` whose `instructions` key points at `AGENT.md`. Every repo you open in OpenCode inherits it. You do not need a per-repo file, because the context plugin finds each repo's docs by itself (see [Project context](project-context.md)).
|
|
84
|
-
|
|
85
|
-
The install is non-destructive. A manifest (`.geneseed-manifest.json`) records the files Geneseed owns. A rebuild replaces and prunes only those files, and never touches your own agents, skills, plugins or memory.
|
|
86
|
-
|
|
87
|
-
### OpenCode, per repo
|
|
88
|
-
|
|
89
|
-
```
|
|
90
|
-
geneseed build --emit opencode --out /path/to/repo --root /path/to/repo
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
This writes the bundle (`AGENT.md`, `agents/`, `skills/`, `memory/`, `notebook/`) and OpenCode's own layer (`opencode.json` and `.opencode/`) into one repository. You can commit them or not. To keep the bundle in a subfolder, point `--out` at the subfolder and keep `--root` on the repo, so instruction paths resolve from the project root:
|
|
94
|
-
|
|
95
|
-
```
|
|
96
|
-
geneseed build --emit opencode --out /path/to/repo/Harness --root /path/to/repo
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
### Claude Code
|
|
100
|
-
|
|
101
|
-
```
|
|
102
|
-
geneseed build --emit claude-global # ~/.claude, every repo
|
|
103
|
-
geneseed build --emit claude --out /path/to/repo --root /path/to/repo # one repo
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
The install writes `CLAUDE.md`, `agents/`, `skills/`, `memory/` and `notebook/`, plus hooks in Claude Code's `settings.json`. Hooks are commands Claude Code runs around each tool call. They gate risky actions and load project context (see [Hooks](../concepts/hooks.md)). For a project install the hooks go into `.claude/settings.local.json`, which stays out of git because it names a path on your machine.
|
|
107
|
-
|
|
108
|
-
Every hook calls `geneseed-hook <verb>` through one stable file, the **hook shim** at `~/.geneseed/bin/geneseed-hook` (`geneseed-hook.cmd` on Windows). The shim knows where Node and Geneseed live. If you move or replace Geneseed, one rebuild rewrites the shim and every install works again. `GENESEED_HOME` moves the shim's folder.
|
|
109
|
-
|
|
110
|
-
### OpenClaude
|
|
111
|
-
|
|
112
|
-
```
|
|
113
|
-
geneseed build --emit openclaude-global # ~/.openclaude
|
|
114
|
-
geneseed build --emit openclaude --out /path/to/repo --root /path/to/repo # one repo
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
[OpenClaude](https://openclaude.gitlawb.com/) is a fork of Claude Code that can drive any model. You get the same agents, skills and hooks as Claude Code, under a different config directory. OpenClaude never reads `~/.claude` or a project `.claude/`, so the two installs can sit side by side. The differences:
|
|
118
|
-
|
|
119
|
-
- Per repo, the preamble is written to `.openclaude/CLAUDE.md` rather than a root file, and the hooks go into `.openclaude/settings.local.json`.
|
|
120
|
-
- `$OPENCLAUDE_CONFIG_DIR` moves the global directory (default `~/.openclaude`).
|
|
121
|
-
|
|
122
|
-
OpenClaude support has not yet been verified against a live install.
|
|
123
|
-
|
|
124
|
-
### IBM Bob
|
|
125
|
-
|
|
126
|
-
```
|
|
127
|
-
geneseed build --emit bob-global # ~/.bob
|
|
128
|
-
geneseed build --emit bob --out /path/to/repo --root /path/to/repo # one repo
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
Bob is shaped like Claude Code, so it gets the same agents and skills. Per repo, the preamble goes into a root `AGENTS.md` and the rest into `.bob/`. Globally, everything goes under `~/.bob` (`$BOB_CONFIG_DIR` moves it), and the preamble rides `rules/geneseed.md`, because Bob does not auto-load a global `AGENTS.md`. Bob's hooks refuse an action with exit code 2, and Bob has no `SubagentStop` or `PreCompact` events. Bob support has not yet been verified against a live install.
|
|
132
|
-
|
|
133
|
-
### Any AGENT.md tool
|
|
134
|
-
|
|
135
|
-
```
|
|
136
|
-
geneseed build # renders the plain bundle into ./Harness
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
Point your tool's instructions or rules setting at `Harness/AGENT.md`. If the tool only loads one specific filename, rename or symlink the file (`AGENT.md` to `AGENTS.md` or `CLAUDE.md`). The rules then rest on the agent's own discipline, because these tools have no hooks or plugins to enforce anything (see [Enforced vs. asked](../understand/enforced-vs-asked.md)).
|
|
140
|
-
|
|
141
|
-
Some of these tools also load skills. Their own docs list where:
|
|
142
|
-
|
|
143
|
-
- **Codex CLI** loads a root `AGENTS.md` and `~/.codex/AGENTS.md`, and skills from `~/.codex/skills` or `.agents/skills`.
|
|
144
|
-
- **Cursor** loads `AGENTS.md`, and skills from `.cursor/skills`, `.agents/skills` or `.claude/skills`.
|
|
145
|
-
- **Gemini CLI** reads `GEMINI.md` by default. Set `context.fileName` in its `settings.json` to include `AGENTS.md`. Skills load from `.gemini/skills` or `.agents/skills`.
|
|
146
|
-
|
|
147
|
-
Copy or symlink the bundle's `skills/` to `.agents/skills/` and all three of them see it.
|
|
148
|
-
|
|
149
|
-
### No runtime on the target machine
|
|
150
|
-
|
|
151
|
-
If the machine that will use the harness cannot run Node, run this once on a machine that can:
|
|
152
|
-
|
|
153
|
-
```
|
|
154
|
-
npx geneseed prompt --theme neutral > install-geneseed.md
|
|
155
|
-
```
|
|
42
|
+
- [OpenCode](install-opencode.md): global (recommended) or per repo.
|
|
43
|
+
- [Claude Code](install-claude-code.md): global or per repo, with hooks.
|
|
44
|
+
- [OpenClaude](install-openclaude.md): Claude Code's pieces under OpenClaude's own folder.
|
|
45
|
+
- [IBM Bob](install-bob.md): global or per repo.
|
|
46
|
+
- [Any AGENT.md tool](install-agent-md.md): the plain bundle, or a machine with no runtime.
|
|
156
47
|
|
|
157
|
-
|
|
48
|
+
No npm? Install [from a clone](install-clone.md). Scripting it? See [Install without the wizard](install-scripted.md).
|
|
158
49
|
|
|
159
50
|
---
|
|
160
51
|
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
---
|
|
2
|
+
group: guides
|
|
3
|
+
order: 24
|
|
4
|
+
title: "Finish a loop"
|
|
5
|
+
kind: "concept"
|
|
6
|
+
section: "Loops"
|
|
7
|
+
description: "How a loop ends and gets merged, how to drive one by hand, and fixes for what goes wrong."
|
|
8
|
+
---
|
|
9
|
+
How a loop ends, how to drive the engine by hand, and what to do when a loop misbehaves. To start one, see [Run a loop](run-a-loop.md).
|
|
10
|
+
|
|
11
|
+
## The end: you merge
|
|
12
|
+
|
|
13
|
+
On `$close` the agent removes `LOOP.md` in one last commit. That commit is outside the loop's exemption, so the git gate asks you: saying yes is how you close the loop. The agent then reports the iteration count, the soft iterations to review, the notes, and the branch.
|
|
14
|
+
|
|
15
|
+
**The loop never merges.** Open a pull request from `loop/<slug>`, or review the branch, and merge it yourself. Merging a loop branch always asks, with no exception. Remove the worktree when you are done (`git worktree remove ../<repo>-loop-<slug>`).
|
|
16
|
+
|
|
17
|
+
## Running one by hand (advanced)
|
|
18
|
+
|
|
19
|
+
You can drive the engine without the agent, which helps when you debug a template. Work from a worktree on a `loop/*` branch:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
geneseed loop check --graph my-loop.json # validate a graph file (keep it outside the worktree)
|
|
23
|
+
geneseed loop init --title "Rate limit /orders" \
|
|
24
|
+
--requirement "429 after 100 requests a minute per key" \
|
|
25
|
+
--graph tdd --preset prudent --contracts 'api/openapi.yaml'
|
|
26
|
+
geneseed loop next # what to do now, as one JSON object
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Then repeat `geneseed loop next` and act on what it prints:
|
|
30
|
+
|
|
31
|
+
| `next` prints | You run |
|
|
32
|
+
| --- | --- |
|
|
33
|
+
| `{node, validate: true}` | `geneseed loop score --declared` (or, for a setup brick, `--actions … --write-set '…' --intent …`) |
|
|
34
|
+
| `{node}` | the brick's prompt, then `git status --porcelain \| geneseed loop record --outcome <outcome>` (the iteration head adds `--card '<json>'` when it reports `more`) |
|
|
35
|
+
| `{verify, run}` | exactly the printed `run` command, which pipes the staged numstat into `geneseed loop score --diff` |
|
|
36
|
+
| `{awaiting}` | `geneseed loop decide --verdict ok\|no\|amend --note "…"` |
|
|
37
|
+
| `{commit: true, message_file}` | `git add -A && git commit -F <message_file> && git push -u origin HEAD:loop/<slug>` |
|
|
38
|
+
| `{terminal}` | nothing more: `$close` or `$stop` |
|
|
39
|
+
|
|
40
|
+
Every flag is in `geneseed loop --help`. The full cycle, including discards and notes, is in [Loops](../concepts/loops.md).
|
|
41
|
+
|
|
42
|
+
## Troubleshooting
|
|
43
|
+
|
|
44
|
+
| Symptom | Cause and fix |
|
|
45
|
+
| --- | --- |
|
|
46
|
+
| It stopped as blocking on a small change | The diff touched a file outside the iteration's declared write set, which raises the score to at least the API weight. Check the reasons it shows. Answer ok if the file belongs to the change, or amend with a note to keep it out. |
|
|
47
|
+
| The git gate asks on every iteration's commit | Only one exact shape is exempt. A `cd …` prefix, `git -C`, a quoted refspec (`"HEAD:loop/x"`), `git commit -m` or a message-file path with a space all fall back to asking. Make sure the session works from the worktree itself. |
|
|
48
|
+
| The final `close` commit asks | Expected. The loop is over, and that ask is your consent to close it. |
|
|
49
|
+
| `mutation-check` reported `unavailable` | No mutation tool is configured. The loop continues and records the gap in `LOOP.md`'s notes. Add PIT, Stryker, mutmut or cargo-mutants to make it bite. |
|
|
50
|
+
| `ci-repair` closed at once with "CI does not run for <sha>" | CI has no run for the pushed commit. Enable your pipeline on `loop/*` branches and check that `gh` is logged in. |
|
|
51
|
+
| `geneseed loop init` says `LOOP.md already exists` | A loop is already running in this worktree. Resume it with `geneseed loop next`, or start the new one in another worktree. |
|
|
52
|
+
| `init` prints `problems` | The graph fails `loop check`, for example a cycle not declared as a loop, or a brick that is missing or unavailable. Fix the graph, or pick a shipped template. |
|
|
53
|
+
| A loop is missing from **Loops › Active** | Only loops started with `geneseed loop init` from a version with the registry appear there. Look in the worktree's `LOOP.md` instead. |
|
|
54
|
+
| The agent does not know about loops | The install predates the `loop` skill. Run `geneseed rebuild-all`, then start a new session. |
|
|
@@ -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)
|
package/docs/guides/mcp.md
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
group: guides
|
|
3
|
-
order:
|
|
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
|
-
##
|
|
42
|
+
## The presets
|
|
41
43
|
|
|
42
|
-
[MarkItDown](
|
|
43
|
-
|
|
44
|
-
|
|
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
|
-
|
|
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).
|
package/docs/guides/migrate.md
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
group: guides
|
|
3
|
-
order:
|
|
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:
|
|
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 [
|
|
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).
|