geneseed 3.8.0 → 3.10.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 +71 -1
- package/DESIGN.md +13 -10
- package/QUICKSTART.md +1 -1
- package/README.md +31 -32
- package/SETUP.md +7 -42
- package/SHIPPED.md +4 -4
- package/adapters/bob/README.md +17 -1
- package/adapters/openclaude/README.md +1 -1
- package/adapters/opencode/GLOBAL-HARNESS-SPEC.md +1 -1
- package/adapters/opencode/README.md +3 -3
- package/adapters/opencode/plugins/geneseed-context.js +78 -8
- package/adapters/opencode/plugins/geneseed-guard.js +9 -9
- package/adapters/opencode/plugins/geneseed-workflow.js +1 -1
- package/adapters/opencode/workflows/_runtime.js +2 -2
- package/adapters/opencode/workflows/dispatch.js +1 -1
- package/bin/geneseed-hook.mjs +1 -1
- package/docs/candidate-hosts.md +12 -5
- package/docs/extending.md +72 -40
- package/docs/token-footprint.md +26 -21
- package/docs/web/claude-hooks.md +1 -1
- package/docs/web/collaboration.md +1 -1
- package/docs/web/exclusions.md +0 -1
- package/docs/web/footprint.md +1 -1
- package/docs/web/harnesses.md +14 -14
- package/docs/web/install-quick.md +1 -1
- package/docs/web/plugin-guard.md +2 -2
- package/docs/web/rules.md +1 -1
- package/docs/web/themes-author.md +2 -2
- package/docs/web-ui.md +2 -2
- package/harness.config.json +1 -1
- package/js/README.md +8 -7
- package/js/build/driver.mjs +26 -95
- package/js/build/emit-claude.mjs +76 -81
- package/js/build/generate.mjs +0 -1
- package/js/build/render.mjs +10 -3
- package/js/build/source.mjs +105 -1
- package/js/build/stubs.mjs +25 -4
- package/js/cli-table.json +8 -8
- package/js/hosts/hooks.mjs +91 -59
- package/js/hosts/hosts.mjs +5 -21
- package/js/hosts/installs.mjs +4 -6
- package/js/hosts/mcp.mjs +3 -13
- package/js/hosts/native.mjs +28 -51
- package/js/hosts/opencode.mjs +1 -1
- package/js/hosts/settings.mjs +4 -78
- package/js/inspect/checks-authoring.mjs +153 -117
- package/js/inspect/checks-repo.mjs +45 -1
- package/js/inspect/diff.mjs +11 -3
- package/js/inspect/doctor.mjs +3 -3
- package/js/inspect/excludes.mjs +0 -4
- package/js/inspect/inventory.mjs +1 -2
- package/js/inspect/status.mjs +4 -4
- package/js/maintain/migrate.mjs +5 -5
- package/js/maintain/setup.mjs +3 -5
- package/js/maintain/uninstall.mjs +8 -42
- package/js/ui/tui.mjs +1 -1
- package/js/web/actions.mjs +4 -5
- package/js/web/api.mjs +10 -5
- package/package.json +1 -2
- package/registry.json +7 -0
- package/src/AGENT.md.tmpl +86 -65
- package/src/agents/_template.md +3 -3
- package/src/agents/advocate.md +3 -3
- package/src/agents/architect.md +3 -3
- package/src/agents/developer.md +4 -4
- package/src/agents/docs.md +3 -3
- package/src/agents/empiricist.md +4 -4
- package/src/agents/explorer.md +4 -4
- package/src/agents/framer.md +3 -3
- package/src/agents/historian.md +3 -3
- package/src/agents/operator.md +3 -3
- package/src/agents/pragmatist.md +3 -3
- package/src/agents/researcher.md +7 -7
- package/src/agents/reviewer.md +3 -3
- package/src/agents/security.md +3 -3
- package/src/agents/skeptic.md +3 -3
- package/src/agents/steward.md +3 -3
- package/src/agents/tester.md +3 -3
- package/src/agents/user-advocate.md +3 -3
- package/src/agents/visionary.md +3 -3
- package/src/doctrines/README.md +4 -3
- package/src/doctrines/comms.md +4 -4
- package/src/doctrines/craft.md +20 -20
- package/src/doctrines/ops.md +19 -19
- package/src/doctrines/process.md +20 -20
- package/src/doctrines/rigor.md +22 -22
- package/src/laws/universal.md +26 -44
- package/src/memory/README.md +3 -3
- package/src/modes/foreman.md +1 -1
- package/src/notebook/README.md +1 -1
- package/src/ontology/universal.md +8 -10
- package/src/postures/artisan.md +2 -2
- package/src/skills/_self-improvement.md +4 -4
- package/src/skills/_template.md +1 -1
- package/src/skills/brainstorm.md +3 -3
- package/src/skills/bruno-collection-generator.md +6 -6
- package/src/skills/bruno-test-writer.md +5 -5
- package/src/skills/ci-fix.md +4 -4
- package/src/skills/commit.md +11 -10
- package/src/skills/consolidate-memory.md +4 -4
- package/src/skills/council.md +2 -2
- package/src/skills/daydream/SKILL.md +10 -3
- package/src/skills/daydream/VENDOR.md +10 -2
- package/src/skills/daydream/instructions.md +2 -2
- package/src/skills/debug.md +4 -4
- package/src/skills/deps-audit.md +3 -3
- package/src/skills/develop.md +7 -7
- package/src/skills/document-project.md +6 -6
- package/src/skills/explain-changes/SKILL.md +69 -0
- package/src/skills/explain-changes/VENDOR.md +20 -0
- package/src/skills/explain-changes/scripts/render_changes.mjs +558 -0
- package/src/skills/forge-mcp.md +4 -4
- package/src/skills/fresh-eyes.md +4 -4
- package/src/skills/frontend-design.md +1 -1
- package/src/skills/geneseed.md +4 -4
- package/src/skills/git-archaeology.md +5 -5
- package/src/skills/git-rescue.md +7 -7
- package/src/skills/handoff.md +3 -3
- package/src/skills/ingest.md +5 -5
- package/src/skills/migrate.md +8 -8
- package/src/skills/parallel-agents.md +2 -2
- package/src/skills/pipeline.md +2 -2
- package/src/skills/plan.md +3 -3
- package/src/skills/ponytail.md +2 -2
- package/src/skills/profile.md +2 -2
- package/src/skills/prose.md +1 -1
- package/src/skills/prototype.md +1 -1
- package/src/skills/react-view-transitions/SKILL.md +1 -1
- package/src/skills/react-view-transitions/VENDOR.md +7 -2
- package/src/skills/refactor.md +3 -3
- package/src/skills/release.md +5 -5
- package/src/skills/repo-map.md +4 -4
- package/src/skills/research.md +9 -9
- package/src/skills/review-response.md +4 -4
- package/src/skills/rule.md +3 -3
- package/src/skills/security-audit.md +5 -5
- package/src/skills/ship.md +5 -5
- package/src/skills/skill-forge.md +4 -4
- package/src/skills/token-report/SKILL.md +2 -3
- package/src/skills/token-report/VENDOR.md +2 -3
- package/src/skills/token-report/scripts/token_report.mjs +7 -121
- package/src/skills/wiki.md +5 -5
- package/src/skills/workflow.md +3 -4
- package/src/skills/worktree.md +4 -4
- package/themes/_TEMPLATE.json +37 -39
- package/themes/biker.json +37 -39
- package/themes/commentator.json +37 -39
- package/themes/cyberpunk.json +37 -39
- package/themes/gamer.json +37 -39
- package/themes/imperial.json +37 -39
- package/themes/joker.json +37 -39
- package/themes/marvin.json +37 -39
- package/themes/mean.json +37 -39
- package/themes/military.json +37 -39
- package/themes/neutral.json +37 -39
- package/themes/pirate.json +37 -39
- package/themes/sports.json +37 -39
- package/themes/verstappen.json +37 -39
- package/themes/wizard.json +37 -39
- package/web/dist/assets/Activity-BjVp522q.js +1 -0
- package/web/dist/assets/ActivityDetail-8ep1bspW.js +1 -0
- package/web/dist/assets/Dashboard-OkC_PCH6.js +2 -0
- package/web/dist/assets/{Docs-DrJNDPwI.js → Docs-CKPWz00o.js} +2 -2
- package/web/dist/assets/FilterInput-CVyqmYWM.js +1 -0
- package/web/dist/assets/GreenhouseView-D0cbCJ5m.js +2 -0
- package/web/dist/assets/Installs-BtGGdoTt.js +2 -0
- package/web/dist/assets/JournalView-Ckl4dmzR.js +1 -0
- package/web/dist/assets/Laws-CLpdRRk8.js +3 -0
- package/web/dist/assets/Library-wPPuKQrI.js +1 -0
- package/web/dist/assets/{Markdown-BQAvN8xx.js → Markdown-CkFyfgNf.js} +14 -14
- package/web/dist/assets/OperatorHudView-CiAkAkQL.js +2 -0
- package/web/dist/assets/Personal-D8CnDo9v.js +1 -0
- package/web/dist/assets/Tabs-B4HNrrCs.js +1 -0
- package/web/dist/assets/drawable-BiwaOo6x.js +1 -0
- package/web/dist/assets/geist-mono-latin-400-normal-DTRLJnHl.woff2 +0 -0
- package/web/dist/assets/geist-mono-latin-500-normal-YINYabwD.woff2 +0 -0
- package/web/dist/assets/index-C1yil5j1.js +2 -0
- package/web/dist/assets/index-CDPDk2vj.css +1 -0
- package/web/dist/assets/{react-DbkvxWG5.js → react-B9Z_tXRV.js} +1 -1
- package/web/dist/assets/sections-GalMS0Zv.js +1 -0
- package/web/dist/assets/usePoll-O0sJEw1Y.js +1 -0
- package/web/dist/index.html +4 -4
- package/web/src/pages/Laws.jsx +616 -361
- package/adapters/copilot/README.md +0 -105
- package/web/dist/assets/Activity-CH-7cPIM.js +0 -1
- package/web/dist/assets/ActivityDetail-DZvz0xS5.js +0 -1
- package/web/dist/assets/CatalogRow-DftXpZHY.js +0 -1
- package/web/dist/assets/Diff-DvwdG0L9.js +0 -2
- package/web/dist/assets/Doctor-OTmwmYZg.js +0 -1
- package/web/dist/assets/FilterInput-BakJLvaV.js +0 -1
- package/web/dist/assets/GreenhouseView-XxrAdriX.js +0 -2
- package/web/dist/assets/Harness-C_LYNk5c.js +0 -1
- package/web/dist/assets/JournalView-BcuyeEaR.js +0 -1
- package/web/dist/assets/Laws-CWHrTKY4.js +0 -3
- package/web/dist/assets/Library-CA9IHghn.js +0 -1
- package/web/dist/assets/OperatorHudView-BMRY1Tt4.js +0 -2
- package/web/dist/assets/Profile-wceET1JY.js +0 -1
- package/web/dist/assets/Rules-BEXvY4Tx.js +0 -1
- package/web/dist/assets/Settings-DS2zF0Ez.js +0 -1
- package/web/dist/assets/Skills-DahlOJuI.js +0 -1
- package/web/dist/assets/StatusBadge-Cg6j-NJL.js +0 -1
- package/web/dist/assets/activity-iWaWVtsR.js +0 -1
- package/web/dist/assets/audiowide-latin-400-normal-6GFCX7ni.woff2 +0 -0
- package/web/dist/assets/drawable-BTHjTzF7.js +0 -1
- package/web/dist/assets/geist-mono-latin-400-normal-DKaoCDn5.woff2 +0 -0
- package/web/dist/assets/geist-mono-latin-500-normal-C3sF8Y1B.woff2 +0 -0
- package/web/dist/assets/geist-mono-latin-600-normal-BHzjB6_C.woff2 +0 -0
- package/web/dist/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2 +0 -0
- package/web/dist/assets/ibm-plex-mono-latin-500-normal-DSY6xOcd.woff2 +0 -0
- package/web/dist/assets/ibm-plex-mono-latin-600-normal-BgSNZQsw.woff2 +0 -0
- package/web/dist/assets/ibm-plex-serif-latin-400-normal-BIGslYFI.woff2 +0 -0
- package/web/dist/assets/ibm-plex-serif-latin-500-normal-REKAfBVG.woff2 +0 -0
- package/web/dist/assets/ibm-plex-serif-latin-600-normal-DAxitmSu.woff2 +0 -0
- package/web/dist/assets/index-AN5Emnrg.js +0 -2
- package/web/dist/assets/index-Ruh93A3A.css +0 -1
- package/web/dist/assets/inter-latin-400-normal-C38fXH4l.woff2 +0 -0
- package/web/dist/assets/inter-latin-500-normal-Cerq10X2.woff2 +0 -0
- package/web/dist/assets/inter-latin-600-normal-LgqL8muc.woff2 +0 -0
- package/web/dist/assets/inter-latin-700-normal-Yt3aPRUw.woff2 +0 -0
- package/web/dist/assets/lawCats-Btjp3Hk_.js +0 -1
- package/web/dist/assets/oswald-latin-400-normal-BAFo8sP8.woff2 +0 -0
- package/web/dist/assets/oswald-latin-500-normal-B-eyT0Dw.woff2 +0 -0
- package/web/dist/assets/oswald-latin-600-normal-plFmSr5g.woff2 +0 -0
- package/web/dist/assets/oswald-latin-700-normal-vy6hmKSr.woff2 +0 -0
- package/web/dist/assets/poppins-latin-400-normal-cpxAROuN.woff2 +0 -0
- package/web/dist/assets/poppins-latin-500-normal-C8OXljZJ.woff2 +0 -0
- package/web/dist/assets/poppins-latin-600-normal-zEkxB9Mr.woff2 +0 -0
- package/web/dist/assets/poppins-latin-700-normal-Qrb0O0WB.woff2 +0 -0
- package/web/dist/assets/rolldown-runtime-CbXtAM7H.js +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -8,7 +8,77 @@ label. For the capability ↔ spec map, see [SHIPPED.md](SHIPPED.md).
|
|
|
8
8
|
|
|
9
9
|
## [Unreleased]
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
## [3.10.0] — 2026-10-01
|
|
12
|
+
|
|
13
|
+
**Upgrading:** re-emit after installing (`geneseed rebuild-all`). A Copilot install is no longer
|
|
14
|
+
maintained: `geneseed uninstall` it before upgrading, or leave its files as they are — nothing
|
|
15
|
+
re-emits them any more. Breaking for Copilot users only; every other host gains features.
|
|
16
|
+
|
|
17
|
+
### Removed
|
|
18
|
+
- **GitHub Copilot is no longer a host** — dropped for lack of support and of cross-tool
|
|
19
|
+
support. `--emit copilot` / `--emit copilot-global`, the `--host copilot` hook dialect, the
|
|
20
|
+
Copilot agent dialect, its MCP target, the setup and web-console options and
|
|
21
|
+
`adapters/copilot/` are gone. Geneseed now emits for OpenCode, Claude Code, Bob and
|
|
22
|
+
OpenClaude, plus the plain `AGENT.md` bundle (#166).
|
|
23
|
+
|
|
24
|
+
### Fixed
|
|
25
|
+
- **The session files reach the session.** The root file names `user-rules.md`, `PROFILE.md`,
|
|
26
|
+
the Memory and Notebook indexes, `wiki.jsonc` and `context.json` for session start, but on a
|
|
27
|
+
Claude-shaped install (Claude Code, Bob, OpenClaude) the context hook only looked at the repo
|
|
28
|
+
root — so none of them were ever injected, and the root told the model they sit "beside this
|
|
29
|
+
file", where they are not. The hook and the OpenCode context plugin now inject them from the
|
|
30
|
+
install's own folder as a `SESSION FILES` block, skipping any file still at its seed; the root
|
|
31
|
+
gives each host's real path; Claude-shaped installs now seed `context.json`; and the OpenCode
|
|
32
|
+
plugin finds `wiki.jsonc` on a project install (#167).
|
|
33
|
+
- **Bob folder skills know where they live.** Bob hands a skill's text without its directory, so
|
|
34
|
+
a folder skill's `<this-skill-directory>/…` paths were unresolvable; the Bob emit now writes the
|
|
35
|
+
real path. `daydream` gained its missing frontmatter, `react-view-transitions` is named after
|
|
36
|
+
its folder, and `doctor` checks every folder skill's `name`/`description` (#164).
|
|
37
|
+
|
|
38
|
+
### Changed
|
|
39
|
+
- **A lighter lean root.** Restated prose is full-footprint only: the laws, Ethos, doctrine,
|
|
40
|
+
posture and mode intros, §3's dispatch envelope and council roster (they live in the
|
|
41
|
+
parallel-agents and council skills), §10 Scripts, and the folder-skill list on hosts that list
|
|
42
|
+
skills natively. The lean Claude root drops from ~33k to ~29k characters (#165).
|
|
43
|
+
|
|
44
|
+
## [3.9.0] — 2026-09-30
|
|
45
|
+
|
|
46
|
+
**Upgrading:** re-emit after installing. Laws IX and XI are gone and Echo the Intent is now
|
|
47
|
+
**Law IX**: a note, memory or commit that says "Law IX" or "Law XI" from before this release
|
|
48
|
+
means the retired External Gate (now a rigor rule) or Absence Is a Claim (folded into Verify
|
|
49
|
+
Before Asserting). Nothing in the harness cites a rule by number any more.
|
|
50
|
+
|
|
51
|
+
### Changed
|
|
52
|
+
- **Stable rule ids.** Every law and doctrine rule is declared by a permanent id on its heading
|
|
53
|
+
(`### {{LAW:verify-before-asserting}} Verify Before Asserting`) and cited by it. The number is
|
|
54
|
+
the rule's position, computed at render time, so removing or reordering a rule rewires no
|
|
55
|
+
citation. Theme title keys are keyed by id too (`LEX_VERIFY_BEFORE_ASSERTING`,
|
|
56
|
+
`DOC_CONSENT_BEFORE_PUSH`), so a renumber never touches a theme.
|
|
57
|
+
- **Citations render as principle names.** Every cross-reference in AGENT.md, the laws, the
|
|
58
|
+
doctrines, skills and agents now reads *Verify Before Asserting* rather than "Rule III" — the
|
|
59
|
+
same in every voice. The hook and guard-plugin messages name the principle too. Numbers remain
|
|
60
|
+
only on each rule's own heading.
|
|
61
|
+
- The memory section of AGENT.md (always on, both footprints) tells the agent to cite a rule by
|
|
62
|
+
its principle, never its number, in anything that outlives the session.
|
|
63
|
+
- **Web console redesign (Slate + Graphite).** New Overview (health, three charts, what needs
|
|
64
|
+
you), Constitution, Library, Personal and Installs pages; global and per-project installs are
|
|
65
|
+
shown apart; skill types head the Library as a full-width banner (#162). The console's flavours
|
|
66
|
+
are cut to Cultivar, Operator, Matrix and Atlas (#161). The Overview view choice now lives only
|
|
67
|
+
in the Appearance palette, not in the page header.
|
|
68
|
+
|
|
69
|
+
### Removed
|
|
70
|
+
- Laws IX (External Gate, a rigor rule since 3.x) and XI (Absence Is a Claim, folded into Law III),
|
|
71
|
+
both retired in place until now. Their ids are recorded in `RETIRED_RULE_IDS` and can never be
|
|
72
|
+
reused.
|
|
73
|
+
|
|
74
|
+
### Added
|
|
75
|
+
- **`explain-changes` folder skill — a visual walkthrough of a diff before it is committed**:
|
|
76
|
+
the agent writes a short brief (intent, risks, logical units) and
|
|
77
|
+
`scripts/render_changes.mjs` renders one offline HTML page with the exact git diff side by
|
|
78
|
+
side, then opens it. Offered by the `commit` skill and the git-gate prompt; never a gate.
|
|
79
|
+
- `doctor` refuses a citation by number, an unknown id, a duplicate id, a rule heading with no id,
|
|
80
|
+
a retired id declared again, a console `LAW_META`/`DOCTRINE_META` row pinned to a different rule
|
|
81
|
+
than its number now holds, and a hook-gated rule moving away from the address its hook keys.
|
|
12
82
|
|
|
13
83
|
## [3.8.0] — 2026-09-30
|
|
14
84
|
|
package/DESIGN.md
CHANGED
|
@@ -44,7 +44,7 @@ vault or a specific tool's hooks.
|
|
|
44
44
|
and the prose words the docs use: the core nouns `LAW(S)`/`DOCTRINE(S)`/`ONTOLOGY`/
|
|
45
45
|
`AGENT(S)`/`SKILL(S)`/`MEMORY`/`NOTEBOOK`/`VAULT`/`WIKI`, plus `TAGLINE`,
|
|
46
46
|
`LOADED_SIGIL`, `EPI_*`, `BENEDICTION`, `DESC_*`, `ROAST_PERSONA`, the invariant
|
|
47
|
-
titles `
|
|
47
|
+
titles `LEX_<ID>`, the 28 doctrine-rule titles `DOC_<ID>` (keyed by stable rule id), the five pack
|
|
48
48
|
names `PACK_CRAFT`/`PACK_RIGOR`/`PACK_OPS`/`PACK_PROCESS`/`PACK_COMMS`, and the section intros
|
|
49
49
|
`INTRO_*`. Each theme defines its own nouns; **neutral keeps the plain words** (Rule,
|
|
50
50
|
Doctrine, Agent, Skill, Memory, Workspace), so neutral output is unchanged.
|
|
@@ -98,11 +98,13 @@ vault or a specific tool's hooks.
|
|
|
98
98
|
and tier by reversibility; show the real forks), **Conduct** (answer what was asked,
|
|
99
99
|
once). It absorbed the Pact, which is now stated *inside* Telos rather than standing
|
|
100
100
|
as a peer of the rules.
|
|
101
|
-
- **Invariants** (`src/laws/universal.md`) — *what is never traded*.
|
|
102
|
-
|
|
103
|
-
|
|
101
|
+
- **Invariants** (`src/laws/universal.md`) — *what is never traded*. Nine Rules, `I`..`IX`,
|
|
102
|
+
each declared `### {{LAW:<id>}} <Principle>` with a permanent id; the numeral is its
|
|
103
|
+
position, computed at render time (the retired IX and XI were removed on 2026-09-30, and
|
|
104
|
+
Echo the Intent became IX without a single citation changing).
|
|
104
105
|
- **Doctrines** (`src/doctrines/{craft,rigor,ops,process,comms}.md`) — *how work is done
|
|
105
|
-
here*. Practice rules addressed by pack and
|
|
106
|
+
here*. Practice rules addressed by pack and position (`process 5`), declared and cited by
|
|
107
|
+
id the same way; a citation of any rule renders as its principle's name.
|
|
106
108
|
`PACK_ORDER` (`js/build/source.mjs`) fixes the order craft → rigor → ops → process → comms, which
|
|
107
109
|
is narrative and deliberately not alphabetical.
|
|
108
110
|
|
|
@@ -145,12 +147,12 @@ vault or a specific tool's hooks.
|
|
|
145
147
|
|
|
146
148
|
| Satellite | A new invariant | A new doctrine rule | A whole new pack |
|
|
147
149
|
|---|---|---|---|
|
|
148
|
-
| body |
|
|
149
|
-
| themed title | `LEX_<
|
|
150
|
+
| body | `### {{LAW:<id>}} <Principle>` in `src/laws/universal.md`; citations resolve by id, so no position rewires one | `### {{DOCTRINE:<id>}} <Principle>` in `src/doctrines/<pack>.md`; the number is its position | a new `src/doctrines/<pack>.md` with its `**Name** — lead line` |
|
|
151
|
+
| themed title | `LEX_<ID>` in all 15 theme files | `DOC_<ID>` in all 15 theme files | `PACK_<NAME>` in all 15, plus each rule's `DOC_*` |
|
|
150
152
|
| class | `LAW_CLASS` in `js/inspect/inventory.mjs`, one of the six in `LAW_CLASSES` | **none** — a doctrine rule's class *is* its pack, and there is no second taxonomy over it | — |
|
|
151
153
|
| console copy | a `LAW_META` row in `web/src/pages/Laws.jsx` (keyed by arabic number) | a `DOCTRINE_META` row in the same file (keyed `<pack>.<n>`) | one `DOCTRINE_META` row per rule |
|
|
152
154
|
| registration | the numeral is the registration | the number is the registration | the pack name in `PACK_ORDER`, `js/build/source.mjs` |
|
|
153
|
-
| renumber risk |
|
|
155
|
+
| renumber risk | none for citations (by id); `LAW_META`/`LAW_CLASS` are number-keyed and doctor-pinned, so append by preference | none for citations; `DOCTRINE_META`, exclusions and hook ledger keys are `<pack>.<n>` — append by preference | none |
|
|
154
156
|
| counts | README badge + the `N universal laws` prose, `SHIPPED.md`'s triple, the web onboarding copy | **none** — the console spends the `N_PACKS` / `N_PACKS_ACTIVE` / `N_DOCTRINE_RULES` count tokens, all computed at request time | none, same reason |
|
|
155
157
|
| changelog | `CHANGELOG.md` | `CHANGELOG.md` | `CHANGELOG.md` |
|
|
156
158
|
|
|
@@ -164,8 +166,9 @@ vault or a specific tool's hooks.
|
|
|
164
166
|
Almost all of it is gated, across six named checks in `js/inspect/checks-build.mjs` —
|
|
165
167
|
`themeParityProblems` (key parity across the voices), `lawMetaProblems` and
|
|
166
168
|
`doctrineMetaProblems` (the console's Principle column, in both directions),
|
|
167
|
-
`constitutionProblems` (
|
|
168
|
-
`DOC_*` vocabulary, and every `{{DOCTRINE}}`
|
|
169
|
+
`constitutionProblems` (rule ids declared, unique and never retired, `LEX_*` as an *equality*,
|
|
170
|
+
the `DOC_*` vocabulary, the hook-gated addresses, and every `{{LAW:…}}`/`{{DOCTRINE:…}}`
|
|
171
|
+
citation in `src/` — a citation by number is refused), and
|
|
169
172
|
`countTableProblems` / `proseMirrorProblems` (badges and prose). So `geneseed doctor
|
|
170
173
|
--all` is the check; the table above only says what it will ask for. `CHANGELOG.md` has
|
|
171
174
|
no gate and never has.
|
package/QUICKSTART.md
CHANGED
|
@@ -43,7 +43,7 @@ or a login item it did not create. Your clone keeps working meanwhile.
|
|
|
43
43
|
|
|
44
44
|
## Everything else
|
|
45
45
|
|
|
46
|
-
Claude Code, Bob,
|
|
46
|
+
Claude Code, Bob, OpenClaude and plain-`AGENT.md` installs, per-repo mode, MCP servers, all
|
|
47
47
|
environment knobs, and troubleshooting live in the full **[Setup guide](SETUP.md)**.
|
|
48
48
|
|
|
49
49
|
Once installed, point the agent at your repo's own docs with a tiny
|
package/README.md
CHANGED
|
@@ -10,11 +10,11 @@
|
|
|
10
10
|
[](package.json)
|
|
11
11
|
[](package.json)
|
|
12
12
|
[](themes/)
|
|
13
|
-
[](src/skills/)
|
|
14
14
|
[](src/agents/)
|
|
15
|
-
[](src/laws/universal.md)
|
|
16
16
|
[](adapters/opencode/plugins/)
|
|
17
|
-
[](#-supported-harnesses)
|
|
18
18
|
|
|
19
19
|
[**Why**](#-1--why-geneseed) · [**Setup**](#-2--setup) · [**Web & terminal**](#-3--web--terminal) · [**What you get**](#-4--what-you-get)
|
|
20
20
|
|
|
@@ -24,7 +24,7 @@
|
|
|
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
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,
|
|
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, OpenClaude, 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
28
|
|
|
29
29
|
```bash
|
|
30
30
|
npx geneseed setup
|
|
@@ -36,8 +36,8 @@ Want to read what it leaves behind before installing anything? [**geneseed-demo*
|
|
|
36
36
|
|
|
37
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
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
|
|
40
|
-
- **One source,
|
|
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 OpenClaude, 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
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
42
|
- **It follows you.** Install once, globally; every repo inherits it. One `git pull` or `npm install -g geneseed@latest` rebuilds every active install.
|
|
43
43
|
|
|
@@ -163,10 +163,10 @@ The harness ships as a small set of layers, and the web console's rail is the sa
|
|
|
163
163
|
| Layer | What it is |
|
|
164
164
|
| --- | --- |
|
|
165
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/`) |
|
|
166
|
+
| **🛡️ Rules** (`laws/`) | 9 universal laws — always in force, never toggleable: sealed-secrets, one-intent-one-act, verify-before-asserting, deletion-is-deliberate, surface-failures, data-not-orders, least-privilege, cure-the-cause, echo-the-intent. Each rule has a permanent id; its number is only its position, and the harness cites rules by name |
|
|
167
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), **comms** (how answers are presented). 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 five pack files ship on disk either way, so a citation into a pack you left out still resolves |
|
|
168
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** (
|
|
169
|
+
| **🛠 Skills** (53) | 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** · **explain-changes** |
|
|
170
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 |
|
|
171
171
|
| **🧠 Memory** (`memory/`) | one-fact-per-file durable knowledge, indexed by `MEMORY.md` (git-ignored, personal) |
|
|
172
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 |
|
|
@@ -212,7 +212,7 @@ A second per-install dial, **footprint**, sets how much of the constitution `AGE
|
|
|
212
212
|
|
|
213
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 five 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.
|
|
214
214
|
|
|
215
|
-
Lean is the default: the rationale is one read away and the context it frees is paid back on every turn. Switch to **full** when token cost is a non-issue or you run a smaller model, which leans harder on always-present rationale. Set it with `--footprint lean|full`, the Settings toggle, the per-harness dropdown in the Harnesses tab, or the setup wizard. It's remembered in a `.geneseed-footprint` marker and preserved across rebuilds, on every host (OpenCode, Claude Code, Bob,
|
|
215
|
+
Lean is the default: the rationale is one read away and the context it frees is paid back on every turn. Switch to **full** when token cost is a non-issue or you run a smaller model, which leans harder on always-present rationale. Set it with `--footprint lean|full`, the Settings toggle, the per-harness dropdown in the Harnesses tab, or the setup wizard. It's remembered in a `.geneseed-footprint` marker and preserved across rebuilds, on every host (OpenCode, Claude Code, Bob, OpenClaude).
|
|
216
216
|
|
|
217
217
|
Either way the harness is otherwise identical — same files, Rules, capabilities, and guards; lean only relocates the *reasoning* to on-demand (and adds the standalone law, ontology and doctrine files to global/Claude/Bob installs). The one behavioural edge: with the rationale always in context, **full** applies a rule's nuance more reliably on subtle edge cases — or with a weaker model that may not reach for the pointer.
|
|
218
218
|
|
|
@@ -222,37 +222,37 @@ Want to check a build before it touches anything real? `geneseed validate --them
|
|
|
222
222
|
|
|
223
223
|
## 🔌 Supported harnesses
|
|
224
224
|
|
|
225
|
-
One source,
|
|
225
|
+
One source, five emit targets. Geneseed builds into whichever host you point it
|
|
226
226
|
at — each with a per-repo and a global (`-global`) variant — plus a portable
|
|
227
227
|
`files` bundle any `AGENT.md`-aware tool can read. **OpenCode** runs its own
|
|
228
|
-
engine (JS plugins, colour themes, LSP); **Claude Code**, **Bob
|
|
228
|
+
engine (JS plugins, colour themes, LSP); **Claude Code**, **Bob**
|
|
229
229
|
and **OpenClaude** share one Claude-shaped engine that diverges only by host dialect.
|
|
230
230
|
|
|
231
231
|
The harness — its Rules, Agents, Skills, Memory convention, and preamble voice —
|
|
232
232
|
is **identical on every host**. What differs is how much of it the host can
|
|
233
233
|
*automate* for you (via plugins or hooks) versus carry as preamble discipline.
|
|
234
234
|
|
|
235
|
-
| Capability | OpenCode | Claude Code | Bob |
|
|
236
|
-
| --- | :---: | :---: | :---: | :---: |
|
|
237
|
-
| **Instructions file** | `AGENT.md` + `opencode.json` | `CLAUDE.md` | `AGENTS.md` + `rules/geneseed.md` | `
|
|
238
|
-
| **Agents** (capability specialists) | ✅ native | ✅ | ✅ | ✅
|
|
239
|
-
| **Skills** (byte-identical) | ✅ | ✅ | ✅ | ✅ |
|
|
240
|
-
| **Memory & Notebook** | ✅ | ✅ | ✅ | ✅ |
|
|
241
|
-
| **Context injection** | ⚙️ plugin | 🪝 hook | 🪝 hook¹ | 🪝 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) |
|
|
246
|
-
| **Sovereign-repo excludes** | ⚙️ plugin | ✅ `claudeMdExcludes` | ✅ rules-shadow |
|
|
247
|
-
| **MCP server wiring** | ✅ `mcp` | ✅ `mcpServers` | ✅ `mcp.json` | ✅ `
|
|
248
|
-
| **Colour themes** | ✅ full palette | ➖ | ➖ | ➖ |
|
|
249
|
-
| **LSP · workflow runner · primary-agent · `/`-commands** | ✅ | ➖ | ➖ | ➖ |
|
|
250
|
-
|
|
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. · ³
|
|
235
|
+
| Capability | OpenCode | Claude Code | Bob | OpenClaude |
|
|
236
|
+
| --- | :---: | :---: | :---: | :---: |
|
|
237
|
+
| **Instructions file** | `AGENT.md` + `opencode.json` | `CLAUDE.md` | `AGENTS.md` + `rules/geneseed.md` | `CLAUDE.md` (in `.openclaude/` per repo) |
|
|
238
|
+
| **Agents** (capability specialists) | ✅ native | ✅ | ✅ | ✅ |
|
|
239
|
+
| **Skills** (byte-identical) | ✅ | ✅ | ✅ | ✅ |
|
|
240
|
+
| **Memory & Notebook** | ✅ | ✅ | ✅ | ✅ |
|
|
241
|
+
| **Context injection** | ⚙️ plugin | 🪝 hook | 🪝 hook¹ | 🪝 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) |
|
|
246
|
+
| **Sovereign-repo excludes** | ⚙️ plugin | ✅ `claudeMdExcludes` | ✅ rules-shadow | ✅ `claudeMdExcludes` |
|
|
247
|
+
| **MCP server wiring** | ✅ `mcp` | ✅ `mcpServers` | ✅ `mcp.json` | ✅ `mcpServers` |
|
|
248
|
+
| **Colour themes** | ✅ full palette | ➖ | ➖ | ➖ |
|
|
249
|
+
| **LSP · workflow runner · primary-agent · `/`-commands** | ✅ | ➖ | ➖ | ➖ |
|
|
250
|
+
|
|
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. · ³ OpenClaude is a Claude Code fork: Claude's hook groups and verdicts verbatim, in `~/.openclaude/settings.json` (global) or `.openclaude/settings.local.json` (per repo). Unverified live (no OpenClaude install on the authoring machine).</sub>
|
|
252
252
|
|
|
253
253
|
**Reading the matrix.** Everything above the divider is at full parity — no host
|
|
254
254
|
drops an Agent, Skill, or the memory convention. The asymmetry is entirely in
|
|
255
|
-
*automation mechanism*: OpenCode's plugin surface and the Claude/Bob/
|
|
255
|
+
*automation mechanism*: OpenCode's plugin surface and the Claude/Bob/OpenClaude hook
|
|
256
256
|
surfaces enforce a few Rules for you, each in the tier its host offers (a prompt on
|
|
257
257
|
Claude Code, a hard block or a logged warning where the host has no prompt to
|
|
258
258
|
give), and what no host can automate rides the preamble. The OpenCode-only extras (themes, LSP,
|
|
@@ -260,7 +260,7 @@ workflow runner, primary-agent) have no analogue on a Claude-shaped host.
|
|
|
260
260
|
|
|
261
261
|
Per-host wiring in depth: **[OpenCode](adapters/opencode/README.md)** ·
|
|
262
262
|
**[Claude Code](adapters/claude-code/README.md)** ·
|
|
263
|
-
**[Bob](adapters/bob/README.md)** ·
|
|
263
|
+
**[Bob](adapters/bob/README.md)** ·
|
|
264
264
|
**[OpenClaude](adapters/openclaude/README.md)**.
|
|
265
265
|
Token cost per host: **[docs/token-footprint.md](docs/token-footprint.md)**.
|
|
266
266
|
|
|
@@ -294,7 +294,7 @@ Geneseed/
|
|
|
294
294
|
├── tests/ Node test suites, golden.mjs (every emit config) and mutate.mjs
|
|
295
295
|
├── docs/ guides (web-ui, wiki, …) + docs/web/ (the console's Docs pages);
|
|
296
296
|
│ specs/, reviews/, superpowers/ are local working docs — git-ignored
|
|
297
|
-
├── adapters/ per-host glue (opencode/, claude-code/, bob/,
|
|
297
|
+
├── adapters/ per-host glue (opencode/, claude-code/, bob/, openclaude/)
|
|
298
298
|
└── .github/workflows/ ci.yml (doctor + tests) · publish.yml (npm, OIDC, manual only)
|
|
299
299
|
```
|
|
300
300
|
|
|
@@ -345,7 +345,6 @@ Details and precedence rules: [SETUP.md → Upgrade](SETUP.md#upgrade).
|
|
|
345
345
|
| ⤷ [HOW-OPENCODE-LOADS.md](adapters/opencode/HOW-OPENCODE-LOADS.md) | Why a file shows up twice; plugin loading |
|
|
346
346
|
| **[adapters/claude-code/](adapters/claude-code/README.md)** | The Claude Code hook adapter |
|
|
347
347
|
| **[adapters/bob/](adapters/bob/README.md)** | The IBM Bob adapter — Claude-shaped, rules-file preamble |
|
|
348
|
-
| **[adapters/copilot/](adapters/copilot/README.md)** | The GitHub Copilot adapter — global hooks (`sessionStart`, `preToolUse`, `agentStop`, `preCompact`) |
|
|
349
348
|
| **[adapters/openclaude/](adapters/openclaude/README.md)** | The OpenClaude adapter — the Claude engine under `~/.openclaude` / `.openclaude/` |
|
|
350
349
|
| **[src/memory/README.md](src/memory/README.md)** | The memory convention |
|
|
351
350
|
| **[src/notebook/README.md](src/notebook/README.md)** | The agent's own freeform-space convention |
|
package/SETUP.md
CHANGED
|
@@ -22,7 +22,7 @@ that matches your tool, then configure and verify. For the conceptual overview s
|
|
|
22
22
|
|
|
23
23
|
- **Node ≥ 22.3** — the only hard requirement. Geneseed ships as an npm package with
|
|
24
24
|
**zero dependencies**; `npx geneseed` needs nothing else.
|
|
25
|
-
- **Your agent tool** — OpenCode (recommended), Claude Code, Bob,
|
|
25
|
+
- **Your agent tool** — OpenCode (recommended), Claude Code, Bob, OpenClaude, or anything
|
|
26
26
|
that reads a root instructions file.
|
|
27
27
|
- *Only for a git checkout:* **git**. Nothing else — a checkout runs the same Node
|
|
28
28
|
entry points the npm package installs.
|
|
@@ -93,8 +93,7 @@ hand? Pick a path below.
|
|
|
93
93
|
| [A — OpenCode, global](#path-a--opencode-global-recommended) | **Recommended.** One install, every repo inherits it, nothing committed into projects. |
|
|
94
94
|
| [B — OpenCode, per-repo](#path-b--opencode-per-repo) | You want a committed `.opencode/` layer in one repository. |
|
|
95
95
|
| [C — Claude Code](#path-c--claude-code) | You drive Claude Code and want the lifecycle hooks. |
|
|
96
|
-
| [C′ —
|
|
97
|
-
| [C″ — OpenClaude](#path-c--openclaude) | You drive OpenClaude, the any-model Claude Code fork. |
|
|
96
|
+
| [C′ — OpenClaude](#path-c--openclaude) | You drive OpenClaude, the any-model Claude Code fork. |
|
|
98
97
|
| [D — Any `AGENT.md` tool](#path-d--any-agentmd-tool) | Cursor, Aider, or any tool that reads a root instructions file. |
|
|
99
98
|
| [E — No runtime on the target at all](#path-e--no-runtime-on-the-target-at-all) | The machine that *uses* the harness cannot run Node. |
|
|
100
99
|
|
|
@@ -219,45 +218,11 @@ repo's own `.claude/settings.local.json`, and OpenClaude's in `.openclaude/setti
|
|
|
219
218
|
Bob: the workspace rules shadow stub;
|
|
220
219
|
OpenCode: the plugins stand down). Everything is reversed by `exclude remove`.
|
|
221
220
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
subagents remain listed by the host (no native per-repo disable exists). A
|
|
225
|
-
global install emitted later starts with an empty list — re-run
|
|
221
|
+
Limitation: globally installed skills/subagents remain listed by the host (no
|
|
222
|
+
native per-repo disable exists). A global install emitted later starts with an empty list — re-run
|
|
226
223
|
`harness exclude add` (`exclude list` flags installs that diverge).
|
|
227
224
|
|
|
228
|
-
### Path C′ —
|
|
229
|
-
|
|
230
|
-
```
|
|
231
|
-
geneseed-build --emit copilot-global # personal: render into ~/.copilot
|
|
232
|
-
geneseed-build --emit copilot --out . --root . # per-repo: AGENTS.md + .github/, committed
|
|
233
|
-
```
|
|
234
|
-
|
|
235
|
-
Copilot is Claude-shaped where it counts: skills are the same `SKILL.md` folders
|
|
236
|
-
(Copilot's Agent Skills — `.github/skills/` in a repo, `~/.copilot/skills/`
|
|
237
|
-
personally), agents render in Copilot's own custom-agent dialect
|
|
238
|
-
(`agents/<name>.agent.md`, a `tools:` allowlist instead of Claude's denylist), and
|
|
239
|
-
the preamble rides a file Copilot auto-loads: the repo-root `AGENTS.md` (CLI, coding
|
|
240
|
-
agent, and VS Code agent mode) or the personal `~/.copilot/copilot-instructions.md`
|
|
241
|
-
(CLI). Two differences from the Claude paths:
|
|
242
|
-
|
|
243
|
-
- **Hooks at global scope only.** The global emit adds entries to four events in
|
|
244
|
-
`~/.copilot/settings.json`: `sessionStart` (eager project-context injection),
|
|
245
|
-
`preToolUse` (both gates behind one command, since entries carry no matcher —
|
|
246
|
-
every rule **asks**, as on Claude Code), and `agentStop` + `preCompact` (`learn`,
|
|
247
|
-
from the payload's `transcriptPath`). The per-repo emit wires nothing: a
|
|
248
|
-
machine-absolute command in a shared `.github/` would fail on every teammate's
|
|
249
|
-
machine.
|
|
250
|
-
- **The per-repo layer lives in the shared `.github/`** (Copilot's repo config
|
|
251
|
-
surface). Safe by construction: the ownership manifest + claim-on-create never
|
|
252
|
-
touch files Geneseed didn't write — your workflows and same-named agents/skills
|
|
253
|
-
survive every emit and uninstall.
|
|
254
|
-
|
|
255
|
-
MCP servers go in `~/.copilot/mcp-config.json` (the Settings/MCP screens know the
|
|
256
|
-
shape). `$COPILOT_CONFIG_DIR` relocates the personal dir, mirroring
|
|
257
|
-
`$BOB_CONFIG_DIR`. Note both carriers stack if you install globally *and* per-repo —
|
|
258
|
-
the global emit warns when that's about to happen.
|
|
259
|
-
|
|
260
|
-
### Path C″ — OpenClaude
|
|
225
|
+
### Path C′ — OpenClaude
|
|
261
226
|
|
|
262
227
|
```
|
|
263
228
|
geneseed-build --emit openclaude-global # render into ~/.openclaude
|
|
@@ -453,7 +418,7 @@ you run a smaller model.
|
|
|
453
418
|
**Same harness, either way.** Footprint changes neither what the harness *is* nor what it
|
|
454
419
|
can *do*: lean and full emit identical files (same agents, skills, plugins, commands, memory,
|
|
455
420
|
notebook, hooks) and every Rule is present and binding. The only structural difference is
|
|
456
|
-
that a lean install on a global / Claude / Bob /
|
|
421
|
+
that a lean install on a global / Claude / Bob / OpenClaude target also ships the standalone
|
|
457
422
|
`laws/universal.md` and `ontology/` (project bundles already carry them, and `doctrines/`
|
|
458
423
|
ships at both footprints on every target); the only behavioural difference is that the
|
|
459
424
|
reasoning loads on demand instead of every turn. Lean is the default; full, with the rationale
|
|
@@ -463,7 +428,7 @@ with a weaker model, and is one flag away.
|
|
|
463
428
|
Set it with `--footprint lean|full` (alongside any `--emit`), the **Footprint** toggle in
|
|
464
429
|
the web Settings, the per-harness dropdown in the Harnesses tab, or the setup wizard. It is
|
|
465
430
|
remembered in a `.geneseed-footprint` marker and preserved across every rebuild, on every
|
|
466
|
-
host (OpenCode, Claude Code, Bob,
|
|
431
|
+
host (OpenCode, Claude Code, Bob, OpenClaude).
|
|
467
432
|
|
|
468
433
|
### Dry-run a build (`validate`)
|
|
469
434
|
|
package/SHIPPED.md
CHANGED
|
@@ -20,7 +20,7 @@ historical references, not files distributed with the repo.
|
|
|
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.
|
|
23
|
+
> string. Current label: **3.10.0**.
|
|
24
24
|
|
|
25
25
|
## Capabilities
|
|
26
26
|
|
|
@@ -29,15 +29,15 @@ Every row below is present in the tree today; "Spec" names the design record.
|
|
|
29
29
|
| Capability | What it is | Spec |
|
|
30
30
|
| --- | --- | --- |
|
|
31
31
|
| **Themed generator** | One neutral `src/` → 14 themed bundles via `geneseed-build` (zero dependencies); structure stays theme-independent | [DESIGN.md](DESIGN.md) |
|
|
32
|
-
| **Laws / Agents / Skills / Memory / Notebook** |
|
|
33
|
-
| **Three-tier constitution** | The governance surface splits into an always-on **Ontology** (Telos, Evidence, Decisions, Conduct — the Pact absorbed into Telos), the
|
|
32
|
+
| **Laws / Agents / Skills / Memory / Notebook** | 9 laws, 18 agents, 53 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 nine always-on **Invariants**, and five toggleable **Doctrine** packs (craft, rigor, ops, process, comms) addressed `<pack> <n>`. Every rule carries a permanent id; its number is its position, computed at render time, and a citation renders as the rule's principle name. 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 rule ids (declared, unique, never a retired one), the per-rule Principle column, every `{{LAW:<id>}}` / `{{DOCTRINE:<id>}}` 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
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
35
|
| **`diff` + improvements export** | Deployed-vs-source drift report; export an `improvements.md` back-port | `2026-06-12-improvements-export` |
|
|
36
36
|
| **`status` / `version`** | Headless dashboard + fingerprint verdict (no TUI needed) | `2026-06-07-status-command` · `2026-06-07-version-and-uninstall` |
|
|
37
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
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
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`), OpenClaude asks exactly as Claude does (a Claude Code fork, under `~/.openclaude` / `.openclaude/`),
|
|
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`), OpenClaude asks exactly as Claude does (a Claude Code fork, under `~/.openclaude` / `.openclaude/`), 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 | [bob](adapters/bob/README.md) · [claude-code](adapters/claude-code/README.md) · [candidate hosts](docs/candidate-hosts.md) |
|
|
41
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
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
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` |
|
package/adapters/bob/README.md
CHANGED
|
@@ -23,7 +23,8 @@ limitation to be aware of on a shared repo.
|
|
|
23
23
|
- `agents/<name>.md` — the **Claude subagent dialect** verbatim (`name` +
|
|
24
24
|
`description` + a `disallowedTools:` denylist for read-only agents).
|
|
25
25
|
- `skills/<name>/SKILL.md` — **byte-identical** to every other host; skills
|
|
26
|
-
are model-invoked via the `skill` tool.
|
|
26
|
+
are model-invoked via the `skill` tool. The one exception is the folder skills'
|
|
27
|
+
own directory — see *Bob-ism 3*.
|
|
27
28
|
- `rules/geneseed.md` — a **slim shadow stub** (see *Bob-ism 1* below).
|
|
28
29
|
- `settings.json` — Geneseed's lifecycle hooks (gitignored by the emit's
|
|
29
30
|
`.bob/.gitignore`, see the caveat below).
|
|
@@ -64,6 +65,21 @@ never gets one; the `rules/geneseed.md` shadow above covers the same
|
|
|
64
65
|
project-bypasses-global need. An older Bob install that wrote a stale exclude is
|
|
65
66
|
**self-healed** (the entry is removed) on the next emit.
|
|
66
67
|
|
|
68
|
+
## Bob-ism 3 — a folder skill is told where it lives
|
|
69
|
+
|
|
70
|
+
A folder skill (`explain-changes`, `token-report`, `daydream`, …) ships scripts or
|
|
71
|
+
prompts beside its `SKILL.md` and names them `<this-skill-directory>/…`. Claude Code
|
|
72
|
+
answers that placeholder itself — it gives the model each skill's base directory on load.
|
|
73
|
+
Bob gives the skill's text only, so the model was left with a path it could not resolve
|
|
74
|
+
and fell back to searching the filesystem. The Bob emit therefore writes the directory in:
|
|
75
|
+
|
|
76
|
+
- per repo, relative to the workspace root — `node .bob/skills/token-report/scripts/…` —
|
|
77
|
+
which is where Bob runs commands, and stays valid in a teammate's checkout;
|
|
78
|
+
- globally, the absolute path under `~/.bob/skills/`.
|
|
79
|
+
|
|
80
|
+
`doctor` also requires every folder skill's `SKILL.md` to open with a frontmatter whose
|
|
81
|
+
`name` is the folder's and which has a `description` — what any host registers a skill from.
|
|
82
|
+
|
|
67
83
|
## Hooks — Bob's own protocol
|
|
68
84
|
|
|
69
85
|
Bob documents lifecycle hooks (its hooks page and the 2.0.2 changelog; see
|
|
@@ -58,7 +58,7 @@ which root file OpenClaude already loads (`AGENTS.md` when present, else
|
|
|
58
58
|
## Not supported
|
|
59
59
|
|
|
60
60
|
- **Workflows.** OpenClaude ships its `WorkflowTool` disabled, so the `workflow`
|
|
61
|
-
skill falls back to parallel agents, as on Bob
|
|
61
|
+
skill falls back to parallel agents, as on Bob.
|
|
62
62
|
- **Live verification.** The emit follows OpenClaude's source (`src/utils/envUtils.ts`,
|
|
63
63
|
`src/utils/claudemd.ts`, `src/utils/config.ts`, `src/types/hooks.ts`) as of
|
|
64
64
|
2026-09. It has not been run against an installed OpenClaude yet.
|
|
@@ -276,7 +276,7 @@ It is not one now: the invariants are a closed set of nine, and project-context
|
|
|
276
276
|
discovery is one of the two old laws absorbed into AGENT.md's own **§9 Context**
|
|
277
277
|
section, which every build carries as prose. Nothing an adapter spec writes is
|
|
278
278
|
added to the invariants. The text below survives as the *instruction* tier behind
|
|
279
|
-
the *injection* tier, and `{{DOCTRINE}}
|
|
279
|
+
the *injection* tier, and `{{DOCTRINE:read-the-docs-first}}` (Read the Docs First) is its
|
|
280
280
|
nearest live citation:
|
|
281
281
|
|
|
282
282
|
> **Rule (Project Context Discovery).** When project context has not already been
|
|
@@ -384,7 +384,7 @@ behaviour** — nothing changes the machine's current agent/model unless you opt
|
|
|
384
384
|
`2026-06-17-opencode-color-themes` spec).
|
|
385
385
|
- **Runtime guard plugin** (`geneseed-guard.js`, installed with the others). Enforces
|
|
386
386
|
the safety Laws at the tool boundary: **blocks** writes to private-key/credential
|
|
387
|
-
files (
|
|
387
|
+
files (Sealed Secrets), catastrophic shell like `rm -rf /` (Deletion Is Deliberate), and any mutation under
|
|
388
388
|
a declared wiki's `protected` folders (AGENT.md §8, from `wiki.jsonc`); **warns** on
|
|
389
389
|
`.env` writes and force-push. `GENESEED_GUARD=off` disables it, `=warn` downgrades
|
|
390
390
|
blocks to warnings. Every **block** appends one line to the install's
|
|
@@ -400,7 +400,7 @@ behaviour** — nothing changes the machine's current agent/model unless you opt
|
|
|
400
400
|
- **Default permissions.** A fresh `opencode.json` gets a minimal policy that **asks**
|
|
401
401
|
before `rm -rf *` and a force-push — those are **Rule IV**'s territory and are in every
|
|
402
402
|
build — and, **on an install that built the `process` pack in**, before every
|
|
403
|
-
`git commit` and `git push` (the host-level backstop for **
|
|
403
|
+
`git commit` and `git push` (the host-level backstop for **Consent Before Push**: the
|
|
404
404
|
agent never records or shares code unprompted, on any branch). Build with
|
|
405
405
|
`--doctrines` leaving `process` out and those two entries are simply not written.
|
|
406
406
|
The whole block is added only when you have no `permission` key; an existing policy is
|
|
@@ -534,7 +534,7 @@ install `jsonc-parser` yourself — you lose OCX's dependency management and
|
|
|
534
534
|
auto-updates, and you own the upgrade-by-re-copy. Prefer the OCX path.
|
|
535
535
|
|
|
536
536
|
**Consent note.** `worktree_delete` auto-commits before removal. The harness's
|
|
537
|
-
consent-before-commit rule (**
|
|
537
|
+
consent-before-commit rule (**Consent Before Push**, when the `process` pack is built in)
|
|
538
538
|
is enforced for *shell* `git commit` via `opencode.json`
|
|
539
539
|
permissions, but this plugin commits through its own tool path — so review what it
|
|
540
540
|
will commit before invoking delete, or keep the worktree and commit yourself.
|