geneseed 3.12.0 → 3.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +121 -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/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 +23 -8
- 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 +11 -3
- package/js/cli-table.json +27 -1
- package/js/hosts/mcp.mjs +1 -1
- package/js/hosts/native.mjs +43 -5
- package/js/inspect/checks-build.mjs +28 -0
- package/js/loop/catalog.mjs +12 -1
- package/js/loop/cli.mjs +28 -6
- package/js/loop/graph.mjs +18 -0
- package/js/loop/registry.mjs +196 -0
- package/js/loop/score.mjs +45 -6
- package/js/loop/state.mjs +125 -11
- package/js/maintain/setup.mjs +1 -1
- package/js/web/actions.mjs +25 -0
- package/js/web/api.mjs +13 -0
- package/js/web/docs.mjs +64 -12
- 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-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-CyMRbU2x.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-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/FilterInput-CVyqmYWM.js +0 -1
- package/web/dist/assets/GreenhouseView-C6ibc8IE.js +0 -2
- package/web/dist/assets/Installs-DRYjYnxs.js +0 -2
- 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/OperatorHudView-Bs7paWmh.js +0 -2
- package/web/dist/assets/Personal-BY5n4gTw.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/web/dist/assets/sections-GalMS0Zv.js +0 -1
- package/web/dist/assets/usePoll-O0sJEw1Y.js +0 -1
package/docs/guides/upgrade.md
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
group: guides
|
|
3
|
-
order:
|
|
3
|
+
order: 25
|
|
4
4
|
title: "Upgrade"
|
|
5
5
|
kind: "concept"
|
|
6
|
+
section: "Keep it running"
|
|
7
|
+
description: "Get a new version onto every install, and keep your local edits."
|
|
6
8
|
---
|
|
7
9
|
Upgrading happens in two steps: get the new Geneseed, then rebuild every install from it. Editing or updating Geneseed changes nothing on your machine until something rebuilds. The route depends on how you installed.
|
|
8
10
|
|
package/docs/guides/verify.md
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
group: guides
|
|
3
|
-
order:
|
|
3
|
+
order: 13
|
|
4
4
|
title: "Verify it works"
|
|
5
5
|
kind: "concept"
|
|
6
|
+
section: "Set up"
|
|
7
|
+
description: "Check an install works, right after installing or when something feels off."
|
|
6
8
|
---
|
|
7
9
|
Four checks, from quickest to most thorough. The first one alone tells you whether the harness loaded.
|
|
8
10
|
|
package/docs/guides/wiki.md
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
group: guides
|
|
3
|
-
order:
|
|
3
|
+
order: 15
|
|
4
4
|
title: "Connect your wiki"
|
|
5
5
|
kind: "concept"
|
|
6
|
+
section: "Set up"
|
|
7
|
+
description: "Give the agent your own notes, machine-wide."
|
|
6
8
|
---
|
|
7
9
|
If you keep a personal knowledge base on this machine, such as an Obsidian vault or any folder of interlinked markdown, you can declare it once. The agent then reads from it and writes to it while following your own structure. This is optional. Until you declare a wiki, the feature stays off.
|
|
8
10
|
|
package/docs/guides/worktree.md
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
group: guides
|
|
3
|
-
order:
|
|
3
|
+
order: 30
|
|
4
4
|
title: "Add git-worktree isolation"
|
|
5
5
|
kind: "concept"
|
|
6
|
+
section: "OpenCode extras"
|
|
7
|
+
description: "Add the optional third-party git-worktree isolation to OpenCode."
|
|
6
8
|
harness: "opencode"
|
|
7
9
|
---
|
|
8
10
|
This is a third-party, optional OpenCode plugin. Geneseed does not ship it or install it.
|
package/docs/reference/about.md
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
group: reference
|
|
3
|
-
order:
|
|
3
|
+
order: 21
|
|
4
4
|
title: "About — version, license, links"
|
|
5
5
|
kind: "about"
|
|
6
|
+
section: "Glossary & about"
|
|
7
|
+
description: "Your version, theme and host, the license, and where updates come from."
|
|
6
8
|
---
|
|
7
9
|
The console fills this page from your install: the version, the deployed theme and host, and where updates come from. Geneseed is MIT-licensed; the source is at [github.com/Arylmera/Geneseed](https://github.com/Arylmera/Geneseed).
|
package/docs/reference/cli.md
CHANGED
|
@@ -3,5 +3,7 @@ group: reference
|
|
|
3
3
|
order: 1
|
|
4
4
|
title: "CLI — every subcommand"
|
|
5
5
|
kind: "cli"
|
|
6
|
+
section: "CLI & environment"
|
|
7
|
+
description: "Every geneseed subcommand, from the CLI's own table."
|
|
6
8
|
---
|
|
7
9
|
The console renders this page from `js/cli-table.json`, the CLI's own description of itself, so it is always in step with the installed version. Outside the console, `geneseed --help` lists every command and `geneseed <command> --help` describes one.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
group: reference
|
|
3
|
+
order: 4
|
|
4
|
+
title: "Context and memory variables"
|
|
5
|
+
kind: "concept"
|
|
6
|
+
section: "CLI & environment"
|
|
7
|
+
description: "The variables that steer what loads at session start and where memory is written."
|
|
8
|
+
---
|
|
9
|
+
The environment variables that steer context injection and memory. None is required. The rest are on [Environment variables](environment.md).
|
|
10
|
+
|
|
11
|
+
"Plugin" means one of the OpenCode plugins — see [OpenCode plugins](opencode-plugins.md). "Hook" means `geneseed-hook`, the small binary your tool's settings call on Claude Code, Bob and OpenClaude (see the [glossary](glossary.md)).
|
|
12
|
+
|
|
13
|
+
## Context injection
|
|
14
|
+
|
|
15
|
+
What gets loaded into the agent's context at session start — your project's docs and your machine wiki. See [Project context](../guides/project-context.md).
|
|
16
|
+
|
|
17
|
+
| Variable | Read by | Effect |
|
|
18
|
+
| --- | --- | --- |
|
|
19
|
+
| `GENESEED_CONTEXT` | context plugin, context hook | Explicit `context.json` manifest path; overrides discovery. |
|
|
20
|
+
| `GENESEED_ROOT` | context hook | Repo root to discover docs from (default: the current directory). |
|
|
21
|
+
| `GENESEED_WIKI` | context + guard plugins, context hook, web console | Explicit `wiki.jsonc` path (default `$GENESEED_HARNESS/wiki.jsonc`, else beside the install). |
|
|
22
|
+
| `GENESEED_STACK_GLOBAL` | context hook, Claude Code project build | `1` lets a global and a project install of the same host both inject. By default the project install makes the global one stand down. Rebuild the project install after changing it. |
|
|
23
|
+
| `GENESEED_CONTEXT_INJECT` | context plugin | `off` disables injection; the agent is only *asked* to read the docs. |
|
|
24
|
+
| `GENESEED_CONTEXT_VISIBLE` | context plugin | `1` shows the visible `PROJECT CONTEXT` block instead of the invisible per-request delivery. |
|
|
25
|
+
| `GENESEED_CONTEXT_TRANSFORM` | context plugin | Legacy. `0`/`off` = same as `GENESEED_CONTEXT_VISIBLE=1`; `1` matches the default. |
|
|
26
|
+
| `GENESEED_EAGER_FILE_KB` / `GENESEED_EAGER_TOTAL_KB` | context plugin | Per-file / total budget for docs injected in full (default 16 / 48). An oversized file is listed instead, never truncated. |
|
|
27
|
+
| `GENESEED_LAZY_HEADINGS` | context plugin | Cap on headings read for listed docs per session (default 64). |
|
|
28
|
+
| `GENESEED_WIKI_LAZY_LIMIT` | context plugin | Cap on wiki notes listed per wiki per session (default 200; beyond it the listing ends with a count). |
|
|
29
|
+
|
|
30
|
+
## Memory and learn
|
|
31
|
+
|
|
32
|
+
Where distilled memories land at session end, and which model distils them. See [Memory](../concepts/memory.md).
|
|
33
|
+
|
|
34
|
+
| Variable | Read by | Effect |
|
|
35
|
+
| --- | --- | --- |
|
|
36
|
+
| `GENESEED_HARNESS` | learn, context, guard plugins; CLI | Base whose `memory/` is written (and where `wiki.jsonc` is looked up). Optional — the plugin finds the in-config store by itself; set it to pin the location. |
|
|
37
|
+
| `GENESEED_MEMORY` | learn plugin, CLI | Explicit memory dir; wins over `GENESEED_HARNESS`. |
|
|
38
|
+
| `GENESEED_MODEL` | learn + context plugins | `provider/model` fallback when the session's model can't be read from the transcript. |
|
|
39
|
+
| `GENESEED_LLM` | learn hook (Claude Code, Bob, OpenClaude) | Model CLI used to distil, e.g. `claude -p`. Unset, the hook prints the prompt instead of distilling. |
|
|
40
|
+
| `GENESEED_LEARN_DEBOUNCE_MS` | learn plugin | Quiet period before distilling, in ms (default 60000). |
|
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
---
|
|
2
2
|
group: reference
|
|
3
|
-
order:
|
|
3
|
+
order: 3
|
|
4
4
|
title: "Environment variables"
|
|
5
5
|
kind: "concept"
|
|
6
|
+
section: "CLI & environment"
|
|
7
|
+
description: "Where Geneseed installs, how the CLI and console behave, and where the other variables are listed."
|
|
6
8
|
---
|
|
7
|
-
|
|
9
|
+
The environment variables Geneseed reads, grouped by what they change. None is required: an install works with all of them unset. Set one in your shell profile (or your tool's environment) when you need to move a default.
|
|
8
10
|
|
|
9
11
|
"Plugin" means one of the OpenCode plugins — see [OpenCode plugins](opencode-plugins.md). "Hook" means `geneseed-hook`, the small binary your tool's settings call on Claude Code, Bob and OpenClaude (see the [glossary](glossary.md)).
|
|
10
12
|
|
|
11
|
-
|
|
13
|
+
The variables that steer context injection and memory are on [Context and memory variables](env-context.md).
|
|
14
|
+
|
|
15
|
+
## Where things install
|
|
12
16
|
|
|
13
17
|
Where Geneseed writes an install, and what an upgrade re-renders.
|
|
14
18
|
|
|
@@ -26,64 +30,11 @@ Where Geneseed writes an install, and what an upgrade re-renders.
|
|
|
26
30
|
| `GENESEED_PRIMARY` | `geneseed build` | `1` also emits the primary orchestrator agent (OpenCode). |
|
|
27
31
|
| `GENESEED_COMMANDS` | `geneseed build` | `1` also emits the `/slash` command layer (OpenCode). |
|
|
28
32
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
What gets loaded into the agent's context at session start — your project's docs and your machine wiki. See [Project context](../guides/project-context.md).
|
|
32
|
-
|
|
33
|
-
| Variable | Read by | Effect |
|
|
34
|
-
| --- | --- | --- |
|
|
35
|
-
| `GENESEED_CONTEXT` | context plugin, context hook | Explicit `context.json` manifest path; overrides discovery. |
|
|
36
|
-
| `GENESEED_ROOT` | context hook | Repo root to discover docs from (default: the current directory). |
|
|
37
|
-
| `GENESEED_WIKI` | context + guard plugins, context hook, web console | Explicit `wiki.jsonc` path (default `$GENESEED_HARNESS/wiki.jsonc`, else beside the install). |
|
|
38
|
-
| `GENESEED_STACK_GLOBAL` | context hook, Claude Code project build | `1` lets a global and a project install of the same host both inject. By default the project install makes the global one stand down. Rebuild the project install after changing it. |
|
|
39
|
-
| `GENESEED_CONTEXT_INJECT` | context plugin | `off` disables injection; the agent is only *asked* to read the docs. |
|
|
40
|
-
| `GENESEED_CONTEXT_VISIBLE` | context plugin | `1` shows the visible `PROJECT CONTEXT` block instead of the invisible per-request delivery. |
|
|
41
|
-
| `GENESEED_CONTEXT_TRANSFORM` | context plugin | Legacy. `0`/`off` = same as `GENESEED_CONTEXT_VISIBLE=1`; `1` matches the default. |
|
|
42
|
-
| `GENESEED_EAGER_FILE_KB` / `GENESEED_EAGER_TOTAL_KB` | context plugin | Per-file / total budget for docs injected in full (default 16 / 48). An oversized file is listed instead, never truncated. |
|
|
43
|
-
| `GENESEED_LAZY_HEADINGS` | context plugin | Cap on headings read for listed docs per session (default 64). |
|
|
44
|
-
| `GENESEED_WIKI_LAZY_LIMIT` | context plugin | Cap on wiki notes listed per wiki per session (default 200; beyond it the listing ends with a count). |
|
|
45
|
-
|
|
46
|
-
### Memory and learn
|
|
47
|
-
|
|
48
|
-
Where distilled memories land at session end, and which model distils them. See [Memory](../concepts/memory.md).
|
|
49
|
-
|
|
50
|
-
| Variable | Read by | Effect |
|
|
51
|
-
| --- | --- | --- |
|
|
52
|
-
| `GENESEED_HARNESS` | learn, context, guard plugins; CLI | Base whose `memory/` is written (and where `wiki.jsonc` is looked up). Optional — the plugin finds the in-config store by itself; set it to pin the location. |
|
|
53
|
-
| `GENESEED_MEMORY` | learn plugin, CLI | Explicit memory dir; wins over `GENESEED_HARNESS`. |
|
|
54
|
-
| `GENESEED_MODEL` | learn + context plugins | `provider/model` fallback when the session's model can't be read from the transcript. |
|
|
55
|
-
| `GENESEED_LLM` | learn hook (Claude Code, Bob, OpenClaude) | Model CLI used to distil, e.g. `claude -p`. Unset, the hook prints the prompt instead of distilling. |
|
|
56
|
-
| `GENESEED_LEARN_DEBOUNCE_MS` | learn plugin | Quiet period before distilling, in ms (default 60000). |
|
|
57
|
-
|
|
58
|
-
### Guard
|
|
59
|
-
|
|
60
|
-
The OpenCode safety guard. On Claude Code, Bob and OpenClaude the same gates are hooks and have no environment switch.
|
|
33
|
+
## OpenCode plugin variables
|
|
61
34
|
|
|
62
|
-
|
|
63
|
-
| --- | --- | --- |
|
|
64
|
-
| `GENESEED_GUARD` | guard plugin | `warn` downgrades every block to a logged warning; `off` disables the guard. |
|
|
65
|
-
|
|
66
|
-
### Notifications
|
|
67
|
-
|
|
68
|
-
The desktop ping when a long turn finishes (OpenCode).
|
|
69
|
-
|
|
70
|
-
| Variable | Read by | Effect |
|
|
71
|
-
| --- | --- | --- |
|
|
72
|
-
| `GENESEED_NOTIFY` | notify plugin | `off` disables notifications. |
|
|
73
|
-
| `GENESEED_NOTIFY_MIN_SECONDS` | notify plugin | Minimum turn length before notifying (default 30; `0` = every turn). |
|
|
74
|
-
| `GENESEED_NOTIFY_TITLE` | notify plugin | Notification title (default `Geneseed`). |
|
|
75
|
-
|
|
76
|
-
### Other OpenCode plugins
|
|
77
|
-
|
|
78
|
-
| Variable | Read by | Effect |
|
|
79
|
-
| --- | --- | --- |
|
|
80
|
-
| `GENESEED_PONYTAIL` | ponytail plugin | Starting minimal-code level: `lite` \| `full` \| `ultra` \| `off` (default `off`; switch live with `/ponytail <level>`). |
|
|
81
|
-
| `GENESEED_WORKFLOWS_DIR` | workflow plugin | Directory the `workflow` tool loads saved scripts from. |
|
|
82
|
-
| `GENESEED_ACTIVITY` | activity plugin | `off` stops writing the live-activity files the web console reads. |
|
|
83
|
-
| `GENESEED_DEBUG` | every plugin but guard and learn (which always log) | `1` logs what each plugin decided to stderr. |
|
|
84
|
-
| `OPENCODE_DISABLE_LSP_DOWNLOAD` | OpenCode itself | `true` stops OpenCode downloading language servers — for air-gapped machines; install each server yourself. |
|
|
35
|
+
Each OpenCode plugin's page lists its own switches: [guard](plugin-guard.md) (`GENESEED_GUARD`), [notify](plugin-notify.md) (`GENESEED_NOTIFY`, `GENESEED_NOTIFY_MIN_SECONDS`, `GENESEED_NOTIFY_TITLE`), [ponytail](plugin-ponytail.md) (`GENESEED_PONYTAIL`), [workflow](plugin-workflow.md) (`GENESEED_WORKFLOWS_DIR`) and [activity](plugin-activity.md) (`GENESEED_ACTIVITY`). `GENESEED_DEBUG=1` makes every plugin but guard and learn (which always log) say what it decided on stderr. `OPENCODE_DISABLE_LSP_DOWNLOAD` belongs to OpenCode itself: see [Language servers](../concepts/lsp.md).
|
|
85
36
|
|
|
86
|
-
|
|
37
|
+
## Web console and CLI
|
|
87
38
|
|
|
88
39
|
How the `geneseed` command behaves and prints.
|
|
89
40
|
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
group: reference
|
|
3
|
-
order:
|
|
3
|
+
order: 20
|
|
4
4
|
title: "Glossary"
|
|
5
5
|
kind: "glossary"
|
|
6
|
+
section: "Glossary & about"
|
|
7
|
+
description: "Every Geneseed word you won't find in a programming glossary, with a dev analogy."
|
|
6
8
|
---
|
|
7
9
|
Every word Geneseed uses that you would not find in a general programming glossary. The console shows this table in your installed theme's voice beside the neutral words; on GitHub you read the neutral ones.
|
|
8
10
|
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
group: reference
|
|
3
|
+
order: 2
|
|
4
|
+
title: "Loop actions"
|
|
5
|
+
kind: "concept"
|
|
6
|
+
section: "CLI & environment"
|
|
7
|
+
description: "The geneseed loop actions, one line each."
|
|
8
|
+
---
|
|
9
|
+
The actions of `geneseed loop`, the state machine behind [Loops](../concepts/loops.md). The `loop` skill calls them for you; [Finish a loop](../guides/loop-finish.md) shows how to drive one by hand.
|
|
10
|
+
|
|
11
|
+
| action | what it does |
|
|
12
|
+
|---|---|
|
|
13
|
+
| `check` | lists templates and every brick (available, unavailable, overridden); validates one graph file (`--graph`) or one brick file (`--brick`) |
|
|
14
|
+
| `init` | writes a fresh `LOOP.md` from a template or graph file, under a title, requirement and trust preset |
|
|
15
|
+
| `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 |
|
|
16
|
+
| `score` | scores a declared card (`--declared`) before a mutate node runs, or the real diff (`--diff`, numstat piped on stdin) before a commit |
|
|
17
|
+
| `record` | records a brick's reported outcome and advances the graph; `--note` or `--note-file <path>` carries a finding (a read brick's plan or review findings) into `LOOP.md`'s notes so it survives the unit |
|
|
18
|
+
| `decide` | answers an `awaiting` validation with a verdict and a note |
|
|
19
|
+
|
|
20
|
+
Run `geneseed loop --help` for the full flag list.
|
|
@@ -1,132 +1,28 @@
|
|
|
1
1
|
---
|
|
2
2
|
group: reference
|
|
3
|
-
order: 5
|
|
4
|
-
title: "OpenCode plugins"
|
|
5
3
|
kind: "concept"
|
|
4
|
+
section: "OpenCode plugins"
|
|
5
|
+
order: 12
|
|
6
|
+
title: "OpenCode plugins"
|
|
7
|
+
description: "What the OpenCode plugins are, how they install, and the folders that silence them."
|
|
6
8
|
---
|
|
7
9
|
On OpenCode, Geneseed's automation runs as {N_PLUGINS} plugins: small JavaScript files OpenCode loads from its `plugins/` directory at startup. They are what turns a rule from *asked* into *enforced* — the context load, the safety gates, memory distillation. On Claude Code, Bob and OpenClaude the same jobs are done by hooks instead (see [Hooks](../concepts/hooks.md)).
|
|
8
10
|
|
|
9
11
|
> **You already know this:** a plugin is a git hook for your agent — code that runs on an event (session start, before a tool call, session idle), not text the model may or may not follow.
|
|
10
12
|
|
|
11
|
-
Every plugin installs in the same step as the rest of the harness: `geneseed setup`, or `geneseed build --emit opencode-global` (global, into `~/.config/opencode/plugins/`) / `--emit opencode` (per-repo, into `.opencode/plugins/`). Installing by hand is covered in [Install](../guides/install.md). Keep **one** copy of each: OpenCode loads two local copies of the same plugin twice.
|
|
12
|
-
|
|
13
|
-
Every plugin swallows its own errors — none can block or crash a session. Each variable below is also listed in [Environment variables](environment.md).
|
|
14
|
-
|
|
15
|
-
## geneseed-context
|
|
16
|
-
|
|
17
|
-
**What it does.** Puts your project's documentation (and your machine wiki) into the agent's context before your first turn, so the agent never has to be trusted to read it. It needs **no per-repo file**: it discovers docs by convention.
|
|
18
|
-
|
|
19
|
-
- **Injected in full (eager):** root `README.md`, `CONTRIBUTING.md`, `.cursorrules`, `user-rules.md`, `PROFILE.md`. Budget-capped; an oversized file is listed instead, never silently truncated. (`AGENT.md`, `AGENTS.md` and `CLAUDE.md` are not injected — OpenCode already loads them.)
|
|
20
|
-
- **Listed (lazy, path + first heading, read on demand):** `docs/`, `doc/`, `documentation/`, `architecture/`, `adr/`, and `packages/*/README.md` / `apps/*/README.md` in a monorepo. `node_modules`, `.git`, `dist`, `build`, `vendor` and similar are never scanned.
|
|
21
|
-
- **Machine wiki:** the wikis declared in `wiki.jsonc` ride in the same block, on the same budgets. See [Wiki](../guides/wiki.md).
|
|
22
|
-
- **Explicit manifest:** `$GENESEED_CONTEXT`, `.harness/context.json` or a root `context.json` takes over from discovery; `"extend": true` layers it on top instead. See [Project context](../guides/project-context.md).
|
|
23
|
-
|
|
24
|
-
**When it runs.** On every request: the context rides invisibly in the request's message list, so it also survives compaction. If your OpenCode build lacks that (experimental) hook, the plugin notices and falls back to one visible message at session start, re-pushed when the session compacts.
|
|
25
|
-
|
|
26
|
-
**What you see.** Normally nothing — the context is there, but not shown. With the visible fallback, a `PROJECT CONTEXT` block at the top of the session.
|
|
27
|
-
|
|
28
|
-
**Switches.**
|
|
29
|
-
- `GENESEED_CONTEXT_INJECT=off` — no injection; the agent is only *asked* to read the docs.
|
|
30
|
-
- `GENESEED_CONTEXT_VISIBLE=1` — force the visible block (legacy `GENESEED_CONTEXT_TRANSFORM=0` does the same).
|
|
31
|
-
- `GENESEED_EAGER_FILE_KB` / `GENESEED_EAGER_TOTAL_KB` (default 16 / 48), `GENESEED_LAZY_HEADINGS` (64), `GENESEED_WIKI_LAZY_LIMIT` (200) — budgets.
|
|
32
|
-
- `GENESEED_WIKI` — explicit `wiki.jsonc` path.
|
|
33
|
-
- `GENESEED_DEBUG=1` — log what it discovered and injected to stderr. Silence with this set means the plugin did not load.
|
|
34
|
-
|
|
35
|
-
## geneseed-guard
|
|
36
|
-
|
|
37
|
-
**What it does.** Enforces the safety rules at the tool boundary — before a tool call runs, not after. High-confidence patterns only, so legitimate work is not caught.
|
|
38
|
-
|
|
39
|
-
- **Blocks** writes to private-key and credential files (*Sealed Secrets*), catastrophic shell commands such as deleting the filesystem root (*Deletion Is Deliberate*), and any change — write, move, rename, delete — under a wiki folder declared `protected` in `wiki.jsonc`.
|
|
40
|
-
- **Warns** (logged, allowed) on `.env` writes and force-push.
|
|
41
|
-
- **Speed-bumps** the *first* write to `user-rules.md` or a memory file: it is refused once, naming *Persist Insight* — whether something is a standing rule or a fact to remember is your call, settled through the `rule` skill. The re-issued write goes through.
|
|
42
|
-
|
|
43
|
-
It ships whole on every install, whatever [doctrine packs](../concepts/rules.md) you chose. On Claude Code and Bob the same checks are hooks, which can *ask* you instead of refusing; OpenCode's tool hook has no ask tier. Protected wiki folders are enforced only here — on the other hosts they are an instruction.
|
|
44
|
-
|
|
45
|
-
A `permission.ask` hook lets through only a fixed set of commit/push forms on a `loop/*` branch with a running loop — anything else still asks, same as the Claude/Bob git-gate's loop/* exemption.
|
|
46
|
-
|
|
47
|
-
**When it runs.** Before every tool call (`tool.execute.before`), and before a static `permission.bash` ask is shown to you (`permission.ask`).
|
|
48
|
-
|
|
49
|
-
**What you see.** A refused tool call: `[geneseed-guard] blocked: <reason> — set GENESEED_GUARD=off to allow`. Warnings go to stderr.
|
|
50
|
-
|
|
51
|
-
**Switches.**
|
|
52
|
-
- `GENESEED_GUARD=warn` — log every block, allow the call.
|
|
53
|
-
- `GENESEED_GUARD=off` — disable the guard.
|
|
54
|
-
|
|
55
|
-
## geneseed-learn
|
|
56
|
-
|
|
57
|
-
**What it does.** Distils durable memories from the conversation into the install's `memory/` directory and keeps `MEMORY.md` up to date, de-duplicating against what is already stored. It is the OpenCode counterpart of the Claude Code `Stop` hook, but needs no API key and no model CLI: it distils with the **same model the session used**, through your OpenCode provider config. See [Memory](../concepts/memory.md).
|
|
58
|
-
|
|
59
|
-
**When it runs.** After the session goes quiet. OpenCode signals "idle" after every turn, so each idle re-arms a timer and the distil runs once nothing has happened for `GENESEED_LEARN_DEBOUNCE_MS` (default 60 s). Trivial sessions are skipped.
|
|
60
|
-
|
|
61
|
-
**What you see.** On stderr: `[geneseed-learn] wrote N memory file(s): …`, or `skipped: <reason>`. Total silence means it did not load.
|
|
62
|
-
|
|
63
|
-
**Where it writes** — the first that resolves:
|
|
64
|
-
1. `GENESEED_MEMORY` — an explicit memory dir;
|
|
65
|
-
2. `$GENESEED_HARNESS/memory` (`/anamnesis` for the imperial theme);
|
|
66
|
-
3. the `memory/` beside the plugin's own install (the global install's store);
|
|
67
|
-
4. `./memory` or `./Harness/memory`, when the bundle lives in the project.
|
|
68
|
-
|
|
69
|
-
So a global install needs nothing set; use `GENESEED_HARNESS` only to pin the location. If none resolves, it logs `no memory dir — set $GENESEED_HARNESS or $GENESEED_MEMORY.` and does nothing.
|
|
70
|
-
|
|
71
|
-
**Switches.**
|
|
72
|
-
- `GENESEED_MODEL=provider/model` — fallback when the session's model can't be read. Without it you get `could not determine a model`.
|
|
73
|
-
- `GENESEED_LEARN_DEBOUNCE_MS` — the quiet period.
|
|
74
|
-
|
|
75
|
-
## geneseed-workflow
|
|
76
|
-
|
|
77
|
-
**What it does.** Registers one tool, `workflow`, that runs saved orchestration scripts. The script — not the model — drives the control flow: the deterministic counterpart of the `council` and `parallel-agents` skills.
|
|
78
|
-
|
|
79
|
-
- **Saved scripts only.** It loads `<name>.js` from the `workflows/` directory beside `plugins/`; nothing the model writes is evaluated. Shipped: `council`, `dispatch`, `research-plan-implement`, `review`.
|
|
80
|
-
- **Call shape:** `workflow({ name, args })`; with no name it lists what is available.
|
|
81
|
-
- **Isolation:** a script can run a child agent in its own git worktree on its own branch. A worktree with no change is removed; one with changes is kept, and the summary lists every kept branch and every file more than one agent changed. Nothing is merged or committed for you. Without git, such a child fails rather than falling back to the shared tree.
|
|
82
|
-
|
|
83
|
-
**When it runs.** When the agent calls the `workflow` tool — usually because you asked for one.
|
|
84
|
-
|
|
85
|
-
**What you see.** The tool's summary in the conversation. A phase-by-phase trace and the full result land in `.geneseed/workflow-runs/<runId>.log`.
|
|
86
|
-
|
|
87
|
-
**Switches.**
|
|
88
|
-
- `GENESEED_WORKFLOWS_DIR` — load scripts from another directory.
|
|
89
|
-
- `GENESEED_DEBUG=1` — log to stderr.
|
|
90
|
-
|
|
91
|
-
Ask the agent to *"list available workflows"* to check it loaded.
|
|
92
|
-
|
|
93
|
-
## geneseed-notify
|
|
94
|
-
|
|
95
|
-
**What it does.** Sends a native desktop notification when the agent finishes a long turn, so you can start a run, walk away, and be called back. macOS uses `osascript`, Linux `notify-send` (install `libnotify` if nothing appears), Windows a PowerShell balloon.
|
|
96
|
-
|
|
97
|
-
**When it runs.** When a session goes idle, and only if the turn took longer than `GENESEED_NOTIFY_MIN_SECONDS` (default 30) since your last prompt. Sub-agent sessions and the learn plugin's own sessions are skipped.
|
|
98
|
-
|
|
99
|
-
**What you see.** A notification titled `Geneseed`. With `GENESEED_DEBUG=1`, `[geneseed-notify] notified for …` on stderr.
|
|
100
|
-
|
|
101
|
-
**Switches.**
|
|
102
|
-
- `GENESEED_NOTIFY=off` — disable.
|
|
103
|
-
- `GENESEED_NOTIFY_MIN_SECONDS=N` — threshold (`0` = every turn).
|
|
104
|
-
- `GENESEED_NOTIFY_TITLE="…"` — the title.
|
|
105
|
-
|
|
106
|
-
## geneseed-ponytail
|
|
107
|
-
|
|
108
|
-
**What it does.** Holds an opt-in minimal-code mode: once on, it appends the "laziest solution that works" ruleset to the system prompt **every turn**, so the agent doesn't drift back to over-building mid-session. It is the sustained form of the `ponytail` skill, and it is not part of the [rules](../concepts/rules.md): nothing about it applies until you switch it on.
|
|
109
|
-
|
|
110
|
-
**When it runs.** Every turn, while a level is set. It starts `off`.
|
|
111
|
-
|
|
112
|
-
**What you see.** Replies that favour the smallest working change. Switch with `/ponytail lite|full|ultra|off` (bare `/ponytail` means `full`); the level is saved to `.geneseed-ponytail` beside OpenCode's config and applies from the next turn. On an OpenCode build without the experimental system-prompt hook it never injects; the skill still works.
|
|
113
|
-
|
|
114
|
-
**Switches.**
|
|
115
|
-
- `GENESEED_PONYTAIL=lite|full|ultra` — the starting level (default `off`).
|
|
116
|
-
- `GENESEED_DEBUG=1` — logs `[geneseed-ponytail] ponytail <level>` on each switch.
|
|
117
|
-
|
|
118
|
-
## geneseed-activity
|
|
119
|
-
|
|
120
|
-
**What it does.** Feeds the web console's **Activity** view: one small JSON file per session under `activity/` beside OpenCode's config, recording what the session is doing — phase, model, token and cost totals, files touched, plan, last error. The console reads and prunes those files; the two only meet on disk, so a crash on either side never blocks a session.
|
|
13
|
+
Every plugin installs in the same step as the rest of the harness: `geneseed setup`, or `geneseed build --emit opencode-global` (global, into `~/.config/opencode/plugins/`) / `--emit opencode` (per-repo, into `.opencode/plugins/`). Installing by hand is covered in [Install on OpenCode](../guides/install-opencode.md). Keep **one** copy of each: OpenCode loads two local copies of the same plugin twice.
|
|
121
14
|
|
|
122
|
-
|
|
15
|
+
Every plugin swallows its own errors — none can block or crash a session. Each plugin's page lists the variables that tune it.
|
|
123
16
|
|
|
124
|
-
|
|
17
|
+
## The plugins
|
|
125
18
|
|
|
126
|
-
|
|
127
|
-
-
|
|
128
|
-
-
|
|
129
|
-
-
|
|
19
|
+
- [geneseed-context](plugin-context.md): Puts your project docs, rules, profile, memory index and wiki in front of the agent.
|
|
20
|
+
- [geneseed-guard](plugin-guard.md): Blocks credential files, catastrophic commands and protected wiki writes before they run.
|
|
21
|
+
- [geneseed-learn](plugin-learn.md): Distils durable facts into memory/ once a session goes quiet.
|
|
22
|
+
- [geneseed-workflow](plugin-workflow.md): Adds a workflow tool that runs saved orchestration scripts.
|
|
23
|
+
- [geneseed-notify](plugin-notify.md): A desktop notification when a long turn finishes.
|
|
24
|
+
- [geneseed-ponytail](plugin-ponytail.md): An opt-in minimal-code mode, re-applied every turn.
|
|
25
|
+
- [geneseed-activity](plugin-activity.md): Feeds the web console's Activity view, one small file per session.
|
|
130
26
|
|
|
131
27
|
## Excluded folders
|
|
132
28
|
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
group: reference
|
|
3
|
+
kind: "concept"
|
|
4
|
+
section: "OpenCode plugins"
|
|
5
|
+
order: 19
|
|
6
|
+
title: "geneseed-activity"
|
|
7
|
+
description: "Feeds the web console's Activity view, one small file per session."
|
|
8
|
+
---
|
|
9
|
+
One of the [OpenCode plugins](opencode-plugins.md). [Environment variables](environment.md) points here for its switches.
|
|
10
|
+
|
|
11
|
+
**What it does.** Feeds the web console's **Activity** view: one small JSON file per session under `activity/` beside OpenCode's config, recording what the session is doing — phase, model, token and cost totals, files touched, plan, last error. The console reads and prunes those files; the two only meet on disk, so a crash on either side never blocks a session.
|
|
12
|
+
|
|
13
|
+
**When it runs.** On session events, for top-level sessions only (sub-agents and learn's sessions are skipped). Entries whose process died or went stale are pruned by the reader.
|
|
14
|
+
|
|
15
|
+
**What you see.** A card per live session in **Activity** (`geneseed web`).
|
|
16
|
+
|
|
17
|
+
**Switches.**
|
|
18
|
+
- `GENESEED_ACTIVITY=off` — kill switch at startup.
|
|
19
|
+
- The Activity page's own toggle writes a `.geneseed-activity` flag file, read per event — no restart needed.
|
|
20
|
+
- `GENESEED_DEBUG=1` — logs each write as `[geneseed-activity] …`.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
group: reference
|
|
3
|
+
kind: "concept"
|
|
4
|
+
section: "OpenCode plugins"
|
|
5
|
+
order: 13
|
|
6
|
+
title: "geneseed-context"
|
|
7
|
+
description: "Puts your project docs, rules, profile, memory index and wiki in front of the agent."
|
|
8
|
+
---
|
|
9
|
+
One of the [OpenCode plugins](opencode-plugins.md). Its switches are also listed in [Context and memory variables](env-context.md).
|
|
10
|
+
|
|
11
|
+
**What it does.** Puts your project's documentation (and your machine wiki) into the agent's context before your first turn, so the agent never has to be trusted to read it. It needs **no per-repo file**: it discovers docs by convention.
|
|
12
|
+
|
|
13
|
+
- **Injected in full (eager):** root `README.md`, `CONTRIBUTING.md`, `.cursorrules`, `user-rules.md`, `PROFILE.md`. Budget-capped; an oversized file is listed instead, never silently truncated. (`AGENT.md`, `AGENTS.md` and `CLAUDE.md` are not injected — OpenCode already loads them.)
|
|
14
|
+
- **Listed (lazy, path + first heading, read on demand):** `docs/`, `doc/`, `documentation/`, `architecture/`, `adr/`, and `packages/*/README.md` / `apps/*/README.md` in a monorepo. `node_modules`, `.git`, `dist`, `build`, `vendor` and similar are never scanned.
|
|
15
|
+
- **Machine wiki:** the wikis declared in `wiki.jsonc` ride in the same block, on the same budgets. See [Wiki](../guides/wiki.md).
|
|
16
|
+
- **Explicit manifest:** `$GENESEED_CONTEXT`, `.harness/context.json` or a root `context.json` takes over from discovery; `"extend": true` layers it on top instead. See [Project context](../guides/project-context.md).
|
|
17
|
+
|
|
18
|
+
**When it runs.** On every request: the context rides invisibly in the request's message list, so it also survives compaction. If your OpenCode build lacks that (experimental) hook, the plugin notices and falls back to one visible message at session start, re-pushed when the session compacts.
|
|
19
|
+
|
|
20
|
+
**What you see.** Normally nothing — the context is there, but not shown. With the visible fallback, a `PROJECT CONTEXT` block at the top of the session.
|
|
21
|
+
|
|
22
|
+
**Switches.**
|
|
23
|
+
- `GENESEED_CONTEXT_INJECT=off` — no injection; the agent is only *asked* to read the docs.
|
|
24
|
+
- `GENESEED_CONTEXT_VISIBLE=1` — force the visible block (legacy `GENESEED_CONTEXT_TRANSFORM=0` does the same).
|
|
25
|
+
- `GENESEED_EAGER_FILE_KB` / `GENESEED_EAGER_TOTAL_KB` (default 16 / 48), `GENESEED_LAZY_HEADINGS` (64), `GENESEED_WIKI_LAZY_LIMIT` (200) — budgets.
|
|
26
|
+
- `GENESEED_WIKI` — explicit `wiki.jsonc` path.
|
|
27
|
+
- `GENESEED_DEBUG=1` — log what it discovered and injected to stderr. Silence with this set means the plugin did not load.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
group: reference
|
|
3
|
+
kind: "concept"
|
|
4
|
+
section: "OpenCode plugins"
|
|
5
|
+
order: 14
|
|
6
|
+
title: "geneseed-guard"
|
|
7
|
+
description: "Blocks credential files, catastrophic commands and protected wiki writes before they run."
|
|
8
|
+
---
|
|
9
|
+
One of the [OpenCode plugins](opencode-plugins.md). [Environment variables](environment.md) points here for its switches.
|
|
10
|
+
|
|
11
|
+
**What it does.** Enforces the safety rules at the tool boundary — before a tool call runs, not after. High-confidence patterns only, so legitimate work is not caught.
|
|
12
|
+
|
|
13
|
+
- **Blocks** writes to private-key and credential files (*Sealed Secrets*), catastrophic shell commands such as deleting the filesystem root (*Deletion Is Deliberate*), and any change — write, move, rename, delete — under a wiki folder declared `protected` in `wiki.jsonc`.
|
|
14
|
+
- **Warns** (logged, allowed) on `.env` writes and force-push.
|
|
15
|
+
- **Speed-bumps** the *first* write to `user-rules.md` or a memory file: it is refused once, naming *Persist Insight* — whether something is a standing rule or a fact to remember is your call, settled through the `rule` skill. The re-issued write goes through.
|
|
16
|
+
|
|
17
|
+
It ships whole on every install, whatever [doctrine packs](../concepts/rules.md) you chose. On Claude Code and Bob the same checks are hooks, which can *ask* you instead of refusing; OpenCode's tool hook has no ask tier. Protected wiki folders are enforced only here — on the other hosts they are an instruction.
|
|
18
|
+
|
|
19
|
+
A `permission.ask` hook lets through only a fixed set of commit/push forms on a `loop/*` branch with a running loop — anything else still asks, same as the Claude/Bob git-gate's loop/* exemption.
|
|
20
|
+
|
|
21
|
+
**When it runs.** Before every tool call (`tool.execute.before`), and before a static `permission.bash` ask is shown to you (`permission.ask`).
|
|
22
|
+
|
|
23
|
+
**What you see.** A refused tool call: `[geneseed-guard] blocked: <reason> — set GENESEED_GUARD=off to allow`. Warnings go to stderr.
|
|
24
|
+
|
|
25
|
+
**Switches.**
|
|
26
|
+
- `GENESEED_GUARD=warn` — log every block, allow the call.
|
|
27
|
+
- `GENESEED_GUARD=off` — disable the guard.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
group: reference
|
|
3
|
+
kind: "concept"
|
|
4
|
+
section: "OpenCode plugins"
|
|
5
|
+
order: 15
|
|
6
|
+
title: "geneseed-learn"
|
|
7
|
+
description: "Distils durable facts into memory/ once a session goes quiet."
|
|
8
|
+
---
|
|
9
|
+
One of the [OpenCode plugins](opencode-plugins.md). Its switches are also listed in [Context and memory variables](env-context.md).
|
|
10
|
+
|
|
11
|
+
**What it does.** Distils durable memories from the conversation into the install's `memory/` directory and keeps `MEMORY.md` up to date, de-duplicating against what is already stored. It is the OpenCode counterpart of the Claude Code `Stop` hook, but needs no API key and no model CLI: it distils with the **same model the session used**, through your OpenCode provider config. See [Memory](../concepts/memory.md).
|
|
12
|
+
|
|
13
|
+
**When it runs.** After the session goes quiet. OpenCode signals "idle" after every turn, so each idle re-arms a timer and the distil runs once nothing has happened for `GENESEED_LEARN_DEBOUNCE_MS` (default 60 s). Trivial sessions are skipped.
|
|
14
|
+
|
|
15
|
+
**What you see.** On stderr: `[geneseed-learn] wrote N memory file(s): …`, or `skipped: <reason>`. Total silence means it did not load.
|
|
16
|
+
|
|
17
|
+
**Where it writes** — the first that resolves:
|
|
18
|
+
1. `GENESEED_MEMORY` — an explicit memory dir;
|
|
19
|
+
2. `$GENESEED_HARNESS/memory` (`/anamnesis` for the imperial theme);
|
|
20
|
+
3. the `memory/` beside the plugin's own install (the global install's store);
|
|
21
|
+
4. `./memory` or `./Harness/memory`, when the bundle lives in the project.
|
|
22
|
+
|
|
23
|
+
So a global install needs nothing set; use `GENESEED_HARNESS` only to pin the location. If none resolves, it logs `no memory dir — set $GENESEED_HARNESS or $GENESEED_MEMORY.` and does nothing.
|
|
24
|
+
|
|
25
|
+
**Switches.**
|
|
26
|
+
- `GENESEED_MODEL=provider/model` — fallback when the session's model can't be read. Without it you get `could not determine a model`.
|
|
27
|
+
- `GENESEED_LEARN_DEBOUNCE_MS` — the quiet period.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
group: reference
|
|
3
|
+
kind: "concept"
|
|
4
|
+
section: "OpenCode plugins"
|
|
5
|
+
order: 17
|
|
6
|
+
title: "geneseed-notify"
|
|
7
|
+
description: "A desktop notification when a long turn finishes."
|
|
8
|
+
---
|
|
9
|
+
One of the [OpenCode plugins](opencode-plugins.md). [Environment variables](environment.md) points here for its switches.
|
|
10
|
+
|
|
11
|
+
**What it does.** Sends a native desktop notification when the agent finishes a long turn, so you can start a run, walk away, and be called back. macOS uses `osascript`, Linux `notify-send` (install `libnotify` if nothing appears), Windows a PowerShell balloon.
|
|
12
|
+
|
|
13
|
+
**When it runs.** When a session goes idle, and only if the turn took longer than `GENESEED_NOTIFY_MIN_SECONDS` (default 30) since your last prompt. Sub-agent sessions and the learn plugin's own sessions are skipped.
|
|
14
|
+
|
|
15
|
+
**What you see.** A notification titled `Geneseed`. With `GENESEED_DEBUG=1`, `[geneseed-notify] notified for …` on stderr.
|
|
16
|
+
|
|
17
|
+
**Switches.**
|
|
18
|
+
- `GENESEED_NOTIFY=off` — disable.
|
|
19
|
+
- `GENESEED_NOTIFY_MIN_SECONDS=N` — threshold (`0` = every turn).
|
|
20
|
+
- `GENESEED_NOTIFY_TITLE="…"` — the title.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
group: reference
|
|
3
|
+
kind: "concept"
|
|
4
|
+
section: "OpenCode plugins"
|
|
5
|
+
order: 18
|
|
6
|
+
title: "geneseed-ponytail"
|
|
7
|
+
description: "An opt-in minimal-code mode, re-applied every turn."
|
|
8
|
+
---
|
|
9
|
+
One of the [OpenCode plugins](opencode-plugins.md). [Environment variables](environment.md) points here for its switches.
|
|
10
|
+
|
|
11
|
+
**What it does.** Holds an opt-in minimal-code mode: once on, it appends the "laziest solution that works" ruleset to the system prompt **every turn**, so the agent doesn't drift back to over-building mid-session. It is the sustained form of the `ponytail` skill, and it is not part of the [rules](../concepts/rules.md): nothing about it applies until you switch it on.
|
|
12
|
+
|
|
13
|
+
**When it runs.** Every turn, while a level is set. It starts `off`.
|
|
14
|
+
|
|
15
|
+
**What you see.** Replies that favour the smallest working change. Switch with `/ponytail lite|full|ultra|off` (bare `/ponytail` means `full`); the level is saved to `.geneseed-ponytail` beside OpenCode's config and applies from the next turn. On an OpenCode build without the experimental system-prompt hook it never injects; the skill still works.
|
|
16
|
+
|
|
17
|
+
**Switches.**
|
|
18
|
+
- `GENESEED_PONYTAIL=lite|full|ultra` — the starting level (default `off`).
|
|
19
|
+
- `GENESEED_DEBUG=1` — logs `[geneseed-ponytail] ponytail <level>` on each switch.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
group: reference
|
|
3
|
+
kind: "concept"
|
|
4
|
+
section: "OpenCode plugins"
|
|
5
|
+
order: 16
|
|
6
|
+
title: "geneseed-workflow"
|
|
7
|
+
description: "Adds a workflow tool that runs saved orchestration scripts."
|
|
8
|
+
---
|
|
9
|
+
One of the [OpenCode plugins](opencode-plugins.md). [Environment variables](environment.md) points here for its switches.
|
|
10
|
+
|
|
11
|
+
**What it does.** Registers one tool, `workflow`, that runs saved orchestration scripts. The script — not the model — drives the control flow: the deterministic counterpart of the `council` and `parallel-agents` skills.
|
|
12
|
+
|
|
13
|
+
- **Saved scripts only.** It loads `<name>.js` from the `workflows/` directory beside `plugins/`; nothing the model writes is evaluated. Shipped: `council`, `dispatch`, `research-plan-implement`, `review`.
|
|
14
|
+
- **Call shape:** `workflow({ name, args })`; with no name it lists what is available.
|
|
15
|
+
- **Isolation:** a script can run a child agent in its own git worktree on its own branch. A worktree with no change is removed; one with changes is kept, and the summary lists every kept branch and every file more than one agent changed. Nothing is merged or committed for you. Without git, such a child fails rather than falling back to the shared tree.
|
|
16
|
+
|
|
17
|
+
**When it runs.** When the agent calls the `workflow` tool — usually because you asked for one.
|
|
18
|
+
|
|
19
|
+
**What you see.** The tool's summary in the conversation. A phase-by-phase trace and the full result land in `.geneseed/workflow-runs/<runId>.log`.
|
|
20
|
+
|
|
21
|
+
**Switches.**
|
|
22
|
+
- `GENESEED_WORKFLOWS_DIR` — load scripts from another directory.
|
|
23
|
+
- `GENESEED_DEBUG=1` — log to stderr.
|
|
24
|
+
|
|
25
|
+
Ask the agent to *"list available workflows"* to check it loaded.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
---
|
|
2
|
+
group: reference
|
|
3
|
+
kind: "concept"
|
|
4
|
+
section: "Troubleshooting"
|
|
5
|
+
order: 10
|
|
6
|
+
title: "Doctor findings"
|
|
7
|
+
description: "Unresolved tokens, a drifted Harness bundle, an unreadable registry.json."
|
|
8
|
+
---
|
|
9
|
+
Each entry gives the likely cause, the fix, and how to confirm it worked. First stop for almost anything: `geneseed doctor` (see [Troubleshooting](troubleshooting.md)).
|
|
10
|
+
|
|
11
|
+
## `unresolved token … in …`
|
|
12
|
+
|
|
13
|
+
**Cause.** A theme JSON lacks a key the templates use — usually a custom theme that fell behind.
|
|
14
|
+
|
|
15
|
+
**Fix.** Compare it with `themes/neutral.json`: every key there must exist in your theme. Then re-render:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
geneseed build --theme <yours>
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
**Confirm.** `geneseed doctor --theme <yours>` is clean.
|
|
22
|
+
|
|
23
|
+
## A committed `Harness/` bundle drifted from `src/`
|
|
24
|
+
|
|
25
|
+
**Cause.** A bundle committed to a repo was rendered from an older `src/`, or was edited in place.
|
|
26
|
+
|
|
27
|
+
**Fix.** Re-render and commit it:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
geneseed build
|
|
31
|
+
git add Harness
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
If the drift is your own edits, export them first — `geneseed diff` (or the console's **Changes** page) writes them up so they can be folded back into `src/`.
|
|
35
|
+
|
|
36
|
+
**Confirm.** `geneseed doctor` no longer reports the bundle.
|
|
37
|
+
|
|
38
|
+
## `registry.json unreadable` / `registry.json is not valid JSON`
|
|
39
|
+
|
|
40
|
+
> `[authoring] registry.json unreadable: …`
|
|
41
|
+
|
|
42
|
+
**Cause.** The Geneseed folder's `registry.json` is missing or damaged — typically a bad merge or a hand edit. The web console stays up, but every entity's status badge reads "unknown".
|
|
43
|
+
|
|
44
|
+
**Fix.** Restore the shipped copy (this discards any local edit to that one file):
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
git -C <geneseed folder> restore registry.json
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
**Confirm.** `geneseed doctor` no longer names `registry.json`, and the badges come back.
|