geneseed 2.0.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 +938 -0
- package/DESIGN.md +1423 -0
- package/LICENSE +21 -0
- package/QUICKSTART.md +48 -0
- package/README.md +336 -0
- package/SETUP.md +1027 -0
- package/SHIPPED.md +70 -0
- package/adapters/bob/README.md +100 -0
- package/adapters/claude-code/README.md +101 -0
- package/adapters/claude-code/settings.json +47 -0
- package/adapters/claude-code/skills/geneseed/SKILL.md +72 -0
- package/adapters/copilot/README.md +76 -0
- package/adapters/opencode/GLOBAL-HARNESS-SPEC.md +434 -0
- package/adapters/opencode/HOW-OPENCODE-LOADS.md +158 -0
- package/adapters/opencode/README.md +582 -0
- package/adapters/opencode/agents/orchestrator.md +25 -0
- package/adapters/opencode/opencode.json +44 -0
- package/adapters/opencode/plugins/geneseed-activity.js +430 -0
- package/adapters/opencode/plugins/geneseed-context.js +876 -0
- package/adapters/opencode/plugins/geneseed-guard.js +290 -0
- package/adapters/opencode/plugins/geneseed-learn.js +396 -0
- package/adapters/opencode/plugins/geneseed-notify.js +142 -0
- package/adapters/opencode/plugins/geneseed-ponytail.js +148 -0
- package/adapters/opencode/plugins/geneseed-workflow.js +183 -0
- package/adapters/opencode/workflows/_runtime.js +277 -0
- package/adapters/opencode/workflows/council.js +64 -0
- package/adapters/opencode/workflows/dispatch.js +89 -0
- package/adapters/opencode/workflows/research-plan-implement.js +43 -0
- package/adapters/opencode/workflows/review.js +57 -0
- package/bin/geneseed-cli.mjs +412 -0
- package/bin/geneseed-hook.mjs +129 -0
- package/bin/geneseed.mjs +1086 -0
- package/docs/declined.md +149 -0
- package/docs/limits.md +270 -0
- package/docs/opencode-plugin-setup.md +64 -0
- package/docs/token-footprint.md +68 -0
- package/docs/web/_groups.json +45 -0
- package/docs/web/about.md +6 -0
- package/docs/web/adapters-claude-code.md +8 -0
- package/docs/web/adapters-opencode-loads.md +8 -0
- package/docs/web/adapters-opencode-spec.md +8 -0
- package/docs/web/adapters-opencode.md +8 -0
- package/docs/web/agents.md +8 -0
- package/docs/web/authoring.md +11 -0
- package/docs/web/autostart.md +9 -0
- package/docs/web/claude-hooks.md +36 -0
- package/docs/web/cli.md +6 -0
- package/docs/web/collaboration.md +27 -0
- package/docs/web/configure-wiki.md +9 -0
- package/docs/web/design.md +7 -0
- package/docs/web/env-knobs.md +9 -0
- package/docs/web/exclusions.md +26 -0
- package/docs/web/first-session.md +28 -0
- package/docs/web/footprint.md +31 -0
- package/docs/web/foreman-mode.md +33 -0
- package/docs/web/glossary.md +6 -0
- package/docs/web/harnesses.md +28 -0
- package/docs/web/headless.md +9 -0
- package/docs/web/ingest-docs.md +9 -0
- package/docs/web/install-paths.md +9 -0
- package/docs/web/install-quick.md +35 -0
- package/docs/web/lsp-overview.md +37 -0
- package/docs/web/mcp-claude-code.md +10 -0
- package/docs/web/mcp-filesystem.md +9 -0
- package/docs/web/mcp-gitlab.md +9 -0
- package/docs/web/mcp-markitdown.md +9 -0
- package/docs/web/mcp-overview.md +34 -0
- package/docs/web/mcp-trouble.md +9 -0
- package/docs/web/mcp-verify.md +9 -0
- package/docs/web/memory.md +7 -0
- package/docs/web/migrate.md +39 -0
- package/docs/web/model.md +20 -0
- package/docs/web/notebook.md +7 -0
- package/docs/web/pipelines.md +24 -0
- package/docs/web/plugin-activity.md +23 -0
- package/docs/web/plugin-context.md +26 -0
- package/docs/web/plugin-guard.md +24 -0
- package/docs/web/plugin-learn.md +27 -0
- package/docs/web/plugin-notify.md +24 -0
- package/docs/web/plugin-ponytail.md +23 -0
- package/docs/web/plugin-setup.md +7 -0
- package/docs/web/plugin-workflow.md +24 -0
- package/docs/web/plugins.md +17 -0
- package/docs/web/project-context.md +9 -0
- package/docs/web/rules.md +8 -0
- package/docs/web/run-anywhere.md +9 -0
- package/docs/web/self-improve.md +8 -0
- package/docs/web/setup-choices.md +39 -0
- package/docs/web/skills.md +8 -0
- package/docs/web/themes-author.md +8 -0
- package/docs/web/themes.md +9 -0
- package/docs/web/token-footprint.md +7 -0
- package/docs/web/trouble.md +38 -0
- package/docs/web/upgrade.md +9 -0
- package/docs/web/verify.md +30 -0
- package/docs/web/wiki.md +7 -0
- package/docs/web/worktree.md +10 -0
- package/docs/web-ui.md +144 -0
- package/docs/wiki.md +43 -0
- package/geneseed +39 -0
- package/geneseed.cmd +34 -0
- package/harness.config.json +6 -0
- package/js/anim.mjs +326 -0
- package/js/catalog.mjs +112 -0
- package/js/checkout.mjs +88 -0
- package/js/cli-table.json +1034 -0
- package/js/cli.mjs +498 -0
- package/js/diff.mjs +384 -0
- package/js/doctor.mjs +1364 -0
- package/js/emit.mjs +1373 -0
- package/js/excludes.mjs +271 -0
- package/js/generate.mjs +379 -0
- package/js/hooks.mjs +1026 -0
- package/js/hosts.mjs +253 -0
- package/js/installs.mjs +378 -0
- package/js/inventory.mjs +175 -0
- package/js/lib/fs.mjs +913 -0
- package/js/lib/proc.mjs +28 -0
- package/js/lib/udiff.mjs +275 -0
- package/js/link.mjs +286 -0
- package/js/mcp.mjs +335 -0
- package/js/memory.mjs +108 -0
- package/js/menu.mjs +118 -0
- package/js/migrate.mjs +251 -0
- package/js/native.mjs +426 -0
- package/js/opencode.mjs +325 -0
- package/js/registry.mjs +110 -0
- package/js/render.mjs +282 -0
- package/js/settings.mjs +924 -0
- package/js/setup.mjs +492 -0
- package/js/status.mjs +281 -0
- package/js/themes.mjs +195 -0
- package/js/tui.mjs +444 -0
- package/js/uninstall.mjs +1137 -0
- package/js/update.mjs +910 -0
- package/js/web/actions.mjs +868 -0
- package/js/web/activity.mjs +284 -0
- package/js/web/api.mjs +873 -0
- package/js/web/docs.mjs +531 -0
- package/js/web/graph.mjs +0 -0
- package/js/web/jobs.mjs +480 -0
- package/js/web/server.mjs +1135 -0
- package/package.json +54 -0
- package/registry.json +474 -0
- package/src/AGENT.md.tmpl +390 -0
- package/src/agents/_template.md +76 -0
- package/src/agents/advocate.md +36 -0
- package/src/agents/architect.md +55 -0
- package/src/agents/developer.md +66 -0
- package/src/agents/docs.md +54 -0
- package/src/agents/empiricist.md +39 -0
- package/src/agents/explorer.md +54 -0
- package/src/agents/framer.md +36 -0
- package/src/agents/historian.md +51 -0
- package/src/agents/operator.md +37 -0
- package/src/agents/pragmatist.md +37 -0
- package/src/agents/reviewer.md +52 -0
- package/src/agents/security.md +57 -0
- package/src/agents/skeptic.md +48 -0
- package/src/agents/steward.md +36 -0
- package/src/agents/tester.md +54 -0
- package/src/agents/user-advocate.md +36 -0
- package/src/agents/visionary.md +36 -0
- package/src/laws/universal.md +387 -0
- package/src/memory/README.md +109 -0
- package/src/memory/gitignore +6 -0
- package/src/modes/README.md +26 -0
- package/src/modes/direct.md +2 -0
- package/src/modes/foreman.md +19 -0
- package/src/notebook/README.md +39 -0
- package/src/notebook/gitignore +7 -0
- package/src/postures/README.md +31 -0
- package/src/postures/artisan.md +14 -0
- package/src/postures/assistant.md +12 -0
- package/src/postures/expert.md +11 -0
- package/src/postures/mentor.md +11 -0
- package/src/postures/peer.md +12 -0
- package/src/skills/_template.md +47 -0
- package/src/skills/brainstorm.md +28 -0
- package/src/skills/clarify.md +28 -0
- package/src/skills/codebase-design.md +44 -0
- package/src/skills/commit.md +48 -0
- package/src/skills/council.md +34 -0
- package/src/skills/crash-course.md +28 -0
- package/src/skills/daydream/.claude-plugin/plugin.json +9 -0
- package/src/skills/daydream/SKILL.md +74 -0
- package/src/skills/daydream/VENDOR.md +25 -0
- package/src/skills/daydream/critic-prompt.md +38 -0
- package/src/skills/daydream/instructions.md +422 -0
- package/src/skills/daydream/synthesizer-prompt.md +41 -0
- package/src/skills/debug.md +37 -0
- package/src/skills/decode.md +28 -0
- package/src/skills/develop.md +29 -0
- package/src/skills/document-project.md +79 -0
- package/src/skills/domain-modeling.md +38 -0
- package/src/skills/drill.md +28 -0
- package/src/skills/feynman.md +26 -0
- package/src/skills/forge-mcp.md +48 -0
- package/src/skills/fresh-eyes.md +29 -0
- package/src/skills/frontend-design.md +58 -0
- package/src/skills/gap-detector.md +27 -0
- package/src/skills/geneseed-code-review.md +33 -0
- package/src/skills/geneseed.md +29 -0
- package/src/skills/git-archaeology.md +47 -0
- package/src/skills/git-rescue.md +68 -0
- package/src/skills/handoff.md +29 -0
- package/src/skills/herdr.md +164 -0
- package/src/skills/ingest.md +49 -0
- package/src/skills/learning-path.md +26 -0
- package/src/skills/migrate.md +45 -0
- package/src/skills/opencode-theme.md +52 -0
- package/src/skills/parallel-agents.md +28 -0
- package/src/skills/pipeline.md +52 -0
- package/src/skills/plan.md +45 -0
- package/src/skills/ponytail.md +29 -0
- package/src/skills/profile.md +58 -0
- package/src/skills/prose.md +42 -0
- package/src/skills/prototype.md +44 -0
- package/src/skills/react-view-transitions/AGENTS.md +955 -0
- package/src/skills/react-view-transitions/README.md +42 -0
- package/src/skills/react-view-transitions/SKILL.md +320 -0
- package/src/skills/react-view-transitions/VENDOR.md +16 -0
- package/src/skills/react-view-transitions/metadata.json +12 -0
- package/src/skills/react-view-transitions/references/css-recipes.md +242 -0
- package/src/skills/react-view-transitions/references/implementation.md +182 -0
- package/src/skills/react-view-transitions/references/nextjs.md +176 -0
- package/src/skills/react-view-transitions/references/patterns.md +262 -0
- package/src/skills/refactor.md +32 -0
- package/src/skills/release.md +43 -0
- package/src/skills/repo-map.md +36 -0
- package/src/skills/research.md +42 -0
- package/src/skills/review-response.md +36 -0
- package/src/skills/roast-me.md +28 -0
- package/src/skills/rule.md +100 -0
- package/src/skills/ship.md +49 -0
- package/src/skills/tdd.md +31 -0
- package/src/skills/tickets.md +44 -0
- package/src/skills/token-report/SKILL.md +76 -0
- package/src/skills/token-report/VENDOR.md +23 -0
- package/src/skills/token-report/scripts/token_report.mjs +1301 -0
- package/src/skills/wayfinder.md +49 -0
- package/src/skills/wiki.md +68 -0
- package/src/skills/workflow.md +38 -0
- package/themes/README.md +69 -0
- package/themes/_TEMPLATE.json +147 -0
- package/themes/biker.json +147 -0
- package/themes/commentator.json +147 -0
- package/themes/cyberpunk.json +147 -0
- package/themes/gamer.json +147 -0
- package/themes/imperial.json +147 -0
- package/themes/joker.json +147 -0
- package/themes/marvin.json +147 -0
- package/themes/mean.json +147 -0
- package/themes/military.json +147 -0
- package/themes/neutral.json +147 -0
- package/themes/opencode/README.md +58 -0
- package/themes/opencode/catppuccin.json +27 -0
- package/themes/opencode/dracula.json +27 -0
- package/themes/opencode/everforest.json +27 -0
- package/themes/opencode/gruvbox.json +27 -0
- package/themes/opencode/kanagawa.json +27 -0
- package/themes/opencode/neon.json +27 -0
- package/themes/opencode/nord.json +27 -0
- package/themes/opencode/rosepine.json +27 -0
- package/themes/opencode/tokyonight.json +27 -0
- package/themes/pirate.json +147 -0
- package/themes/sports.json +147 -0
- package/themes/verstappen.json +147 -0
- package/themes/wizard.json +147 -0
- package/web/dist/assets/About-DX1-VTBP.js +1 -0
- package/web/dist/assets/Activity-Dp9NaXOn.js +1 -0
- package/web/dist/assets/ActivityDetail-HpOBtrXS.js +1 -0
- package/web/dist/assets/Diff-Ct4G3Se8.js +5 -0
- package/web/dist/assets/Doctor-DGjkZFuA.js +1 -0
- package/web/dist/assets/Graph-b8o-S6kv.js +1 -0
- package/web/dist/assets/Harnesses-gr3-aHBF.js +1 -0
- package/web/dist/assets/Laws-DTwF5tTC.js +1 -0
- package/web/dist/assets/Library-BEZscyaQ.js +1 -0
- package/web/dist/assets/Markdown-k_LSLBGq.js +1 -0
- package/web/dist/assets/Profile-DydukTxP.js +1 -0
- package/web/dist/assets/Rules-CIRG4Ldt.js +1 -0
- package/web/dist/assets/Skills-Buoi1IBr.js +1 -0
- package/web/dist/assets/StatusBadge-CE_AJttl.js +1 -0
- package/web/dist/assets/Themes-CI4o3gJC.js +2 -0
- package/web/dist/assets/activity-BCW7e6Cy.js +1 -0
- package/web/dist/assets/audiowide-latin-400-normal-6GFCX7ni.woff2 +0 -0
- 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/hanken-grotesk-latin-400-italic-Bserb8X5.woff2 +0 -0
- package/web/dist/assets/hanken-grotesk-latin-400-normal-BG6hkEXj.woff2 +0 -0
- package/web/dist/assets/hanken-grotesk-latin-500-italic-BGfwwhek.woff2 +0 -0
- package/web/dist/assets/hanken-grotesk-latin-500-normal-DrDcrrxK.woff2 +0 -0
- package/web/dist/assets/hanken-grotesk-latin-600-normal-CIXX6EOa.woff2 +0 -0
- package/web/dist/assets/hanken-grotesk-latin-700-normal-CeQ8H3UY.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-B1PIx7RM.js +1 -0
- package/web/dist/assets/index-BnTQUSUz.js +12 -0
- package/web/dist/assets/index-Ck2iCdaC.js +2 -0
- package/web/dist/assets/index-DUCsDv7z.css +1 -0
- 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/jetbrains-mono-latin-400-normal-V6pRDFza.woff2 +0 -0
- package/web/dist/assets/jetbrains-mono-latin-500-normal-BWZEU5yA.woff2 +0 -0
- package/web/dist/assets/jetbrains-mono-latin-600-normal-C8RAYTDA.woff2 +0 -0
- package/web/dist/assets/marked.esm-JKvyS0Pp.js +46 -0
- 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/react-DOpiTn5v.js +32 -0
- package/web/dist/assets/roman-DkYN0LX9.js +1 -0
- package/web/dist/assets/space-grotesk-latin-400-normal-CJ-V5oYT.woff2 +0 -0
- package/web/dist/assets/space-grotesk-latin-500-normal-lFbtlQH6.woff2 +0 -0
- package/web/dist/assets/space-grotesk-latin-600-normal-DjKNqYRj.woff2 +0 -0
- package/web/dist/assets/space-grotesk-latin-700-normal-RjhwGPKo.woff2 +0 -0
- package/web/dist/assets/space-mono-latin-400-italic-YylcN9Ay.woff2 +0 -0
- package/web/dist/assets/space-mono-latin-400-normal-Rg4St2Dn.woff2 +0 -0
- package/web/dist/assets/space-mono-latin-700-italic-vNvENeTh.woff2 +0 -0
- package/web/dist/assets/space-mono-latin-700-normal-mWgeinG7.woff2 +0 -0
- package/web/dist/icon-maskable.svg +10 -0
- package/web/dist/icon.svg +8 -0
- package/web/dist/index.html +21 -0
- package/web/dist/manifest.webmanifest +14 -0
- package/web/dist/sw.js +40 -0
- package/web/src/pages/Laws.jsx +230 -0
package/SHIPPED.md
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
# 🧬 Geneseed — What's Shipped
|
|
4
|
+
|
|
5
|
+
**A registry of the harness's capabilities and the dated spec behind each.**
|
|
6
|
+
|
|
7
|
+
[← README](README.md) · [Design](DESIGN.md)
|
|
8
|
+
|
|
9
|
+
</div>
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
This page answers "what is actually in the harness, and where is its rationale?"
|
|
14
|
+
The dated `docs/specs/*` files were the *design record* — the problem and the
|
|
15
|
+
decisions behind each feature; this is the *index* over them, marking what has
|
|
16
|
+
landed in the source tree. Specs are working documents: they live git-ignored on
|
|
17
|
+
the authoring machine and are dropped once shipped, so the spec links below are
|
|
18
|
+
historical pointers, not files distributed with the repo.
|
|
19
|
+
|
|
20
|
+
> **On version numbers.** [`harness.config.json`](harness.config.json)'s `version` is a
|
|
21
|
+
> human-readable label only. The canonical identity of an installed harness is the
|
|
22
|
+
> **source fingerprint** stamped in `.geneseed-version` (see `geneseed version`), not the
|
|
23
|
+
> string. Current label: **2.0.0**.
|
|
24
|
+
|
|
25
|
+
> **Spec status audit (2026-06-15).** Every dated spec authored before today was
|
|
26
|
+
> verified against the source tree and confirmed implemented (code + tests + docs);
|
|
27
|
+
> their `**Status:**` headers were flipped from `approved`/`implementing`/`Accepted`/`spec`
|
|
28
|
+
> to `implemented`. The only open spec is the same-day
|
|
29
|
+
> [shell-completion](docs/specs/2026-06-15-shell-completion.md) draft.
|
|
30
|
+
|
|
31
|
+
## Capabilities
|
|
32
|
+
|
|
33
|
+
Every row below is present in the tree today; "Spec" links the design record.
|
|
34
|
+
|
|
35
|
+
| Capability | What it is | Spec |
|
|
36
|
+
| --- | --- | --- |
|
|
37
|
+
| **Themed generator** | One neutral `src/` → 14 themed bundles via `geneseed-build` (zero dependencies); structure stays theme-independent | [DESIGN.md](DESIGN.md) |
|
|
38
|
+
| **Laws / Agents / Skills / Memory / Notebook** | 37 laws, 17 agents, 47 skills, the memory convention, and the agent's sovereign notebook | [notebook](docs/specs/2026-06-11-notebook-sovereign-space.md) · [agent-own-space](docs/specs/2026-06-10-notebook-agent-own-space.md) |
|
|
39
|
+
| **`doctor`** | One check: unresolved tokens, dead/non-hermetic links, theme-key parity, authoring gates, rendered-bundle drift | [theme-aware doctor/diff](docs/specs/2026-06-07-theme-aware-doctor-diff.md) |
|
|
40
|
+
| **`diff` + improvements export** | Deployed-vs-source drift report; export an `improvements.md` back-port | [improvements-export](docs/specs/2026-06-12-improvements-export.md) |
|
|
41
|
+
| **`status` / `version`** | Headless dashboard + fingerprint verdict (no TUI needed) | [status-command](docs/specs/2026-06-07-status-command.md) · [version-and-uninstall](docs/specs/2026-06-07-version-and-uninstall.md) |
|
|
42
|
+
| **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 | [refactor-polish](docs/specs/2026-06-07-tui-refactor-polish.md) · [modern-refresh](docs/specs/2026-06-08-tui-modern-refresh.md) · [windows-tui](docs/specs/2026-06-11-windows-tui.md) |
|
|
43
|
+
| **Web console** | Local browser UI (Dashboard, Library, Graph, Docs, Specs, Changes, Doctor, Themes, Settings), auto-build, in-app docs menu | [web-ui-v2](docs/specs/2026-06-12-web-ui-v2.md) · [web-auto-build](docs/specs/2026-06-12-web-auto-build.md) · [docs-menu](docs/specs/2026-06-13-docs-menu.md) |
|
|
44
|
+
| **OpenCode adapter** | Native agents/skills mapping + plugins (context, learn, guard, workflow, notify, ponytail, activity); global-emit link integrity; JSONC config target | [adapter-features](docs/specs/2026-06-07-opencode-adapter-features.md) · [global-emit](docs/specs/2026-06-07-global-emit-link-integrity.md) · [jsonc-target](docs/specs/2026-06-12-opencode-jsonc-target.md) · [ponytail](docs/specs/2026-06-16-ponytail-minimal-code-mode.md) |
|
|
45
|
+
| **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 | [workflow-primitive](docs/specs/2026-06-09-opencode-workflow-primitive.md) |
|
|
46
|
+
| **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/bob `SubagentStop`); `learn --consolidate` rebuilds the index | [orchestration-memory-upgrade](docs/specs/2026-07-04-orchestration-memory-upgrade.md) |
|
|
47
|
+
| **Wiki integration** | Machine-wide knowledge base (`wiki.jsonc`): eager/lazy loading, conventions, protected folders enforced at the tool boundary | [wiki-knowledge-base](docs/specs/2026-06-11-wiki-knowledge-base.md) |
|
|
48
|
+
| **Collaboration layer** | Negotiated postures (peer/mentor/expert/assistant/artisan, chosen at setup, inlined in AGENT.md), the bidirectional Pact, epistemically-typed memory (`force:` + Bridge rule), and a seed-once `PROFILE.md` identity with a web editor tab and a `profile` skill that interviews the user to draft it | [collaboration-layer](docs/specs/2026-07-12-collaboration-layer.md) |
|
|
49
|
+
| **Rule front door** | Both durable stores enter through the `rule` skill's fork (*standing rule, or fact to remember?* — always asked, never inferred): the memory branch elicits the binding `force` and shows the file before writing, the rule branch pressure-tests by reformulation and a mandatory counter-example. Law VI carries the norm on every host; a `rule-gate` PreToolUse hook (Claude, Bob) and a `geneseed-guard` speed bump (OpenCode) hold it at the tool boundary | [rule-front-door](docs/specs/2026-07-30-rule-front-door.md) |
|
|
50
|
+
| **Entity registry** | `registry.json` records a lifecycle status, version, owner and add-date for every agent and skill in the tree (maintainer-side — never rendered into a bundle, so it costs no session context). `doctor` gates it against `src/` in both directions, sweeps everything that ships for credentials, and holds each vendored skill folder to an immutable upstream commit. The status surfaces as a badge in the web catalog, shown only where it deviates from `approved` | [entity-registry](docs/specs/2026-07-31-entity-registry.md) |
|
|
51
|
+
| **Node runtime + npm package** | The whole harness runs from Node: every command `js/cli-table.json` declares, all four hook verbs, every web-console endpoint (the OS-native folder picker excepted, and declined on purpose) and both generators. What each of them emits is replayed against frozen recordings on every commit, across every theme × host × footprint. It ships as the zero-dependency `geneseed` package (`geneseed`, `geneseed-hook`, `geneseed-build`), so `npx geneseed setup` needs no clone and nothing else installed; `geneseed migrate` moves an existing checkout install across. Node is the only runtime it asks for: the `token-report` skill's own script is `token_report.mjs`, gated over seeded transcripts for all four hosts, and `daydream` and `herdr` call `node -e` | [npx-distribution](docs/specs/2026-08-06-npx-distribution.md) |
|
|
52
|
+
| **Runtime awareness** | MCP discovery, web research, tool-call batching, review discipline baked into the laws | [runtime-awareness](docs/specs/2026-06-07-runtime-awareness-and-review-discipline.md) |
|
|
53
|
+
| **Run from anywhere / uninstall** | `link`/`unlink` onto PATH; global uninstall that keeps the memory store | [version-and-uninstall](docs/specs/2026-06-07-version-and-uninstall.md) |
|
|
54
|
+
|
|
55
|
+
## Workplans (not features)
|
|
56
|
+
|
|
57
|
+
A few `docs/specs/` entries are multi-agent *workplans / audits*, not single features —
|
|
58
|
+
they record direction, and their individual items landed across the capabilities above:
|
|
59
|
+
|
|
60
|
+
- [2026-06-08-harness-perfection-workplan](docs/specs/2026-06-08-harness-perfection-workplan.md)
|
|
61
|
+
- [2026-06-08-opencode-feature-coverage](docs/specs/2026-06-08-opencode-feature-coverage.md)
|
|
62
|
+
- [2026-06-08-tui-professional-workplan](docs/specs/2026-06-08-tui-professional-workplan.md)
|
|
63
|
+
|
|
64
|
+
## Exploratory archive
|
|
65
|
+
|
|
66
|
+
`docs/superpowers/` held early implementation *plans* for the web console (and the
|
|
67
|
+
"Cultivar" re-skin) written in a checkbox-driven planning format. The work they
|
|
68
|
+
describe has since shipped (see the **Web console** row above); like the specs, that
|
|
69
|
+
folder is now a local working area — git-ignored, kept as history on the authoring
|
|
70
|
+
machine only.
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# 🤖 IBM Bob adapter
|
|
2
|
+
|
|
3
|
+
> [← Back to README](../../README.md) · [Setup guide](../../SETUP.md) · [Claude Code adapter](../claude-code/README.md) · [OpenCode adapter](../opencode/README.md)
|
|
4
|
+
|
|
5
|
+
[IBM Bob](https://bob.ibm.com) is **Claude-Code-shaped**: a project `.bob/`
|
|
6
|
+
layer, an `AGENTS.md` instructions file, `SKILL.md` skills, subagents, and a
|
|
7
|
+
`settings.json` that also carries `mcpServers`. So the Bob emit **reuses the
|
|
8
|
+
Claude engine** verbatim — only the marker dir (`.bob`) and the instructions
|
|
9
|
+
filename (`AGENTS.md`) change. There is nothing to install by hand: `geneseed
|
|
10
|
+
setup` (or `geneseed build --emit bob` / `--emit bob-global`) writes everything.
|
|
11
|
+
|
|
12
|
+
This page documents the two verified **Bob-isms** the engine handles, and one
|
|
13
|
+
limitation to be aware of on a shared repo.
|
|
14
|
+
|
|
15
|
+
## What the emit writes
|
|
16
|
+
|
|
17
|
+
### Per-repo (`--emit bob`)
|
|
18
|
+
|
|
19
|
+
- **`AGENTS.md`** at the repo root — auto-loaded by Bob, carries the harness
|
|
20
|
+
preamble as a delimited **managed block** (your prose around it survives a
|
|
21
|
+
re-emit; the block is replaced, never stacked).
|
|
22
|
+
- **`.bob/`** layer:
|
|
23
|
+
- `agents/<name>.md` — the **Claude subagent dialect** verbatim (`name` +
|
|
24
|
+
`description` + a `disallowedTools:` denylist for read-only agents).
|
|
25
|
+
- `skills/<name>/SKILL.md` — **byte-identical** to every other host; skills
|
|
26
|
+
are model-invoked via the `skill` tool.
|
|
27
|
+
- `rules/geneseed.md` — a **slim shadow stub** (see *Bob-ism 1* below).
|
|
28
|
+
- `settings.json` — Geneseed's lifecycle hooks + any `mcpServers` you wire.
|
|
29
|
+
- `memory/`, `notebook/` stores + their indices.
|
|
30
|
+
|
|
31
|
+
### Global (`--emit bob-global` → `~/.bob`, or `$BOB_CONFIG_DIR`)
|
|
32
|
+
|
|
33
|
+
Self-contained under `~/.bob`: agents, skills, `settings.json`, memory and
|
|
34
|
+
notebook. **No `AGENTS.md` is written** — a global `~/.bob/AGENTS.md` is *not*
|
|
35
|
+
auto-loaded by Bob, so the preamble rides `rules/geneseed.md` instead (Bob's
|
|
36
|
+
always-injected channel). An `AGENTS.md` left by an older install is removed on
|
|
37
|
+
re-emit.
|
|
38
|
+
|
|
39
|
+
## Bob-ism 1 — the preamble rides `rules/geneseed.md`
|
|
40
|
+
|
|
41
|
+
Only a **project-root `AGENTS.md`** is auto-loaded; a global one is not. So:
|
|
42
|
+
|
|
43
|
+
- at **global** scope the *full* preamble is written to
|
|
44
|
+
`~/.bob/rules/geneseed.md` (with `../`-prefixed pointers, since the rules file
|
|
45
|
+
sits one level down from the `laws/`/`memory/` stores);
|
|
46
|
+
- at **project** scope the root `AGENTS.md` already carries the preamble, so
|
|
47
|
+
`.bob/rules/geneseed.md` is a **slim stub** whose only job is to *shadow* the
|
|
48
|
+
global rules file by filename.
|
|
49
|
+
|
|
50
|
+
This same-named workspace rule **is** Bob's project-bypasses-global mechanism:
|
|
51
|
+
the workspace copy wins over the global one, so a project install suppresses the
|
|
52
|
+
global voice without re-paying the preamble's per-turn token cost. (Because this
|
|
53
|
+
is filename-shadowing, Bob never needs Claude's `claudeMdExcludes` — see
|
|
54
|
+
*Bob-ism 2*.) A **global** emit warns, non-blocking, when project Bob installs
|
|
55
|
+
already exist, since both preambles may load together in those repos unless
|
|
56
|
+
Bob's precedence is honoured.
|
|
57
|
+
|
|
58
|
+
## Bob-ism 2 — no `claudeMdExcludes`
|
|
59
|
+
|
|
60
|
+
`claudeMdExcludes` is a Claude-Code-only knob with unknown Bob semantics, so Bob
|
|
61
|
+
never gets one; the `rules/geneseed.md` shadow above covers the same
|
|
62
|
+
project-bypasses-global need. An older Bob install that wrote a stale exclude is
|
|
63
|
+
**self-healed** (the entry is removed) on the next emit.
|
|
64
|
+
|
|
65
|
+
## Hooks — best-effort
|
|
66
|
+
|
|
67
|
+
The `settings.json` hooks use the **Claude dialect** (a `PreToolUse:Bash`
|
|
68
|
+
git-gate for Rule XX consent, `SessionStart` context injection, and
|
|
69
|
+
`Stop`/`SubagentStop` learn/memory capture — the same three `harness.py`
|
|
70
|
+
subcommands the OpenCode plugins drive). Bob's hook execution is **unverified**:
|
|
71
|
+
if Bob honours Claude-shaped hooks they fire; if not, they are inert and the
|
|
72
|
+
harness still works fully through the `AGENTS.md`/`rules` preamble prose. This is
|
|
73
|
+
the same behaviour-contract parity every non-OpenCode host gets — the mechanism
|
|
74
|
+
differs, the discipline does not.
|
|
75
|
+
|
|
76
|
+
### ⚠️ Shared-repo caveat
|
|
77
|
+
|
|
78
|
+
At **project** scope the hooks land in `.bob/settings.json`, and Bob documents no
|
|
79
|
+
personal `settings.local.json` variant (Claude uses one precisely to keep this
|
|
80
|
+
out of shared git). Those hook commands name the **per-user hook shim**
|
|
81
|
+
(`~/.geneseed/bin/geneseed-hook`) — no longer this machine's interpreter and
|
|
82
|
+
checkout, but still a path under *your* home, and now also OS-specific (`.cmd` on
|
|
83
|
+
Windows, extensionless elsewhere). If you commit `.bob/settings.json`, a teammate
|
|
84
|
+
still inherits hooks pointing at a path they do not have. **Add
|
|
85
|
+
`.bob/settings.json` to `.gitignore`** on a team repo, or keep the Bob install
|
|
86
|
+
personal/global.
|
|
87
|
+
|
|
88
|
+
## MCP
|
|
89
|
+
|
|
90
|
+
MCP servers are wired at runtime by `geneseed mcp` into the `mcpServers` key of
|
|
91
|
+
the relevant `settings.json` (`.bob/settings.json` per-repo, `~/.bob/settings.json`
|
|
92
|
+
global) — see [`geneseed mcp`](../../README.md) and `rituals/_harness_mcp.py`.
|
|
93
|
+
|
|
94
|
+
## What Bob does not get
|
|
95
|
+
|
|
96
|
+
Bob rides the Claude engine, so — like Claude — it has no OpenCode-only extras:
|
|
97
|
+
colour themes, JS plugins, the saved-workflow runner, the primary-agent
|
|
98
|
+
orchestrator, LSP enablement, or the `/`-command layer. Those capabilities have
|
|
99
|
+
no analogue on a Claude-shaped host; the harness discipline is carried by the
|
|
100
|
+
preamble and skills instead. See the [host matrix](../../README.md#-supported-harnesses).
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# 🪝 Claude Code adapter
|
|
2
|
+
|
|
3
|
+
> [← Back to README](../../README.md) · [Setup guide](../../SETUP.md) · [OpenCode adapter](../opencode/README.md)
|
|
4
|
+
|
|
5
|
+
Optional. Claude Code supports lifecycle **hooks**, so a team using it can make
|
|
6
|
+
parts of the harness fire automatically instead of relying on agent
|
|
7
|
+
self-discipline.
|
|
8
|
+
|
|
9
|
+
## Install
|
|
10
|
+
|
|
11
|
+
Merge [`settings.json`](settings.json) into your repo's `.claude/settings.json`.
|
|
12
|
+
(Not your *user* settings: the hook commands are repo-relative — `node
|
|
13
|
+
bin/geneseed-hook.mjs …` — so at user scope they would fire and fail in every
|
|
14
|
+
repo that doesn't vendor the harness. A generated global install wires
|
|
15
|
+
absolute-path hooks instead — `geneseed setup` does that for you.) It:
|
|
16
|
+
|
|
17
|
+
- on **PreToolUse** (matcher `Bash`), runs `harness git-gate` — a tool-boundary
|
|
18
|
+
backstop for Rule XX (*consent before every commit and push*). The hook inspects the
|
|
19
|
+
command and, when it runs a `git commit` or `git push` (bare, flagged, `-C <path>`,
|
|
20
|
+
or chained like `git add . && git commit … && git push`), returns
|
|
21
|
+
`permissionDecision: "ask"` so Claude Code **prompts on every such call**. Crucially
|
|
22
|
+
this is **not** suppressible by a one-time *"Yes, and don't ask again"*: the allow
|
|
23
|
+
rule that choice writes is only consulted *after* the hook runs, so the hook re-asks
|
|
24
|
+
next time regardless. Every other Bash command (and any unreadable payload) is
|
|
25
|
+
deferred to the normal permission flow — the hook never blocks unrelated work.
|
|
26
|
+
|
|
27
|
+
**Caveat — the GitHub MCP vector.** The hook matches the `Bash` tool only. If your
|
|
28
|
+
session has the GitHub MCP server, an agent can commit/push via `push_files` /
|
|
29
|
+
`create_or_update_file` / `merge_pull_request`, which bypass Bash. To gate those too,
|
|
30
|
+
widen the matcher to `"Bash|mcp__github__.*"` — `git-gate` ignores any payload it
|
|
31
|
+
doesn't recognise as a commit/push, so over-matching the tool surface is harmless.
|
|
32
|
+
- on **SessionStart** (`startup`/`clear` only — a fresh context), prints `AGENT.md`
|
|
33
|
+
so the harness is in context from the first turn, then runs `harness context` to
|
|
34
|
+
**inject the project context** directly into the session — so Rule XVIII is enforced
|
|
35
|
+
by the hook, not left to the agent to remember (lazy entries are only listed). On
|
|
36
|
+
**`resume`** it runs `harness context` *without* re-`cat`ting `AGENT.md`: the resumed
|
|
37
|
+
conversation already carries the harness, so re-injecting the static file each resume
|
|
38
|
+
is pure token waste — only the (possibly changed) project context is refreshed;
|
|
39
|
+
- on **Stop**, runs `harness learn` over the session to capture durable memories.
|
|
40
|
+
Claude Code pipes the hook payload (with the session's `transcript_path`) to the
|
|
41
|
+
command on stdin; `learn` reads that, flattens the transcript, distils new
|
|
42
|
+
memories, and **writes them into the bundle's `memory/` while updating
|
|
43
|
+
`MEMORY.md`** — deduping against what is already stored. No `< /dev/null` and no
|
|
44
|
+
redirection: the stdin payload is the whole point.
|
|
45
|
+
- on **SubagentStop**, runs the *same* `harness learn` command. `learn` reads the
|
|
46
|
+
payload's `hook_event_name`, sees a subagent dispatch, and routes it to the
|
|
47
|
+
per-agent lesson path instead of the shared store: it distils at most one durable
|
|
48
|
+
lesson and appends it to `memory/agents/<agent-name>.md` (capped, newest kept). If
|
|
49
|
+
the payload does not name the subagent, the step is a silent no-op — never a
|
|
50
|
+
crash, never a wrong write. This is the parity twin of the OpenCode learn plugin's
|
|
51
|
+
child-session branch.
|
|
52
|
+
|
|
53
|
+
This step is **opt-in on a model CLI**: set `GENESEED_LLM` (e.g. `claude -p`,
|
|
54
|
+
`llm`, `ollama run …`) for `learn` to actually distil. With it unset the hook is
|
|
55
|
+
a harmless no-op that just prints the prompt. Geneseed never embeds an API key.
|
|
56
|
+
If your bundle's `memory/` is not at `./memory` or `./Harness/memory`, point at
|
|
57
|
+
it with `GENESEED_MEMORY=/abs/path/to/memory`.
|
|
58
|
+
|
|
59
|
+
Adjust the paths if your harness bundle is not at the repository root. On Windows
|
|
60
|
+
the commands are identical (`node bin/geneseed-hook.mjs …`).
|
|
61
|
+
|
|
62
|
+
Why inject rather than instruct? Rule XVIII tells the agent to read the project
|
|
63
|
+
context at startup, but startup rituals are exactly what agents skip. The
|
|
64
|
+
`harness context` hook removes the choice: the eager files' contents land in
|
|
65
|
+
context before the first turn regardless of agent discipline. On tools without
|
|
66
|
+
hooks or plugins, the AGENT.md prose still carries the rule.
|
|
67
|
+
|
|
68
|
+
> **Auto-discovery (parity with OpenCode).** `harness context` no longer needs a
|
|
69
|
+
> hand-filled `context.json`: with no manifest (or just the empty stub) it
|
|
70
|
+
> **auto-discovers the repo's docs by convention** — root `AGENTS.md`/`AGENT.md`/
|
|
71
|
+
> `CLAUDE.md`/`README.md`/`CONTRIBUTING.md` injected eager, `docs/`/`adr/`/monorepo
|
|
72
|
+
> package READMEs listed lazy — using the same convention as the OpenCode context
|
|
73
|
+
> plugin. A `context.json` still overrides, and `"extend": true` layers a manifest
|
|
74
|
+
> on top of discovery.
|
|
75
|
+
|
|
76
|
+
## Bundled skill — `herdr`
|
|
77
|
+
|
|
78
|
+
The canonical herdr skill lives in the Geneseed source tree at
|
|
79
|
+
[`src/skills/herdr.md`](../../src/skills/herdr.md). The build renders it into
|
|
80
|
+
every emit — `.opencode/skills/herdr/SKILL.md` for OpenCode hosts, the
|
|
81
|
+
portable bundle for everyone else — so a deployed harness picks it up
|
|
82
|
+
automatically alongside every other Geneseed skill.
|
|
83
|
+
|
|
84
|
+
A copy is also kept at
|
|
85
|
+
[`.claude/skills/herdr/SKILL.md`](../../.claude/skills/herdr/SKILL.md) so Claude
|
|
86
|
+
Code running **inside this repo** (i.e. people working on Geneseed itself)
|
|
87
|
+
discovers it directly, since the build doesn't write into `.claude/`. The two
|
|
88
|
+
copies share content; keep them in sync when you edit either.
|
|
89
|
+
|
|
90
|
+
Either way, you only need:
|
|
91
|
+
|
|
92
|
+
- the **`herdr` binary** on your `PATH` (install via [herdr.dev](https://herdr.dev)),
|
|
93
|
+
- the agent launched **inside a herdr pane** — the skill self-gates on
|
|
94
|
+
`HERDR_ENV=1` and stays silent everywhere else, so shipping it is harmless
|
|
95
|
+
for users who don't run herdr.
|
|
96
|
+
|
|
97
|
+
## Other tools
|
|
98
|
+
|
|
99
|
+
This adapter is Claude-Code-specific. On tools without hooks, the harness still
|
|
100
|
+
works fully via the instructions in `AGENT.md` — the hooks are a convenience, not
|
|
101
|
+
a requirement.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"hooks": {
|
|
3
|
+
"PreToolUse": [
|
|
4
|
+
{
|
|
5
|
+
"matcher": "Bash",
|
|
6
|
+
"hooks": [
|
|
7
|
+
{ "type": "command", "command": "node bin/geneseed-hook.mjs git-gate" }
|
|
8
|
+
]
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"matcher": "Write|Edit|MultiEdit|NotebookEdit",
|
|
12
|
+
"hooks": [
|
|
13
|
+
{ "type": "command", "command": "node bin/geneseed-hook.mjs rule-gate" }
|
|
14
|
+
]
|
|
15
|
+
}
|
|
16
|
+
],
|
|
17
|
+
"SessionStart": [
|
|
18
|
+
{
|
|
19
|
+
"matcher": "startup|clear",
|
|
20
|
+
"hooks": [
|
|
21
|
+
{ "type": "command", "command": "node -e \"process.stdout.write(require('fs').readFileSync('AGENT.md','utf8'))\"" },
|
|
22
|
+
{ "type": "command", "command": "node bin/geneseed-hook.mjs context" }
|
|
23
|
+
]
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"matcher": "resume",
|
|
27
|
+
"hooks": [
|
|
28
|
+
{ "type": "command", "command": "node bin/geneseed-hook.mjs context" }
|
|
29
|
+
]
|
|
30
|
+
}
|
|
31
|
+
],
|
|
32
|
+
"Stop": [
|
|
33
|
+
{
|
|
34
|
+
"hooks": [
|
|
35
|
+
{ "type": "command", "command": "node bin/geneseed-hook.mjs learn || exit 0" }
|
|
36
|
+
]
|
|
37
|
+
}
|
|
38
|
+
],
|
|
39
|
+
"SubagentStop": [
|
|
40
|
+
{
|
|
41
|
+
"hooks": [
|
|
42
|
+
{ "type": "command", "command": "node bin/geneseed-hook.mjs learn || exit 0" }
|
|
43
|
+
]
|
|
44
|
+
}
|
|
45
|
+
]
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: geneseed
|
|
3
|
+
description: "Interact with a deployed Geneseed harness from any repo — locate the install, read its laws/agents/skills/memory/notebook by name, run status/doctor/diff, distill memory with learn, and manage the local web UI. Use when the user mentions Geneseed, AGENT.md, the harness, an agent operating system, or asks you to inspect, refresh, or read from the deployed bundle."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# geneseed — agent skill
|
|
7
|
+
|
|
8
|
+
Geneseed is a portable AI-agent harness deployed once and used everywhere. This skill lets you talk to whichever deployment is in scope from any repo: read the canonical files (laws, agents, skills, memory, notebook), probe state (status, version, doctor, diff), distill durable memory, and drive the local web UI. The harness is theme-independent in structure — directory and section names are always plain English — so the paths below are stable across themes.
|
|
9
|
+
|
|
10
|
+
## Find the deployed harness before doing anything
|
|
11
|
+
|
|
12
|
+
Pick the first that resolves; remember the path for the rest of the session.
|
|
13
|
+
|
|
14
|
+
1. `command -v geneseed` — if the launcher is on PATH, use it. The CLI knows its own install and is the source of truth for `status`, `version`, `doctor`, etc.
|
|
15
|
+
2. `$GENESEED_HARNESS` — if set, that directory is the deployment root.
|
|
16
|
+
3. `~/.config/opencode/AGENT.md` — the default OpenCode global install.
|
|
17
|
+
4. `./.opencode/AGENT.md` (walking up from `pwd`) — a per-repo OpenCode install.
|
|
18
|
+
5. Any `AGENT.md` in the repo root — a plain bundle install.
|
|
19
|
+
|
|
20
|
+
If none resolve, the user does not have Geneseed deployed here — say so and stop. Do not run `setup`, `build`, or `upgrade` on your own to "fix" this; that is a user decision.
|
|
21
|
+
|
|
22
|
+
A live harness root contains: `AGENT.md`, `agents/<name>.md`, `skills/<name>/SKILL.md`, `memory/MEMORY.md`, `notebook/NOTEBOOK.md`, `themes/`, and (on OpenCode) `plugins/`, `workflows/`, `opencode.jsonc`, `wiki.jsonc`. Laws live as numbered sections inside `AGENT.md`, not as separate files in the deployed bundle — read them from `AGENT.md` directly.
|
|
23
|
+
|
|
24
|
+
## Read-only verbs (safe, no confirmation needed)
|
|
25
|
+
|
|
26
|
+
- **Inventory** — `ls <harness>/agents`, `ls <harness>/skills`, `ls <harness>/memory`, `ls <harness>/notebook`. Counts also appear in `geneseed status`.
|
|
27
|
+
- **Status** — `geneseed status`. One-screen dashboard: theme, install mode, component counts, memory path & fact count, version fingerprint, whether `AGENT.md` is present, and whether the install matches its source.
|
|
28
|
+
- **Version** — `geneseed version`. Source vs installed fingerprint; `up to date` / `differs` / `unknown source`.
|
|
29
|
+
- **Doctor** — `geneseed doctor`. Health check on every theme + parity + links + drift. Exit 0 means `ok`.
|
|
30
|
+
- **Diff** — `geneseed diff` (or `geneseed diff --out FILE`). Shows local edits the agent has made in the deployed bundle vs the canonical source; the same content the TUI shows under *Review local edits*. Useful to find drift worth back-porting into `src/` of the Geneseed repo.
|
|
31
|
+
- **Prompt** — `geneseed prompt`. Prints the install prompt Geneseed uses to ask an external agent to recreate the bundle by hand. Safe to read; do not pipe it into another agent unless the user asks.
|
|
32
|
+
- **Read a specific piece** — read the file directly:
|
|
33
|
+
- Agent by name: `<harness>/agents/<name>.md`
|
|
34
|
+
- Skill by name: `<harness>/skills/<name>/SKILL.md`
|
|
35
|
+
- Law by number: section `## N. …` inside `<harness>/AGENT.md`
|
|
36
|
+
- Memory fact: `<harness>/memory/<file>.md`; index at `MEMORY.md`
|
|
37
|
+
- Notebook entry: `<harness>/notebook/<file>.md`; index at `NOTEBOOK.md`
|
|
38
|
+
|
|
39
|
+
When the user asks "what does the X skill say" or "what's law VI", read the file directly — do not summarise from memory.
|
|
40
|
+
|
|
41
|
+
## Side-effecting verbs (confirm with the user first)
|
|
42
|
+
|
|
43
|
+
- **`geneseed learn`** — distills the current session into memory under `<harness>/memory/`. Writes new files and may update `MEMORY.md`. Confirm before running, and only at end-of-session or when the user explicitly asks.
|
|
44
|
+
- **`geneseed context`** — refreshes the project-docs context manifest. Touches `context.json` in the current repo. Confirm before running.
|
|
45
|
+
- **`geneseed web start`** / **`stop`** / **`status`** — manages the local web UI daemon on `127.0.0.1:4747` (offline, per-session token). `status` is read-only; `start`/`stop` need user assent. Use `start` only if the user asks to "open the web UI" or similar.
|
|
46
|
+
|
|
47
|
+
## Hard no without explicit user ask
|
|
48
|
+
|
|
49
|
+
These are destructive or scope-changing and must be initiated by the user:
|
|
50
|
+
|
|
51
|
+
- `geneseed setup` — interactive install wizard.
|
|
52
|
+
- `geneseed build` — re-renders the bundle from `src/` (only meaningful inside the Geneseed source repo anyway).
|
|
53
|
+
- `geneseed upgrade` / `bootstrap` / `update` / `sync-self` — pull-and-rebuild from the published source; overwrites the deployed bundle. Local edits are auto-exported to an `improvements/` markdown beside the install before being overwritten, but still: user decision.
|
|
54
|
+
- `geneseed link` / `unlink` — modifies PATH symlinks.
|
|
55
|
+
- `geneseed uninstall` — removes a global or per-repo (project-scoped) install.
|
|
56
|
+
|
|
57
|
+
If the user asks for any of these, run them as requested. Do not run them as a side effect of a more general request.
|
|
58
|
+
|
|
59
|
+
## Common patterns
|
|
60
|
+
|
|
61
|
+
- **"What harness do I have here?"** — `geneseed status` (if launcher on PATH); else resolve via the fallback list and report theme, install mode, path, and version.
|
|
62
|
+
- **"What does the `<X>` skill / agent / law say?"** — read the file directly. For laws, grep `AGENT.md` for `## N\.` or `Law N`.
|
|
63
|
+
- **"Show me what's drifted in my install."** — `geneseed diff`. Offer to write the output to a file (`--out`) if it's long.
|
|
64
|
+
- **"Distill what we did today into memory."** — confirm scope, then `geneseed learn`. Afterwards, `git status` inside the harness dir to show what landed.
|
|
65
|
+
- **"Open the dashboard / web UI."** — `geneseed web start`. Tell the user the URL it printed and that it binds to localhost only.
|
|
66
|
+
- **End-of-session check-in** — if the user is wrapping up and there's something memorable, offer `geneseed learn`; if there are edits the agent made to the deployed bundle, offer `geneseed diff` so they can back-port them.
|
|
67
|
+
|
|
68
|
+
## Notes
|
|
69
|
+
|
|
70
|
+
- The launcher is `./geneseed` in the Geneseed source repo and plain `geneseed` once linked. Inside a non-Geneseed repo, only the linked form is available — if it's not on PATH, you cannot drive the CLI and must fall back to reading the deployed files directly.
|
|
71
|
+
- The deployed bundle's directory and section names are theme-independent; only voice (descriptions, prose, sigils) changes per theme. Don't pattern-match on flavor words.
|
|
72
|
+
- `memory/` and `notebook/` are personal and git-ignored. Anything you write there with `learn` does not leave the user's machine.
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# 🐙 GitHub Copilot adapter
|
|
2
|
+
|
|
3
|
+
> [← Back to README](../../README.md) · [Setup guide](../../SETUP.md) · [Claude Code adapter](../claude-code/README.md) · [OpenCode adapter](../opencode/README.md)
|
|
4
|
+
|
|
5
|
+
[GitHub Copilot](https://docs.github.com/copilot) is the **second Claude-shaped
|
|
6
|
+
host**, and a closer fit than Bob: skills are the same `SKILL.md` dirs (Copilot
|
|
7
|
+
Agent Skills), custom agents are markdown-with-frontmatter, and the repo-root
|
|
8
|
+
`AGENTS.md` is auto-loaded. So the Copilot emit **reuses the Claude engine** with
|
|
9
|
+
a `host="copilot"` flag. Nothing to install by hand: `geneseed setup` (or
|
|
10
|
+
`geneseed build --emit copilot` / `--emit copilot-global`) writes everything.
|
|
11
|
+
|
|
12
|
+
Copilot is a **deliberately reduced host** — it has no hook mechanism — so this
|
|
13
|
+
page is mostly about *what it does not automate* and why the harness still holds.
|
|
14
|
+
|
|
15
|
+
## What the emit writes
|
|
16
|
+
|
|
17
|
+
### Per-repo (`--emit copilot`)
|
|
18
|
+
|
|
19
|
+
- **`AGENTS.md`** at the repo root — auto-loaded by the Copilot CLI, the coding
|
|
20
|
+
agent, and VS Code agent mode. Carries the preamble as a managed block.
|
|
21
|
+
- **`.github/`** layer (Copilot's *shared* repo config surface):
|
|
22
|
+
- `agents/<name>.agent.md` — Copilot's **custom-agent dialect** (`.agent.md`
|
|
23
|
+
extension; a `tools:` **allowlist**, not Claude's denylist — a read-only
|
|
24
|
+
agent lists the tool ids it keeps: `read, search, todo, agent`, plus
|
|
25
|
+
`execute` only when the spec opts in with `<!-- bash: allow -->`). Sibling
|
|
26
|
+
agent links are rewritten to the `.agent.md` filename.
|
|
27
|
+
- `skills/<name>/SKILL.md` — **byte-identical** to every other host.
|
|
28
|
+
|
|
29
|
+
Writing into the shared `.github/` dir is safe because the engine's manifest +
|
|
30
|
+
claim-on-create machinery never touches a file it doesn't own — your own
|
|
31
|
+
workflows, agents, and skills there are never clobbered, and uninstall removes
|
|
32
|
+
only manifest-owned files.
|
|
33
|
+
|
|
34
|
+
### Personal / global (`--emit copilot-global` → `~/.copilot`, or `$COPILOT_CONFIG_DIR`)
|
|
35
|
+
|
|
36
|
+
- **`copilot-instructions.md`** — the Copilot CLI auto-loads this in every repo;
|
|
37
|
+
the preamble rides it as a managed block. (Unlike Bob, Copilot *has* a real
|
|
38
|
+
personal instructions carrier, so no rules-folder workaround is needed.)
|
|
39
|
+
- `agents/<name>.agent.md` + `skills/` under `~/.copilot`.
|
|
40
|
+
|
|
41
|
+
## No hooks — the reduced-host reality
|
|
42
|
+
|
|
43
|
+
Copilot has **no `settings.json` and no lifecycle-hook mechanism**, so the whole
|
|
44
|
+
settings/hooks/excludes stage is skipped. Concretely, Copilot does **not** get:
|
|
45
|
+
|
|
46
|
+
- **automated context injection** — Rule XVIII's project-context load falls back
|
|
47
|
+
to the preamble instructing the agent to read the docs itself;
|
|
48
|
+
- **automated memory / learn write-back** — no `Stop`/`SubagentStop` hook; the
|
|
49
|
+
memory convention rides the preamble's instructions (the agent writes its own
|
|
50
|
+
memories) rather than a session-end distiller;
|
|
51
|
+
- **the git-gate consent backstop** — Rule XX (*consent before every commit and
|
|
52
|
+
push*) is enforced by the **preamble prose only**, not at the tool boundary.
|
|
53
|
+
There is no hook to force the prompt;
|
|
54
|
+
- **sovereign-repo excludes** — Copilot documents no exclude/shadow mechanism
|
|
55
|
+
(nothing like Claude's `claudeMdExcludes` or Bob's same-named workspace rule),
|
|
56
|
+
so a global install's `copilot-instructions.md` and a repo's own `AGENTS.md`
|
|
57
|
+
simply **stack**. A global emit warns, non-blocking, when project Copilot
|
|
58
|
+
installs already exist.
|
|
59
|
+
|
|
60
|
+
None of this is a build gap — it is Copilot's ceiling. The harness still applies
|
|
61
|
+
in full: every Rule, agent, and skill is present; only the *automation* of a few
|
|
62
|
+
Rules degrades to instruction-only. This is behaviour-contract parity, the same
|
|
63
|
+
principle every non-OpenCode host follows.
|
|
64
|
+
|
|
65
|
+
## MCP
|
|
66
|
+
|
|
67
|
+
MCP servers are wired at runtime by `geneseed mcp` into `~/.copilot/mcp-config.json`
|
|
68
|
+
(with a `tools` allowlist) — see `rituals/_harness_mcp.py`.
|
|
69
|
+
|
|
70
|
+
## What Copilot does not get
|
|
71
|
+
|
|
72
|
+
As a Claude-shaped host Copilot has none of the OpenCode-only extras (colour
|
|
73
|
+
themes, JS plugins, workflow runner, primary-agent, LSP, `/`-commands), **and**
|
|
74
|
+
— uniquely among the four hosts — none of the hook-driven automation Claude and
|
|
75
|
+
Bob get. See the [host matrix](../../README.md#-supported-harnesses) for the full
|
|
76
|
+
comparison.
|