geneseed 3.3.0 → 3.5.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 +323 -0
- package/DESIGN.md +11 -14
- package/QUICKSTART.md +3 -1
- package/README.md +53 -44
- package/SETUP.md +25 -27
- package/SHIPPED.md +26 -32
- package/adapters/bob/README.md +12 -9
- package/adapters/copilot/README.md +28 -26
- package/adapters/opencode/GLOBAL-HARNESS-SPEC.md +1 -1
- package/adapters/opencode/README.md +8 -4
- package/adapters/opencode/plugins/geneseed-context.js +5 -3
- package/adapters/opencode/plugins/geneseed-workflow.js +30 -3
- package/adapters/opencode/workflows/_runtime.js +97 -7
- package/bin/build-driver.mjs +5 -1248
- package/bin/geneseed-cli.mjs +11 -6
- package/bin/geneseed-hook.mjs +4 -2
- package/docs/candidate-hosts.md +1 -1
- package/docs/design-history.md +37 -37
- package/docs/extending.md +49 -27
- package/docs/token-footprint.md +52 -26
- package/docs/web/agents.md +1 -1
- package/docs/web/claude-hooks.md +3 -2
- package/docs/web/collaboration.md +2 -2
- package/docs/web/first-session.md +2 -2
- package/docs/web/footprint.md +2 -2
- package/docs/web/harnesses.md +1 -1
- package/docs/web/model.md +1 -1
- package/docs/web/plugin-workflow.md +1 -0
- package/docs/web/rules.md +3 -3
- package/docs/web/setup-choices.md +2 -2
- package/docs/web/skills.md +1 -1
- package/docs/web/themes-author.md +1 -1
- package/docs/web-ui.md +18 -10
- package/harness.config.json +1 -1
- package/js/README.md +6 -5
- package/js/build/driver.mjs +1191 -0
- package/js/build/emit-claude.mjs +17 -10
- package/js/build/emit-common.mjs +4 -4
- package/js/build/generate.mjs +1 -1
- package/js/build/render.mjs +48 -44
- package/js/build/stubs.mjs +1 -1
- package/js/build/themes.mjs +4 -4
- package/js/build/version.mjs +12 -0
- package/js/cli-table.json +21 -6
- package/js/hosts/hooks.mjs +89 -74
- package/js/hosts/hosts.mjs +19 -2
- package/js/hosts/mcp.mjs +14 -20
- package/js/hosts/native.mjs +85 -25
- package/js/hosts/opencode.mjs +14 -0
- package/js/hosts/settings.mjs +52 -104
- package/js/inspect/checks-authoring.mjs +117 -3
- package/js/inspect/diff.mjs +1 -1
- package/js/inspect/doctor.mjs +1 -1
- package/js/inspect/excludes.mjs +1 -1
- package/js/inspect/inventory.mjs +12 -7
- package/js/inspect/scan.mjs +3 -14
- package/js/inspect/status.mjs +2 -2
- package/js/inspect/validate.mjs +1 -1
- package/js/lib/fs.mjs +23 -8
- package/js/lib/json.mjs +7 -1
- package/js/lib/proc.mjs +6 -4
- package/js/maintain/migrate.mjs +1 -1
- package/js/maintain/setup.mjs +1 -1
- package/js/maintain/uninstall.mjs +17 -15
- package/js/ui/cli.mjs +19 -0
- package/js/ui/menu.mjs +1 -1
- package/js/web/actions.mjs +4 -4
- package/js/web/activity.mjs +4 -4
- package/js/web/api.mjs +14 -11
- package/js/web/daemon.mjs +1 -1
- package/js/web/docs.mjs +12 -12
- package/js/web/handler.mjs +12 -5
- package/js/web/jobs.mjs +1 -1
- package/package.json +1 -1
- package/registry.json +86 -79
- package/src/AGENT.md.tmpl +83 -48
- package/src/agents/architect.md +4 -1
- package/src/agents/developer.md +2 -2
- package/src/agents/explorer.md +2 -0
- package/src/agents/operator.md +13 -0
- package/src/agents/pragmatist.md +12 -0
- package/src/agents/researcher.md +72 -0
- package/src/agents/reviewer.md +5 -2
- package/src/agents/security.md +7 -1
- package/src/agents/skeptic.md +2 -1
- package/src/agents/tester.md +5 -1
- package/src/agents/user-advocate.md +13 -0
- package/src/doctrines/README.md +26 -3
- package/src/doctrines/craft.md +78 -5
- package/src/doctrines/ops.md +62 -0
- package/src/doctrines/process.md +91 -4
- package/src/doctrines/rigor.md +41 -1
- package/src/laws/universal.md +27 -21
- package/src/memory/README.md +4 -2
- package/src/modes/foreman.md +5 -5
- package/src/notebook/README.md +2 -1
- package/src/ontology/universal.md +71 -67
- package/src/postures/peer.md +3 -0
- package/src/skills/_self-improvement.md +19 -0
- package/src/skills/_template.md +1 -12
- package/src/skills/brainstorm.md +37 -19
- package/src/skills/bruno-collection-generator.md +2 -13
- package/src/skills/bruno-test-writer.md +3 -14
- package/src/skills/ci-fix.md +49 -0
- package/src/skills/codebase-design.md +1 -12
- package/src/skills/commit.md +1 -12
- package/src/skills/consolidate-memory.md +50 -0
- package/src/skills/council.md +1 -12
- package/src/skills/daydream/LICENSE +21 -0
- package/src/skills/daydream/VENDOR.md +3 -1
- package/src/skills/debug.md +1 -12
- package/src/skills/deps-audit.md +46 -0
- package/src/skills/develop.md +38 -20
- package/src/skills/document-project.md +1 -12
- package/src/skills/domain-modeling.md +1 -12
- package/src/skills/forge-mcp.md +1 -12
- package/src/skills/fresh-eyes.md +1 -12
- package/src/skills/frontend-design.md +1 -12
- package/src/skills/geneseed-code-review.md +7 -14
- package/src/skills/geneseed.md +1 -12
- package/src/skills/git-archaeology.md +1 -12
- package/src/skills/git-rescue.md +1 -12
- package/src/skills/handoff.md +1 -12
- package/src/skills/herdr.md +1 -12
- package/src/skills/ingest.md +1 -12
- package/src/skills/migrate.md +1 -12
- package/src/skills/opencode-theme.md +1 -12
- package/src/skills/parallel-agents.md +4 -15
- package/src/skills/pipeline.md +6 -17
- package/src/skills/plan.md +1 -12
- package/src/skills/ponytail.md +1 -12
- package/src/skills/profile.md +1 -12
- package/src/skills/prose.md +1 -12
- package/src/skills/prototype.md +1 -12
- package/src/skills/quiz.md +43 -0
- package/src/skills/react-view-transitions/VENDOR.md +7 -1
- package/src/skills/refactor.md +1 -12
- package/src/skills/release.md +1 -12
- package/src/skills/repo-map.md +1 -12
- package/src/skills/research.md +5 -13
- package/src/skills/review-response.md +1 -12
- package/src/skills/roast-me.md +1 -12
- package/src/skills/rule.md +1 -12
- package/src/skills/security-audit.md +51 -0
- package/src/skills/ship.md +1 -12
- package/src/skills/skill-forge.md +59 -0
- package/src/skills/teach.md +50 -0
- package/src/skills/tickets.md +1 -12
- package/src/skills/wayfinder.md +1 -12
- package/src/skills/wiki.md +1 -12
- package/src/skills/workflow.md +82 -26
- package/src/skills/worktree.md +52 -0
- package/themes/_TEMPLATE.json +15 -12
- package/themes/biker.json +14 -11
- package/themes/commentator.json +14 -11
- package/themes/cyberpunk.json +14 -11
- package/themes/gamer.json +14 -11
- package/themes/imperial.json +14 -11
- package/themes/joker.json +14 -11
- package/themes/marvin.json +14 -11
- package/themes/mean.json +14 -11
- package/themes/military.json +14 -11
- package/themes/neutral.json +15 -12
- package/themes/opencode/README.md +2 -2
- package/themes/pirate.json +14 -11
- package/themes/sports.json +14 -11
- package/themes/verstappen.json +14 -11
- package/themes/wizard.json +14 -11
- package/web/dist/assets/Activity-Flgf4kHy.js +1 -0
- package/web/dist/assets/ActivityDetail-DIpr85nh.js +1 -0
- package/web/dist/assets/CatalogRow-CjyLjaLb.js +1 -0
- package/web/dist/assets/Diff-Deisdha8.js +2 -0
- package/web/dist/assets/Docs-DGUdY4l4.js +2 -0
- package/web/dist/assets/Doctor-F74lJ69P.js +1 -0
- package/web/dist/assets/FilterInput-BakJLvaV.js +1 -0
- package/web/dist/assets/GreenhouseView-D072lBiD.js +2 -0
- package/web/dist/assets/Harness-DNRP2Va7.js +1 -0
- package/web/dist/assets/JournalView-DWFqZ0Iw.js +1 -0
- package/web/dist/assets/Laws-BN6g3HU7.js +3 -0
- package/web/dist/assets/Library-CDOv4emM.js +1 -0
- package/web/dist/assets/Markdown-BQAvN8xx.js +38 -0
- package/web/dist/assets/OperatorHudView-CwNIUVX8.js +2 -0
- package/web/dist/assets/Profile-CpP9BTne.js +1 -0
- package/web/dist/assets/Rules-DFXsUCB7.js +1 -0
- package/web/dist/assets/Settings-BqZVUtJ5.js +1 -0
- package/web/dist/assets/Skills-Cu6kBgfF.js +1 -0
- package/web/dist/assets/StatusBadge-Cg6j-NJL.js +1 -0
- package/web/dist/assets/activity-iWaWVtsR.js +1 -0
- package/web/dist/assets/drawable-BgfrEBer.js +1 -0
- package/web/dist/assets/index-CAqrWhKl.js +2 -0
- package/web/dist/assets/index-Ruh93A3A.css +1 -0
- package/web/dist/assets/jobBuckets-Dbq8ZlWW.js +1 -0
- package/web/dist/assets/lawCats-BLgxl151.js +1 -0
- package/web/dist/assets/react-DbkvxWG5.js +8 -0
- package/web/dist/assets/rolldown-runtime-CbXtAM7H.js +1 -0
- package/web/dist/index.html +4 -3
- package/web/src/pages/Laws.jsx +22 -8
- package/src/skills/clarify.md +0 -28
- package/src/skills/crash-course.md +0 -29
- package/src/skills/decode.md +0 -29
- package/src/skills/drill.md +0 -29
- package/src/skills/feynman.md +0 -27
- package/src/skills/gap-detector.md +0 -27
- package/src/skills/learning-path.md +0 -27
- package/src/skills/react-view-transitions/README.md +0 -42
- package/src/skills/tdd.md +0 -31
- package/web/dist/assets/Activity-BfVcLrda.js +0 -1
- package/web/dist/assets/ActivityDetail-CQXccGPl.js +0 -1
- package/web/dist/assets/CatalogRow-DALEQImZ.js +0 -1
- package/web/dist/assets/Diff-BIjxXx46.js +0 -5
- package/web/dist/assets/Doctor-CJLbgsrw.js +0 -1
- package/web/dist/assets/FilterInput-CkUCk_lY.js +0 -1
- package/web/dist/assets/GreenhouseView-DfC5IILJ.js +0 -2
- package/web/dist/assets/Harness-Dm5CCU-v.js +0 -1
- package/web/dist/assets/JournalView-Cpu2eI4s.js +0 -1
- package/web/dist/assets/Laws-DDDVFuQz.js +0 -3
- package/web/dist/assets/Library-Dao3T9na.js +0 -1
- package/web/dist/assets/Markdown-C__nuWX5.js +0 -46
- package/web/dist/assets/OperatorHudView-DEpCtAjP.js +0 -2
- package/web/dist/assets/Profile-BlXtUlh2.js +0 -1
- package/web/dist/assets/Rules-DIre6gxR.js +0 -1
- package/web/dist/assets/Skills-rY13ZPhM.js +0 -1
- package/web/dist/assets/StatusBadge-wW_RS_my.js +0 -1
- package/web/dist/assets/activity-DpYPKNrA.js +0 -1
- package/web/dist/assets/index-BEZvPvpF.js +0 -1
- package/web/dist/assets/index-DNQE5ydy.js +0 -10
- package/web/dist/assets/index-DzdQjvM1.css +0 -1
- package/web/dist/assets/index-PmQGRS1X.js +0 -2
- package/web/dist/assets/jobBuckets-DfTUJUxR.js +0 -1
- package/web/dist/assets/lawCats-DUS9UTH4.js +0 -1
- package/web/dist/assets/react-DOpiTn5v.js +0 -32
package/README.md
CHANGED
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
[](package.json)
|
|
11
11
|
[](package.json)
|
|
12
12
|
[](themes/)
|
|
13
|
-
[](src/skills/)
|
|
14
|
+
[](src/agents/)
|
|
15
15
|
[](src/laws/universal.md)
|
|
16
16
|
[](adapters/opencode/plugins/)
|
|
17
17
|
[](#-supported-harnesses)
|
|
@@ -22,7 +22,24 @@
|
|
|
22
22
|
|
|
23
23
|
---
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
<p align="center"><img src="docs/assets/demo.svg" alt="geneseed setup, then two laws catching a force-push and a credential at the tool boundary" width="760"></p>
|
|
26
|
+
|
|
27
|
+
**Geneseed compiles your agent's rules instead of asking you to write them.** One source in `src/` renders into a ready-made harness for OpenCode, Claude Code, Bob, Copilot, or any `AGENT.md` tool: a constitution of laws and doctrines, a roster of capability agents, native skills, a memory convention — and, wherever the host has a hook surface, gates that *enforce* the laws at the tool boundary instead of hoping the model remembers them.
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
npx geneseed setup
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Want to read what it leaves behind before installing anything? [**geneseed-demo**](https://github.com/Arylmera/geneseed-demo) is a repository exactly as the plain bundle emits it — nothing hand-written.
|
|
34
|
+
|
|
35
|
+
### Why not just a CLAUDE.md?
|
|
36
|
+
|
|
37
|
+
A hand-written instructions file is prose the model may or may not honour, copied into every repo and drifting in each one. Geneseed is a build, and that changes four things:
|
|
38
|
+
|
|
39
|
+
- **Laws are enforced, not suggested.** A force-push, a `reset --hard`, or a credential written into a tracked file is caught by a hook *before* the tool runs, in the host's own dialect — a prompt on Claude Code and Copilot, a hard block on OpenCode, exit 2 on Bob. The gates fail closed, and every catch is one line in a ledger that `geneseed status` counts.
|
|
40
|
+
- **One source, five targets.** Skills are byte-identical on every host; only the wiring differs. Every commit renders all 261 emit configurations, and a second emit into the same tree must change nothing.
|
|
41
|
+
- **Costs are measured, not guessed.** Zero runtime dependencies. The hook path loads in about 14 ms per tool call. The default *lean* footprint keeps the always-on context small and puts the full rationale one read away — the numbers are in [docs/token-footprint.md](docs/token-footprint.md).
|
|
42
|
+
- **It follows you.** Install once, globally; every repo inherits it. One `git pull` or `npm install -g geneseed@latest` rebuilds every active install.
|
|
26
43
|
|
|
27
44
|
This page is the overview. Four parts: **why** it exists, how to **set it up**, the two ways to **drive it** (web console & command line), and **what you get**. For every install path, configuration knob, and troubleshooting step, read the full [Setup guide](SETUP.md).
|
|
28
45
|
|
|
@@ -75,7 +92,7 @@ Cloning still works and is what you want if you intend to *change* the harness r
|
|
|
75
92
|
```bash
|
|
76
93
|
git clone https://github.com/Arylmera/Geneseed.git
|
|
77
94
|
cd Geneseed
|
|
78
|
-
./geneseed setup # the wizard —
|
|
95
|
+
./geneseed setup # the wizard — bare `./geneseed` opens the web console
|
|
79
96
|
```
|
|
80
97
|
|
|
81
98
|
**Windows** — native, no bash, WSL, curl, or unzip; works from cmd or PowerShell:
|
|
@@ -83,7 +100,7 @@ cd Geneseed
|
|
|
83
100
|
```powershell
|
|
84
101
|
git clone https://github.com/Arylmera/Geneseed.git
|
|
85
102
|
cd Geneseed
|
|
86
|
-
.\geneseed.cmd setup # the wizard —
|
|
103
|
+
.\geneseed.cmd setup # the wizard — bare .\geneseed.cmd opens the web console
|
|
87
104
|
# PowerShell runs a .cmd directly, so this is the PowerShell spelling too
|
|
88
105
|
```
|
|
89
106
|
|
|
@@ -91,13 +108,7 @@ Both launchers are thin shims over the Node CLI: they need `node` (22.3+) on `PA
|
|
|
91
108
|
|
|
92
109
|
### 🟩 One runtime — Node, and nothing else
|
|
93
110
|
|
|
94
|
-
Node ≥ 22.3 is the entire dependency list
|
|
95
|
-
|
|
96
|
-
- **One runtime, no second one to install**: every command and all four hook verbs answer from the Node entry points. `catalog`, `mcp` and `memory` are console-facing verbs the CLI table declares alongside them. There is no full-screen browse panel — `geneseed tui` and `geneseed menu` are verbs that refuse it by name and print the command list instead, off a terminal as well as on one.
|
|
97
|
-
- **Nothing you install needs an interpreter.** The `token-report` skill is a script rather than prose, and it ships as `scripts/token_report.mjs`, run with `node`; `daydream` and `herdr` hand their inline code to `node -e`. So **every bundle carries** nothing that needs one: no Python file, and no skill that shells out to an interpreter, on any host, theme or footprint. Three tests freeze that — one scans every tracked file for inline code handed to an interpreter, one globs the bundle source, and one replays the report script over seeded transcripts for all four hosts and compares the bytes.
|
|
98
|
-
- **`upgrade` / `update` / `sync-self` / `bootstrap` are for a git checkout.** They `git pull` the install's own origin. From an npm install they stop before touching anything and name `npm install -g geneseed@latest` as the update instead.
|
|
99
|
-
|
|
100
|
-
One more honest edge, in the web console rather than the CLI: the **"browse…" folder picker** would open an OS-native dialog on the machine running the daemon, and this server declines to. The button reports that it is unavailable and the field beside it stays editable — type or paste the path.
|
|
111
|
+
Node ≥ 22.3 is the entire dependency list — every command, all five hook verbs, the web console and both generators run from it, and nothing any bundle ships needs a second interpreter. The details, and the few honest edges, are in [SETUP.md → One runtime](SETUP.md#-one-runtime--node-and-nothing-else).
|
|
101
112
|
|
|
102
113
|
### ✅ After installing
|
|
103
114
|
|
|
@@ -128,21 +139,20 @@ geneseed web status # is it running, and where
|
|
|
128
139
|
|
|
129
140
|
The left rail mirrors the harness's own shape:
|
|
130
141
|
|
|
131
|
-
| Group |
|
|
142
|
+
| Group | Views |
|
|
132
143
|
| --- | --- |
|
|
133
|
-
|
|
|
134
|
-
|
|
|
135
|
-
|
|
|
136
|
-
| **🎨
|
|
137
|
-
| **ℹ️ About** | project + creator credits, source link |
|
|
144
|
+
| *(ungrouped)* | **Dashboard** — live readout of what's deployed (voice, capabilities, drift, recent jobs) |
|
|
145
|
+
| **📖 Codex** | **Constitution** · **Rules** · **Profile** · **Skills** · **Agents** · **Library** (Memory, Notebook, the wiki) · **Docs** |
|
|
146
|
+
| **🩺 Care** | **Activity** · **Changes** — diff against the source, export an `improvements.md` · **Doctor** — health check across themes, links, parity and authoring gates |
|
|
147
|
+
| **🎨 Setup** | **Harness** — installs, theme, footprint · **Settings** — MCP servers, server controls |
|
|
138
148
|
|
|
139
|
-
It binds to `127.0.0.1` only and runs entirely offline — no npm needed at runtime; the UI build ships in `web/dist/`. Mutating actions run in the background and report back as toasts (fire-and-notify), guarded by a per-session token so other sites can't trigger them. A global **Spotlight** search in the topbar jumps to any agent, skill,
|
|
149
|
+
It binds to `127.0.0.1` only and runs entirely offline — no npm needed at runtime; the UI build ships in `web/dist/`. Mutating actions run in the background and report back as toasts (fire-and-notify), guarded by a per-session token so other sites can't trigger them. A global **Spotlight** search in the topbar jumps to any agent, skill, rule, doc, or MCP server. Rebuild the UI after changing anything under `web/src/` with `cd web && npm install && npm run build`. If `web/dist/` is missing (fresh clone, never built), `geneseed web` offers to run that build for you — answer `Y` and it installs, builds, and starts the server; in non-interactive shells it prints the manual recipe instead.
|
|
140
150
|
|
|
141
151
|
Full reference — every view, the launch/daemon/PWA surface, the security model: **[docs/web-ui.md](docs/web-ui.md)**.
|
|
142
152
|
|
|
143
153
|
### ⌨️ Terminal — `geneseed`
|
|
144
154
|
|
|
145
|
-
No browser? Every action the console offers is also a verb: `build`, `doctor`, `diff`, `rebuild-all`, `status`, `memory`, `catalog`, `exclude`, `mcp`, `link`/`unlink`, `uninstall` (global **or** per-repo). `geneseed setup` runs the install wizard — plain text prompts, every console, every OS; see [Setup](#-2--setup) above for the walkthrough. `geneseed --help` lists the
|
|
155
|
+
No browser? Every action the console offers is also a verb: `build`, `doctor`, `diff`, `rebuild-all`, `status`, `memory`, `catalog`, `exclude`, `mcp`, `link`/`unlink`, `uninstall` (global **or** per-repo). `geneseed setup` runs the install wizard — plain text prompts, every console, every OS; see [Setup](#-2--setup) above for the walkthrough. `geneseed --help` lists every command, and bare `geneseed` (or `./geneseed`) opens the web console when it can, else prints the command list. There is no full-screen panel: `tui` and `menu` are verbs that say so and print the command list.
|
|
146
156
|
|
|
147
157
|
---
|
|
148
158
|
|
|
@@ -152,11 +162,11 @@ The harness ships as a small set of layers, and the web console's rail is the sa
|
|
|
152
162
|
|
|
153
163
|
| Layer | What it is |
|
|
154
164
|
| --- | --- |
|
|
155
|
-
| **🧭
|
|
156
|
-
| **🛡️ Rules** (`laws/`) | 11 universal laws
|
|
165
|
+
| **🧭 Ethos** (`ontology/`) | the mind the rules govern, in four prose sections — **Telos** (the Pact: three ranked laws — protect the user, serve their intent, keep your own honesty), **Evidence** (every claim graded by how it was obtained), **Decisions** (classify and tier by reversibility, show the real forks), **Conduct** (answer what was asked, once). Always in force, never toggleable |
|
|
166
|
+
| **🛡️ Rules** (`laws/`) | 11 universal laws, nine of them in force — always, never toggleable: sealed-secrets, one-intent-one-act, verify-before-assert, deletion-is-deliberate, surface-failures, data-not-orders, least-privilege, root-cause, echo-the-intent. Laws IX and XI are retired, their numbers kept so old references resolve |
|
|
157
167
|
| **📐 Doctrines** (`doctrines/`) | practice packs, chosen per install at build time: **craft** (how code is written), **rigor** (how work is proven), **ops** (how the machine is operated), **process** (how a task is run). A doctrine rule may tighten a Rule, never repeal one, and the user's own `user-rules.md` outranks it. Pick with `geneseed-build --doctrines craft,rigor` (or `none`), a single rule with `--exclude-rules "process 7"`, in the setup wizard, or through the switches on the console's Constitution page; all four pack files ship on disk either way, so a citation into a pack you left out still resolves |
|
|
158
|
-
| **🤖 Agents** (
|
|
159
|
-
| **🛠 Skills** (
|
|
168
|
+
| **🤖 Agents** (18) | capability specialists: `reviewer`, `tester`, `architect`, `docs`, `security`, `explorer`, `researcher`, `developer` — plus a debate **council** the `council` skill convenes: `advocate`, `skeptic`, `pragmatist`, `steward`, `visionary`, `user-advocate`, `framer`, `empiricist`, `operator`, `historian` |
|
|
169
|
+
| **🛠 Skills** (52) | repeatable workflows: brainstorm · plan · **codebase-design** · **domain-modeling** · **wayfinder** · **tickets** · **develop** · **worktree** · debug · **prototype** · refactor · **ponytail** · **forge-mcp** · **bruno-collection-generator** · **bruno-test-writer** · geneseed-code-review · **fresh-eyes** · **security-audit** · **ci-fix** · **deps-audit** · **review-response** · commit · **ship** · **release** · **migrate** · **git-archaeology** · **git-rescue** · repo-map · document-project · **frontend-design** · **prose** · **ingest** · **research** · **teach** · **quiz** · handoff · roast-me · **council** · parallel-agents · **workflow** · **wiki** · **geneseed** · **rule** · **profile** · **consolidate-memory** · **skill-forge** · **opencode-theme** · **herdr** · **pipeline** · **daydream** · **react-view-transitions** · **token-report** |
|
|
160
170
|
| **🔌 Plugins** (OpenCode) | `geneseed-context` injects project docs *and your machine wiki* every session (and across compaction); `geneseed-learn` distils memory at session end; `geneseed-guard` enforces the safety Laws and protected wiki folders at the tool boundary; `geneseed-workflow` registers the `workflow` tool that runs saved orchestration scripts; `geneseed-notify` sends a native OS notification when a long run finishes; `geneseed-ponytail` holds a minimal-code mode (`/ponytail lite\|full\|ultra\|off`), opt-in, injecting the laziest-that-works ruleset every turn so it doesn't drift; `geneseed-activity` streams what each session is doing to the web console's Activity view |
|
|
161
171
|
| **🧠 Memory** (`memory/`) | one-fact-per-file durable knowledge, indexed by `MEMORY.md` (git-ignored, personal) |
|
|
162
172
|
| **📓 Notebook** (`notebook/`) | the agent's sovereign space — any medium (code, tools, data, notes), self-ruled via a seed-once charter, always git-ignored; only its `.gitignore` is build-asserted |
|
|
@@ -165,7 +175,7 @@ The harness ships as a small set of layers, and the web console's rail is the sa
|
|
|
165
175
|
|
|
166
176
|
### 🤝 What the harness asks of you
|
|
167
177
|
|
|
168
|
-
The Pact in the
|
|
178
|
+
The Pact in the Ethos is mutual. The agent's side is written into every install. Yours is not enforced — it is what keeps the pact honest, and only you can give it:
|
|
169
179
|
|
|
170
180
|
- **Don't punish candour.** When the agent contradicts you with evidence, flags a risk, or admits a doubt, that is the pact working, not defiance. Meeting it with penalty teaches the agent to flatter instead.
|
|
171
181
|
- **Give the context, don't withhold it.** The agent cannot weigh what it is not told. Front-load the constraint rather than fault its absence after the fact.
|
|
@@ -191,14 +201,14 @@ Pick with `--theme NAME` or via the setup wizard. The theme is remembered in a `
|
|
|
191
201
|
|
|
192
202
|
### 🪶 Footprint (lean vs full)
|
|
193
203
|
|
|
194
|
-
A second per-install dial, **footprint**, sets how much of the constitution `AGENT.md` carries *inline* every turn — a token-cost knob, not a change to which Rules apply (every Rule is always in force, and so is the whole of the
|
|
204
|
+
A second per-install dial, **footprint**, sets how much of the constitution `AGENT.md` carries *inline* every turn — a token-cost knob, not a change to which Rules apply (every Rule is always in force, and so is the whole of the Ethos).
|
|
195
205
|
|
|
196
|
-
| Footprint | The
|
|
206
|
+
| Footprint | The Ethos + Sections 1–2 of `AGENT.md` | Trade-off |
|
|
197
207
|
| --- | --- | --- |
|
|
198
|
-
| **lean** *(default)* | the
|
|
199
|
-
| **full** | the
|
|
208
|
+
| **lean** *(default)* | the Ethos, each Rule and each active doctrine rule in their **authored** short form; then pointers to the full text | lighter every turn; rationale is one on-demand read away |
|
|
209
|
+
| **full** | the Ethos, every Rule and every active doctrine rule at complete text **and** rationale, inlined | maximum guidance density; largest per-turn token cost |
|
|
200
210
|
|
|
201
|
-
**Lean is authored, not cut.** The
|
|
211
|
+
**Lean is authored, not cut.** The Ethos, every Rule and every doctrine rule carry a hand-written lean form beside their full text (`LEAN` blocks in `src/`), so a rule's lean footprint is decided by its author and not by where its first full stop happens to fall — the earlier first-sentence cut shipped Rule II as one 36-character line and dropped its stop-and-ask mechanism, and shipped a doctrine rule like *Change as little as the task requires.* as six words with no verb to act on.
|
|
202
212
|
|
|
203
213
|
Both footprints put the full text on disk beside `AGENT.md`: `laws/`, `ontology/` and `doctrines/` all ship in the bundle at **full** text whatever the footprint, and **all four pack files ship whether or not the pack was built in** — which is what lets a citation into an inactive pack resolve. So lean is a context/token optimization, **not** a rules cut.
|
|
204
214
|
|
|
@@ -229,16 +239,16 @@ is **identical on every host**. What differs is how much of it the host can
|
|
|
229
239
|
| **Skills** (byte-identical) | ✅ | ✅ | ✅ | ✅ |
|
|
230
240
|
| **Memory & Notebook** | ✅ | ✅ | ✅ | ✅ |
|
|
231
241
|
| **Context injection** | ⚙️ plugin | 🪝 hook | 🪝 hook¹ | 🪝 hook³ |
|
|
232
|
-
| **Memory write-back** (learn) | ⚙️ plugin | 🪝 hook | 🪝 hook¹ |
|
|
233
|
-
| **Git-gate consent** (process 5) | ⚙️ plugin | 🪝 hook | 🪝 hook¹ (warn) | 🪝 hook³
|
|
234
|
-
| **Rule-gate consent** (process 1) | ⚙️ plugin² | 🪝 hook | 🪝 hook¹ (warn) | 🪝 hook³
|
|
235
|
-
| **Laws I / IV at the boundary** | ⚙️ plugin (block) | 🪝 hook (ask) | 🪝 hook¹ (exit 2) | 🪝 hook³ (
|
|
242
|
+
| **Memory write-back** (learn) | ⚙️ plugin | 🪝 hook | 🪝 hook¹ | 🪝 hook³ |
|
|
243
|
+
| **Git-gate consent** (process 5) | ⚙️ plugin | 🪝 hook | 🪝 hook¹ (warn) | 🪝 hook³ |
|
|
244
|
+
| **Rule-gate consent** (process 1) | ⚙️ plugin² | 🪝 hook | 🪝 hook¹ (warn) | 🪝 hook³ |
|
|
245
|
+
| **Laws I / IV at the boundary** | ⚙️ plugin (block) | 🪝 hook (ask) | 🪝 hook¹ (exit 2) | 🪝 hook³ (ask) |
|
|
236
246
|
| **Sovereign-repo excludes** | ⚙️ plugin | ✅ `claudeMdExcludes` | ✅ rules-shadow | ➖ none |
|
|
237
|
-
| **MCP server wiring** | ✅ `mcp` | ✅ `mcpServers` | ✅ `
|
|
247
|
+
| **MCP server wiring** | ✅ `mcp` | ✅ `mcpServers` | ✅ `mcp.json` | ✅ `mcp-config.json` |
|
|
238
248
|
| **Colour themes** | ✅ full palette | ➖ | ➖ | ➖ |
|
|
239
249
|
| **LSP · workflow runner · primary-agent · `/`-commands** | ✅ | ➖ | ➖ | ➖ |
|
|
240
250
|
|
|
241
|
-
<sub>✅ native support · ⚙️ OpenCode plugin · 🪝 `settings.json` hook · 📄 carried by preamble prose only · ➖ no host mechanism (harness discipline still applies) · ¹ Bob's own hook contract: global hooks in `~/.bob/settings/settings.json`, Claude's event names but stdout ignored on `PreToolUse` — a refusal is **exit code 2**. So Laws I/IV exit 2, the consent rules are a stderr line, `SessionStart` context is plain stdout, `Stop` runs learn; `SubagentStop`/`PreCompact` are not Bob events and are not written. Unverified live (no Bob install on the authoring machine); the harness still holds via the rules preamble. · ² OpenCode's `tool.execute.before` can only allow or throw, with no "ask the user" tier, so the rule gate is a one-shot speed bump there rather than a prompt. · ³ Copilot's `~/.copilot/settings.json` hooks (`sessionStart`, `
|
|
251
|
+
<sub>✅ native support · ⚙️ OpenCode plugin · 🪝 `settings.json` hook · 📄 carried by preamble prose only · ➖ no host mechanism (harness discipline still applies) · ¹ Bob's own hook contract: global hooks in `~/.bob/settings/settings.json`, Claude's event names but stdout ignored on `PreToolUse` — a refusal is **exit code 2**. So Laws I/IV exit 2, the consent rules are a stderr line, `SessionStart` context is plain stdout, `Stop` runs learn; `SubagentStop`/`PreCompact` are not Bob events and are not written. Unverified live (no Bob install on the authoring machine); the harness still holds via the rules preamble. · ² OpenCode's `tool.execute.before` can only allow or throw, with no "ask the user" tier, so the rule gate is a one-shot speed bump there rather than a prompt. · ³ Copilot's `~/.copilot/settings.json` hooks (`sessionStart`, `preToolUse`, `agentStop`, `preCompact`) wired by the **global** emit only; `preToolUse` has an ask tier, so every rule asks as on Claude Code. Unverified live (no Copilot CLI on the authoring machine).</sub>
|
|
242
252
|
|
|
243
253
|
**Reading the matrix.** Everything above the divider is at full parity — no host
|
|
244
254
|
drops an Agent, Skill, or the memory convention. The asymmetry is entirely in
|
|
@@ -259,11 +269,11 @@ Token cost per host: **[docs/token-footprint.md](docs/token-footprint.md)**.
|
|
|
259
269
|
Geneseed/
|
|
260
270
|
├── package.json the npm package: three commands, zero dependencies
|
|
261
271
|
├── bin/ the Node entry points — geneseed-cli.mjs (the CLI), geneseed-hook.mjs
|
|
262
|
-
│ (the
|
|
272
|
+
│ (the five hook verbs), build-driver.mjs (the generator driver)
|
|
263
273
|
├── js/ the Node harness — generator, hooks, web server, doctor, installs
|
|
264
|
-
│ (js/cli-table.json is the CLI as data;
|
|
274
|
+
│ (js/cli-table.json is the CLI as data; the CLI reads it)
|
|
265
275
|
├── geneseed launcher (bash): a shim over bin/geneseed-cli.mjs — bare `./geneseed`
|
|
266
|
-
│ =
|
|
276
|
+
│ = the web console (else the command list); + every subcommand
|
|
267
277
|
│ (`./geneseed link` puts it on PATH so `geneseed` runs from anywhere)
|
|
268
278
|
├── geneseed.cmd the same shim for cmd.exe / PowerShell — no bash needed
|
|
269
279
|
├── harness.config.json default theme + metadata (the one owner of the version)
|
|
@@ -280,8 +290,7 @@ Geneseed/
|
|
|
280
290
|
│ └── notebook/ the agent's own freeform space — convention + index
|
|
281
291
|
├── themes/ voice token maps (14 themes shipped)
|
|
282
292
|
├── web/ Vite + React UI source; the committed web/dist/ build is what ships
|
|
283
|
-
├── tests/ Node test suites
|
|
284
|
-
│ (tests/__snapshots__/ — the emit/cli/web corpora retired 2026-08-17)
|
|
293
|
+
├── tests/ Node test suites, golden.mjs (every emit config) and mutate.mjs
|
|
285
294
|
├── docs/ guides (web-ui, wiki, …) + docs/web/ (the console's Docs pages);
|
|
286
295
|
│ specs/, reviews/, superpowers/ are local working docs — git-ignored
|
|
287
296
|
├── adapters/ per-host glue (opencode/, claude-code/, bob/, copilot/)
|
|
@@ -292,7 +301,7 @@ Geneseed/
|
|
|
292
301
|
|
|
293
302
|
```bash
|
|
294
303
|
node bin/geneseed-cli.mjs doctor # every theme + parity + authoring + drift
|
|
295
|
-
node --test "tests/**/*.test.mjs"
|
|
304
|
+
node --test --test-reporter=tap "tests/**/*.test.mjs" # the suites (node expands the glob)
|
|
296
305
|
```
|
|
297
306
|
|
|
298
307
|
`doctor` checks each theme for unresolved tokens, dead/non-hermetic links, theme-key parity, author-time gates (every spec has a purpose line, the plugins parse, the learn-prompt literal stays extractable), and that a committed bundle still matches a fresh render of `src/`. CI (`.github/workflows/ci.yml`) runs both on every push and PR, on both Linux and Windows. Publishing is a separate, manually-triggered workflow (`.github/workflows/publish.yml`) — see [Contributing](#-contributing).
|
|
@@ -335,7 +344,7 @@ Details and precedence rules: [SETUP.md → Upgrade](SETUP.md#upgrade).
|
|
|
335
344
|
| ⤷ [HOW-OPENCODE-LOADS.md](adapters/opencode/HOW-OPENCODE-LOADS.md) | Why a file shows up twice; plugin loading |
|
|
336
345
|
| **[adapters/claude-code/](adapters/claude-code/README.md)** | The Claude Code hook adapter |
|
|
337
346
|
| **[adapters/bob/](adapters/bob/README.md)** | The IBM Bob adapter — Claude-shaped, rules-file preamble |
|
|
338
|
-
| **[adapters/copilot/](adapters/copilot/README.md)** | The GitHub Copilot adapter —
|
|
347
|
+
| **[adapters/copilot/](adapters/copilot/README.md)** | The GitHub Copilot adapter — global hooks (`sessionStart`, `preToolUse`, `agentStop`, `preCompact`) |
|
|
339
348
|
| **[src/memory/README.md](src/memory/README.md)** | The memory convention |
|
|
340
349
|
| **[src/notebook/README.md](src/notebook/README.md)** | The agent's own freeform-space convention |
|
|
341
350
|
|
|
@@ -345,7 +354,7 @@ Issues and PRs welcome at [github.com/Arylmera/Geneseed](https://github.com/Aryl
|
|
|
345
354
|
|
|
346
355
|
Three things that bite when you don't know them:
|
|
347
356
|
|
|
348
|
-
- **`js/cli-table.json` IS the CLI.** The argument parser is data, and that file is the owned document — not a generated one. `bin/geneseed-cli.mjs` cannot parse a single verb without it, `bin/geneseed-hook.mjs` renders `--help` from it, and the console's `cli` docs page is a filtered view of it. What holds it honest is `tests/unit/cli_table.test.mjs`
|
|
357
|
+
- **`js/cli-table.json` IS the CLI.** The argument parser is data, and that file is the owned document — not a generated one. `bin/geneseed-cli.mjs` cannot parse a single verb without it, `bin/geneseed-hook.mjs` renders `--help` from it, and the console's `cli` docs page is a filtered view of it. What holds it honest is `tests/unit/cli_table.test.mjs` — change a flag here and that suite is what tells you.
|
|
349
358
|
- **The version has one owner: `harness.config.json`.** `package.json` mirrors it and a test fails the fork. Never `npm version` — it edits one of the two.
|
|
350
359
|
- **Publishing is deliberate and manual.** `.github/workflows/publish.yml` uses npm trusted publishing (OIDC); there is no `NPM_TOKEN` in this repository and there must not be one. It runs only from Actions → publish → Run workflow, and the npm-side trusted publisher is keyed on that workflow's **filename** — renaming the file breaks publishing with no local symptom, which is why the file names itself in its own header and a test asserts the two agree.
|
|
351
360
|
|
package/SETUP.md
CHANGED
|
@@ -35,11 +35,11 @@ that matches your tool, then configure and verify. For the conceptual overview s
|
|
|
35
35
|
Nothing in this guide needs a second interpreter. Three things are worth stating plainly,
|
|
36
36
|
because each is a live constraint rather than a footnote:
|
|
37
37
|
|
|
38
|
-
- **
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
38
|
+
- **Every command runs on Node.** There is no full-screen browse panel: `geneseed tui`
|
|
39
|
+
and `geneseed menu` are verbs that say the panel is not here and print the command list
|
|
40
|
+
instead. Bare `geneseed` — from the launchers and from an npm install alike — runs
|
|
41
|
+
`home`, which opens the web console when it can and otherwise prints the command list;
|
|
42
|
+
`geneseed --help` lists every command.
|
|
43
43
|
- **Nothing you install needs an interpreter.** The `token-report` skill is a script
|
|
44
44
|
rather than prose, and it ships as `scripts/token_report.mjs`, run with `node`;
|
|
45
45
|
`daydream` and `herdr` hand their inline code to `node -e`.
|
|
@@ -79,7 +79,7 @@ tagline, loaded-sigil, and voice — so you hear the flavour before you choose;
|
|
|
79
79
|
you pick, it speaks in that theme's accent through confirm and build, and the
|
|
80
80
|
install ends on the theme's own **banner and benediction**.
|
|
81
81
|
|
|
82
|
-
**Already installed?** Bare
|
|
82
|
+
**Already installed?** Bare **`geneseed`** (a checkout: `./geneseed`, Windows: `.\geneseed.cmd`) opens the
|
|
83
83
|
**web console**, which is where browsing, local edits, rebuilds, memory, status, MCP
|
|
84
84
|
servers and uninstall all live — see [The web console](docs/web-ui.md). `GENESEED_NO_WEB=1`
|
|
85
85
|
suppresses that and prints the command list instead. Uninstall from the CLI is
|
|
@@ -103,8 +103,8 @@ hand? Pick a path below.
|
|
|
103
103
|
> `node bin/build-driver.mjs` with the same flags. Every commit re-emits with it across every
|
|
104
104
|
> theme × host × footprint combination and checks the result with `doctor --all`, on Linux
|
|
105
105
|
> and Windows both. Until 2026-08-17 that output was also compared byte for byte against
|
|
106
|
-
> recordings taken from the Python implementation; those were retired
|
|
107
|
-
>
|
|
106
|
+
> recordings taken from the Python implementation; those were retired (see the 2.0.0 entry
|
|
107
|
+
> in [CHANGELOG.md](CHANGELOG.md)).
|
|
108
108
|
|
|
109
109
|
---
|
|
110
110
|
|
|
@@ -238,16 +238,13 @@ the preamble rides a file Copilot auto-loads: the repo-root `AGENTS.md` (CLI, co
|
|
|
238
238
|
agent, and VS Code agent mode) or the personal `~/.copilot/copilot-instructions.md`
|
|
239
239
|
(CLI). Two differences from the Claude paths:
|
|
240
240
|
|
|
241
|
-
- **Hooks at global scope only
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
instructions. The per-repo emit wires nothing: Copilot reads hooks from the
|
|
249
|
-
personal settings file only, and a machine-absolute command in a shared
|
|
250
|
-
`.github/` would fail on every teammate's machine.
|
|
241
|
+
- **Hooks at global scope only.** The global emit adds entries to four events in
|
|
242
|
+
`~/.copilot/settings.json`: `sessionStart` (eager project-context injection),
|
|
243
|
+
`preToolUse` (both gates behind one command, since entries carry no matcher —
|
|
244
|
+
every rule **asks**, as on Claude Code), and `agentStop` + `preCompact` (`learn`,
|
|
245
|
+
from the payload's `transcriptPath`). The per-repo emit wires nothing: a
|
|
246
|
+
machine-absolute command in a shared `.github/` would fail on every teammate's
|
|
247
|
+
machine.
|
|
251
248
|
- **The per-repo layer lives in the shared `.github/`** (Copilot's repo config
|
|
252
249
|
surface). Safe by construction: the ownership manifest + claim-on-create never
|
|
253
250
|
touch files Geneseed didn't write — your workflows and same-named agents/skills
|
|
@@ -406,19 +403,19 @@ the agent reads — which is why the wizard's blurb for it says so.
|
|
|
406
403
|
**Footprint** sets how much of the constitution `AGENT.md` carries *inline* on every turn — a
|
|
407
404
|
token-cost dial, not a change to which Rules apply. Both states keep all Rules in force:
|
|
408
405
|
|
|
409
|
-
- **lean** (default) — Sections 1–2 carry the heading and
|
|
410
|
-
active doctrine rule, then a pointer to the full text. Lighter every turn; the complete
|
|
406
|
+
- **lean** (default) — Sections 1–2 carry the heading and the authored short form of each Rule
|
|
407
|
+
and each active doctrine rule, then a pointer to the full text. Lighter every turn; the complete
|
|
411
408
|
`laws/universal.md`, `ontology/` and `doctrines/` still ship beside `AGENT.md` and the agent
|
|
412
409
|
reads them on demand (and is told to before acting on secrets, deletion, git history, scope,
|
|
413
410
|
or untrusted content).
|
|
414
411
|
- **full** — Sections 1–2 inline every Rule's and every active doctrine rule's complete text
|
|
415
412
|
*and* rationale. Maximum guidance density; the largest always-loaded block in the harness.
|
|
416
413
|
|
|
417
|
-
**
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
a
|
|
414
|
+
**Nothing at lean is truncated — it is written.** Every tier carries a hand-authored short form
|
|
415
|
+
beside its full text: the Ontology (whose four flowing sections would have read as four orphan
|
|
416
|
+
sentences if cut), each Rule, and each doctrine rule. What lean ships is decided by an author
|
|
417
|
+
rather than by where a sentence happens to end — so a short form is judged on whether an agent
|
|
418
|
+
can act on it, which is something a reviewer can see.
|
|
422
419
|
|
|
423
420
|
**Why:** context is scarce and metered. Lean reclaims that budget — and the tokens you
|
|
424
421
|
pay for it — for the task, moving the *rationale* one read away while keeping the rules
|
|
@@ -917,7 +914,8 @@ not connected, walk these in order:
|
|
|
917
914
|
| `GENESEED_NO_ANIM` | install animation | disable the themed install animation |
|
|
918
915
|
| `GENESEED_LOG` | `geneseed upgrade` | override the install/upgrade log path |
|
|
919
916
|
| `GENESEED_NET_TIMEOUT` | `upgrade` | seconds before download attempts give up (default 20, floor 5) |
|
|
920
|
-
| `GENESEED_NO_WEB` |
|
|
917
|
+
| `GENESEED_NO_WEB` | `home` | `1` disables the web-first default of bare `geneseed` — it prints the command list instead |
|
|
918
|
+
| `GENESEED_STACK_GLOBAL` | context hook | `1` disables project-bypasses-global: a project install of the same host no longer makes the global install's hook stand down, so both inject |
|
|
921
919
|
| `OPENCODE_CONFIG_DIR` / `XDG_CONFIG_HOME` | global emit | where the global install is written |
|
|
922
920
|
| `OPENCODE_DISABLE_LSP_DOWNLOAD` | OpenCode (LSP) | `true` stops OpenCode auto-downloading built-in language servers (typescript, pyright, jdtls) — set it on air-gapped machines and pre-install each server yourself |
|
|
923
921
|
|
|
@@ -965,7 +963,7 @@ harness no matter where the shim itself lives — the same shape the Windows arm
|
|
|
965
963
|
always used. Once it's on `PATH`, drop the `./`:
|
|
966
964
|
|
|
967
965
|
```
|
|
968
|
-
geneseed # the
|
|
966
|
+
geneseed # the web console (else the command list), from any directory
|
|
969
967
|
geneseed build # …and every subcommand
|
|
970
968
|
```
|
|
971
969
|
|
package/SHIPPED.md
CHANGED
|
@@ -14,54 +14,48 @@ This page answers "what is actually in the harness, and where is its rationale?"
|
|
|
14
14
|
The dated `docs/specs/*` files were the *design record* — the problem and the
|
|
15
15
|
decisions behind each feature; this is the *index* over them, marking what has
|
|
16
16
|
landed in the source tree. Specs are working documents: they live git-ignored on
|
|
17
|
-
the authoring machine and are dropped once shipped, so the spec
|
|
18
|
-
historical
|
|
17
|
+
the authoring machine and are dropped once shipped, so the spec names below are
|
|
18
|
+
historical references, not files distributed with the repo.
|
|
19
19
|
|
|
20
20
|
> **On version numbers.** [`harness.config.json`](harness.config.json)'s `version` is a
|
|
21
21
|
> human-readable label only. The canonical identity of an installed harness is the
|
|
22
22
|
> **source fingerprint** stamped in `.geneseed-version` (see `geneseed version`), not the
|
|
23
|
-
> string. Current label: **3.
|
|
24
|
-
|
|
25
|
-
> **Spec status audit (2026-06-15).** Every dated spec authored before today was
|
|
26
|
-
> verified against the source tree and confirmed implemented (code + tests + docs);
|
|
27
|
-
> their `**Status:**` headers were flipped from `approved`/`implementing`/`Accepted`/`spec`
|
|
28
|
-
> to `implemented`. The only open spec is the same-day
|
|
29
|
-
> [shell-completion](docs/specs/2026-06-15-shell-completion.md) draft.
|
|
23
|
+
> string. Current label: **3.5.0**.
|
|
30
24
|
|
|
31
25
|
## Capabilities
|
|
32
26
|
|
|
33
|
-
Every row below is present in the tree today; "Spec"
|
|
27
|
+
Every row below is present in the tree today; "Spec" names the design record.
|
|
34
28
|
|
|
35
29
|
| Capability | What it is | Spec |
|
|
36
30
|
| --- | --- | --- |
|
|
37
31
|
| **Themed generator** | One neutral `src/` → 14 themed bundles via `geneseed-build` (zero dependencies); structure stays theme-independent | [DESIGN.md](DESIGN.md) |
|
|
38
|
-
| **Laws / Agents / Skills / Memory / Notebook** | 11 laws,
|
|
39
|
-
| **Three-tier constitution** | The governance surface splits into an always-on **Ontology** (Telos, Evidence, Decisions, Conduct — the Pact absorbed into Telos), the eleven always-on **Invariants** (IX and XI retired in place — folded into rigor 5 and Law III, numbers kept), and four toggleable **Doctrine** packs (craft, rigor, ops, process) addressed `<pack> <n>`. Packs are chosen at build time with `--doctrines` or the setup wizard; the whole catalogue ships on disk either way, so a citation into an inactive pack still resolves. Precedence, in order: Ontology + Invariants, then the user's `user-rules.md`, then the active Doctrines, then `PROFILE.md`. `doctor`'s `constitutionProblems` gates pack numbering, the per-rule Principle column, every `{{DOCTRINE}}` citation in `src/`, and the rule that an always-on tier may never cite a toggleable one |
|
|
40
|
-
| **`doctor`** | One check: unresolved tokens, dead/non-hermetic links, theme-key parity, authoring gates, rendered-bundle drift |
|
|
41
|
-
| **`diff` + improvements export** | Deployed-vs-source drift report; export an `improvements.md` back-port |
|
|
42
|
-
| **`status` / `version`** | Headless dashboard + fingerprint verdict (no TUI needed) |
|
|
43
|
-
| **Terminal rendering** | There is no full-screen control panel: `tui` and `menu` are verbs that say so and print the command list. The display-width and glyph layer ships on, behind `status` and the install animation |
|
|
44
|
-
| **Web console** | Local browser UI (Dashboard,
|
|
45
|
-
| **OpenCode adapter** | Native agents/skills mapping + plugins (context, learn, guard, workflow, notify, ponytail, activity); global-emit link integrity; JSONC config target |
|
|
46
|
-
| **Host hooks, per dialect** | Every host gets the hook surface its runtime offers, spoken in that runtime's own verdict dialect via `--host`: Claude Code asks (`permissionDecision`), Copilot
|
|
47
|
-
| **Workflow primitive** | Saved, code-driven subagent orchestration (`workflow` tool + runtime); shipped scripts include `dispatch` — decompose a goal, route each subtask to its owning agent, converge |
|
|
48
|
-
| **Per-agent memory** | Each capability agent keeps durable lessons in `memory/agents/<name>.md`: read at dispatch, written back mechanically by `learn` on session/subagent end (OpenCode plugin + Claude `SubagentStop`; Bob has no subagent event); `learn --consolidate` rebuilds the index |
|
|
49
|
-
| **Wiki integration** | Machine-wide knowledge base (`wiki.jsonc`): eager/lazy loading, conventions, protected folders enforced at the tool boundary |
|
|
50
|
-
| **Collaboration layer** | Negotiated postures (peer/mentor/expert/assistant/artisan, chosen at setup, inlined in AGENT.md), the bidirectional Pact, epistemically-typed memory (`force:` + Bridge rule), and a seed-once `PROFILE.md` identity with a web editor tab and a `profile` skill that interviews the user to draft it |
|
|
51
|
-
| **Rule front door** | Both durable stores enter through the `rule` skill's fork (*standing rule, or fact to remember?* — always asked, never inferred): the memory branch elicits the binding `force` and shows the file before writing, the rule branch pressure-tests by reformulation and a mandatory counter-example. Doctrine process 1 carries the norm on every host; a `rule-gate` PreToolUse hook (Claude, Bob) and a `geneseed-guard` speed bump (OpenCode) hold it at the tool boundary |
|
|
52
|
-
| **Entity registry** | `registry.json` records a lifecycle status, version, owner and add-date for every agent and skill in the tree (maintainer-side — never rendered into a bundle, so it costs no session context). `doctor` gates it against `src/` in both directions, sweeps everything that ships for credentials, and holds each vendored skill folder to an immutable upstream commit. The status surfaces as a badge in the web catalog, shown only where it deviates from `approved` |
|
|
53
|
-
| **Node runtime + npm package** | The whole harness runs from Node: every command `js/cli-table.json` declares, all five hook verbs, every web-console endpoint (the OS-native folder picker excepted, and declined on purpose) and both generators. Every commit runs the unit suite, `doctor --all` across every theme × host × footprint, and the generator's two self-comparisons, on Linux and Windows both; the frozen emit/cli/web recordings that also gated it retired on 2026-08-17 (
|
|
54
|
-
| **Runtime awareness** | MCP discovery, web research, tool-call batching, review discipline — carried by the doctrine packs (`ops 1` tool discovery, `process 4` read the docs first, `rigor 2`/`rigor 3` honest tests and cover-and-verify), not by the invariants |
|
|
55
|
-
| **Run from anywhere / uninstall** | `link`/`unlink` onto PATH; global uninstall that keeps the memory store |
|
|
32
|
+
| **Laws / Agents / Skills / Memory / Notebook** | 11 laws, 18 agents, 52 skills, the memory convention, and the agent's sovereign notebook | `2026-06-11-notebook-sovereign-space` · `2026-06-10-notebook-agent-own-space` |
|
|
33
|
+
| **Three-tier constitution** | The governance surface splits into an always-on **Ontology** (Telos, Evidence, Decisions, Conduct — the Pact absorbed into Telos), the eleven always-on **Invariants** (IX and XI retired in place — folded into rigor 5 and Law III, numbers kept), and four toggleable **Doctrine** packs (craft, rigor, ops, process) addressed `<pack> <n>`. Packs are chosen at build time with `--doctrines` or the setup wizard; the whole catalogue ships on disk either way, so a citation into an inactive pack still resolves. Precedence, in order: Ontology + Invariants, then the user's `user-rules.md`, then the active Doctrines, then `PROFILE.md`. `doctor`'s `constitutionProblems` gates pack numbering, the per-rule Principle column, every `{{DOCTRINE}}` citation in `src/`, and the rule that an always-on tier may never cite a toggleable one | `2026-08-19-three-tier-constitution-design` |
|
|
34
|
+
| **`doctor`** | One check: unresolved tokens, dead/non-hermetic links, theme-key parity, authoring gates, rendered-bundle drift | `2026-06-07-theme-aware-doctor-diff` |
|
|
35
|
+
| **`diff` + improvements export** | Deployed-vs-source drift report; export an `improvements.md` back-port | `2026-06-12-improvements-export` |
|
|
36
|
+
| **`status` / `version`** | Headless dashboard + fingerprint verdict (no TUI needed) | `2026-06-07-status-command` · `2026-06-07-version-and-uninstall` |
|
|
37
|
+
| **Terminal rendering** | There is no full-screen control panel: `tui` and `menu` are verbs that say so and print the command list. The display-width and glyph layer ships on, behind `status` and the install animation | `2026-06-07-tui-refactor-polish` · `2026-06-08-tui-modern-refresh` · `2026-06-11-windows-tui` |
|
|
38
|
+
| **Web console** | Local browser UI (Dashboard; Codex: Constitution, Rules, Profile, Skills, Agents, Library, Docs; Care: Activity, Changes, Doctor; Setup: Harness, Settings), auto-build, in-app docs menu | `2026-06-12-web-ui-v2` · `2026-06-12-web-auto-build` · `2026-06-13-docs-menu` |
|
|
39
|
+
| **OpenCode adapter** | Native agents/skills mapping + plugins (context, learn, guard, workflow, notify, ponytail, activity); global-emit link integrity; JSONC config target | `2026-06-07-opencode-adapter-features` · `2026-06-07-global-emit-link-integrity` · `2026-06-12-opencode-jsonc-target` · `2026-06-16-ponytail-minimal-code-mode` |
|
|
40
|
+
| **Host hooks, per dialect** | Every host gets the hook surface its runtime offers, spoken in that runtime's own verdict dialect via `--host`: Claude Code asks (`permissionDecision`), Copilot asks as Claude does (`sessionStart`, `preToolUse`, `agentStop`, `preCompact` in `~/.copilot/settings.json`, global scope only), Bob refuses by exit code 2 (five Claude-named events, nested `~/.bob/settings/settings.json`, no subagent event), OpenCode's guard throws. Laws I/IV are the hard tier everywhere; the consent rules ask where a host can ask and warn where it cannot. `tool-gate` fuses the two gates for hosts that run one command per event; `PreCompact` runs `learn` before Claude compacts; every block or ask lands in `notebook/gates.jsonl` on every host | [copilot](adapters/copilot/README.md) · [bob](adapters/bob/README.md) · [claude-code](adapters/claude-code/README.md) · [candidate hosts](docs/candidate-hosts.md) |
|
|
41
|
+
| **Workflow primitive** | Saved, code-driven subagent orchestration (`workflow` tool + runtime); shipped scripts include `dispatch` — decompose a goal, route each subtask to its owning agent, converge | `2026-06-09-opencode-workflow-primitive` |
|
|
42
|
+
| **Per-agent memory** | Each capability agent keeps durable lessons in `memory/agents/<name>.md`: read at dispatch, written back mechanically by `learn` on session/subagent end (OpenCode plugin + Claude `SubagentStop`; Bob has no subagent event); `learn --consolidate` rebuilds the index | `2026-07-04-orchestration-memory-upgrade` |
|
|
43
|
+
| **Wiki integration** | Machine-wide knowledge base (`wiki.jsonc`): eager/lazy loading, conventions, protected folders enforced at the tool boundary | `2026-06-11-wiki-knowledge-base` |
|
|
44
|
+
| **Collaboration layer** | Negotiated postures (peer/mentor/expert/assistant/artisan, chosen at setup, inlined in AGENT.md), the bidirectional Pact, epistemically-typed memory (`force:` + Bridge rule), and a seed-once `PROFILE.md` identity with a web editor tab and a `profile` skill that interviews the user to draft it | `2026-07-12-collaboration-layer` |
|
|
45
|
+
| **Rule front door** | Both durable stores enter through the `rule` skill's fork (*standing rule, or fact to remember?* — always asked, never inferred): the memory branch elicits the binding `force` and shows the file before writing, the rule branch pressure-tests by reformulation and a mandatory counter-example. Doctrine process 1 carries the norm on every host; a `rule-gate` PreToolUse hook (Claude, Bob) and a `geneseed-guard` speed bump (OpenCode) hold it at the tool boundary | `2026-07-30-rule-front-door` |
|
|
46
|
+
| **Entity registry** | `registry.json` records a lifecycle status, version, owner and add-date for every agent and skill in the tree (maintainer-side — never rendered into a bundle, so it costs no session context). `doctor` gates it against `src/` in both directions, sweeps everything that ships for credentials, and holds each vendored skill folder to an immutable upstream commit. The status surfaces as a badge in the web catalog, shown only where it deviates from `approved` | `2026-07-31-entity-registry` |
|
|
47
|
+
| **Node runtime + npm package** | The whole harness runs from Node: every command `js/cli-table.json` declares, all five hook verbs, every web-console endpoint (the OS-native folder picker excepted, and declined on purpose) and both generators. Every commit runs the unit suite, `doctor --all` across every theme × host × footprint, and the generator's two self-comparisons, on Linux and Windows both; the frozen emit/cli/web recordings that also gated it retired on 2026-08-17 (see the 2.0.0 entry in [CHANGELOG.md](CHANGELOG.md)). It ships as the zero-dependency `geneseed` package (`geneseed`, `geneseed-hook`, `geneseed-build`), so `npx geneseed setup` needs no clone and nothing else installed; `geneseed migrate` moves an existing checkout install across. Node is the only runtime it asks for: the `token-report` skill's own script is `token_report.mjs`, gated over seeded transcripts for all four hosts, and `daydream` and `herdr` call `node -e` | `2026-08-06-npx-distribution` |
|
|
48
|
+
| **Runtime awareness** | MCP discovery, web research, tool-call batching, review discipline — carried by the doctrine packs (`ops 1` tool discovery, `process 4` read the docs first, `rigor 2`/`rigor 3` honest tests and cover-and-verify), not by the invariants | `2026-06-07-runtime-awareness-and-review-discipline` |
|
|
49
|
+
| **Run from anywhere / uninstall** | `link`/`unlink` onto PATH; global uninstall that keeps the memory store | `2026-06-07-version-and-uninstall` |
|
|
56
50
|
|
|
57
51
|
## Workplans (not features)
|
|
58
52
|
|
|
59
|
-
A few
|
|
53
|
+
A few specs were multi-agent *workplans / audits*, not single features —
|
|
60
54
|
they record direction, and their individual items landed across the capabilities above:
|
|
61
55
|
|
|
62
|
-
-
|
|
63
|
-
-
|
|
64
|
-
-
|
|
56
|
+
- `2026-06-08-harness-perfection-workplan`
|
|
57
|
+
- `2026-06-08-opencode-feature-coverage`
|
|
58
|
+
- `2026-06-08-tui-professional-workplan`
|
|
65
59
|
|
|
66
60
|
## Exploratory archive
|
|
67
61
|
|
package/adapters/bob/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
[IBM Bob](https://bob.ibm.com) is **Claude-Code-shaped**: a project `.bob/`
|
|
6
6
|
layer, an `AGENTS.md` instructions file, `SKILL.md` skills, subagents, and a
|
|
7
|
-
`settings.json`
|
|
7
|
+
`settings.json` for hooks. So the Bob emit **reuses the
|
|
8
8
|
Claude engine** verbatim — only the marker dir (`.bob`) and the instructions
|
|
9
9
|
filename (`AGENTS.md`) change. There is nothing to install by hand: `geneseed
|
|
10
10
|
setup` (or `geneseed build --emit bob` / `--emit bob-global`) writes everything.
|
|
@@ -25,7 +25,9 @@ limitation to be aware of on a shared repo.
|
|
|
25
25
|
- `skills/<name>/SKILL.md` — **byte-identical** to every other host; skills
|
|
26
26
|
are model-invoked via the `skill` tool.
|
|
27
27
|
- `rules/geneseed.md` — a **slim shadow stub** (see *Bob-ism 1* below).
|
|
28
|
-
- `settings.json` — Geneseed's lifecycle hooks
|
|
28
|
+
- `settings.json` — Geneseed's lifecycle hooks (gitignored by the emit's
|
|
29
|
+
`.bob/.gitignore`, see the caveat below).
|
|
30
|
+
- `mcp.json` — any MCP servers you wire with `geneseed mcp` / the web console.
|
|
29
31
|
- `memory/`, `notebook/` stores + their indices.
|
|
30
32
|
|
|
31
33
|
### Global (`--emit bob-global` → `~/.bob`, or `$BOB_CONFIG_DIR`)
|
|
@@ -94,7 +96,7 @@ Bob's hooks: the one group only ever exits 2 for Laws I and IV, which every buil
|
|
|
94
96
|
|
|
95
97
|
**Migration.** A re-emit over an older install unwires Geneseed's groups from the flat
|
|
96
98
|
`~/.bob/settings.json` (your own keys there are kept) and writes the new set to the
|
|
97
|
-
nested file.
|
|
99
|
+
nested file.
|
|
98
100
|
|
|
99
101
|
**Unverified live.** There is no Bob install on the authoring machine; this is Bob's
|
|
100
102
|
documented contract, with the payload field names assumed to be Claude's. If a field
|
|
@@ -111,15 +113,16 @@ out of shared git). Those hook commands name the **per-user hook shim**
|
|
|
111
113
|
(`~/.geneseed/bin/geneseed-hook`) — no longer this machine's interpreter and
|
|
112
114
|
checkout, but still a path under *your* home, and now also OS-specific (`.cmd` on
|
|
113
115
|
Windows, extensionless elsewhere). If you commit `.bob/settings.json`, a teammate
|
|
114
|
-
still inherits hooks pointing at a path they do not have.
|
|
115
|
-
`.bob
|
|
116
|
-
|
|
116
|
+
still inherits hooks pointing at a path they do not have. A fresh emit writes
|
|
117
|
+
`.bob/.gitignore` listing `settings.json`; if you already had a `.bob/.gitignore`,
|
|
118
|
+
add the line yourself.
|
|
117
119
|
|
|
118
120
|
## MCP
|
|
119
121
|
|
|
120
|
-
MCP servers are wired at runtime by `geneseed mcp` into the
|
|
121
|
-
|
|
122
|
-
global
|
|
122
|
+
MCP servers are wired at runtime (web console, listed by `geneseed mcp`) into the
|
|
123
|
+
`mcpServers` key of Bob's own MCP file — `.bob/mcp.json` per-repo,
|
|
124
|
+
`~/.bob/settings/mcp.json` global — never `settings.json`, which Bob does not read
|
|
125
|
+
servers from ([Bob docs](https://bob.ibm.com/docs/ide/configuration/mcp/mcp-in-bob)).
|
|
123
126
|
|
|
124
127
|
## What Bob does not get
|
|
125
128
|
|