geneseed 3.12.0 → 3.14.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 +2 -2
- package/SHIPPED.md +1 -1
- 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-learn.js +10 -1
- package/bin/geneseed-cli.mjs +10 -14
- package/bin/geneseed-hook.mjs +22 -15
- 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 +3 -1
- 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 +24 -116
- 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 -13
- package/docs/guides/autostart.md +3 -1
- package/docs/guides/choose-your-setup.md +5 -80
- 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 +3 -1
- package/docs/reference/loop-actions.md +20 -0
- package/docs/reference/opencode-plugins.md +14 -118
- 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 +35 -15
- package/harness.config.json +1 -1
- package/js/README.md +30 -13
- package/js/build/args.mjs +374 -0
- package/js/build/driver.mjs +137 -553
- package/js/build/emit-claude.mjs +2 -4
- package/js/build/generate.mjs +6 -3
- package/js/build/render.mjs +5 -9
- package/js/build/source.mjs +3 -11
- package/js/cli-table.json +27 -1
- package/js/hosts/hooks-context.mjs +431 -0
- package/js/hosts/hooks-learn.mjs +275 -0
- package/js/hosts/hooks-prims.mjs +108 -0
- package/js/hosts/hooks.mjs +50 -977
- package/js/hosts/hosts.mjs +12 -4
- package/js/hosts/installs.mjs +5 -6
- package/js/hosts/mcp.mjs +13 -49
- package/js/hosts/memory-files.mjs +181 -0
- package/js/hosts/native.mjs +43 -5
- package/js/hosts/settings.mjs +135 -414
- package/js/hosts/shim.mjs +373 -0
- package/js/inspect/checks-authoring.mjs +21 -828
- package/js/inspect/checks-build.mjs +32 -4
- package/js/inspect/checks-constitution.mjs +493 -0
- package/js/inspect/checks-counts.mjs +242 -0
- package/js/inspect/checks-repo.mjs +17 -8
- package/js/inspect/diff.mjs +4 -1
- package/js/inspect/doctor.mjs +2 -2
- package/js/inspect/inventory.mjs +4 -4
- package/js/inspect/scan.mjs +1 -1
- package/js/inspect/status.mjs +1 -1
- package/js/inspect/validate.mjs +48 -35
- package/js/loop/catalog.mjs +17 -4
- package/js/loop/cli.mjs +52 -16
- package/js/loop/graph.mjs +19 -1
- package/js/loop/registry.mjs +191 -0
- package/js/loop/score.mjs +46 -7
- package/js/loop/state.mjs +157 -19
- package/js/maintain/memory.mjs +1 -1
- package/js/maintain/migrate.mjs +18 -30
- package/js/maintain/setup.mjs +1 -1
- package/js/maintain/uninstall.mjs +47 -88
- package/js/ui/cli.mjs +12 -12
- package/js/web/actions.mjs +39 -4
- package/js/web/api.mjs +34 -21
- package/js/web/docs.mjs +87 -78
- package/js/web/routes.mjs +5 -1
- package/package.json +1 -1
- package/src/agents/explorer.md +2 -2
- package/src/agents/researcher.md +3 -3
- package/src/bricks/README.md +3 -1
- package/src/bricks/adr-challenge.md +20 -0
- package/src/bricks/adr-draft.md +15 -0
- package/src/bricks/characterize.md +17 -0
- package/src/bricks/ci-fix.md +2 -1
- package/src/bricks/ci-triage.md +20 -0
- package/src/bricks/compat-check.md +16 -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 +6 -3
- package/src/bricks/migration-plan.md +21 -0
- package/src/bricks/mutation-check.md +18 -0
- package/src/bricks/plan.md +6 -6
- package/src/bricks/red-test.md +16 -0
- package/src/bricks/review.md +5 -3
- package/src/bricks/spec.md +18 -0
- package/src/bricks/upgrade-scout.md +16 -0
- package/src/loops/api-endpoint.json +31 -0
- package/src/loops/architecture-decision.json +22 -0
- package/src/loops/bugfix.json +1 -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 +8 -5
- 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 +5 -1
- 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 +3 -1
- 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/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 +22 -10
- 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/web/dist/assets/Activity-CjRqZnr-.js +1 -0
- package/web/dist/assets/ActivityDetail-OQTxKBj2.js +1 -0
- package/web/dist/assets/Dashboard-J-xCe_Gk.js +2 -0
- package/web/dist/assets/Docs-CvOZ8akL.js +5 -0
- package/web/dist/assets/{GreenhouseView-C6ibc8IE.js → GreenhouseView-6KDjX8da.js} +1 -1
- package/web/dist/assets/{Installs-DRYjYnxs.js → Installs-MWuhNjSm.js} +2 -2
- package/web/dist/assets/JournalView-C8MrOz2c.js +1 -0
- package/web/dist/assets/Laws-Du0-Zyp2.js +3 -0
- package/web/dist/assets/Library-DOkO0TtB.js +1 -0
- package/web/dist/assets/Loops-Dv_aLByJ.js +2 -0
- package/web/dist/assets/{Markdown-qjM2_ofS.js → Markdown-X2a3qvOh.js} +14 -14
- package/web/dist/assets/{OperatorHudView-Bs7paWmh.js → OperatorHudView-BPP1dtLz.js} +1 -1
- package/web/dist/assets/{Personal-BY5n4gTw.js → Personal-26VPYkK0.js} +1 -1
- package/web/dist/assets/Tabs-BzKuFskD.js +1 -0
- package/web/dist/assets/{usePoll-O0sJEw1Y.js → activity-Dr7ZMBI3.js} +1 -1
- package/web/dist/assets/{api-CyMRbU2x.js → api-D_ixdyEY.js} +1 -1
- package/web/dist/assets/drawable-zVVDbsyw.js +1 -0
- package/web/dist/assets/index-Ctp-4poP.css +1 -0
- package/web/dist/assets/index-KHt3wE_K.js +2 -0
- package/web/dist/assets/usePoll-DD8VjtSg.js +1 -0
- package/web/dist/index.html +3 -3
- package/web/src/pages/Laws.jsx +0 -1
- package/web/dist/assets/Activity-GaaZWXTY.js +0 -1
- package/web/dist/assets/ActivityDetail-4t7d45Du.js +0 -1
- package/web/dist/assets/Dashboard-CYn7Tp16.js +0 -2
- package/web/dist/assets/Docs-BeFKLg2T.js +0 -5
- package/web/dist/assets/JournalView-1HbU1mfg.js +0 -1
- package/web/dist/assets/Laws-DFoG8JWB.js +0 -3
- package/web/dist/assets/Library-DDjgNwz_.js +0 -1
- package/web/dist/assets/Loops-D9VEoO0F.js +0 -1
- package/web/dist/assets/Tabs-ho-EYD8i.js +0 -1
- package/web/dist/assets/drawable-CLS9drMb.js +0 -1
- package/web/dist/assets/index-CX_hXMi5.css +0 -1
- package/web/dist/assets/index-Cjr7XCA3.js +0 -2
package/docs/concepts/loops.md
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
---
|
|
2
2
|
group: concepts
|
|
3
|
-
order: 11
|
|
4
|
-
title: "Loops"
|
|
5
3
|
kind: "concept"
|
|
6
|
-
|
|
4
|
+
section: "Loops"
|
|
5
|
+
order: 16
|
|
6
|
+
title: "Loops"
|
|
7
|
+
link: {"hash":"#/docs/loop-actions","label":"The geneseed loop actions →"}
|
|
8
|
+
description: "What a loop is, the ring of bricks it runs, and how it differs from foreman mode."
|
|
7
9
|
---
|
|
10
|
+
To run one, see [Run a loop](../guides/run-a-loop.md).
|
|
11
|
+
|
|
8
12
|
A **loop** is a requirement worked as small, validated, committed iterations instead of one long
|
|
9
13
|
turn. `geneseed loop` is the state machine: it decides every transition, ceiling, score and stop,
|
|
10
14
|
and hands the agent one node at a time to run. The `loop` [skill](skills.md) is the only thing
|
|
@@ -22,10 +26,11 @@ report. One cycle through the graph back to its head is an **iteration**; the gr
|
|
|
22
26
|
array names every cycle that is allowed to exist, each with a `max` number of times a node inside
|
|
23
27
|
it may be re-entered. Picture it as rings: the outer ring is the iteration itself (plan, apply,
|
|
24
28
|
test, review, back to plan), and inner rings sit inside it for retries (apply failed its test, try
|
|
25
|
-
`apply` again without going all the way back around). The
|
|
26
|
-
`bugfix`, `feature`, `refactor` — all nest a
|
|
27
|
-
|
|
28
|
-
|
|
29
|
+
`apply` again without going all the way back around). The shipped templates that center on
|
|
30
|
+
`apply` — `bugfix`, `feature`, `refactor`, `tdd`, `legacy-refactor`, `deps-upgrade` — all nest a
|
|
31
|
+
short `apply`↔`test` retry ring inside the iteration ring, and most nest a second, wider
|
|
32
|
+
`review-fix` ring around that. `legacy-tests` and `ci-repair` have no `apply` at all: the first
|
|
33
|
+
only ever writes tests, the second repairs CI directly through `ci-fix`.
|
|
29
34
|
|
|
30
35
|
Work closes into a commit whenever the graph re-enters the iteration loop's head — so any setup
|
|
31
36
|
work before the loop starts (reproducing a bug, say) is its own unit, numbered iteration 0, kept
|
|
@@ -42,120 +47,23 @@ all gets exactly 1 — no re-entry — which is also why **every cycle inside an
|
|
|
42
47
|
named inner loop** in the graph JSON: `geneseed loop check` (and `loop init`, which runs the same
|
|
43
48
|
check) refuses a graph with an undeclared cycle inside an iteration, before a single node runs.
|
|
44
49
|
|
|
45
|
-
## Bricks, templates, and the three origins
|
|
46
|
-
|
|
47
|
-
A **brick** is a markdown file: YAML-ish frontmatter (`name`, `description`, `effect` — `read` or
|
|
48
|
-
`mutate` — exactly one of `agent` or `skill`, and `outcomes`) plus a 4-10 line prose body. The
|
|
49
|
-
model never sees the file; `geneseed loop next` hands it the body as the prompt. A **loop
|
|
50
|
-
template** (`bugfix`, `feature`, `refactor`, or one composed by hand) is the graph JSON that wires
|
|
51
|
-
bricks together.
|
|
52
|
-
|
|
53
|
-
Both are looked up across three origins, each able to override the one before it **by name**:
|
|
54
|
-
|
|
55
|
-
| origin | path | who writes it |
|
|
56
|
-
|---|---|---|
|
|
57
|
-
| shipped | `src/bricks/`, `src/loops/` | Geneseed itself — read by the CLI from its own source, never emitted into an install |
|
|
58
|
-
| global | `$XDG_CONFIG_HOME/geneseed/{bricks,loops}` (default `~/.config/geneseed/…`) | the user, for every project on this machine |
|
|
59
|
-
| project | `<repo>/.geneseed/{bricks,loops}` | a team, committed and shared |
|
|
60
|
-
|
|
61
|
-
Precedence is project > global > shipped. A project or global brick named `apply` replaces the
|
|
62
|
-
shipped `apply` everywhere a template references it, without the template changing.
|
|
63
|
-
`geneseed loop check` lists every override it finds, never silently.
|
|
64
|
-
|
|
65
|
-
A per-install skill exclusion is invisible to the CLI — it has no way to know which skills your
|
|
66
|
-
install carries. The `loop` skill covers the gap itself: when composing a graph it skips a brick
|
|
67
|
-
whose `skill` it doesn't have.
|
|
68
|
-
|
|
69
|
-
To add or adapt a brick, use the `brick-forge` skill — ask it, or see
|
|
70
|
-
[the bricks README](https://github.com/geneseed-dev/geneseed/blob/main/src/bricks/README.md) in
|
|
71
|
-
the repository.
|
|
72
|
-
|
|
73
|
-
## Risk, trust, and the three validation levels
|
|
74
|
-
|
|
75
|
-
Before a `mutate` brick runs, the loop scores the card the brick's setup declared: one risk weight
|
|
76
|
-
per action kind it named, and the score is the **max**, not a sum — one contract change outweighs
|
|
77
|
-
ten trivial renames, and ten trivial renames never add up to one. After the brick runs, the loop
|
|
78
|
-
re-scores against the real diff, and the diff can only raise the score, never lower it:
|
|
79
|
-
|
|
80
|
-
- a file touched outside the declared write set raises the score to at least **api** (`0.8`);
|
|
81
|
-
- more than 20 deleted lines raises it to at least the **delete** weight;
|
|
82
|
-
- touching a file listed in the loop's `contracts` raises it to at least the **api** weight.
|
|
83
|
-
|
|
84
|
-
`LOOP.md` itself is excluded from every score and every diff check — it's the engine's own
|
|
85
|
-
bookkeeping, rewritten on every action, never part of the work being judged.
|
|
86
|
-
|
|
87
|
-
The score is checked against a **trust preset** — `--preset` on `geneseed loop init`, editable
|
|
88
|
-
afterward in `LOOP.md`'s `preset` field, applying from the next score on:
|
|
89
|
-
|
|
90
|
-
| preset | silent ≤ | soft ≤ | above soft |
|
|
91
|
-
|---|---|---|---|
|
|
92
|
-
| prudent | 0.1 | 0.3 | blocking |
|
|
93
|
-
| balanced (default) | 0.2 | 0.6 | blocking |
|
|
94
|
-
| aggressive | 0.4 | 0.8 | blocking |
|
|
95
|
-
|
|
96
|
-
Three levels follow from where the score lands:
|
|
97
|
-
|
|
98
|
-
- **silent** — nothing more than the commit trailers below.
|
|
99
|
-
- **soft** — listed under "to review" in the run's final summary; no notification during the run.
|
|
100
|
-
- **blocking** — the run ends. `LOOP.md` is written with `status: awaiting`, and a person has to
|
|
101
|
-
answer with `geneseed loop decide --verdict ok|no|amend`. Amending a verdict marks the decision
|
|
102
|
-
`blocking (amended)` in the trailers rather than silently rewriting it to something else.
|
|
103
|
-
|
|
104
|
-
## `LOOP.md` and its trailers
|
|
105
|
-
|
|
106
|
-
`LOOP.md`, at the worktree root, is both the human-readable record (title, requirement, and the
|
|
107
|
-
rule that you may edit `preset` or `contracts` there) and the engine's own JSON state block. Every
|
|
108
|
-
closing commit carries seven trailers, read straight off that state:
|
|
109
|
-
|
|
110
|
-
```
|
|
111
|
-
Loop-Iteration: <n>
|
|
112
|
-
Loop-Bricks: <every brick name visited this unit, deduplicated>
|
|
113
|
-
Loop-Risk-Declared: <score>
|
|
114
|
-
Loop-Risk-Actual: <score>
|
|
115
|
-
Loop-Threshold: <preset> <silent>/<soft>
|
|
116
|
-
Loop-Decision: silent | soft | blocking[ (amended)]
|
|
117
|
-
Loop-Tests: <what the loop was told about test state>
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
## The `loop/*` branch, and why merge always asks
|
|
121
|
-
|
|
122
|
-
A loop runs in its own worktree, on a branch named `loop/<slug>` — the `loop` skill creates both
|
|
123
|
-
with `git worktree add -b loop/<slug>` before `geneseed loop init` writes `LOOP.md` there.
|
|
124
|
-
While that branch is checked out and `LOOP.md` carries the engine's state marker, the git gate lets
|
|
125
|
-
exactly one commit/push form through without asking:
|
|
126
|
-
|
|
127
|
-
```
|
|
128
|
-
git add -A && git commit -F <message_file> && git push [-u] <remote> HEAD:<loop branch>
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
Nothing else is exempt — not `git commit -m`, not a quoted refspec, not a plain `git push` with no
|
|
132
|
-
explicit `HEAD:<ref>` — any other shape still asks. The exemption only ever covers a `loop/*`
|
|
133
|
-
branch, and never a shared one (`main`, `master`, `develop`, `development`, `release/*`,
|
|
134
|
-
`hotfix/*`). The **final** commit of a run — the one that removes `LOOP.md` on `$close` — is
|
|
135
|
-
outside the exemption too, because the loop is no longer running when it lands; that ask is your
|
|
136
|
-
consent to close it. **Merging a loop branch into anything else always asks, with no exception.**
|
|
137
|
-
The loop reports the branch to merge and the iterations that landed in "to review" — it never
|
|
138
|
-
merges for you.
|
|
139
|
-
|
|
140
|
-
## `geneseed loop` actions
|
|
141
|
-
|
|
142
|
-
| action | what it does |
|
|
143
|
-
|---|---|
|
|
144
|
-
| `check` | lists templates and every brick (available, unavailable, overridden); validates one graph file (`--graph`) or one brick file (`--brick`) |
|
|
145
|
-
| `init` | writes a fresh `LOOP.md` from a template or graph file, under a title, requirement and trust preset |
|
|
146
|
-
| `next` | the only driver of the cycle — returns the next thing to do: run a node, score a card, answer an `awaiting`, or a terminal |
|
|
147
|
-
| `score` | scores a declared card (`--declared`) before a mutate node runs, or the real diff (`--diff`, numstat piped on stdin) before a commit |
|
|
148
|
-
| `record` | records a brick's reported outcome and advances the graph |
|
|
149
|
-
| `decide` | answers an `awaiting` validation with a verdict and a note |
|
|
150
|
-
|
|
151
|
-
Run `geneseed loop --help` for the full flag list.
|
|
152
|
-
|
|
153
50
|
## Limits
|
|
154
51
|
|
|
155
52
|
- **No parallel nodes.** The graph runs one node at a time; there is no fan-out.
|
|
156
|
-
- **A per-install skill exclusion is invisible to the CLI** (see
|
|
53
|
+
- **A per-install skill exclusion is invisible to the CLI** (see [Bricks and their origins](loop-bricks.md)) — the `loop` skill is
|
|
157
54
|
responsible for skipping bricks it can't run, not the engine.
|
|
158
55
|
|
|
56
|
+
## Read on
|
|
57
|
+
|
|
58
|
+
- [Loop templates](loop-templates.md): the shipped graphs, and when to use each.
|
|
59
|
+
- [Bricks and their origins](loop-bricks.md): what a brick is, and where your own override the shipped ones.
|
|
60
|
+
- [Notes and rules](loop-notes.md): what survives an iteration, and what every brick must follow.
|
|
61
|
+
- [Risk, trust and validation levels](loop-risk.md): how a change is scored, and when it stops for you.
|
|
62
|
+
- [Human gates](loop-gates.md): the bricks that always wait for a person.
|
|
63
|
+
- [Contracts and ignored deletions](loop-contracts.md): the globs that raise or ignore risk.
|
|
64
|
+
- [LOOP.md, trailers and the loop branch](loop-branch.md): the state file, the commit trailers, and why merging always asks.
|
|
65
|
+
- [Loop actions](../reference/loop-actions.md): the `geneseed loop` commands.
|
|
66
|
+
|
|
159
67
|
## Not foreman mode
|
|
160
68
|
|
|
161
69
|
A loop and a [foreman-mode](foreman-mode.md) pipeline are both "hand work off and keep going," but
|
package/docs/concepts/lsp.md
CHANGED
|
@@ -3,6 +3,8 @@ group: concepts
|
|
|
3
3
|
order: 13
|
|
4
4
|
title: "Code intelligence (LSP, OpenCode)"
|
|
5
5
|
kind: "concept"
|
|
6
|
+
section: "Configuration"
|
|
7
|
+
description: "Language servers on OpenCode, so the agent sees real diagnostics."
|
|
6
8
|
---
|
|
7
9
|
OpenCode can run **language servers** — the same Language Server Protocol servers your editor uses — so the agent sees real diagnostics, type errors and definitions, not just text. Geneseed turns this on for every language OpenCode ships a server for.
|
|
8
10
|
|
package/docs/concepts/memory.md
CHANGED
package/docs/concepts/rules.md
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
group: concepts
|
|
3
|
-
order:
|
|
3
|
+
order: 3
|
|
4
4
|
title: "Rules (the constitution)"
|
|
5
5
|
kind: "concept"
|
|
6
|
+
section: "Harness"
|
|
7
|
+
description: "The constitution: the standing rules every session carries, in laws and doctrine packs."
|
|
6
8
|
link: {"hash": "#/laws", "label": "Browse the constitution →"}
|
|
7
9
|
---
|
|
8
10
|
The **constitution** is the set of standing rules the agent carries into every session. It is authored in `src/`, rendered into the instructions file your host reads (`AGENT.md`, `CLAUDE.md` or `AGENTS.md`), and comes in layers that differ in one thing: whether you can turn them off.
|
|
@@ -37,7 +39,7 @@ When two instructions disagree, the higher one wins.
|
|
|
37
39
|
| **process** | how a session runs — planning, context economy, docs first, bounded loops, consent before every commit and push |
|
|
38
40
|
| **comms** | how answers are presented — stable reference codes on tracked items, a diagram or table only where it earns its place |
|
|
39
41
|
|
|
40
|
-
All of them are on by default. This install built in {N_PACKS_ACTIVE}, carrying {N_DOCTRINE_RULES} rules between them. You choose packs at build time with `--doctrines`, or drop single rules with `--exclude-rules`; the how-to is in [
|
|
42
|
+
All of them are on by default. This install built in {N_PACKS_ACTIVE}, carrying {N_DOCTRINE_RULES} rules between them. You choose packs at build time with `--doctrines`, or drop single rules with `--exclude-rules`; the how-to is in [Doctrine packs and single rules](../guides/setup-doctrines.md).
|
|
41
43
|
|
|
42
44
|
A pack you leave out **still ships**: every pack file lands under `doctrines/` beside the instructions file whether or not it was built in. A rule that cites an inactive pack still resolves on disk, and you can read the alternatives before turning one on. An inactive pack loses its binding force, not its availability.
|
|
43
45
|
|
package/docs/concepts/skills.md
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
group: concepts
|
|
3
|
-
order:
|
|
3
|
+
order: 5
|
|
4
4
|
title: "Skills"
|
|
5
5
|
kind: "concept"
|
|
6
|
+
section: "Harness"
|
|
7
|
+
description: "Written playbooks the agent follows for a repeatable task."
|
|
6
8
|
link: {"hash": "#/section/skills", "label": "Browse the catalog →"}
|
|
7
9
|
---
|
|
8
10
|
A **skill** is a repeatable workflow written as a markdown playbook: when it applies, the steps, and what "done" looks like. The agent reads the playbook before acting, so a task it has a skill for is done the same careful way every time instead of improvised.
|
package/docs/concepts/themes.md
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
group: concepts
|
|
3
|
-
order:
|
|
3
|
+
order: 11
|
|
4
4
|
title: "Themes"
|
|
5
5
|
kind: "concept"
|
|
6
|
+
section: "Configuration"
|
|
7
|
+
description: "The agent's voice and the words the harness uses, never its structure."
|
|
6
8
|
---
|
|
7
9
|
A **theme** changes the agent's *voice* and the words the harness uses for its own parts. It never changes structure: the same rules, in the same order, with the same files, folders and links, whatever theme you pick.
|
|
8
10
|
|
package/docs/extending.md
CHANGED
|
@@ -336,7 +336,7 @@ render — no citation moves, because none names a number. Then:
|
|
|
336
336
|
3. Its `LEX_<ID>`/`DOC_<ID>` key in all fifteen theme files (the equality arm names each).
|
|
337
337
|
4. The number-keyed tables, which the doctor checks against the canon: `LAW_CLASS`
|
|
338
338
|
(`js/inspect/inventory.mjs`), `LAW_META`/`DOCTRINE_META` (their id pins fail on every shifted
|
|
339
|
-
row), and — only if a hook-gated rule moved — `HOOK_PINNED` in `checks-
|
|
339
|
+
row), and — only if a hook-gated rule moved — `HOOK_PINNED` in `checks-constitution.mjs` names the
|
|
340
340
|
ledger keys, `CONSENT_RULE` and `HOOK_GATED` to move with it. `--exclude-rules` addresses are
|
|
341
341
|
`<pack>.<n>` too, and an install that excluded a shifted doctrine rule excludes its neighbour
|
|
342
342
|
after a re-emit: prefer appending in a pack, and say so in the CHANGELOG when you cannot.
|
|
@@ -391,9 +391,10 @@ Two traps worth knowing before you write the spec:
|
|
|
391
391
|
re-opens bash on all three hosts (OpenCode gates it to `ask`), and `<!-- webfetch: allow -->`
|
|
392
392
|
re-opens web fetch — the researcher is the one spec that carries it.
|
|
393
393
|
- **The console has a fourth, ungated copy of the skill taxonomy.** `SKILL_CATS` in
|
|
394
|
-
`web/src/
|
|
394
|
+
`web/src/lib/lawCats.js` mirrors `SKILL_CLASS` with nothing comparing them (contrast
|
|
395
395
|
`LAW_META`, which *is* cross-checked). Inventing a new *category* means editing that file —
|
|
396
|
-
which drags in the `web/dist` rebuild — and an unknown category
|
|
396
|
+
which drags in the `web/dist` rebuild — and an unknown category lands under Personal in the
|
|
397
|
+
Library (`splitSkills` in `web/src/pages/Library.jsx`) with no warning.
|
|
397
398
|
|
|
398
399
|
|
|
399
400
|
---
|
|
@@ -408,11 +409,12 @@ The `geneseed-` prefix and the `.js` suffix are mechanically load-bearing: the b
|
|
|
408
409
|
1. `adapters/opencode/plugins/geneseed-<name>.js` — ESM, zero dependencies. The factory-export
|
|
409
410
|
convention is real (OpenCode requires it) but **ungated**; the only generic gate on plugin
|
|
410
411
|
source is `node --check` (the one spawn in `authoringProblems`).
|
|
411
|
-
2. `docs/reference/
|
|
412
|
-
|
|
413
|
-
|
|
412
|
+
2. `docs/reference/plugin-<name>.md` — one page titled `geneseed-<name>`, `section: "OpenCode plugins"`,
|
|
413
|
+
linked from the list in `docs/reference/opencode-plugins.md` (gated: every plugin file needs
|
|
414
|
+
both). The count in the overview's intro renders from `{N_PLUGINS}`.
|
|
415
|
+
3. `docs/understand/machine-opencode.md` — a row in the OpenCode map table (Piece · What it does
|
|
414
416
|
for you · Kind · Cost · Turn it off). **Hand-written and ungated** beyond the table parsing.
|
|
415
|
-
4. `docs/concepts/
|
|
417
|
+
4. `docs/concepts/host-matrix.md` — check the capability matrix still tells the truth.
|
|
416
418
|
5. `README.md` — **three** sites: the badge, the `N plugins` prose, and the 🔌 Plugins row.
|
|
417
419
|
6. `SHIPPED.md` — the bare name inside `plugins (…)`; that list must equal the directory exactly,
|
|
418
420
|
in both directions (`tests/unit/web_api.test.mjs:1655`).
|
|
@@ -440,15 +442,28 @@ throws). The same file is what GitHub shows, so write for both
|
|
|
440
442
|
(`docFrontmatter` in `js/web/docs.mjs`):
|
|
441
443
|
|
|
442
444
|
- `group` must match an id in `docs/_groups.json` — gated by `docs_tree.test.mjs`.
|
|
445
|
+
- `section` (optional, a non-empty string — gated by `docs_tree.test.mjs`) files the page under
|
|
446
|
+
a sub-part of its folder in the console's list, breadcrumb and Previous / Next; without one it
|
|
447
|
+
sits under **General**. Sections order by the smallest `order` among their pages, pages within
|
|
448
|
+
a section by `order` (`bySection` in `js/web/docs.mjs`). `description` (optional) is the
|
|
449
|
+
list row's second line. Keep a page to about 700 words: a longer one becomes a section of
|
|
450
|
+
short pages, each standing alone (its own intro line, links to its siblings).
|
|
443
451
|
- `kind` ∈ `markdown | concept | map | glossary | about | cli`; anything else 404s. `map` is a
|
|
444
452
|
concept page whose Piece/Kind/Cost table the console turns into the clickable map.
|
|
445
|
-
- `harness: "claude"|"
|
|
446
|
-
cannot run elsewhere; a reference page says its host in its title instead.
|
|
453
|
+
- `harness: "opencode"|"claude"|"openclaude"|"bob"` hides the page from the other hosts — keep it
|
|
454
|
+
for how-tos that cannot run elsewhere; a reference page says its host in its title instead.
|
|
455
|
+
`claude` is the Claude-engine family: it shows to Claude Code, OpenClaude and Bob alike.
|
|
456
|
+
To name several hosts, give a JSON list: `harness: ["claude", "openclaude"]` shows to exactly
|
|
457
|
+
those hosts — inside a list `claude` is Claude Code alone, never the family — so that page
|
|
458
|
+
is hidden from Bob. The value is JSON like every frontmatter value; `[claude, openclaude]`
|
|
459
|
+
unquoted is refused by `tests/unit/docs_tree.test.mjs`.
|
|
447
460
|
- Link pages with relative `.md` links; the console rewrites them to `#/docs/<id>`. A host-only
|
|
448
|
-
passage is `<!--harness:x-->` + a visible `*(OpenCode only)*` / `*(Claude Code only)*`
|
|
461
|
+
passage is `<!--harness:x-->` + a visible `*(OpenCode only)*` / `*(Claude Code only)*` /
|
|
462
|
+
`*(OpenClaude only)*` / `*(IBM Bob only)*` line, with the same family rule as pages. A
|
|
463
|
+
passage for several hosts lists them, `<!--harness:claude,openclaude-->`, labelled
|
|
464
|
+
`*(Claude Code and OpenClaude only)*` (names in the marker's order, joined by *and*).
|
|
449
465
|
- No `{N_*}` token in `understand/` or `guides/` — GitHub would show it raw.
|
|
450
|
-
- `kind: "markdown"` pulls from a repo file via `source:`, traversal-guarded
|
|
451
|
-
one section with `anchor:` + `slice: true`.
|
|
466
|
+
- `kind: "markdown"` pulls from a repo file via `source:`, traversal-guarded.
|
|
452
467
|
|
|
453
468
|
Inline `<!-- harness:claude -->` blocks strip per host and **fail open** on an unbalanced marker —
|
|
454
469
|
the page renders, wrong, with nothing red.
|
|
@@ -615,7 +630,7 @@ only, at best, on its presence.
|
|
|
615
630
|
| Per-law Principle lines | `web/src/pages/Laws.jsx` | presence and class only, never accuracy |
|
|
616
631
|
| 588 themed constitution titles (42 keys × 14 voices) — `LEX_<ID>` (one per law), `DOC_<ID>` (one per doctrine rule), `PACK_<NAME>` | `themes/*.json` | key presence only — a shipped placeholder is green. `LEX_*` and `DOC_*` are held across the template too, and in both directions; `PACK_*` only across the voices |
|
|
617
632
|
| The README keyword enumerations | `README.md`, `docs/concepts/rules.md` | nothing |
|
|
618
|
-
| The per-host map of what lands on a machine | `docs/understand/
|
|
633
|
+
| The per-host map of what lands on a machine | `docs/understand/machine-opencode.md`, `docs/understand/machine-claude.md` | table shape only, never accuracy |
|
|
619
634
|
| Section labels and page subtitles | `web/src/lib/sections.js`, `web/src/pages/Docs/index.jsx` | nothing |
|
|
620
635
|
| `THEME_BLURBS` (8 of 14), `ART` (8 of 14) | `js/maintain/setup.mjs`, `js/ui/anim.mjs` | nothing — missing entries fall back silently |
|
|
621
636
|
| `LOADED_SIGIL` uniqueness | `themes/*.json` | nothing, and it is load-bearing for theme detection |
|
package/docs/guides/autostart.md
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
group: guides
|
|
3
|
-
order:
|
|
3
|
+
order: 27
|
|
4
4
|
title: "Start the web console at login"
|
|
5
5
|
kind: "concept"
|
|
6
|
+
section: "Keep it running"
|
|
7
|
+
description: "Keep the web console running from login."
|
|
6
8
|
---
|
|
7
9
|
The web console is the only long-running Geneseed process. `geneseed web start` launches it as a background process on `127.0.0.1:4747` and returns immediately. A login item that runs this command once, with `--no-browser`, leaves the console ready whenever you open [http://127.0.0.1:4747](http://127.0.0.1:4747).
|
|
8
10
|
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
group: guides
|
|
3
|
-
order:
|
|
3
|
+
order: 10
|
|
4
4
|
title: "Choose your setup"
|
|
5
5
|
kind: "concept"
|
|
6
|
+
section: "Set up"
|
|
7
|
+
description: "The voice and working style: theme, posture and mode, and where the other setup choices are."
|
|
6
8
|
---
|
|
7
|
-
The setup wizard asks a handful of questions before it builds. Every one has a safe default, so you can accept them all and move on.
|
|
9
|
+
The setup wizard asks a handful of questions before it builds. Every one has a safe default, so you can accept them all and move on. Three pages say what each one changes, so you can pick on purpose: this one covers the voice and how the agent works with you; [Doctrine packs and single rules](setup-doctrines.md) covers which practices bind; [Footprint, loop trust and changing later](setup-footprint.md) covers the token cost, how far a loop goes, and how to change any of it.
|
|
8
10
|
|
|
9
11
|
All of these choices are made **at build time**. The build writes them into the files your agent loads. Nothing switches at runtime. Rebuilds, re-themes and upgrades keep each install's choices, because they are recorded in small marker files beside the install.
|
|
10
12
|
|
|
@@ -52,83 +54,6 @@ geneseed build --emit opencode-global --mode direct # back to the default
|
|
|
52
54
|
|
|
53
55
|
More in [Foreman mode](../concepts/foreman-mode.md).
|
|
54
56
|
|
|
55
|
-
## Loop trust: how far a loop goes before it asks
|
|
56
|
-
|
|
57
|
-
The `loop` skill scores every change it validates and stops to ask once the score passes a threshold. `--trust` sets the preset the skill starts a loop with; the user can still name another one per loop.
|
|
58
|
-
|
|
59
|
-
- **prudent**: asks early, on anything past a rename.
|
|
60
|
-
- **balanced** *(default)*: logic changes and new files pass with a note; API changes and deletions stop.
|
|
61
|
-
- **aggressive**: only an architecture-level change stops the loop.
|
|
62
|
-
|
|
63
|
-
The preset lives in the `loop` skill only, so it costs nothing in the always-on instructions.
|
|
64
|
-
|
|
65
|
-
```
|
|
66
|
-
geneseed build --emit opencode-global --trust prudent
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
## Doctrine packs: which practices bind
|
|
70
|
-
|
|
71
|
-
The harness's rules come in tiers (see [Rules](../concepts/rules.md)). The Ethos and the Rules are always on. The **doctrines** are practices rather than principles, and they ship as packs you choose:
|
|
72
|
-
|
|
73
|
-
| Pack | What it governs |
|
|
74
|
-
| --- | --- |
|
|
75
|
-
| **craft** | how code is written: reuse first, house conventions, docs updated in the same change, the smallest diff |
|
|
76
|
-
| **rigor** | how work is proven: idempotence, honest tests, cover-and-verify, gates that can actually fail |
|
|
77
|
-
| **ops** | how the machine is driven: tool discovery, commands that return, complete teardowns |
|
|
78
|
-
| **process** | how a session runs: planning, context economy, docs first, bounded loops, and consent before every commit and push |
|
|
79
|
-
| **comms** | how answers are presented: stable reference codes on tracked items, and a diagram or table only where it earns its place |
|
|
80
|
-
|
|
81
|
-
Every pack is enabled by default. To keep only some packs, or none:
|
|
82
|
-
|
|
83
|
-
```
|
|
84
|
-
geneseed build --emit opencode-global --doctrines craft,rigor # two packs
|
|
85
|
-
geneseed build --emit opencode-global --doctrines none # Ethos and Rules only
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
The packs always load in the same order (craft, rigor, ops, process, comms), whatever order you type them in. A pack you leave out still ships on disk under `doctrines/`, so you can read it before you turn it on. A clone can set its own default in `harness.config.json` with a `doctrines` array.
|
|
89
|
-
|
|
90
|
-
**Dropping `process` changes what the machine does, not only what the agent reads.** The *Consent Before Push* rule in that pack is enforced at the tool boundary as well as in the prose:
|
|
91
|
-
|
|
92
|
-
- On Claude Code and OpenClaude, the git hook stays wired but stops asking before a commit or push.
|
|
93
|
-
- On OpenCode, a fresh install no longer gets the `git commit*` and `git push*` ask entries in `opencode.json`. On an existing install, entries that are already there are left in place and reported, because Geneseed cannot tell its own entries from ones you typed.
|
|
94
|
-
|
|
95
|
-
The refusals of destructive git and `rm -rf` belong to the always-on Rules, not to the pack, so they stay in every build. See [Enforced vs. asked](../understand/enforced-vs-asked.md).
|
|
96
|
-
|
|
97
|
-
## One rule at a time
|
|
98
|
-
|
|
99
|
-
A pack is all-or-nothing. `--exclude-rules` drops single doctrine rules instead. It takes rule addresses, written `<pack> <n>` or `<pack>.<n>`:
|
|
100
|
-
|
|
101
|
-
```
|
|
102
|
-
geneseed build --emit opencode-global --exclude-rules "process 7"
|
|
103
|
-
geneseed build --emit opencode-global --exclude-rules "process 5,craft 2"
|
|
104
|
-
geneseed build --emit opencode-global --exclude-rules none
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
The number in an address is the rule's position in its pack, so it can change if a rule is added or removed. To see the current addresses, pass an address that does not exist: the build refuses it and lists every valid address. The web console's **Constitution** page has one switch per rule. You stage the changes there and apply them in a single rebuild.
|
|
108
|
-
|
|
109
|
-
Excluding *Consent Before Push* (`process 5` today) takes the commit and push consent gate with it, exactly as dropping the whole `process` pack does. The console and the wizard both warn you before applying it. A pack whose every rule is excluded drops out of the build entirely. See [Exclusions](../concepts/exclusions.md) for excluding whole folders instead.
|
|
110
|
-
|
|
111
|
-
## Footprint: how much loads every turn
|
|
112
|
-
|
|
113
|
-
Footprint controls how much of the rules text sits inside `AGENT.md`, which is loaded on every turn. It changes the token cost, not which rules apply:
|
|
114
|
-
|
|
115
|
-
- **lean** *(default)*: each rule appears in a hand-written short form, with a pointer to the full text. The full text ships beside `AGENT.md`, and the agent reads it when a rule's nuance matters.
|
|
116
|
-
- **full**: every rule's complete text and rationale is inline. This costs the most tokens. It can help a smaller model, which applies a rule's nuance more reliably when the reasoning is always in front of it.
|
|
117
|
-
|
|
118
|
-
```
|
|
119
|
-
geneseed build --emit opencode-global --footprint full
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
Both footprints install the same agents, skills, hooks and plugins. More in [Footprint](../concepts/footprint.md).
|
|
123
|
-
|
|
124
|
-
## Changing a choice later
|
|
125
|
-
|
|
126
|
-
You have three ways to change a choice:
|
|
127
|
-
|
|
128
|
-
- **Re-run the wizard** with `geneseed setup`. It pre-selects what the install already has, so holding Enter cannot widen a set you narrowed on purpose. The wizard does not ask about single rules, but it keeps any rule exclusions already in place.
|
|
129
|
-
- **Use the web console** (`geneseed web`). **Settings** and the **Harnesses** page change theme, footprint and the rest per install. **Constitution** toggles packs and rules.
|
|
130
|
-
- **Run the build yourself.** Watch out: a flag you leave out takes the *generator's* default, not your install's current value. `geneseed status --json` prints, for every install, the exact `geneseed build` command that rebuilds it as it is. Start from that command and change the one flag you want.
|
|
131
|
-
|
|
132
57
|
---
|
|
133
58
|
|
|
134
|
-
**Next:** [
|
|
59
|
+
**Next:** [Doctrine packs and single rules](setup-doctrines.md)
|
package/docs/guides/headless.md
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
group: guides
|
|
3
|
-
order:
|
|
3
|
+
order: 29
|
|
4
4
|
title: "Run in CI / headless"
|
|
5
5
|
kind: "concept"
|
|
6
|
+
section: "OpenCode extras"
|
|
7
|
+
description: "Run OpenCode with the harness in CI, without a terminal."
|
|
6
8
|
harness: "opencode"
|
|
7
9
|
---
|
|
8
10
|
Once the harness is installed for OpenCode (global or per repo), OpenCode can run **non-interactively**, without its terminal UI. The harness's rules, agents and skills then apply in scripts and pipelines too:
|
|
@@ -17,6 +19,6 @@ cat issue.md | opencode run "triage this and propose a fix plan" # pipe inp
|
|
|
17
19
|
|
|
18
20
|
## Things to know
|
|
19
21
|
|
|
20
|
-
- **Permission prompts still apply, and in CI nobody can answer them.** Any command the config marks `ask` blocks a non-interactive run: `rm -rf`, and `git commit` and `git push` whenever the *Consent Before Push* rule is built in (it is part of the `process` pack; see [
|
|
22
|
+
- **Permission prompts still apply, and in CI nobody can answer them.** Any command the config marks `ask` blocks a non-interactive run: `rm -rf`, and `git commit` and `git push` whenever the *Consent Before Push* rule is built in (it is part of the `process` pack; see [Doctrine packs and single rules](setup-doctrines.md)). A CI job that has to commit should set those commands back to `"allow"` in its own `permission.bash` map, or limit the run to read-only work. Do not disable the guards wholesale.
|
|
21
23
|
- **`--pure`** runs OpenCode without any local or global config. Use it to reproduce a bug without the harness in the way, or to confirm that a behaviour comes from the harness.
|
|
22
|
-
- **The plugins still load.** The context plugin injects the repo's docs, and the learn plugin still writes memory when the session goes idle. To change their behaviour for a run, set `GENESEED_GUARD=warn` or `off`, `GENESEED_CONTEXT_INJECT=off`, or `GENESEED_DEBUG=1`. See [
|
|
24
|
+
- **The plugins still load.** The context plugin injects the repo's docs, and the learn plugin still writes memory when the session goes idle. To change their behaviour for a run, set `GENESEED_GUARD=warn` or `off`, `GENESEED_CONTEXT_INJECT=off`, or `GENESEED_DEBUG=1`. See [Context and memory variables](../reference/env-context.md) and [OpenCode plugins](../reference/opencode-plugins.md).
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
group: guides
|
|
3
|
+
order: 7
|
|
4
|
+
title: "Install for any AGENT.md tool"
|
|
5
|
+
kind: "concept"
|
|
6
|
+
section: "Install"
|
|
7
|
+
description: "The plain bundle for Codex CLI, Cursor, Gemini CLI and the like, or a prompt for a machine with no runtime."
|
|
8
|
+
---
|
|
9
|
+
The setup wizard runs this for you (see [Install](install.md)). Use the commands directly when you script an install, or when you want a scope the wizard did not offer you.
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
geneseed build # renders the plain bundle into ./Harness
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Point your tool's instructions or rules setting at `Harness/AGENT.md`. If the tool only loads one specific filename, rename or symlink the file (`AGENT.md` to `AGENTS.md` or `CLAUDE.md`). The rules then rest on the agent's own discipline, because these tools have no hooks or plugins to enforce anything (see [Enforced vs. asked](../understand/enforced-vs-asked.md)).
|
|
16
|
+
|
|
17
|
+
Some of these tools also load skills. Their own docs list where:
|
|
18
|
+
|
|
19
|
+
- **Codex CLI** loads a root `AGENTS.md` and `~/.codex/AGENTS.md`, and skills from `~/.codex/skills` or `.agents/skills`.
|
|
20
|
+
- **Cursor** loads `AGENTS.md`, and skills from `.cursor/skills`, `.agents/skills` or `.claude/skills`.
|
|
21
|
+
- **Gemini CLI** reads `GEMINI.md` by default. Set `context.fileName` in its `settings.json` to include `AGENTS.md`. Skills load from `.gemini/skills` or `.agents/skills`.
|
|
22
|
+
|
|
23
|
+
Copy or symlink the bundle's `skills/` to `.agents/skills/` and all three of them see it.
|
|
24
|
+
|
|
25
|
+
## No runtime on the target machine
|
|
26
|
+
|
|
27
|
+
If the machine that will use the harness cannot run Node, run this once on a machine that can:
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
npx geneseed prompt --theme neutral > install-geneseed.md
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
This produces one self-contained prompt that recreates the whole file tree. Paste it into any capable agent on the target machine. There is nothing to install and no build step. Any theme works the same way.
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
**Next:** [Verify it works](verify.md) · [Choose your setup](choose-your-setup.md) · [What lands on your machine](../understand/on-your-machine.md)
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
group: guides
|
|
3
|
+
order: 6
|
|
4
|
+
title: "Install for IBM Bob"
|
|
5
|
+
kind: "concept"
|
|
6
|
+
section: "Install"
|
|
7
|
+
description: "The IBM Bob install, global or per repo, and how its hooks differ."
|
|
8
|
+
---
|
|
9
|
+
The setup wizard runs this for you (see [Install](install.md)). Use the commands directly when you script an install, or when you want a scope the wizard did not offer you.
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
geneseed build --emit bob-global # ~/.bob
|
|
13
|
+
geneseed build --emit bob --out /path/to/repo --root /path/to/repo # one repo
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Bob is shaped like Claude Code, so it gets the same agents and skills. Per repo, the preamble goes into a root `AGENTS.md` and the rest into `.bob/`. Globally, everything goes under `~/.bob` (`$BOB_CONFIG_DIR` moves it), and the preamble rides `rules/geneseed.md`, because Bob does not auto-load a global `AGENTS.md`. Bob's hooks refuse an action with exit code 2, and Bob has no `SubagentStop` or `PreCompact` events. Bob support has not yet been verified against a live install.
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
**Next:** [Verify it works](verify.md) · [Choose your setup](choose-your-setup.md) · [What lands on your machine](../understand/on-your-machine.md)
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
group: guides
|
|
3
|
+
order: 4
|
|
4
|
+
title: "Install for Claude Code"
|
|
5
|
+
kind: "concept"
|
|
6
|
+
section: "Install"
|
|
7
|
+
description: "The Claude Code install, global or per repo, and the hook shim every hook calls."
|
|
8
|
+
---
|
|
9
|
+
The setup wizard runs this for you (see [Install](install.md)). Use the commands directly when you script an install, or when you want a scope the wizard did not offer you.
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
geneseed build --emit claude-global # ~/.claude, every repo
|
|
13
|
+
geneseed build --emit claude --out /path/to/repo --root /path/to/repo # one repo
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
The install writes `CLAUDE.md`, `agents/`, `skills/`, `memory/` and `notebook/`, plus hooks in Claude Code's `settings.json`. Hooks are commands Claude Code runs around each tool call. They gate risky actions and load project context (see [Hooks](../concepts/hooks.md)). For a project install the hooks go into `.claude/settings.local.json`, which stays out of git because it names a path on your machine.
|
|
17
|
+
|
|
18
|
+
Every hook calls `geneseed-hook <verb>` through one stable file, the **hook shim** at `~/.geneseed/bin/geneseed-hook` (`geneseed-hook.cmd` on Windows). The shim knows where Node and Geneseed live. If you move or replace Geneseed, one rebuild rewrites the shim and every install works again. `GENESEED_HOME` moves the shim's folder.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
**Next:** [Verify it works](verify.md) · [Choose your setup](choose-your-setup.md) · [What lands on your machine](../understand/on-your-machine.md)
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
group: guides
|
|
3
|
+
order: 2
|
|
4
|
+
title: "Install from a clone"
|
|
5
|
+
kind: "concept"
|
|
6
|
+
section: "Install"
|
|
7
|
+
description: "Install from a git clone when npm is out of reach, or when you want to change the harness."
|
|
8
|
+
---
|
|
9
|
+
Clone the repository when npm is out of reach (for example, a corporate network with no registry access), or when you want to change the harness rather than just use it. A clone needs **git** as well as Node 22.3 or newer. git is what updates the clone.
|
|
10
|
+
|
|
11
|
+
Each OS has a one-step installer at the root of the clone. It checks for Node and git. If one is missing, it names what to install and where to get it, then stops. **It never installs anything itself.** When the checks pass, it runs the setup wizard and offers to open the web console.
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
git clone https://github.com/Arylmera/Geneseed.git
|
|
15
|
+
cd Geneseed
|
|
16
|
+
./install # macOS, Linux, or a POSIX shell on Windows
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
- **macOS**: you can also double-click `install.command` in the Finder. It opens in Terminal.
|
|
20
|
+
- **Windows**: double-click `install.cmd` in Explorer, or run it from cmd or PowerShell. It needs no bash, WSL or PowerShell script.
|
|
21
|
+
|
|
22
|
+
```powershell
|
|
23
|
+
git clone https://github.com/Arylmera/Geneseed.git
|
|
24
|
+
cd Geneseed
|
|
25
|
+
.\install.cmd
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Later, run the launcher in the clone: `./geneseed setup` (Windows: `.\geneseed.cmd setup`) re-runs the wizard, and bare `./geneseed` opens the web console. Both launchers need `node` on `PATH`. If it is not there (some version managers only patch interactive shells), set `GENESEED_NODE` to the absolute path of the Node binary.
|
|
29
|
+
|
|
30
|
+
From a clone, every `geneseed …` command on these pages is `./geneseed …` (Windows: `.\geneseed.cmd …`). To drop the `./`, see [Run geneseed from anywhere](run-anywhere.md).
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
**Next:** [Verify it works](verify.md) · [Install](install.md)
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
group: guides
|
|
3
|
+
order: 5
|
|
4
|
+
title: "Install for OpenClaude"
|
|
5
|
+
kind: "concept"
|
|
6
|
+
section: "Install"
|
|
7
|
+
description: "The OpenClaude install: Claude Code's pieces under OpenClaude's own config folder."
|
|
8
|
+
---
|
|
9
|
+
The setup wizard runs this for you (see [Install](install.md)). Use the commands directly when you script an install, or when you want a scope the wizard did not offer you.
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
geneseed build --emit openclaude-global # ~/.openclaude
|
|
13
|
+
geneseed build --emit openclaude --out /path/to/repo --root /path/to/repo # one repo
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
[OpenClaude](https://openclaude.gitlawb.com/) is a fork of Claude Code that can drive any model. You get the same agents, skills and hooks as Claude Code, under a different config directory. OpenClaude never reads `~/.claude` or a project `.claude/`, so the two installs can sit side by side. The differences:
|
|
17
|
+
|
|
18
|
+
- Per repo, the preamble is written to `.openclaude/CLAUDE.md` rather than a root file, and the hooks go into `.openclaude/settings.local.json`.
|
|
19
|
+
- `$OPENCLAUDE_CONFIG_DIR` moves the global directory (default `~/.openclaude`).
|
|
20
|
+
|
|
21
|
+
OpenClaude support has not yet been verified against a live install.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
**Next:** [Verify it works](verify.md) · [Choose your setup](choose-your-setup.md) · [What lands on your machine](../understand/on-your-machine.md)
|