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
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
group: concepts
|
|
3
|
+
order: 13
|
|
4
|
+
title: "Agent pipelines"
|
|
5
|
+
kind: "concept"
|
|
6
|
+
link: {"hash": "#/section/agents", "label": "Browse the agents →"}
|
|
7
|
+
---
|
|
8
|
+
An **agent pipeline** is the isolated crew that [foreman mode](#/docs/foreman-mode) spawns for a substantial task. Where [agents](#/section/agents) are capability specialists you delegate to one at a time, a pipeline chains them into a single, self-contained unit of work that runs apart from your session.
|
|
9
|
+
|
|
10
|
+
### The default crew
|
|
11
|
+
|
|
12
|
+
- **analyst** — turns the request into a concrete plan and acceptance criteria.
|
|
13
|
+
- **developer** — implements against that plan.
|
|
14
|
+
- **tester** — exercises the result and gates the outcome.
|
|
15
|
+
|
|
16
|
+
The foreman adds whatever other specialists the task calls for — a reviewer, a security pass, a docs writer — routing each subtask to the agent that owns it.
|
|
17
|
+
|
|
18
|
+
### Isolated, and gated on green
|
|
19
|
+
|
|
20
|
+
A pipeline runs in its own context so the main session stays free to keep answering you, and it **merges only once its own tests and lint pass** — a crew that can't get to green reports back rather than landing broken work. It's the same *decompose → route to the owning specialist → converge* shape the saved workflow runner uses, but driven live by the foreman rather than a pre-written script.
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
**Related:** [Foreman mode](#/docs/foreman-mode) · [Agents](#/section/agents)
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
group: plugins
|
|
3
|
+
order: 7
|
|
4
|
+
title: "geneseed-activity"
|
|
5
|
+
kind: "concept"
|
|
6
|
+
---
|
|
7
|
+
Feeds this console's **Activity** view: writes one small JSON file per session (`activity/<session_id>.json` beside the OpenCode config) recording what the harness is *doing* — current phase, model, token and cost totals, turn-elapsed, files touched, the plan, and the last error. The web server reads and prunes those files; writer and reader only ever meet on the filesystem, so a crash on either side never blocks a session.
|
|
8
|
+
|
|
9
|
+
- **One entry per top-level session** — sub-agent child sessions and the learn plugin's throwaway distil sessions are skipped.
|
|
10
|
+
- **Self-cleaning** — the reader prunes entries whose process is dead or whose timestamp went stale, so a crashed writer's file disappears on its own.
|
|
11
|
+
|
|
12
|
+
### Install
|
|
13
|
+
|
|
14
|
+
Installs with the other plugins in one step — see [Plugin setup](#/docs/plugin-setup).
|
|
15
|
+
|
|
16
|
+
### Configure
|
|
17
|
+
|
|
18
|
+
- `GENESEED_ACTIVITY=off` — hard kill switch at startup.
|
|
19
|
+
- The **Activity** page's toggle writes a `.geneseed-activity` flag file read per event — takes effect without restarting OpenCode.
|
|
20
|
+
|
|
21
|
+
### Verify
|
|
22
|
+
|
|
23
|
+
Start a session, then open **Activity** in this console — a card for the session appears. `GENESEED_DEBUG=1` logs each write as `[geneseed-activity] …` to stderr.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
group: plugins
|
|
3
|
+
order: 1
|
|
4
|
+
title: "geneseed-context"
|
|
5
|
+
kind: "concept"
|
|
6
|
+
---
|
|
7
|
+
Enforces **Law XVIII** (*Load the Project Context*) by injection, not instruction: on `session.created` it auto-discovers the repo's docs by convention and injects the `eager` ones before your first turn, so the harness needs **zero per-repo files**.
|
|
8
|
+
|
|
9
|
+
- **Eager** (injected in full, budget-capped): root `AGENTS.md` / `AGENT.md` / `CLAUDE.md` / `.cursorrules`, `README.md`, `CONTRIBUTING.md`.
|
|
10
|
+
- **Lazy** (path + first heading, read on demand): `docs/`, `doc/`, `architecture/`, `adr/`, monorepo `packages/*/README.md`, other root `*.md`. `node_modules`, `.git`, `dist`, `build` are never scanned.
|
|
11
|
+
- It re-pushes eager docs on `session.compacting` so context survives a summarised long session, and carries your machine wiki (`wiki.jsonc`) on the same budgets.
|
|
12
|
+
|
|
13
|
+
### Install
|
|
14
|
+
|
|
15
|
+
Installs with the other plugins in one step — see [Plugin setup](#/docs/plugin-setup).
|
|
16
|
+
|
|
17
|
+
### Configure
|
|
18
|
+
|
|
19
|
+
- `GENESEED_CONTEXT` — path to an explicit `context.json` manifest (or drop `.harness/context.json` in the repo) to take control: same schema, plus glob `path`s, `load: exclude`, and `"extend": true` to layer on top of discovery.
|
|
20
|
+
- `GENESEED_EAGER_FILE_KB` (default 16) / `GENESEED_EAGER_TOTAL_KB` (default 48) — budget caps; an oversized eager file is demoted to a lazy listing, never silently truncated.
|
|
21
|
+
- `GENESEED_CONTEXT_VISIBLE=1` — force the visible `PROJECT CONTEXT` block instead of the invisible per-request transform.
|
|
22
|
+
- `GENESEED_CONTEXT_INJECT=off` — disable injection entirely (falls back to the soft AGENT.md Law).
|
|
23
|
+
|
|
24
|
+
### Verify
|
|
25
|
+
|
|
26
|
+
Start a session with `GENESEED_DEBUG=1` set — the plugin logs what it discovered and injected to stderr. Silence means it didn't load: re-check the filename and that the path is exactly the plugins dir above.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
group: plugins
|
|
3
|
+
order: 3
|
|
4
|
+
title: "geneseed-guard"
|
|
5
|
+
kind: "concept"
|
|
6
|
+
---
|
|
7
|
+
Enforces the safety Laws at the tool boundary (`tool.execute.before`) — the same *enforce by injection, don't just instruct* stance as the context plugin. High-confidence patterns only, so legitimate work is never caught:
|
|
8
|
+
|
|
9
|
+
- **Blocks** — writes to private-key / credential files (**Law I**), catastrophic shell like `rm -rf /` (**Law IV**), and any mutation under a declared wiki's `protected` folders (AGENT.md §7, from `wiki.jsonc`).
|
|
10
|
+
- **Warns** (logged, allowed) — `.env` writes and force-push.
|
|
11
|
+
- **Speed-bumps** — the *first* write to `user-rules.md` or a memory file is refused, naming **Law VI**: a standing rule or a durable fact is the user's call, settled through the rule skill. A re-issued write goes through, so a legitimate write is never trapped. (On Claude Code and Bob the same guard is a `geneseed-hook rule-gate` hook, which can *ask* the user instead of refusing — OpenCode's `tool.execute.before` has no ask tier.)
|
|
12
|
+
|
|
13
|
+
### Install
|
|
14
|
+
|
|
15
|
+
Installs with the other plugins in one step — see [Plugin setup](#/docs/plugin-setup). The `protected` wiki folders are read from `wiki.jsonc` (`GENESEED_WIKI` → `$GENESEED_HARNESS/wiki.jsonc` → beside the install).
|
|
16
|
+
|
|
17
|
+
### Configure
|
|
18
|
+
|
|
19
|
+
- `GENESEED_GUARD=off` — disable the guard entirely.
|
|
20
|
+
- `GENESEED_GUARD=warn` — downgrade every block to a warning (log, but allow).
|
|
21
|
+
|
|
22
|
+
### Verify
|
|
23
|
+
|
|
24
|
+
Ask the agent to do something the guard blocks (e.g. write to a `.pem` file) — it should be refused with a `[geneseed-guard] blocked: …` message naming the Law.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
group: plugins
|
|
3
|
+
order: 2
|
|
4
|
+
title: "geneseed-learn"
|
|
5
|
+
kind: "concept"
|
|
6
|
+
---
|
|
7
|
+
The runtime-agnostic counterpart of the Claude Code `Stop` hook: on `session.idle` it distils durable memories from the conversation into the bundle's `memory/` dir and maintains `MEMORY.md`, deduping against what's already stored — exactly what `geneseed learn` does, but self-contained in JS, so no Python and no model CLI are required.
|
|
8
|
+
|
|
9
|
+
It distils with the **same model the session already used** (read from the transcript), inheriting your OpenCode provider config — no API key, nothing to set. Trivial sessions are skipped and any error is swallowed, so it never blocks a session.
|
|
10
|
+
|
|
11
|
+
### Install
|
|
12
|
+
|
|
13
|
+
Installs with the other plugins in one step — see [Plugin setup](#/docs/plugin-setup).
|
|
14
|
+
|
|
15
|
+
### Configure — where it writes
|
|
16
|
+
|
|
17
|
+
Memories land in the first location that resolves:
|
|
18
|
+
|
|
19
|
+
1. `GENESEED_MEMORY` — an explicit memory dir;
|
|
20
|
+
2. `$GENESEED_HARNESS/memory` (or `/anamnesis` for the imperial theme);
|
|
21
|
+
3. `./memory` or `./Harness/memory` when the bundle lives in the project.
|
|
22
|
+
|
|
23
|
+
Because the bundle is global, set `GENESEED_HARNESS` once to its absolute path so the plugin always writes to the same store no matter where you launch OpenCode. If it can't read the session's model from the transcript, set a fallback `GENESEED_MODEL=provider/model`.
|
|
24
|
+
|
|
25
|
+
### Verify
|
|
26
|
+
|
|
27
|
+
Start a session, do a little work, end it. On `session.idle` the plugin logs `[geneseed-learn] wrote N memory file(s): …` or a skip reason to stderr. Total silence means it didn't load.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
group: plugins
|
|
3
|
+
order: 5
|
|
4
|
+
title: "geneseed-notify"
|
|
5
|
+
kind: "concept"
|
|
6
|
+
---
|
|
7
|
+
Pings the OS when the agent finishes a turn, so you can start a long run, walk away, and be called back when it's your move again. It hooks `session.idle` like the learn plugin.
|
|
8
|
+
|
|
9
|
+
- **Anti-spam:** only fires when the turn actually took a while — the gap between the session's last user prompt and now must exceed `GENESEED_NOTIFY_MIN_SECONDS` (default 30). Native subagent child sessions and the learn plugin's throwaway distil sessions are skipped.
|
|
10
|
+
- **Native, dependency-free:** macOS `osascript`, Linux `notify-send` (libnotify), Windows a PowerShell balloon. Spawned detached; any failure is swallowed, so it never blocks a session.
|
|
11
|
+
|
|
12
|
+
### Install
|
|
13
|
+
|
|
14
|
+
Installs with the other plugins in one step — see [Plugin setup](#/docs/plugin-setup). On Linux, install `libnotify` (for `notify-send`) if nothing appears.
|
|
15
|
+
|
|
16
|
+
### Configure
|
|
17
|
+
|
|
18
|
+
- `GENESEED_NOTIFY=off` — disable it.
|
|
19
|
+
- `GENESEED_NOTIFY_MIN_SECONDS=N` — tune the threshold (`0` notifies on every turn).
|
|
20
|
+
- `GENESEED_NOTIFY_TITLE="…"` — override the title (default `Geneseed`).
|
|
21
|
+
|
|
22
|
+
### Verify
|
|
23
|
+
|
|
24
|
+
With `GENESEED_DEBUG=1`, end a session that ran longer than the threshold — you'll see `[geneseed-notify] notified for …` and a desktop notification.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
group: plugins
|
|
3
|
+
order: 6
|
|
4
|
+
title: "geneseed-ponytail"
|
|
5
|
+
kind: "concept"
|
|
6
|
+
---
|
|
7
|
+
The sustained counterpart to the `ponytail` skill: once you opt in, it appends the laziest-that-works ruleset to the system prompt **every turn**, so the agent doesn't drift back to over-building mid-session, and it persists the level across turns.
|
|
8
|
+
|
|
9
|
+
- **Opt-in:** the mode starts at `off` and injects nothing until you switch it on. Geneseed treats ponytail as a skill, not an always-on Law.
|
|
10
|
+
- **Toggle:** `/ponytail lite|full|ultra|off` (a bare `/ponytail` means `full`). The level is written to `.geneseed-ponytail` beside OpenCode's config and applies from the next turn.
|
|
11
|
+
- **Hooks:** `experimental.chat.system.transform` appends the ruleset; `command.execute.before` records the switch. Every failure is swallowed; on a build without the system-transform hook it simply never injects (the skill still covers the invokable path).
|
|
12
|
+
|
|
13
|
+
### Install
|
|
14
|
+
|
|
15
|
+
Installs with the other plugins in one step — see [Plugin setup](#/docs/plugin-setup).
|
|
16
|
+
|
|
17
|
+
### Configure
|
|
18
|
+
|
|
19
|
+
- `GENESEED_PONYTAIL=lite|full|ultra` — make a level the default for new installs (default `off`, i.e. dormant until asked).
|
|
20
|
+
|
|
21
|
+
### Verify
|
|
22
|
+
|
|
23
|
+
With `GENESEED_DEBUG=1`, run `/ponytail full` — you'll see `[geneseed-ponytail] ponytail full`, and the next turn's replies favour the minimal solution.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
group: plugins
|
|
3
|
+
order: 4
|
|
4
|
+
title: "geneseed-workflow"
|
|
5
|
+
kind: "concept"
|
|
6
|
+
---
|
|
7
|
+
Registers one custom tool, `workflow`, that runs saved, code-driven orchestration scripts — the deterministic counterpart to the model-driven [[council]] / [[parallel-agents]] skills: the script, not the model, drives the control flow.
|
|
8
|
+
|
|
9
|
+
- **Saved scripts only (v1):** the tool loads `<name>.js` from the sibling `workflows/` dir. No model-authored scripts are eval'd.
|
|
10
|
+
- **Call shape:** `workflow({ name, args })` — call with no name to list what's available. Shipped: `council`, `review`, `research-plan-implement`.
|
|
11
|
+
- **Runtime API:** scripts get `agent()`, `parallel()`, `pipeline()`, `phase()`, `log()`, `budget`, `args`. Child work runs as real OpenCode sessions; concurrency is capped at `min(16, cores − 2)`.
|
|
12
|
+
|
|
13
|
+
### Install
|
|
14
|
+
|
|
15
|
+
Installs with the other plugins in one step — see [Plugin setup](#/docs/plugin-setup). The build copies the plugin **and** the sibling `workflows/` dir, so the saved scripts resolve out of the box; a manual `cp` only moves the `*.js`, so copy `adapters/opencode/workflows/` alongside it too.
|
|
16
|
+
|
|
17
|
+
### Configure
|
|
18
|
+
|
|
19
|
+
- `GENESEED_WORKFLOWS_DIR` — override the scripts dir (defaults to `.opencode/workflows/` per-repo, `<config>/workflows/` global).
|
|
20
|
+
- A phase-by-phase trace plus the full result land in `.geneseed/workflow-runs/<runId>.log`; `GENESEED_DEBUG=1` adds stderr logging.
|
|
21
|
+
|
|
22
|
+
### Verify
|
|
23
|
+
|
|
24
|
+
Ask the agent to *"list available workflows"* — it should call `workflow` with no name and return `council`, `review`, `research-plan-implement`.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
group: concepts
|
|
3
|
+
order: 10
|
|
4
|
+
title: "Plugins (OpenCode)"
|
|
5
|
+
kind: "concept"
|
|
6
|
+
harness: "opencode"
|
|
7
|
+
link: {"hash": "#/docs/plugin-context", "label": "One page per plugin →"}
|
|
8
|
+
---
|
|
9
|
+
OpenCode loads {N_PLUGINS} plugins from the deployed bundle:
|
|
10
|
+
|
|
11
|
+
- **geneseed-context** — injects the project's docs *and* your machine wiki at every session start (and after compaction).
|
|
12
|
+
- **geneseed-learn** — distils memory at session end (powers the `learn` skill).
|
|
13
|
+
- **geneseed-guard** — enforces the safety Laws and protected wiki folders at the tool boundary.
|
|
14
|
+
- **geneseed-workflow** — registers the `workflow` tool that runs saved orchestration scripts.
|
|
15
|
+
- **geneseed-notify** — sends a native OS notification when a long run finishes, so you can step away and be called back.
|
|
16
|
+
- **geneseed-ponytail** — holds an opt-in minimal-code mode (`/ponytail lite|full|ultra|off`), injecting the laziest-that-works ruleset every turn so it doesn't drift.
|
|
17
|
+
- **geneseed-activity** — streams what each live session is *doing* (phase, model, tokens, files touched) to this console's Activity view.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
group: concepts
|
|
3
|
+
order: 1
|
|
4
|
+
title: "Rules (Laws)"
|
|
5
|
+
kind: "concept"
|
|
6
|
+
link: {"hash": "#/laws", "label": "Browse the ledger →"}
|
|
7
|
+
---
|
|
8
|
+
{N_LAWS} universal laws the agent obeys — secrets handling, scope discipline, verify-before-assert, surface-failures, context economy, load-the-docs, tool-discovery, non-interactive-shell, and more. Each law is a short markdown file under `src/laws/` and the rendered numbered list lives in `AGENT.md`. They bind regardless of theme: an imperial deploy reads them as *Dictates*, a neutral deploy as *Rules*, but the numbering and the rule itself never move.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
group: howto
|
|
3
|
+
order: 9
|
|
4
|
+
title: "The self-improvement loop"
|
|
5
|
+
kind: "concept"
|
|
6
|
+
link: {"hash": "#/diff", "label": "Open the diff page →"}
|
|
7
|
+
---
|
|
8
|
+
Local edits the agent makes to its own deployed agent/skill files survive the next rebuild. Before `setup`, re-theme, or `upgrade` overwrites them, any drift is auto-exported to a markdown **improvements file** under `improvements/` inside the deployed harness dir — untouched by rebuilds and uninstall. Hand it to an agent in *this* repo to back-port the changes into `src/`. On demand: `geneseed diff --out FILE`, or the **Changes** page in this UI.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
group: start
|
|
3
|
+
order: 1
|
|
4
|
+
title: "Posture & footprint"
|
|
5
|
+
kind: "concept"
|
|
6
|
+
---
|
|
7
|
+
The setup wizard asks four starting parameters. The first, the **theme**, is the *voice* — banner, sigil, prose register — previewed live as you move through the wizard; it never changes structure or rules, so pick whatever reads best to you ([voice vs structure](#/docs/themes)). The other three shape how the agent works and are explained below. All four have safe defaults — accept them and move on, or pick deliberately here. All are set-and-forget: preserved across every rebuild and re-theme, changeable later from **Settings**, the **Harnesses** page, or the wizard.
|
|
8
|
+
|
|
9
|
+
### Posture — the relationship register
|
|
10
|
+
|
|
11
|
+
How the agent works *with you*, fixed at build time so it doesn't drift mid-session:
|
|
12
|
+
|
|
13
|
+
- **peer** *(default)* — candid equal: dense, challenges, no flattery.
|
|
14
|
+
- **mentor** — explains the why, checks understanding.
|
|
15
|
+
- **expert** — maximum density, no basics.
|
|
16
|
+
- **assistant** — precise execution, low initiative; you steer.
|
|
17
|
+
- **artisan** — peer with toolsmith reflexes, terminal-first.
|
|
18
|
+
|
|
19
|
+
Pick **peer** unless you know you want another register. Posture is orthogonal to theme: theme changes the prose, posture changes the relationship.
|
|
20
|
+
|
|
21
|
+
### Mode — how work gets executed
|
|
22
|
+
|
|
23
|
+
How the session runs the work you hand it, fixed at build time:
|
|
24
|
+
|
|
25
|
+
- **direct** *(default)* — the agent works every task itself, turn by turn, exactly as it does today.
|
|
26
|
+
- **foreman** — the session triages incoming tasks: trivial ones get a direct answer, substantial ones spawn an isolated crew (analyst → developer → tester) that reports back and merges only once its tests and lint pass — while the session keeps answering you. Costs more per substantial task (a small crew runs instead of one agent) in exchange for staying responsive.
|
|
27
|
+
|
|
28
|
+
Pick **direct** unless you want the session managing a crew for you. Switch back any time with `--mode direct`.
|
|
29
|
+
|
|
30
|
+
### Footprint — full or lean Rules
|
|
31
|
+
|
|
32
|
+
How much of the Rules `AGENT.md` carries inline every turn. A token-cost dial, not a rules cut — every Rule always applies:
|
|
33
|
+
|
|
34
|
+
- **full** *(default)* — every Rule's text *and* rationale inline. Best when token cost is a non-issue or you run a smaller model.
|
|
35
|
+
- **lean** — one line per Rule plus a pointer to the complete laws file, read on demand. Trims the Rules section by roughly 40% for long sessions or cost-sensitive runs.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
**Deeper:** [The collaboration layer](#/docs/collaboration) · [Footprint (lean vs full)](#/docs/footprint) · **Next:** [Verify it works](#/docs/verify)
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
group: concepts
|
|
3
|
+
order: 3
|
|
4
|
+
title: "Skills"
|
|
5
|
+
kind: "concept"
|
|
6
|
+
link: {"hash": "#/section/skills", "label": "Browse the catalog →"}
|
|
7
|
+
---
|
|
8
|
+
{N_SKILLS} repeatable workflows the agent can invoke by name — from [[brainstorm]], [[clarify]], [[plan]], [[tdd]] and [[debug]] through [[council]], [[research]] and [[ship]] to [[roast-me]]. A skill is a markdown playbook under `src/skills/`; the agent reads it before acting. The catalog link lists every one, live.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
group: extend
|
|
3
|
+
order: 1
|
|
4
|
+
title: "Write a new theme"
|
|
5
|
+
kind: "concept"
|
|
6
|
+
link: {"hash": "#/themes", "label": "Open the theme gallery →"}
|
|
7
|
+
---
|
|
8
|
+
A theme is one JSON file under `themes/` declaring voice tokens only: `BANNER`, `TAGLINE`, `LOADED_SIGIL`, `VOICE`, the core nouns (`LAW(S)`/`AGENT(S)`/`SKILL(S)`/`MEMORY`/`NOTEBOOK`/`WIKI`), the law titles `LEX_*`, the section intros `INTRO_*`, the epigraphs `EPI_*`, the `BENEDICTION`, the `ROAST_PERSONA`, and `DESC_*` blurbs. Copy `themes/neutral.json` and edit. `geneseed build --theme yours` renders it; `doctor` checks for missing tokens.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
group: reference
|
|
3
|
+
order: 3
|
|
4
|
+
title: "Troubleshooting"
|
|
5
|
+
kind: "concept"
|
|
6
|
+
---
|
|
7
|
+
MCP server issues have their own page: [MCP — won't connect?](#/docs/mcp-trouble).
|
|
8
|
+
|
|
9
|
+
### `geneseed: command not found`
|
|
10
|
+
Run `./geneseed link` (macOS/Linux) or `.\geneseed.cmd link` (Windows) from the cloned repo. On Windows, open a new terminal after `link` — the PATH update only applies to fresh shells.
|
|
11
|
+
|
|
12
|
+
<!--harness:opencode-->
|
|
13
|
+
### The agent doesn't load my project docs
|
|
14
|
+
On OpenCode the `geneseed-context` plugin must be installed. Re-run `geneseed setup` or `geneseed build --emit opencode-global`. Verify with `geneseed doctor`.
|
|
15
|
+
<!--/harness-->
|
|
16
|
+
|
|
17
|
+
### `doctor` reports unresolved theme tokens
|
|
18
|
+
A theme JSON is missing a key the templates reference. Compare with `themes/neutral.json` — every key there must exist in your theme. Re-render: `geneseed build --theme <yours>`.
|
|
19
|
+
|
|
20
|
+
### `doctor` reports drift between bundle and src
|
|
21
|
+
A committed `Harness/` snapshot fell behind. Re-render and commit: `geneseed build && git add Harness`. If the drift is intentional local edits, use the **Changes** page to export them as an improvements file and back-port.
|
|
22
|
+
|
|
23
|
+
### Web UI shows 'no deployed harness'
|
|
24
|
+
Run `geneseed setup` to install. The UI works read-only without a deployment but most actions are disabled.
|
|
25
|
+
|
|
26
|
+
### Windows PATH didn't update
|
|
27
|
+
`geneseed.cmd link` writes to `%LOCALAPPDATA%\Geneseed\bin` and adds it to user PATH — but only new shells see it. Close and reopen your terminal.
|
|
28
|
+
|
|
29
|
+
<!--harness:opencode-->
|
|
30
|
+
### Plugin not registering on OpenCode
|
|
31
|
+
Plugins ship in `~/.config/opencode/plugin/` for the global emit. Confirm with `ls ~/.config/opencode/plugin/` — you should see `geneseed-*.js`. If empty, re-run the build with `--emit opencode-global`.
|
|
32
|
+
|
|
33
|
+
### Full `PROJECT CONTEXT` block visible in the terminal
|
|
34
|
+
Either `GENESEED_CONTEXT_VISIBLE=1` (or legacy `GENESEED_CONTEXT_TRANSFORM=0/off`) is set, or your OpenCode build lacks the experimental transform hook and the plugin fell back to visible delivery — run with `GENESEED_DEBUG=1` to see which.
|
|
35
|
+
<!--/harness-->
|
|
36
|
+
|
|
37
|
+
### `could not determine a model`
|
|
38
|
+
Set `GENESEED_MODEL=provider/model` in your environment.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
group: start
|
|
3
|
+
order: 2
|
|
4
|
+
title: "Verify it works"
|
|
5
|
+
kind: "concept"
|
|
6
|
+
---
|
|
7
|
+
Three quick checks confirm everything wired up.
|
|
8
|
+
|
|
9
|
+
### 1. The readiness sigil
|
|
10
|
+
|
|
11
|
+
Open your agent in any repo. The first reply opens with the readiness line — `✅` for neutral, `🧬` for imperial, or your theme's equivalent. If it's missing, the agent isn't pointed at `AGENT.md` — re-check your tool's instructions setting.
|
|
12
|
+
|
|
13
|
+
### 2. The harness itself
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
./geneseed doctor # macOS / Linux
|
|
17
|
+
.\geneseed.cmd doctor # Windows
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Should print `ok`. Failures include unresolved theme tokens, dead links, missing files, or a drifted bundle — each comes with a fix hint. Press the **Run doctor** button above to run it from here.
|
|
21
|
+
|
|
22
|
+
<!--harness:opencode-->
|
|
23
|
+
### 3. Context delivery
|
|
24
|
+
|
|
25
|
+
Start a session with `GENESEED_DEBUG=1` set. The context plugin logs what it discovered and injected; you should see the repo's `README.md` and any docs listed.
|
|
26
|
+
<!--/harness-->
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
Trouble? See [Troubleshooting](#/docs/trouble).
|
package/docs/web/wiki.md
ADDED
package/docs/web-ui.md
ADDED
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
# 🌐 Geneseed — Web Console Guide
|
|
4
|
+
|
|
5
|
+
**Every view in the local browser console, what it shows, and how to drive it.**
|
|
6
|
+
|
|
7
|
+
[← README](../README.md) · [Setup](../SETUP.md) · [What's shipped](../SHIPPED.md)
|
|
8
|
+
|
|
9
|
+
</div>
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
The web console is a local, offline browser UI over your deployed harness — the same
|
|
14
|
+
actions the CLI offers, in a dashboard-first layout with rendered markdown and clickable
|
|
15
|
+
cross-links. It binds to `127.0.0.1` only, ships its build in `web/dist/`, and needs no
|
|
16
|
+
npm at runtime.
|
|
17
|
+
|
|
18
|
+
## Launching
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
geneseed web # serve on http://127.0.0.1:4747 and open the browser
|
|
22
|
+
geneseed web --port 8080 # pick a port
|
|
23
|
+
geneseed web --no-browser # serve without auto-opening
|
|
24
|
+
geneseed web start|stop|status # run/inspect the background daemon
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
A bare `geneseed` opens the console when the environment can show it (interactive TTY +
|
|
28
|
+
GUI browser, not SSH), and otherwise prints the command list. Set `GENESEED_NO_WEB=1` to
|
|
29
|
+
always get the command list.
|
|
30
|
+
|
|
31
|
+
- **Daemon.** `start` runs the server detached and returns your shell; it's a singleton
|
|
32
|
+
(already running ⇒ just reopens the browser). `stop` and the in-page **Stop** button
|
|
33
|
+
both POST a token-guarded `/api/shutdown`; `status` reports the running instance.
|
|
34
|
+
- **Installable (PWA).** A manifest + service worker make it installable as a standalone
|
|
35
|
+
app; immutable assets are cached, while HTML and `/api/*` stay on the network so the
|
|
36
|
+
CSRF token never goes stale.
|
|
37
|
+
- **First run with nothing deployed.** The Dashboard shows an **onboarding wizard**
|
|
38
|
+
(pick a voice → install mode → deploy) instead of a dead end.
|
|
39
|
+
|
|
40
|
+
## Security model
|
|
41
|
+
|
|
42
|
+
Localhost-bound, and **every mutating action is gated by a per-session `X-Geneseed-Token`**
|
|
43
|
+
so other sites can't trigger builds, deletes, or shutdown. Mutating actions (build,
|
|
44
|
+
update, export, restore, memory-delete, uninstall) run in the background and report back
|
|
45
|
+
as toasts (fire-and-notify). Read-only browsing needs no token.
|
|
46
|
+
|
|
47
|
+
## The rail
|
|
48
|
+
|
|
49
|
+
The left rail mirrors the harness's own shape:
|
|
50
|
+
|
|
51
|
+
| Group | Views |
|
|
52
|
+
| --- | --- |
|
|
53
|
+
| **🧬 Harness** | Dashboard · Rules · Library · Graph |
|
|
54
|
+
| **📚 Learn** | Docs · Specs |
|
|
55
|
+
| **🔧 Maintain** | Changes · Doctor |
|
|
56
|
+
| **🎨 Configure** | Harnesses · Themes · Settings |
|
|
57
|
+
| **ℹ️ About** | About |
|
|
58
|
+
|
|
59
|
+
A global **Spotlight** search lives in the topbar — press <kbd>/</kbd> to focus it, type
|
|
60
|
+
to jump to any agent, skill, law, doc, spec, or MCP server; <kbd>↑</kbd>/<kbd>↓</kbd> to
|
|
61
|
+
move, <kbd>Enter</kbd> to open, <kbd>Esc</kbd> to clear. A bottom **Console** drawer
|
|
62
|
+
streams the output of background jobs and keeps their history across reloads.
|
|
63
|
+
|
|
64
|
+
## Views
|
|
65
|
+
|
|
66
|
+
### 🧬 Harness
|
|
67
|
+
|
|
68
|
+
- **Dashboard** (`#/`) — a live readout of what's deployed. Three lenses: **Status**
|
|
69
|
+
(readiness ring, KPI counts of agents/skills/laws/memory, a genome grid, recent
|
|
70
|
+
activity), **Lineage** (a mini cross-link graph), and **Operator** (a searchable table
|
|
71
|
+
of every deployed capability). Headlines reflect the active theme's voice.
|
|
72
|
+
- **Rules** (`#/rules`) — your own standing rules, read from and written to the
|
|
73
|
+
`user-rules.md` beside the deployed AGENT.md (the seed-once file no update ever
|
|
74
|
+
touches). List with scope (user/project) and trial chips, add/edit/retire forms, a
|
|
75
|
+
**Graduate** action that adopts a trial rule for good, and a budget meter that turns
|
|
76
|
+
amber as the always-loaded set gets heavy. Every write carries the fingerprint of the
|
|
77
|
+
content the page last read — if an agent session edited the file meanwhile, the save
|
|
78
|
+
409s and the page reloads instead of clobbering it.
|
|
79
|
+
- **Library** (`#/library`) — browse the harness content: **Laws · Agents · Skills ·
|
|
80
|
+
Memory · Notebook** (plus Wiki/Config). Drill into a section, then an item, to read its
|
|
81
|
+
rendered markdown body and follow its cross-links. On a memory fact, a **Forget this
|
|
82
|
+
fact** control deletes it (token-gated; bare-slug guarded server-side), and a
|
|
83
|
+
**Promote to rule** control turns a recurring lesson into a trial rule in
|
|
84
|
+
`user-rules.md` — provenance recorded, the source fact deleted so it isn't loaded
|
|
85
|
+
twice — landing you on the Rules page.
|
|
86
|
+
- **Graph** (`#/graph`) — the full cross-link constellation across the whole harness:
|
|
87
|
+
every `[[wikilink]]` between agents/skills plus every `Rule N` mention that lands on a
|
|
88
|
+
real law. Hover to isolate a neighbourhood, scroll to zoom, drag to pan, search to
|
|
89
|
+
highlight; orphans dim out. Click a node to open its spec.
|
|
90
|
+
|
|
91
|
+
### 📚 Learn
|
|
92
|
+
|
|
93
|
+
- **Docs** (`#/docs`) — rendered documentation: markdown pages, concept pages, a CLI
|
|
94
|
+
reference (generated from the harness argument parser), and a glossary, grouped into
|
|
95
|
+
Get started / Core concepts / How-to / MCP servers / Plugins / Reference / Deeper.
|
|
96
|
+
- **Specs** (`#/specs`) — the dated implementation specs from `docs/specs/`, each with its
|
|
97
|
+
purpose line, rendered with the same engine as Docs.
|
|
98
|
+
|
|
99
|
+
### 🔧 Maintain
|
|
100
|
+
|
|
101
|
+
- **Changes** (`#/diff`) — the diff between the deployed harness and the source: edited /
|
|
102
|
+
added / missing files with per-file expansion and coloured unified-diff lines. Select
|
|
103
|
+
files to **export an `improvements.md`** back-port, or **restore** them to source.
|
|
104
|
+
- **Doctor** (`#/doctor`) — runs the same health engine as the `doctor` command (every
|
|
105
|
+
theme, parity, links, authoring gates, drift), grouping any problems per check. Re-run
|
|
106
|
+
on demand.
|
|
107
|
+
|
|
108
|
+
### 🎨 Configure
|
|
109
|
+
|
|
110
|
+
- **Harnesses** (`#/harnesses`) — every detected install (host × scope), one row each,
|
|
111
|
+
with per-row **Voice**, **Footprint**, **Posture**, and **Mode** pickers plus
|
|
112
|
+
Install/Apply, an on/off switch, and remove. **Posture** is the relationship register
|
|
113
|
+
(peer/mentor/expert/assistant/artisan — default **peer**); **Mode** is the operating
|
|
114
|
+
register (direct/foreman — default **direct**; foreman triages tasks into isolated
|
|
115
|
+
pipelines instead of working every one itself). Both are orthogonal to voice and to
|
|
116
|
+
each other, picked here or via the setup wizard, and preserved across every rebuild.
|
|
117
|
+
"Deploy to folder…" and "Rebuild all" apply to the whole set. An **Excluded folders**
|
|
118
|
+
card (shown once a global install exists) manages sovereign repos — folders where every
|
|
119
|
+
global harness goes dormant (hooks stay silent, the global preamble never loads);
|
|
120
|
+
add or remove one here, the web mirror of `harness exclude add|remove|list`.
|
|
121
|
+
- **Themes** (`#/themes`) — a gallery of the shipped voices (name, tagline, sigil, accent
|
|
122
|
+
glow). **Apply** a voice to rebuild the deployed harness in that theme; the current one
|
|
123
|
+
is marked.
|
|
124
|
+
- **Settings** (`#/settings`) — a **Console direction** picker (the visual flavour of the
|
|
125
|
+
console) with a **Dashboard layout** control (Auto follows each theme's designed Status
|
|
126
|
+
lens; Cultivar / Greenhouse / Operator force one regardless of skin), the install snapshot
|
|
127
|
+
(deployed/target/theme/version/memory store), a Maintenance card (PATH link/unlink,
|
|
128
|
+
uninstall), an offline package download, and server controls (Stop). Build, update, and MCP
|
|
129
|
+
wiring live in the Harnesses tab.
|
|
130
|
+
|
|
131
|
+
### ℹ️ About
|
|
132
|
+
|
|
133
|
+
- **About** (`#/about`) — project + creator credits and the source link.
|
|
134
|
+
|
|
135
|
+
## Rebuilding the UI
|
|
136
|
+
|
|
137
|
+
The committed `web/dist/` build is what ships. After changing anything under `web/src/`:
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
cd web && npm install && npm run build
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
If `web/dist/` is missing on a fresh clone, `geneseed web` offers to run that build for
|
|
144
|
+
you (answer `Y`); in a non-interactive shell it prints the manual recipe instead.
|
package/docs/wiki.md
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Wiki — your machine's knowledge base
|
|
2
|
+
|
|
3
|
+
The **wiki** is *your* knowledge base — an Obsidian vault, or any folder of
|
|
4
|
+
interlinked markdown — that the agent reads from and writes to as a citizen of
|
|
5
|
+
your own structure. Unlike memory (private, one-fact-per-file, machine-local)
|
|
6
|
+
and the notebook (the agent's sovereign scratch space), the wiki is durable,
|
|
7
|
+
cross-project knowledge **you** own and curate. You declare it once per machine
|
|
8
|
+
in `wiki.jsonc`; nothing about it is committed to a repo.
|
|
9
|
+
|
|
10
|
+
## How it works
|
|
11
|
+
|
|
12
|
+
Each wiki you declare gives the agent:
|
|
13
|
+
|
|
14
|
+
- **entries** — notes that load each session (`eager`) or on demand (`lazy`),
|
|
15
|
+
the same semantics as project context. An entry can name a single note or a
|
|
16
|
+
whole folder (`"."` = the entire vault).
|
|
17
|
+
- **conventions** — the note the agent must read before its first write, so new
|
|
18
|
+
notes match your naming, frontmatter, and folder rules.
|
|
19
|
+
- **inbox** — where the agent drops a note it can't confidently file, instead of
|
|
20
|
+
guessing.
|
|
21
|
+
- **protected** folders — write-blocked at the tool boundary by the guard plugin.
|
|
22
|
+
|
|
23
|
+
## What the agent does with it
|
|
24
|
+
|
|
25
|
+
**Reading.** It starts from your entry notes and navigates by your structure —
|
|
26
|
+
following `[[wikilinks]]` and index notes outward — rather than reading the vault
|
|
27
|
+
wholesale. What it reads is treated as your knowledge, current as of when it was
|
|
28
|
+
written, and verified against the live system before being built on.
|
|
29
|
+
|
|
30
|
+
**Writing.** Durable, reusable, cross-project facts get written back as proper
|
|
31
|
+
citizens of the graph: wikilinked, in your house style, filed where your
|
|
32
|
+
structure says they belong (or the inbox). Session detail stays in memory;
|
|
33
|
+
secrets are never written anywhere. It never restructures the vault or touches
|
|
34
|
+
`protected` folders — moving and renaming your notes is your call.
|
|
35
|
+
|
|
36
|
+
When a memory fact or notebook note hardens into knowledge worth keeping across
|
|
37
|
+
projects, the agent promotes it into the wiki so there's one home for the truth.
|
|
38
|
+
|
|
39
|
+
## Set it up
|
|
40
|
+
|
|
41
|
+
The `wiki` skill drives the read/write procedure. To declare a vault, see the
|
|
42
|
+
**Wiki — your own knowledge base** section of `SETUP.md` for the `wiki.jsonc`
|
|
43
|
+
shape and resolution order. An empty `wikis` list keeps the feature off.
|