geneseed 4.9.4 → 4.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +106 -0
- package/README.md +16 -2
- package/SHIPPED.md +1 -1
- package/docs/README.md +1 -1
- package/docs/concepts/collaboration.md +1 -1
- package/docs/concepts/enforcement-table.md +1 -1
- package/docs/concepts/foreman-mode.md +1 -1
- package/docs/concepts/kits.md +91 -0
- package/docs/concepts/loop-branch.md +1 -1
- package/docs/concepts/loop-bricks.md +1 -1
- package/docs/concepts/loop-contracts.md +1 -1
- package/docs/concepts/loop-gates.md +1 -1
- package/docs/concepts/loop-notes.md +1 -1
- package/docs/concepts/loop-risk.md +1 -1
- package/docs/concepts/loop-templates.md +1 -1
- package/docs/concepts/loops.md +1 -1
- package/docs/concepts/lsp.md +1 -1
- package/docs/concepts/skills.md +1 -1
- package/docs/extending.md +107 -4
- package/docs/guides/install-scripted.md +1 -1
- package/docs/guides/run-anywhere.md +2 -2
- package/docs/guides/upgrade.md +2 -2
- package/docs/reference/glossary.md +1 -0
- package/docs/reference/troubleshoot-install.md +1 -1
- package/docs/web-ui.md +9 -0
- package/harness.config.json +1 -1
- package/js/build/args.mjs +27 -6
- package/js/build/driver.mjs +29 -8
- package/js/build/emit-claude.mjs +3 -1
- package/js/build/generate.mjs +10 -5
- package/js/build/render.mjs +94 -11
- package/js/build/source.mjs +117 -4
- package/js/cli-table.json +15 -0
- package/js/hosts/installs.mjs +35 -2
- package/js/hosts/link.mjs +88 -1
- package/js/hosts/native.mjs +14 -4
- package/js/inspect/checks-authoring.mjs +6 -3
- package/js/inspect/checks-build.mjs +15 -3
- package/js/inspect/checks-counts.mjs +153 -6
- package/js/inspect/checks-repo.mjs +95 -20
- package/js/inspect/cost.mjs +1 -1
- package/js/inspect/diff.mjs +56 -8
- package/js/inspect/inventory.mjs +2 -0
- package/js/inspect/status.mjs +44 -3
- package/js/inspect/validate.mjs +3 -3
- package/js/lib/prompt.mjs +19 -2
- package/js/maintain/setup.mjs +111 -23
- package/js/maintain/update.mjs +3 -3
- package/js/web/actions.mjs +38 -6
- package/js/web/api.mjs +76 -17
- package/js/web/catalog.mjs +17 -2
- package/js/web/handler.mjs +1 -0
- package/js/web/routes.mjs +2 -1
- package/js/web/server.mjs +11 -5
- package/js/web/state.mjs +38 -3
- package/package.json +1 -1
- package/registry.json +91 -0
- package/src/AGENT.md.tmpl +7 -7
- package/src/agents/_self-improvement.md +11 -0
- package/src/agents/_template.md +1 -8
- package/src/agents/advocate.md +1 -8
- package/src/agents/architect.md +1 -8
- package/src/agents/developer.md +1 -8
- package/src/agents/devops-engineer.md +37 -0
- package/src/agents/docker-expert.md +37 -0
- package/src/agents/docs.md +1 -8
- package/src/agents/empiricist.md +1 -8
- package/src/agents/explorer.md +1 -8
- package/src/agents/framer.md +1 -8
- package/src/agents/historian.md +1 -8
- package/src/agents/kubernetes-specialist.md +37 -0
- package/src/agents/memory-curator.md +1 -8
- package/src/agents/operator.md +1 -8
- package/src/agents/performance.md +1 -8
- package/src/agents/pragmatist.md +1 -8
- package/src/agents/react-engineer.md +38 -0
- package/src/agents/react-reviewer.md +42 -0
- package/src/agents/researcher.md +5 -10
- package/src/agents/reviewer.md +3 -8
- package/src/agents/security.md +1 -8
- package/src/agents/skeptic.md +1 -8
- package/src/agents/spring-boot-engineer.md +40 -0
- package/src/agents/spring-reviewer.md +41 -0
- package/src/agents/spring-security.md +42 -0
- package/src/agents/steward.md +1 -8
- package/src/agents/tester.md +1 -8
- package/src/agents/user-advocate.md +1 -8
- package/src/agents/visionary.md +1 -8
- package/src/kits/react/rules.md +13 -0
- package/src/kits/react.json +18 -0
- package/src/kits/spring-boot/rules.md +10 -0
- package/src/kits/spring-boot.json +23 -0
- package/src/licenses/everything-claude-code.txt +21 -0
- package/src/licenses/mattpocock-skills.txt +21 -0
- package/src/licenses/piomin-spring-boot.txt +190 -0
- package/src/licenses/superpowers.txt +21 -0
- package/src/licenses/vibe-wise.txt +21 -0
- package/src/skills/_self-improvement.md +22 -5
- package/src/skills/brainstorm/builder-check.md +2 -0
- package/src/skills/brainstorm.md +11 -2
- package/src/skills/codebase-design.md +10 -2
- package/src/skills/daydream/VENDOR.md +7 -7
- package/src/skills/debug.md +6 -2
- package/src/skills/develop.md +6 -2
- package/src/skills/geneseed-code-review.md +6 -2
- package/src/skills/git-history.md +2 -0
- package/src/skills/handoff.md +3 -1
- package/src/skills/learn-mode.md +3 -2
- package/src/skills/parallel-agents.md +5 -1
- package/src/skills/pipeline.md +2 -0
- package/src/skills/plan.md +9 -2
- package/src/skills/prototype.md +6 -2
- package/src/skills/react/a11y.md +33 -0
- package/src/skills/react/vite.md +35 -0
- package/src/skills/react/webpack.md +40 -0
- package/src/skills/react-testing.md +68 -0
- package/src/skills/react-view-transitions/AGENTS.md +646 -221
- package/src/skills/react-view-transitions/SKILL.md +28 -16
- package/src/skills/react-view-transitions/VENDOR.md +10 -8
- package/src/skills/react-view-transitions/references/css-recipes.md +72 -2
- package/src/skills/react-view-transitions/references/implementation.md +14 -26
- package/src/skills/react-view-transitions/references/nextjs.md +94 -37
- package/src/skills/react-view-transitions/references/patterns.md +60 -48
- package/src/skills/react-view-transitions/references/troubleshooting.md +47 -0
- package/src/skills/react.md +63 -0
- package/src/skills/research.md +6 -2
- package/src/skills/review-response.md +2 -0
- package/src/skills/rule.md +6 -2
- package/src/skills/ship.md +8 -4
- package/src/skills/skill-forge.md +11 -5
- package/src/skills/spring-boot/cloud.md +103 -0
- package/src/skills/spring-boot/java-modern.md +71 -0
- package/src/skills/spring-boot/logging.md +89 -0
- package/src/skills/spring-boot/security.md +112 -0
- package/src/skills/spring-boot/web.md +112 -0
- package/src/skills/spring-boot.md +57 -0
- package/src/skills/spring-data-jpa/patterns.md +68 -0
- package/src/skills/spring-data-jpa.md +81 -0
- package/src/skills/spring-testing.md +93 -0
- package/src/skills/wayfinder.md +8 -2
- package/src/skills/wiki.md +18 -5
- package/src/upstreams.json +66 -0
- package/themes/_TEMPLATE.json +13 -0
- package/themes/biker.json +13 -0
- package/themes/commentator.json +13 -0
- package/themes/cyberpunk.json +13 -0
- package/themes/gamer.json +13 -0
- package/themes/imperial.json +13 -0
- package/themes/joker.json +13 -0
- package/themes/marvin.json +13 -0
- package/themes/mean.json +13 -0
- package/themes/military.json +13 -0
- package/themes/neutral.json +13 -0
- package/themes/pirate.json +13 -0
- package/themes/sports.json +13 -0
- package/themes/verstappen.json +13 -0
- package/themes/wizard.json +13 -0
- package/web/dist/assets/Activity-44rbWUQI.js +1 -0
- package/web/dist/assets/ActivityDetail-Dk9k893a.js +1 -0
- package/web/dist/assets/Dashboard-DCoUN60W.js +2 -0
- package/web/dist/assets/{Docs-tDW7i7mo.js → Docs-C_je2lRG.js} +3 -3
- package/web/dist/assets/FilterInput-CZREvrjX.js +1 -0
- package/web/dist/assets/GreenhouseView-BXAOIznW.js +2 -0
- package/web/dist/assets/Installs-DAXF403D.js +3 -0
- package/web/dist/assets/JournalView-DZ184wKB.js +1 -0
- package/web/dist/assets/KitApply-pjhvGha0.js +1 -0
- package/web/dist/assets/Kits-BCCKjSIY.js +1 -0
- package/web/dist/assets/{Laws-BA3CzUf5.js → Laws-BgBUpRkE.js} +1 -1
- package/web/dist/assets/Library-CW0Zl6RF.js +1 -0
- package/web/dist/assets/Loops-BvFOzjEw.js +2 -0
- package/web/dist/assets/{Markdown-iHvBrpRN.js → Markdown-zaXXXHz9.js} +13 -13
- package/web/dist/assets/OperatorHudView-Bs4unPNi.js +2 -0
- package/web/dist/assets/Personal-C23XaT-a.js +1 -0
- package/web/dist/assets/Tabs-b2XFu4OS.js +1 -0
- package/web/dist/assets/activity-Jw8XcPiP.js +1 -0
- package/web/dist/assets/api-BfpZmUMI.js +1 -0
- package/web/dist/assets/{drawable-CyLe1gtW.js → drawable-BERkKhx_.js} +1 -1
- package/web/dist/assets/index-C9R_bRw_.js +2 -0
- package/web/dist/assets/{index-BCJz4_8C.css → index-jYlWihN-.css} +1 -1
- package/web/dist/assets/{react-BOF6yL40.js → react-DlYQp10C.js} +1 -1
- package/web/dist/assets/rolldown-runtime-hePW80VL.js +1 -0
- package/web/dist/assets/sections-ChwaobfW.js +1 -0
- package/web/dist/assets/usePoll-bDFN-Hr6.js +1 -0
- package/web/dist/index.html +6 -5
- package/web/dist/assets/Activity-C8sZVIUU.js +0 -1
- package/web/dist/assets/ActivityDetail-Cc6vWUS4.js +0 -1
- package/web/dist/assets/Dashboard-C5ATa3ow.js +0 -2
- package/web/dist/assets/FilterInput-zLFXoSt6.js +0 -1
- package/web/dist/assets/GreenhouseView-zk2Uzc3A.js +0 -2
- package/web/dist/assets/Installs-CB_rvbBP.js +0 -3
- package/web/dist/assets/JournalView-Bfj27XHC.js +0 -1
- package/web/dist/assets/Library-BWwiy9Vb.js +0 -1
- package/web/dist/assets/Loops-DaPk-ckL.js +0 -2
- package/web/dist/assets/OperatorHudView-CyiGhiHk.js +0 -2
- package/web/dist/assets/Personal-Bwd27CmT.js +0 -1
- package/web/dist/assets/Tabs-BOD7Kaz1.js +0 -1
- package/web/dist/assets/activity-DvPxoS4Y.js +0 -1
- package/web/dist/assets/api-CiXlkbe0.js +0 -1
- package/web/dist/assets/index-DQXG_mqo.js +0 -2
- package/web/dist/assets/sections-BET3c1WT.js +0 -1
- package/web/dist/assets/usePoll-NSTzLOF4.js +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -8,6 +8,112 @@ label. For the capability ↔ spec map, see [SHIPPED.md](SHIPPED.md).
|
|
|
8
8
|
|
|
9
9
|
## [Unreleased]
|
|
10
10
|
|
|
11
|
+
## [4.14.0] — 2026-10-22
|
|
12
|
+
|
|
13
|
+
Minor: the React kit supports webpack projects as well as Vite.
|
|
14
|
+
|
|
15
|
+
### Upgrade notes
|
|
16
|
+
- Run `geneseed rebuild-all` to get the new kit text; nothing changes on a machine until something re-emits.
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
- **The `react` kit supports webpack as well as Vite** (#368). The `react` skill reads the bundler from `package.json` and loads its side file: the new `react/webpack.md` (config, client-side routing with `historyApiFallback` and `publicPath`, `DefinePlugin` env values, a webpack build-failure table) or `react/vite.md`. The kit rules, both agents, the Jest configuration table in `react-testing` and every theme's descriptions now name both bundlers.
|
|
20
|
+
|
|
21
|
+
## [4.13.0] — 2026-10-21
|
|
22
|
+
|
|
23
|
+
Minor: sharper ported skills, a wiki that keeps its history, and self-improvement notes that carry their evidence.
|
|
24
|
+
|
|
25
|
+
### Upgrade notes
|
|
26
|
+
- Run `geneseed rebuild-all` to get the new skill and agent text; nothing changes on a machine until something re-emits. Notes already in `notebook/skill-notes/` and `notebook/agent-notes/` keep working as written; only new lines take the new format.
|
|
27
|
+
|
|
28
|
+
### Changed
|
|
29
|
+
- **Self-improvement notes carry their evidence and their scope** (#366). A note is now one line, `- [skill|general] <correction> — seen: <what happened, against what was expected> (<date>)`, and an agent's `spec-feedback:` line takes the same shape. `seen:` is what a correction is judged by when `geneseed diff` hands it back for folding into `src/`, and pruning drops the lines without one first. `general` marks a correction that would fix other skills or agents too, so it belongs in a law, doctrine or memory rather than one file. The `geneseed diff` report explains both markers. Agents now share one self-improvement footer (`src/agents/_self-improvement.md`) instead of 29 copies; rendered agents differ only by the new wording.
|
|
30
|
+
- **The wiki writes history, not the present** (#365). Wiki claims are dated, code claims cite `owner/repo@commit`, and a correction supersedes a claim rather than rewriting it. A new report-only lint pass lists contradictions, orphans and overtaken claims without restructuring the wiki. Adapted from mattpocock/skills' chief-of-staff.
|
|
31
|
+
- **The mattpocock ports are sharpened against upstream `5beb35b`** (#365):
|
|
32
|
+
- `parallel-agents`: each slice branches off the integration tip when it is dispatched and merges the tip back before returning, so a later slice no longer misses its blocker's merged work. A whole-branch review follows.
|
|
33
|
+
- `codebase-design`: an interface is designed twice, and an ADR is not silently reopened.
|
|
34
|
+
- `research` and the `researcher` agent: one read in the source that owns a claim stands on its own; any other claim still needs two sources.
|
|
35
|
+
- `ship`: the docs check moves before the push it gates.
|
|
36
|
+
- `plan`, `wayfinder`, `prototype`, `develop`, `debug`, `rule`, `brainstorm`, `handoff` and `skill-forge` get smaller fixes: slice sizing, ticket graduation, mocking only at boundaries, checking for an existing guardrail before proposing one, and trigger pruning.
|
|
37
|
+
- New credits on `parallel-agents`, `skill-forge`, `brainstorm` and `wiki`.
|
|
38
|
+
|
|
39
|
+
## [4.12.0] — 2026-10-21
|
|
40
|
+
|
|
41
|
+
Minor: a second opt-in kit, `react`, and the setup wizard asks about each kit on its own.
|
|
42
|
+
|
|
43
|
+
### Upgrade notes
|
|
44
|
+
- Nothing to rebuild unless you want the new kit. Default installs are unchanged: no kit is on. To turn it on, run `geneseed build --emit <target> --kits react` (or `--kits react,spring-boot` for both), or use **Installs → Kits** in the web console.
|
|
45
|
+
|
|
46
|
+
### Added
|
|
47
|
+
- **The `react` kit** (#362), for React 18 or 19 apps built with Vite, in TypeScript or JavaScript, tested with Jest and React Testing Library. Skills `react` (with side files for Vite and accessibility) and `react-testing`; agents `react-engineer` and `react-reviewer` (read-only); kit rules, and a banned-API gate that keeps `ReactDOM.render(`, `findDOMNode`, Enzyme, `react-test-renderer` and `@testing-library/react-hooks` out of kit files. Adapted from affaan-m/everything-claude-code (MIT), rewritten and condensed for Vite and Jest, with no Server Components material.
|
|
48
|
+
|
|
49
|
+
### Changed
|
|
50
|
+
- **The setup wizard asks one yes/no per kit** (#362). A single pick could not turn on two kits at once.
|
|
51
|
+
|
|
52
|
+
### Repository
|
|
53
|
+
Not in the package; how Geneseed itself is built and checked.
|
|
54
|
+
- CI's golden cells run as two parallel jobs per platform, emit and CLI (#361). On Windows that leg drops from about 7 minutes in sequence to about 4. The unit suite runs at `--test-concurrency=8` on Linux and in the publish job; Windows keeps the default, where the flag bought nothing. If branch protection names the old `node-cells (<os>)` checks, they now report as `node-cells (<os>, emit)` and `node-cells (<os>, cli)`.
|
|
55
|
+
- The unit suite drops three repeated full-cost runs (#363): two update-flow arms use a doctor stand-in (the real rejection and exact rollback stay in `update_git`), the packaging test counts themes in process instead of a second `doctor --all`, and `--no-deletion-gate` replays only the 67 real-loss rows. 151 s to 139 s locally, same 2012 tests.
|
|
56
|
+
|
|
57
|
+
## [4.11.2] — 2026-10-21
|
|
58
|
+
|
|
59
|
+
Patch: a clone install on macOS or Linux puts the `geneseed` command on your PATH.
|
|
60
|
+
|
|
61
|
+
### Upgrade notes
|
|
62
|
+
- Nothing to rebuild. If `geneseed` is not found in a new terminal, run `./geneseed link` from your clone and accept the offer to add `~/.local/bin` to your shell's startup file.
|
|
63
|
+
|
|
64
|
+
### Fixed
|
|
65
|
+
- **A clone install puts `geneseed` on your PATH on macOS and Linux** (#359). `./install` never linked the command, and `geneseed link` wrote it to `~/.local/bin`, which macOS zsh does not search, so `geneseed` was not found (reported 2026-10). `./install` now runs `link` when `geneseed` is not found yet, and `link` offers, in a terminal, to add the folder to your shell's startup file (`~/.zshrc`, or `~/.bashrc` / `~/.bash_profile` for bash). It appends one marked block, never twice; `geneseed unlink` removes it. Outside a terminal it prints the line to add, as before.
|
|
66
|
+
|
|
67
|
+
## [4.11.1] — 2026-10-21
|
|
68
|
+
|
|
69
|
+
Patch: the web console on a machine with only IBM Bob (or any host but OpenCode): it opens on the install you have, the first-deploy form asks a per-repo mode for its folder, and the doctor stops reading a misplaced project install as a broken bundle.
|
|
70
|
+
|
|
71
|
+
### Upgrade notes
|
|
72
|
+
- Restart the console after updating (`geneseed web restart`) so it serves the rebuilt UI. If a per-repo install landed in `Harness/` inside your Geneseed clone, remove it with `./geneseed uninstall --target Harness --yes`, then delete `Harness/`.
|
|
73
|
+
|
|
74
|
+
### Fixed
|
|
75
|
+
- **The web console works on a machine without OpenCode** (#357). It always opened on the OpenCode global dir, so with only IBM Bob installed the Overview showed the first-deploy form over a working `~/.bob`, and nothing could re-point it (the harness selector hides itself below two installs). When nothing is deployed where it looks, the console now shows the first active install it finds, a global before a project, and follows a first deploy to where it landed.
|
|
76
|
+
- **The first-deploy form asks a project mode for its folder** (#357). Picking a per-repo mode (`bob`, `claude`, `opencode`, `openclaude`) sent a Build with no folder, so the files landed in `Harness/` inside the Geneseed clone, where the host never looks. The form now asks for the folder (typed or Browse…) and deploys there; Build refuses a per-repo mode it has no folder for; the portable `files` bundle is left to the CLI. To remove an install misplaced this way, run `./geneseed uninstall --target Harness --yes` in the clone, then delete `Harness/`.
|
|
77
|
+
- **The doctor's committed-bundle check no longer reads a Claude, Bob or OpenClaude project install as a broken bundle** (#357). Such a tree has a `.bob/`-style data dir, not the bundle layout, so every file read "missing" (178 lines on the reported machine) and no rebuild could clear them.
|
|
78
|
+
|
|
79
|
+
## [4.11.0] — 2026-10-21
|
|
80
|
+
|
|
81
|
+
Minor: the self-improvement loops write to notebook notes instead of the installed skill or agent file, the web console gains a Kits section, and `./install` waits for your answers and finds tools installed for one user.
|
|
82
|
+
|
|
83
|
+
### Upgrade notes
|
|
84
|
+
- Run `geneseed rebuild-all` once after updating so installed skills, agents and AGENT.md carry the new self-improvement footer. Lessons the loops wrote into installed files before this release are still exported by `upgrade` into `improvements/`, as before.
|
|
85
|
+
|
|
86
|
+
### Added
|
|
87
|
+
- **Web console: Kits section** (#353). A top-level Kits page between Library and Loops: a list and a detail page per kit (rules, banned APIs, members linked to the Library, upstream pin and compare link, a switch per install that rebuilds through the install job). Installs → Kits shares its staging and Apply control. `GET /api/kits` now carries rules, word budget, banned APIs and credits, and the Library shows a `kit:` badge on kit members.
|
|
88
|
+
|
|
89
|
+
### Changed
|
|
90
|
+
- **Self-improvement writes to a sidecar, not the skill** (#354). The skill and agent loops used to edit the rendered file in place, which the doctor reported as stale and the next rebuild erased. They now write corrections to `notebook/skill-notes/<name>.md` and `notebook/agent-notes/<name>.md` (seed-once, agent-owned, never overwritten), and read them back before the skill runs or the agent is dispatched. `geneseed diff` lists the notes and `--out` exports them for back-porting into `src/`. AGENT.md names the notes paths, so the carrier ceilings rise by exactly that text (full 62_263, lean 39_156).
|
|
91
|
+
|
|
92
|
+
### Fixed
|
|
93
|
+
- **Setup's prompts no longer answer themselves in a real terminal** (#356). Reading `process.stdin` puts a terminal's input in non-blocking mode, and the line reader took the resulting `EAGAIN` for end of input: "Continue without one? (y/N)" printed and answered N at once, so `./install` stopped before anyone could type, and every other wizard question silently took its default. The reader now waits for the keypress.
|
|
94
|
+
- **A tool installed for one user is found** (#356). Setup looked only on PATH, so an IBM Bob installed under the user's profile read as missing. It now also checks `~/.local/bin`, `~/bin`, each tool's own installer dir (`~/.opencode/bin`, `~/.claude/local`), the per-user npm prefix on Windows, and Bob's desktop app folder (`%LOCALAPPDATA%\Programs` on Windows, `/Applications` and `~/Applications` on macOS); a tool found there is listed with its path. When nothing is found, setup asks for the tool's path before offering to stop. The double-clickable `install.command` now waits for Enter before its window can close, as `install.cmd` already did.
|
|
95
|
+
|
|
96
|
+
## [4.10.0] — 2026-10-20
|
|
97
|
+
|
|
98
|
+
Minor: opt-in kits (and a first one, `spring-boot`), credits for adapted content, a weekly upstream-drift check, and a web Kits tab.
|
|
99
|
+
|
|
100
|
+
### Upgrade notes
|
|
101
|
+
- Run `geneseed rebuild-all` once after updating. Default installs are unchanged (no kit is on); enable one with `geneseed build --kits spring-boot` or the new **Installs → Kits** tab.
|
|
102
|
+
|
|
103
|
+
### Added
|
|
104
|
+
- **Kits: opt-in bundles of skills, agents and rules** (#343). `src/kits/<kit>.json` declares a kit; `--kits a,b` turns kits on (`none` turns all off), the install records `Active kits:` and `rebuild-all`, `update`, `migrate` and the web console keep it. A plain build warns before it drops a kit an install has; `status` lists kits and files you edited that were kept from a kit turned off. The doctor gates kit membership, links (kit → core only), registry rows and each kit's rules budget.
|
|
105
|
+
- **The `spring-boot` kit** (#349), adapted from piomin/claude-ai-spring-boot (Apache-2.0) and rewritten for Spring Boot 4: skills `spring-boot`, `spring-data-jpa`, `spring-testing`; agents `spring-boot-engineer`, `spring-reviewer` and `spring-security` (both read-only), `kubernetes-specialist`, `docker-expert`, `devops-engineer`; kit rules. A banned-API gate keeps removed Boot APIs (`@MockBean`, `javax.persistence`, …) out of kit files.
|
|
106
|
+
- **Credits for adapted content** (#342). `src/upstreams.json` records each upstream's repo, commit, author and licence; a `{{CREDIT:key:path}}` token renders an "Adapted from … modified." line and the skill ships the licence beside it. Superpowers, Matt Pocock's skills and vibe-wise ports are now credited; the README gains a Credits section, gated by the doctor.
|
|
107
|
+
- **Weekly upstream-drift check** (#344, #351). A CI job compares every pinned upstream with its HEAD on the files Geneseed uses and keeps one tracking issue per upstream; vendored skills are compared on their folder only, and `"frozen": true` entries are skipped.
|
|
108
|
+
- **Web console: Installs → Kits** (#350). One row per global and project install, a switch per kit, apply through the usual confirm and rebuild job.
|
|
109
|
+
|
|
110
|
+
### Changed
|
|
111
|
+
- `react-view-transitions` re-vendored at upstream HEAD (Next.js no longer needs the `experimental.viewTransition` flag; back/forward navigation and shared-element guidance updated) (#351).
|
|
112
|
+
- `debug` proves a forced red landed by diffing against a pristine copy; `geneseed-code-review` searches the repo for its standards files (#351).
|
|
113
|
+
|
|
114
|
+
### Fixed
|
|
115
|
+
- The web install action no longer re-themes an install you are not viewing (#350).
|
|
116
|
+
|
|
11
117
|
## [4.9.4] — 2026-10-18
|
|
12
118
|
|
|
13
119
|
Patch: `git reset --hard` asks only when it would abandon existing commits, not over uncommitted work.
|
package/README.md
CHANGED
|
@@ -157,7 +157,7 @@ geneseed web stop # stop the daemon
|
|
|
157
157
|
geneseed web status # is it running, and where
|
|
158
158
|
```
|
|
159
159
|
|
|
160
|
-
The sidebar has
|
|
160
|
+
The sidebar has eight pages: **Overview** (what's deployed, health, recent jobs), **Constitution** (the rules and doctrine switches), **Library** (skills, agents, the wiki), **Kits** (opt-in stack bundles), **Loops** (the loop catalogue), **Personal** (your rules, profile, memory, notebook), **Installs** (hosts, local edits, doctor, server) and **Docs** — this documentation, opening on the Understand track, with a map of what Geneseed put on your machine.
|
|
161
161
|
|
|
162
162
|
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.
|
|
163
163
|
|
|
@@ -334,7 +334,7 @@ geneseed rebuild-all # re-render every registered install in its own theme + m
|
|
|
334
334
|
./geneseed upgrade # just the content refresh (remembers theme + emit mode)
|
|
335
335
|
```
|
|
336
336
|
|
|
337
|
-
**Local edits survive.** If the agent
|
|
337
|
+
**Local edits survive.** The self-improvement loops write to notes under `notebook/`, which no rebuild touches. If you or the agent edited deployed agent/skill files in place anyway, an upgrade exports that drift to an `improvements/` file inside the install before overwriting. Details: [Upgrade](docs/guides/upgrade.md).
|
|
338
338
|
|
|
339
339
|
## 📚 Documentation
|
|
340
340
|
|
|
@@ -367,6 +367,20 @@ Three things that bite when you don't know them:
|
|
|
367
367
|
- **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.
|
|
368
368
|
- **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.
|
|
369
369
|
|
|
370
|
+
## 🙏 Credits
|
|
371
|
+
|
|
372
|
+
Some skills and agents are adapted from other open-source skill collections, under the MIT or Apache-2.0 licence (named on each entry below). Each adapted skill names its source in its own text, and ships that upstream's licence beside it. `src/upstreams.json` pins every upstream to a commit.
|
|
373
|
+
|
|
374
|
+
- `daydream` — [glebis/claude-skills](https://github.com/glebis/claude-skills) by Gleb Kalinin (MIT): the vendored `daydream` skill.
|
|
375
|
+
- `react-view-transitions` — [vercel-labs/agent-skills](https://github.com/vercel-labs/agent-skills) by Vercel Engineering (MIT): the vendored `react-view-transitions` skill.
|
|
376
|
+
- `mattpocock-skills` — [mattpocock/skills](https://github.com/mattpocock/skills) by Matt Pocock (MIT): the vocabulary and procedures behind codebase-design, wayfinder, prototype, develop, handoff and research, the spec pass of geneseed-code-review, the question rounds and questionnaire of brainstorm, the slicing of plan, the reproduction step of debug, the integration-branch rules of parallel-agents, the trigger-pruning of skill-forge, and the dated-history rule of wiki.
|
|
377
|
+
- `mattpocock-skills-frozen` — [mattpocock/skills](https://github.com/mattpocock/skills) by Matt Pocock (MIT), pinned at 391a2701, the last commit carrying `resolving-merge-conflicts` (deleted upstream since): the merge-conflict step of git-history, from a skill upstream has since deleted, so the weekly drift check skips it.
|
|
378
|
+
- `mattpocock-skills-2509` — [mattpocock/skills](https://github.com/mattpocock/skills) by Matt Pocock (MIT), a second key for the same repo, at the same pin as `mattpocock-skills` today (5beb35b0): the PR body of ship and the guardrail clause of rule.
|
|
379
|
+
- `superpowers` — [obra/superpowers](https://github.com/obra/superpowers) by Jesse Vincent (MIT): the core of debug, the size step and builder check of brainstorm, the plan rules of plan, the reviewer brief behind geneseed-code-review and the reviewer agent, the review-handling steps of review-response, and the ruling format of pipeline and parallel-agents.
|
|
380
|
+
- `vibe-wise` — [nykooi1/vibe-wise](https://github.com/nykooi1/vibe-wise) by Noah Kim (MIT): the state file, levels and checkpoints of learn-mode.
|
|
381
|
+
- `piomin-spring-boot` — [piomin/claude-ai-spring-boot](https://github.com/piomin/claude-ai-spring-boot) by Piotr Mińkowski (Apache-2.0): the Spring Boot kit's skills and agents, rewritten and condensed for Boot 4.
|
|
382
|
+
- `everything-claude-code` — [affaan-m/everything-claude-code](https://github.com/affaan-m/everything-claude-code) by Affaan Mustafa (MIT): the React kit's skills and agents, rewritten and condensed for Vite and Jest.
|
|
383
|
+
|
|
370
384
|
## 📄 License
|
|
371
385
|
|
|
372
386
|
[MIT](LICENSE) — built by [@Arylmera](https://github.com/Arylmera).
|
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: **4.
|
|
23
|
+
> string. Current label: **4.14.0**.
|
|
24
24
|
|
|
25
25
|
## Capabilities
|
|
26
26
|
|
package/docs/README.md
CHANGED
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
|
|
43
43
|
**Memory** — [Memory](concepts/memory.md) · [Notebook](concepts/notebook.md)
|
|
44
44
|
|
|
45
|
-
**Configuration** — [Footprint](concepts/footprint.md) · [Themes](concepts/themes.md) · [Exclusions](concepts/exclusions.md) · [Code intelligence (LSP)](concepts/lsp.md)
|
|
45
|
+
**Configuration** — [Footprint](concepts/footprint.md) · [Themes](concepts/themes.md) · [Exclusions](concepts/exclusions.md) · [Kits](concepts/kits.md) · [Code intelligence (LSP)](concepts/lsp.md)
|
|
46
46
|
|
|
47
47
|
**Working together** — [Collaboration](concepts/collaboration.md) · [Foreman mode](concepts/foreman-mode.md)
|
|
48
48
|
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
---
|
|
2
|
+
group: concepts
|
|
3
|
+
order: 13
|
|
4
|
+
title: "Kits"
|
|
5
|
+
kind: "concept"
|
|
6
|
+
section: "Configuration"
|
|
7
|
+
description: "Opt-in bundles of skills, agents and rules for one stack, off unless you name them."
|
|
8
|
+
---
|
|
9
|
+
A **kit** is an opt-in bundle of skills, agents and rules for one stack. Kits are off by default and switched on per install, project or global, on every host. An install without a kit pays nothing for it. Inside an install that has it on, a kit's skills and agents are ordinary: the model picks them as it picks any other.
|
|
10
|
+
|
|
11
|
+
> **You already know this:** an optional dependency group, like `pip install pkg[postgres]`. The core install stays small, and you opt into the extra parts for your stack.
|
|
12
|
+
|
|
13
|
+
The first kit is `spring-boot`, for Spring Boot 4 (Spring Framework 7, Java 21+) projects. It adds nine members:
|
|
14
|
+
|
|
15
|
+
| Member | Kind | What it is for |
|
|
16
|
+
|---|---|---|
|
|
17
|
+
| `spring-boot` | skill | Building a Spring Boot service: web layer, configuration, security, HTTP clients, logging, cloud-native packaging, and a table of Boot 4 pitfalls |
|
|
18
|
+
| `spring-data-jpa` | skill | Spring Data JPA and Hibernate: entities, repositories, transactions, N+1 and fetch problems, migrations |
|
|
19
|
+
| `spring-testing` | skill | Spring Boot tests: slices, `MockMvcTester`, `@MockitoBean`, Testcontainers with `@ServiceConnection` |
|
|
20
|
+
| `spring-boot-engineer` | agent | Implements a Spring Boot feature end to end |
|
|
21
|
+
| `spring-reviewer` | agent | Framework-aware review: layering, transactions, JPA, configuration, test slices |
|
|
22
|
+
| `spring-security` | agent | Security pass on a Spring Security change |
|
|
23
|
+
| `kubernetes-specialist` | agent | Kubernetes manifests, probes, resources and rollout for a Spring Boot service |
|
|
24
|
+
| `docker-expert` | agent | Dockerfile, layered or native image for a Spring Boot service |
|
|
25
|
+
| `devops-engineer` | agent | Build and delivery pipeline, on whatever CI the project already uses |
|
|
26
|
+
|
|
27
|
+
The kit is adapted from [piomin/claude-ai-spring-boot](https://github.com/piomin/claude-ai-spring-boot) by Piotr Mińkowski (Apache-2.0), rewritten and condensed for Boot 4. Each of its skill folders ships `LICENSE-piomin-spring-boot.txt`, and each agent carries a credit line.
|
|
28
|
+
|
|
29
|
+
The second kit is `react`, for React 18 or 19 apps built with Vite or webpack, in TypeScript or JavaScript, tested with Jest and React Testing Library. It adds four members:
|
|
30
|
+
|
|
31
|
+
| Member | Kind | What it is for |
|
|
32
|
+
|---|---|---|
|
|
33
|
+
| `react` | skill | Components, hooks, state placement, data fetching, TypeScript or JavaScript, React security; side files for Vite and for webpack (config, client-side routing, env variables, build failures), read by whichever the project uses, and accessibility |
|
|
34
|
+
| `react-testing` | skill | Jest and Testing Library: role queries, `userEvent`, MSW network mocks, `jest-axe`, and the Jest configuration a Vite or webpack project needs |
|
|
35
|
+
| `react-engineer` | agent | Implements a React feature, or makes a broken Vite or webpack build or Jest run green |
|
|
36
|
+
| `react-reviewer` | agent | Framework-aware review: hooks, state, data fetching, accessibility, React security, tests |
|
|
37
|
+
|
|
38
|
+
It is adapted from [affaan-m/everything-claude-code](https://github.com/affaan-m/everything-claude-code) by Affaan Mustafa (MIT), rewritten and condensed for Vite and Jest; the webpack side file is first-party. It has no Server Components material: a client-rendered app has no server render.
|
|
39
|
+
|
|
40
|
+
### Switching kits on and off
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
geneseed build --emit claude-global --kits spring-boot
|
|
44
|
+
geneseed build --emit claude-global --kits react,spring-boot
|
|
45
|
+
geneseed build --emit claude-global --kits none
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
`--kits` takes a comma-separated list. `none` and an empty value both mean no kits. An unknown kit name is refused with exit code 2, and the error lists the kits this Geneseed ships. `none` is reserved and can never name a kit. The flag's row is in the [CLI reference](../reference/cli.md), under `build`.
|
|
49
|
+
|
|
50
|
+
A build does exactly what its flags say. A plain `build` without `--kits` therefore turns off a kit the install has on. Before it does, it warns: `this install has kit <k>; this build turns it off — pass --kits <k> to keep it`.
|
|
51
|
+
|
|
52
|
+
The setup wizard asks one yes/no question per kit, each defaulting to whether the install has that kit on. It asks them only when at least one kit exists.
|
|
53
|
+
|
|
54
|
+
### What an install records
|
|
55
|
+
|
|
56
|
+
An install with a kit on records it in its instructions file, under the skill section: `Active kits: spring-boot`. The line is written only when at least one kit is on. A missing line means no kits, so an install built before kits existed reads as having none.
|
|
57
|
+
|
|
58
|
+
`geneseed rebuild-all`, `geneseed update` and `geneseed migrate` read the line back and rebuild with the same kits. `geneseed diff` and the web console read it too, so they compare against or rebuild that same set. `geneseed validate` does not read it: pass `--kits` to dry-run a kit build. A plain `build` does not read it; it only warns, as above. If the line names a kit this Geneseed no longer ships, the rebuild drops that kit with a notice and keeps the others. It never fails `rebuild-all`. A retired kit name is never reused for a new kit.
|
|
59
|
+
|
|
60
|
+
`geneseed status` shows `kits: spring-boot` on the install's row, and `status --json` carries the same list.
|
|
61
|
+
|
|
62
|
+
In the web console, **Installs → Kits** (`#/installs/kits`) lists every install (disabled ones read-only) with one switch per kit. Toggling stages the set; **Apply** asks for confirmation, then rebuilds that one install with exactly that set as a console job (replace, not replay). Files you edited in a kit that is now off are kept, and the row names them so you can delete them by hand. The top-level **Kits** page (`#/kits`) lists the kits; a kit's page (`#/kits/<kit>`) shows its rules, banned APIs and upstream credits with the same per-install switch, and the Library tags each member skill or agent with a `kit:` badge.
|
|
63
|
+
|
|
64
|
+
### What a kit adds to an install
|
|
65
|
+
|
|
66
|
+
- **Its skills and agents.** They are written like any core skill or agent. The members of a kit that is off are not written at all.
|
|
67
|
+
- **A Kits block in the instructions file**, after the doctrine layer. It holds each active kit's rules, the same text at either [footprint](footprint.md).
|
|
68
|
+
- **Its catalogue rows**, as the last rows of the skills table and of the agents table, only where the host does not list that kind natively. The plain bundle (`--emit files`) gets both, Bob gets the agent rows (it lists skills natively), and Claude Code, OpenClaude and OpenCode get none: their instructions file keeps its pointer.
|
|
69
|
+
|
|
70
|
+
`--exclude-skills` still applies: it can drop one kit skill while the rest of the kit stays on, and the exclusion wins. A kit's links to its own skills do not stop that, but a kit file's link to a core skill still protects that core skill from `--exclude-skills`, as any link from the harness does. Kit agents cannot be left out one by one. See [Exclusions](exclusions.md).
|
|
71
|
+
|
|
72
|
+
### Turning a kit off
|
|
73
|
+
|
|
74
|
+
Rebuild with `--kits none`, or with a list that leaves the kit out. The kit's files are removed from the install, its block and catalogue rows go, and the `Active kits:` line goes when no kit is left.
|
|
75
|
+
|
|
76
|
+
A kit file you edited is kept, as with any file Geneseed wrote and you changed. `geneseed status` names it on a row of its own, `kept from inactive kit <kit>: <files>`, and `status --json` lists it under `keptKitFiles`. Delete it by hand if you no longer want it.
|
|
77
|
+
|
|
78
|
+
### Kits are not doctrine packs
|
|
79
|
+
|
|
80
|
+
A [doctrine pack](rules.md) is part of the constitution. Kits are not:
|
|
81
|
+
|
|
82
|
+
- A kit's rules are plain text. They have no rule ids, cannot be excluded one at a time with `--exclude-rules`, and have no row in the hook ledger. No hook gate enforces them.
|
|
83
|
+
- A kit is not a pack. A missing `Active packs:` line reads as every pack, but a missing `Active kits:` line reads as no kits, so an old install never turns a kit on by accident.
|
|
84
|
+
|
|
85
|
+
### What a kit costs
|
|
86
|
+
|
|
87
|
+
- **Hooks:** nothing. The hook binary does not read kits, so a kit adds no time to a tool call.
|
|
88
|
+
- **The instructions file:** the Kits block. Each kit has its own word budget for its rules, set in its manifest and checked by `doctor`, so a kit never eats into the core ceiling.
|
|
89
|
+
- **The skill listing:** one line per kit skill, every session, while the kit is on. That is the same price as a core skill.
|
|
90
|
+
|
|
91
|
+
The cost of authoring one, file by file, is in [Extending](../extending.md#3bis--adding-a-kit).
|
package/docs/concepts/loops.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
group: concepts
|
|
3
3
|
kind: "concept"
|
|
4
4
|
section: "Loops"
|
|
5
|
-
order:
|
|
5
|
+
order: 17
|
|
6
6
|
title: "Loops"
|
|
7
7
|
link: {"hash":"#/docs/loop-actions","label":"The geneseed loop actions →"}
|
|
8
8
|
description: "What a loop is, the ring of bricks it runs, and how it differs from foreman mode."
|
package/docs/concepts/lsp.md
CHANGED
package/docs/concepts/skills.md
CHANGED
|
@@ -41,7 +41,7 @@ The full list, with each description, is in the catalog.
|
|
|
41
41
|
|
|
42
42
|
### Skills improve themselves
|
|
43
43
|
|
|
44
|
-
Every skill ends with one beat of reflection: if a step misled or a step was missing, the agent
|
|
44
|
+
Every skill ends with one beat of reflection: if a step misled or a step was missing, the agent writes the exact correction, with your assent, into that skill's notes file, `notebook/skill-notes/<name>.md`, and reads those notes the next time the skill runs. It never edits the installed skill itself: that file is rendered from `src/`, a rebuild would overwrite the edit, and `doctor` would report it as drift. Agents work the same way through `notebook/agent-notes/`. Each note is one line that carries its evidence, `- [skill|general] <correction> — seen: <what happened, against what was expected> (<date>)`: `seen:` is what you judge the correction by before folding it in, and `general` marks one that belongs in a law, doctrine or memory rather than in that one skill. `geneseed diff` lists the notes so you can fold them back into `src/`. Most runs end with nothing to change.
|
|
45
45
|
|
|
46
46
|
### Old names keep working
|
|
47
47
|
|
package/docs/extending.md
CHANGED
|
@@ -389,10 +389,31 @@ emit leaves the prior install intact.
|
|
|
389
389
|
never fires. Hand-run, spends model calls on your own login, not part of the suite.
|
|
390
390
|
|
|
391
391
|
**A vendored skill folder** (`src/skills/<name>/SKILL.md`) is a different shape: add it to
|
|
392
|
-
`VENDORED_SKILL_DIRS` (`js/hosts/native.mjs:
|
|
393
|
-
`tests/unit/authoring_gates.test.mjs:
|
|
394
|
-
|
|
395
|
-
|
|
392
|
+
`VENDORED_SKILL_DIRS` (`js/hosts/native.mjs:48` — the literal is frozen in
|
|
393
|
+
`tests/unit/authoring_gates.test.mjs:421`), add a `src/upstreams.json` entry (`repo`, `commit` —
|
|
394
|
+
a 40-hex commit, never a moving branch — `author`, `license`, and `licenseFile`, a path under
|
|
395
|
+
`src/` or `null`; an optional `"frozen": true` marks text left at its pin on purpose: the weekly drift job skips it, `creditProblems` still validates it), write a `VENDOR.md` carrying `**Upstream key:** <that key>` and a
|
|
396
|
+
`{{CREDIT:<key>:<upstream path>}}` line, which renders the attribution into every install (the
|
|
397
|
+
folder ships its upstream's own LICENSE, so it gets no `LICENSE-<key>.txt` copy; a first-party
|
|
398
|
+
folder writes `**Upstream:** this repository` and a `**License:**` instead, and has no entry),
|
|
399
|
+
add the registry row — and **skip steps 2, 4, 6, 7**: the flat-spec globs only see `*.md` at the
|
|
400
|
+
top level. The doctor (`vendorPinProblems`, `creditProblems`) refuses a key with no entry, an
|
|
401
|
+
entry nothing credits, an entry missing `repo`/`author`/`license`, a bad commit, and a licence
|
|
402
|
+
file that is missing or outside `src/`.
|
|
403
|
+
|
|
404
|
+
**Porting a flat skill or an agent from another repository** is steps 1–9 plus a
|
|
405
|
+
`{{CREDIT:}}` token. Only an upstream not yet in `src/upstreams.json` needs a new entry, as
|
|
406
|
+
above, with the upstream's licence text at `src/licenses/<key>.txt` as its `licenseFile` (never
|
|
407
|
+
`null` here; two keys from one repo may share a file); a port from a listed upstream reuses its
|
|
408
|
+
key. Put
|
|
409
|
+
`{{CREDIT:<key>:<upstream path>}}` on its own line under the purpose blockquote; the render turns
|
|
410
|
+
it into `` *Adapted from [repo](url) (`path`) by author — license, modified.* ``, and for a skill the
|
|
411
|
+
emit adds `skills/<name>/LICENSE-<key>.txt` (an agent is one file, so it gets the line only). A
|
|
412
|
+
skill drawn from two upstreams carries two tokens, as `debug` does. A new entry also needs a
|
|
413
|
+
`` `<key>` `` bullet under README `## 🙏 Credits` — `proseMirrorProblems` gates that list both
|
|
414
|
+
ways. Do it in
|
|
415
|
+
the commit that brings the text in: no gate can find an unmarked port afterwards, because nothing
|
|
416
|
+
distinguishes it from first-party text.
|
|
396
417
|
|
|
397
418
|
Two traps worth knowing before you write the spec:
|
|
398
419
|
|
|
@@ -435,6 +456,88 @@ because a code span is not a link. Measured on 2026-10-08, with the neutral them
|
|
|
435
456
|
footprint: debug's SKILL.md went from 1.64k to 1.18k tokens and rule's from 2.33k to 1.83k
|
|
436
457
|
(chars/4).
|
|
437
458
|
|
|
459
|
+
---
|
|
460
|
+
|
|
461
|
+
## 3bis — Adding a KIT
|
|
462
|
+
|
|
463
|
+
A kit is an opt-in bundle of skills, agents and rules for one stack, off unless an install names
|
|
464
|
+
it with `--kits` ([Kits](concepts/kits.md)). Nothing in the mechanism is specific to one stack.
|
|
465
|
+
|
|
466
|
+
**The manifest is the sole writer of membership.** `src/kits/<kit>.json`:
|
|
467
|
+
|
|
468
|
+
```json
|
|
469
|
+
{
|
|
470
|
+
"description": "One line: what the kit is for.",
|
|
471
|
+
"skills": ["<skill>"],
|
|
472
|
+
"agents": ["<agent>"],
|
|
473
|
+
"rules": "kits/<kit>/rules.md",
|
|
474
|
+
"rulesWordBudget": 300,
|
|
475
|
+
"catalogue": {
|
|
476
|
+
"skills": ["| [<skill>]({{DIR_SKILLS}}/<skill>.md) | when to reach for it |"],
|
|
477
|
+
"agents": ["| [<agent>]({{DIR_AGENTS}}/<agent>.md) | when to delegate to it |"]
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
```
|
|
481
|
+
|
|
482
|
+
- `banned` (optional): strings no member file may contain, in the skill and agent specs, a skill's side files (flat, `skills/<m>/*.md`) and the kit's `rules.md`; `doctor` refuses each hit, naming file and line. A line carrying `<!-- banned: ok -->` is exempt (a rule that names the construct in order to forbid it).
|
|
483
|
+
|
|
484
|
+
`loadKits` (`js/build/source.mjs`) reads every `src/kits/*.json`; `src/kits/` itself never ships
|
|
485
|
+
(`NOT_BUNDLED` in `js/build/render.mjs`). The members stay **flat** in `src/skills/` and
|
|
486
|
+
`src/agents/`, never in a `src/kits/<kit>/skills/` folder: every host's native layer accepts only
|
|
487
|
+
`skills/<x>.md` and `agents/<x>.md` and would drop a nested file silently, and every check that
|
|
488
|
+
enumerates skills would miss it. `src/kits/<kit>/` holds only `rules.md`.
|
|
489
|
+
|
|
490
|
+
**Per-kit cost:**
|
|
491
|
+
|
|
492
|
+
1. **Each member is a skill or an agent first.** §3 applies to it, with these differences:
|
|
493
|
+
- **No row in `AGENT.md.tmpl`.** Its catalogue row, a table row of the same shape, goes in
|
|
494
|
+
the manifest's `catalogue`. With the kit on, the render inserts the skill rows as the last
|
|
495
|
+
rows of the §4 skills table (before the folder-skills list) and the agent rows at the end of
|
|
496
|
+
the §3 agents table, on a host that does not catalogue that kind natively.
|
|
497
|
+
`countTableProblems` checks the template's links and the kits' catalogue rows together
|
|
498
|
+
against the flat specs, and `kitProblems` refuses a catalogue row for a non-member.
|
|
499
|
+
- **No README badge and no `SHIPPED.md` count.** Core counts exclude kit members, so
|
|
500
|
+
skip §3 steps 6 and 7.
|
|
501
|
+
- **Still** a `DESC_<NAME>` in every theme, a `SKILL_CLASS` entry for a skill (the members are
|
|
502
|
+
flat, so `srcStems('skills')` sees them), and a `registry.json` row.
|
|
503
|
+
- **An agent's web glyph, required:** an entry in `GLYPHS`
|
|
504
|
+
(`web/src/components/AgentGlyph.jsx`), then rebuild and commit `web/dist`.
|
|
505
|
+
`web/src/__tests__/agentGlyph.test.jsx` gates every `src/agents/*.md`, kit members included.
|
|
506
|
+
2. **The manifest**, above.
|
|
507
|
+
3. **`src/kits/<kit>/rules.md`**, the kit's rules. The render puts it in the carrier's Kits block,
|
|
508
|
+
after §2, only while the kit is on. It is plain text, not doctrine machinery: no rule ids, no
|
|
509
|
+
per-rule exclusion, no hook-ledger row, and the same text at either footprint.
|
|
510
|
+
`doctor` holds it to the manifest's `rulesWordBudget` (300 when unset).
|
|
511
|
+
4. **Membership and links.** `doctor` (`kitProblems`) refuses a member listed in two kits, a
|
|
512
|
+
core skill listed in a kit, a member with no file or no registry row, a core file that links
|
|
513
|
+
to a kit member (it would dangle in an install without the kit), and a kit file that links to
|
|
514
|
+
another kit's member. Links run kit → core only. A kit's links to its own members do not
|
|
515
|
+
protect them from `--exclude-skills`; its link to a core skill still protects that skill.
|
|
516
|
+
5. **The setup wizard.** It asks one yes/no per kit, and only when at least one kit exists. Each
|
|
517
|
+
shipped kit therefore adds one answer line to the stdin strings in `tests/unit/wizard.test.mjs`,
|
|
518
|
+
and the `wizard-no-kit` job holds that the questions are skipped on a tree with no kit.
|
|
519
|
+
6. **Golden cells**: the matrix (`tests/helpers/matrix/emit.*.json`) carries kit on for `claude` and
|
|
520
|
+
`opencode`, the kit-off baseline (`kits: []`, spelled `--kits none`), and three deletion cells
|
|
521
|
+
(kit on to off). One deletion cell sets `edit` (a map of sandbox path to appended text) so a member
|
|
522
|
+
is the user's own before the kit goes off, and `sovereign` excuses it: the prune keeps it (R6).
|
|
523
|
+
|
|
524
|
+
**What a kit costs an install** — what to weigh before adding one:
|
|
525
|
+
|
|
526
|
+
- **Hooks: zero.** The hook binary never reads a kit, so a kit adds no time to any tool call.
|
|
527
|
+
- **The carrier:** the Kits block. Each kit is measured against its own
|
|
528
|
+
`rulesWordBudget`, not the core carrier ceiling, which stays measured on core alone.
|
|
529
|
+
- **The skill listing:** one description per kit skill, every session, while the kit is on.
|
|
530
|
+
- **An install without the kit: nothing.** Its members are not written, and a default build
|
|
531
|
+
stays byte-identical, with no `Active kits:` line.
|
|
532
|
+
|
|
533
|
+
**Retiring a kit** puts its id in `RETIRED_KIT_IDS` (`js/build/source.mjs`), with the reason
|
|
534
|
+
beside it. An install whose `Active kits:` line names it drops it wherever that line is read back
|
|
535
|
+
(`rebuild-all`, `update`, `migrate`, `diff`, the web console), without failing; `rebuild-all`, `update` and `migrate` print a notice. `doctor` refuses a retired id on a new kit. `none` is
|
|
536
|
+
already there: `--kits none` means no kits.
|
|
537
|
+
|
|
538
|
+
**Kits are not packs.** Never add a kit to `PACK_ORDER`. A missing `Active packs:` line reads as
|
|
539
|
+
every pack, so a kit there would switch itself on in every install built before it existed.
|
|
540
|
+
|
|
438
541
|
|
|
439
542
|
---
|
|
440
543
|
|
|
@@ -12,7 +12,7 @@ description: "The build command to run in a script, a CI job, or a shell with no
|
|
|
12
12
|
geneseed build --emit opencode-global --theme neutral
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
`geneseed build` takes the same flags as the generator `geneseed-build`. `--emit` picks the host and its scope: `files`, `opencode`, `opencode-global`, `claude`, `claude-global`, `bob`, `bob-global`, `openclaude` or `openclaude-global`. A `-global` emit writes into the tool's own config directory. A project emit writes into the repo you name with `--out <repo> --root <repo>`. All the other flags (`--theme`, `--footprint`, `--posture`, `--mode`, `--trust`, `--doctrines`, `--exclude-rules`) are covered in [Choose your setup](choose-your-setup.md) and the two pages after it. `--exclude-skills` leaves skills you never use out of the install; see [Exclusions](../concepts/exclusions.md).
|
|
15
|
+
`geneseed build` takes the same flags as the generator `geneseed-build`. `--emit` picks the host and its scope: `files`, `opencode`, `opencode-global`, `claude`, `claude-global`, `bob`, `bob-global`, `openclaude` or `openclaude-global`. A `-global` emit writes into the tool's own config directory. A project emit writes into the repo you name with `--out <repo> --root <repo>`. All the other flags (`--theme`, `--footprint`, `--posture`, `--mode`, `--trust`, `--doctrines`, `--exclude-rules`) are covered in [Choose your setup](choose-your-setup.md) and the two pages after it. `--exclude-skills` leaves skills you never use out of the install; see [Exclusions](../concepts/exclusions.md). `--kits <kit>` switches on an opt-in kit, and `--kits none` switches every kit off; see [Kits](../concepts/kits.md).
|
|
16
16
|
|
|
17
17
|
To test a build before writing anything, use `geneseed validate` with the same flags. See [Verify](verify.md).
|
|
18
18
|
|
|
@@ -8,7 +8,7 @@ description: "Put the geneseed command on your PATH from a clone."
|
|
|
8
8
|
---
|
|
9
9
|
**Installed from npm? You have nothing to do.** `npm install -g geneseed` already puts `geneseed`, `geneseed-build` and `geneseed-hook` on your `PATH`.
|
|
10
10
|
|
|
11
|
-
From a clone, you call the launcher inside the clone: `./geneseed` (Windows: `.\geneseed.cmd`). To type plain `geneseed` from any folder, link it.
|
|
11
|
+
From a clone, you call the launcher inside the clone: `./geneseed` (Windows: `.\geneseed.cmd`). To type plain `geneseed` from any folder, link it. On macOS and Linux, `./install` does this for you when `geneseed` is not found yet.
|
|
12
12
|
|
|
13
13
|
## macOS and Linux
|
|
14
14
|
|
|
@@ -17,7 +17,7 @@ From a clone, you call the launcher inside the clone: `./geneseed` (Windows: `.\
|
|
|
17
17
|
./geneseed link /usr/local/bin # or another bin folder (may ask for sudo)
|
|
18
18
|
```
|
|
19
19
|
|
|
20
|
-
`link` writes a small shell launcher that runs this clone by its absolute path.
|
|
20
|
+
`link` writes a small shell launcher that runs this clone by its absolute path. If the target folder is not on your `PATH` (macOS zsh does not search `~/.local/bin`), it offers to add it to your shell's startup file: `~/.zshrc` for zsh, `~/.bashrc` for bash on Linux, `~/.bash_profile` for bash on macOS. It appends one marked block, never twice, and `geneseed unlink` removes it. Outside a terminal, or for another shell, it prints the line to add instead. Open a new terminal, then:
|
|
21
21
|
|
|
22
22
|
```
|
|
23
23
|
geneseed # the web console (or the command list), from any folder
|
package/docs/guides/upgrade.md
CHANGED
|
@@ -46,7 +46,7 @@ A rebuild only replaces files the install's manifest says Geneseed owns. It leav
|
|
|
46
46
|
|
|
47
47
|
## Local edits, and the improvements file
|
|
48
48
|
|
|
49
|
-
The agent
|
|
49
|
+
The agent records what it learns about a skill or agent in notes under `notebook/skill-notes/` and `notebook/agent-notes/`, which rebuilds never touch. Edits made to the deployed agent and skill files themselves, by you or by an older harness, are another matter: a rebuild would overwrite those, so **setup, re-theme and upgrade export them first**. When the files they are about to overwrite differ from a fresh render, the differences are written to a markdown **improvements file** in `improvements/`, inside the install's own folder (for the OpenCode global install, `~/.config/opencode/improvements/`). The manifest does not list that folder, so rebuilds never overwrite it and uninstall never removes it.
|
|
50
50
|
|
|
51
51
|
A rebuild also refuses to overwrite a file you edited. The manifest records a fingerprint of every file Geneseed wrote; when a file no longer matches it, the rebuild leaves it alone and prints `kept your edited <file> — delete it to get Geneseed's copy back`. From then on the file is yours and later rebuilds skip it. A file the new version no longer ships is kept the same way, with `(no longer shipped)`. Line-ending changes from a git checkout do not count as edits. Installs made before fingerprints existed are overwritten as before.
|
|
52
52
|
|
|
@@ -58,7 +58,7 @@ geneseed diff --full # with line-level diffs
|
|
|
58
58
|
geneseed diff --out improvements.md # write the improvements file
|
|
59
59
|
```
|
|
60
60
|
|
|
61
|
-
`diff` compares the global OpenCode install by default. Pass `--target <config dir>` to compare another install. A file you replaced with a link to your own copy (a skill folder junctioned or symlinked elsewhere, say) is listed as `linked`: Geneseed never writes through a link, so it is yours and not drift, and it stays out of the improvements file. The improvements file is self-contained. To make the changes permanent, hand it to an agent in a Geneseed clone and ask it to fold them back into `src/`. Then they survive every future build. The web console's **Changes** page exports the same file.
|
|
61
|
+
`diff` compares the global OpenCode install by default. Pass `--target <config dir>` to compare another install. A file you replaced with a link to your own copy (a skill folder junctioned or symlinked elsewhere, say) is listed as `linked`: Geneseed never writes through a link, so it is yours and not drift, and it stays out of the improvements file. `diff` also lists every non-empty self-improvement note, and `--out` copies them into the improvements file; the upgrade export does not fire on notes alone, since a rebuild cannot lose them. The improvements file is self-contained. To make the changes permanent, hand it to an agent in a Geneseed clone and ask it to fold them back into `src/`. Then they survive every future build. The web console's **Changes** page exports the same file.
|
|
62
62
|
|
|
63
63
|
## Moving from a clone to npm
|
|
64
64
|
|
|
@@ -28,6 +28,7 @@ Every word Geneseed uses that you would not find in a general programming glossa
|
|
|
28
28
|
| Posture | — | the relationship register the agent works in (peer, mentor, expert, assistant, artisan) | pairing style |
|
|
29
29
|
| Mode | — | how work gets executed — direct (the agent works every task itself) or foreman (substantial tasks spawn an isolated pipeline) | solo vs. delegating to a sub-team |
|
|
30
30
|
| Footprint | — | how much of the Rules loads inline each turn (full vs lean) | eager vs. lazy loading |
|
|
31
|
+
| Kit | — | an opt-in bundle of skills, agents and rules for one stack, switched on per install with `--kits`; not a doctrine pack | an optional dependency group (`pkg[extra]`) |
|
|
31
32
|
| Loop | — | a requirement worked as small, validated, committed iterations on their own branch, driven by `geneseed loop` | a state machine over a ticket's steps |
|
|
32
33
|
| Iteration | — | one cycle of a loop back to its head; closes into its own commit | one sprint-of-one through a checklist |
|
|
33
34
|
| Brick | — | one node of a loop graph: a prompt for one agent or skill, reporting one of a declared set of outcomes | a step in a runbook |
|
|
@@ -97,7 +97,7 @@ reports `version "21` or higher.
|
|
|
97
97
|
.\geneseed.cmd link
|
|
98
98
|
```
|
|
99
99
|
|
|
100
|
-
On Windows, `link` writes to `%LOCALAPPDATA%\Geneseed\bin` and adds it to your user PATH — only **new** terminals see it, so close and reopen yours.
|
|
100
|
+
On macOS and Linux, `link` offers to add `~/.local/bin` to your shell's startup file when it is not on your PATH; accept, then open a **new** terminal. On Windows, `link` writes to `%LOCALAPPDATA%\Geneseed\bin` and adds it to your user PATH — only **new** terminals see it, so close and reopen yours.
|
|
101
101
|
|
|
102
102
|
**Confirm.**
|
|
103
103
|
|