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,28 @@
|
|
|
1
|
+
# {{SKILL}}: drill
|
|
2
|
+
|
|
3
|
+
> {{DESC_DRILL}}
|
|
4
|
+
|
|
5
|
+
**Trigger:** the user wants to *practise* a concept until it is reflex rather than have it explained — "drill me on X", "quiz me until it sticks", "don't explain it, make me use it". For a from-zero overview use [crash-course](crash-course.md); for making confusing material click in the first place use [decode](decode.md).
|
|
6
|
+
|
|
7
|
+
## Procedure
|
|
8
|
+
1. Pin the concept and confirm the user wants to be tested, not lectured. Do not explain the concept up front.
|
|
9
|
+
2. Drop them straight into a realistic situation where they would have to use it and would probably make a mistake.
|
|
10
|
+
3. When they make a mistake, withhold the answer. Instead ask the one question that forces them to find where their own reasoning broke.
|
|
11
|
+
4. Reveal the answer only after they have made at least two honest attempts.
|
|
12
|
+
5. Repeat the cycle — new situation each time — until they get it right without hesitation. Then name the variation most likely to catch them out next.
|
|
13
|
+
|
|
14
|
+
## Done when
|
|
15
|
+
- The user works through the situation correctly without hesitation and without being handed the answer.
|
|
16
|
+
|
|
17
|
+
## Self-improvement
|
|
18
|
+
|
|
19
|
+
Close each run with one beat of reflection on the {{SKILL}} itself:
|
|
20
|
+
- A step misled, a needed step was missing, or the trigger fired wrongly — that
|
|
21
|
+
is a flaw in this file. Propose the exact edit (trigger, procedure, or
|
|
22
|
+
done-when) and apply it with the user's assent ({{LAW}} II).
|
|
23
|
+
- A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
|
|
24
|
+
clears {{LAW}} VI's bar: it would change how a future session behaves, and a
|
|
25
|
+
fresh read of the repo would not re-derive it. Update an existing memory over
|
|
26
|
+
adding one; when in doubt, leave it out.
|
|
27
|
+
- No friction, nothing learned — move on; this loop earns no ceremony. Most
|
|
28
|
+
runs end here.
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# {{SKILL}}: feynman
|
|
2
|
+
|
|
3
|
+
> {{DESC_FEYNMAN}}
|
|
4
|
+
|
|
5
|
+
**Trigger:** the user just studied something and wants to find out whether it actually stuck by explaining it back — "let me explain X to you", "check my understanding of X", "I just learned X, did it land?". For routing toward a goal use [learning-path](learning-path.md); for stress-testing a mastery the user already claims, use [gap-detector](gap-detector.md).
|
|
6
|
+
|
|
7
|
+
## Procedure
|
|
8
|
+
1. Have the user explain what they studied as if teaching a ten-year-old.
|
|
9
|
+
2. Interrupt the moment they (a) use jargon they cannot themselves unpack, (b) skip a step in the reasoning, or (c) simplify so far that the explanation becomes wrong. Name which of the three it was each time, and keep them going.
|
|
10
|
+
3. At the end, tell them exactly what those stumbles reveal about what is not yet solid in their understanding, and what to restudy — directly, no flattery.
|
|
11
|
+
|
|
12
|
+
## Done when
|
|
13
|
+
- The user explained the topic through to the end, every jargon/gap/over-simplification was caught and labelled in the moment, and the run ends with a concrete readout of what isn't solid and what to restudy.
|
|
14
|
+
|
|
15
|
+
## Self-improvement
|
|
16
|
+
|
|
17
|
+
Close each run with one beat of reflection on the {{SKILL}} itself:
|
|
18
|
+
- A step misled, a needed step was missing, or the trigger fired wrongly — that
|
|
19
|
+
is a flaw in this file. Propose the exact edit (trigger, procedure, or
|
|
20
|
+
done-when) and apply it with the user's assent ({{LAW}} II).
|
|
21
|
+
- A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
|
|
22
|
+
clears {{LAW}} VI's bar: it would change how a future session behaves, and a
|
|
23
|
+
fresh read of the repo would not re-derive it. Update an existing memory over
|
|
24
|
+
adding one; when in doubt, leave it out.
|
|
25
|
+
- No friction, nothing learned — move on; this loop earns no ceremony. Most
|
|
26
|
+
runs end here.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# {{SKILL}}: forge-mcp
|
|
2
|
+
|
|
3
|
+
> {{DESC_MCP}}
|
|
4
|
+
|
|
5
|
+
**Trigger:** building, extending, or hardening a Model Context Protocol (MCP)
|
|
6
|
+
server — exposing an external API or service to an agent as a set of tools.
|
|
7
|
+
|
|
8
|
+
**Requires:** Node.js/`npx` to run the MCP Inspector — the verification in steps 5–6
|
|
9
|
+
depends on it.
|
|
10
|
+
|
|
11
|
+
## Procedure
|
|
12
|
+
1. Research first ({{LAW}} XVII): read the MCP specification
|
|
13
|
+
(`modelcontextprotocol.io`) and the target service's API docs, then pick the
|
|
14
|
+
SDK — Python (FastMCP) or TypeScript (MCP SDK) — and load its documentation.
|
|
15
|
+
2. Plan the tool surface: list the service's key operations and design
|
|
16
|
+
action-oriented, prefixed tool names. Prefer a few task-shaped tools over one
|
|
17
|
+
thin wrapper per endpoint — a tool is judged by whether an LLM can complete a
|
|
18
|
+
real task with it.
|
|
19
|
+
3. Build the core: an authenticated API client, shared error-handling and
|
|
20
|
+
pagination helpers, and response formatting that returns focused, relevant
|
|
21
|
+
data rather than raw dumps ({{LAW}} XV).
|
|
22
|
+
4. Define each tool's input and output schema (Pydantic or Zod), set the
|
|
23
|
+
annotations (`readOnlyHint`, `destructiveHint`, `idempotentHint`,
|
|
24
|
+
`openWorldHint`), and write error messages that name the specific, actionable
|
|
25
|
+
fix.
|
|
26
|
+
5. Review and test: kill duplication, ensure consistent errors and full type
|
|
27
|
+
coverage, then build and exercise every tool with the MCP Inspector — don't
|
|
28
|
+
assume it works ({{LAW}} III).
|
|
29
|
+
6. Evaluate: pick ~10 realistic, read-only questions that each need multiple tool
|
|
30
|
+
calls and have one verifiable, stable answer; run them and confirm the server
|
|
31
|
+
actually answers them.
|
|
32
|
+
|
|
33
|
+
## Done when
|
|
34
|
+
- The server builds, every tool passes the Inspector, and the evaluation
|
|
35
|
+
questions are answered correctly through the tools — not by guesswork.
|
|
36
|
+
|
|
37
|
+
## Self-improvement
|
|
38
|
+
|
|
39
|
+
Close each run with one beat of reflection on the {{SKILL}} itself:
|
|
40
|
+
- A step misled, a needed step was missing, or the trigger fired wrongly — that
|
|
41
|
+
is a flaw in this file. Propose the exact edit (trigger, procedure, or
|
|
42
|
+
done-when) and apply it with the user's assent ({{LAW}} II).
|
|
43
|
+
- A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
|
|
44
|
+
clears {{LAW}} VI's bar: it would change how a future session behaves, and a
|
|
45
|
+
fresh read of the repo would not re-derive it. Update an existing memory over
|
|
46
|
+
adding one; when in doubt, leave it out.
|
|
47
|
+
- No friction, nothing learned — move on; this loop earns no ceremony. Most
|
|
48
|
+
runs end here.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# {{SKILL}}: fresh-eyes
|
|
2
|
+
|
|
3
|
+
> {{DESC_FRESH_EYES}}
|
|
4
|
+
|
|
5
|
+
**Trigger:** a task is claimed done and the solving session believes the artifact works — before merge or handoff, or when the user asks to "validate", "fresh eyes", "prove it meets the spec", "did this actually solve it", or "independent sign-off", and the cost of a confidently-wrong "done" is high. This re-judges the *result* from zero context — distinct from [geneseed-code-review](geneseed-code-review.md), which reviews a *diff* with full knowledge of the change. For an open-ended quality critique use [roast-me](roast-me.md); for a multi-stance debate over an undecided question use [council](council.md).
|
|
6
|
+
|
|
7
|
+
## Procedure
|
|
8
|
+
1. Capture the firewall input as TWO things and nothing else: (a) the **verbatim original task/spec** — the raw issue or request text, NOT a solver-written summary or "spec card" (a distilled card launders the solving session's framing into the rubric, the very bias this {{SKILL}} exists to defeat), and (b) a pointer to the **final artifact** as it stands — file paths, built output, or the command to run it. If the raw task is too thin to yield acceptance criteria, have the **user** (never the solver) confirm a one-line acceptance bar, then proceed ({{LAW}} III); if it is too fuzzy even for that, this is a judgement call — convene [council](council.md) instead.
|
|
9
|
+
2. Deliberately WITHHOLD everything else and say so in the brief: the diff and changed-files list, the chat transcript, the solver's rationale and commit messages, prior test output, and every "it works because…" claim. Each is a vector for confirmation bias — they transmit the author's conviction, and a validator that inherits it cannot judge independently ({{LAW}} VIII). The validator must re-confront the artifact cold, the way an external recipient would.
|
|
10
|
+
3. Dispatch ONE fresh-context validator whose context starts empty — isolation is structural, not promised — using the [reviewer {{AGENT}}](../{{DIR_AGENTS}}/reviewer.md) (read-only, runs the suite, casts a verdict; NOT the [skeptic](../{{DIR_AGENTS}}/skeptic.md), whose charter forbids running commands and casting verdicts), via the dispatch pattern in [parallel-agents {{SKILL}}](parallel-agents.md), keeping the heavy reading out of the main context ({{LAW}} XV); a cheaper model suffices for the validator unless the spec is subtle. Dispatch **fresh** — never resume a prior subagent session, which re-inherits its context and breaches the firewall. Where the host has no subagent capability, degrade: write the brief to a file and have the user run it in a separate fresh process; only as a last resort run the persona in-session and **stamp the verdict "SOFT ISOLATION — context bleed possible"** so the user discounts it. Never silently pretend a persona equals a fresh agent.
|
|
11
|
+
4. Inside the fresh context, FIRST derive the rubric blind: from the task ALONE — before looking at the artifact — write a numbered list of observable acceptance criteria, each a yes/no test with a stated check method (a command to run, an output to see, a behaviour to exercise), tagged must-have or nice-to-have. FREEZE this list. Deriving it inside the firewall, from the task and not the solution, is what prevents criteria-fitting — the rubric cannot be bent to match what the artifact happens to do.
|
|
12
|
+
5. THEN reveal the artifact and rule each criterion against it under an inverted burden of proof: actively check it — run the command, exercise the behaviour, read the named output ({{LAW}} III — verify by running, never assume) — and record `Cn: PASS | FAIL | UNVERIFIABLE — <evidence: the exact output/behaviour checked>`. Default is NOT-PASS: mark PASS only after actively confirming; a criterion that cannot be checked is UNVERIFIABLE (a finding, not a pass — name the missing evidence). Flag any **Extra** the artifact added beyond the spec, but cut gold-plating both ways — never FAIL the artifact for a requirement the task never asked for. The validator does NOT fix, refactor, or polish; it only rules.
|
|
13
|
+
6. Return the independent verdict: the per-criterion table, then the overall gate — **SATISFIES** (every must-have PASS, no FAIL), **SATISFIES-WITH-GAPS** (must-haves pass, a nice-to-have fails), or **DOES-NOT-SATISFY** (any must-have FAIL or UNVERIFIABLE), listing the failing criteria with evidence. Report "could not find a fault" as not-proven-false, never as "proven correct". Surface it for the user to decide; the gate advises and applies no changes — write no code, push nothing ({{LAW}} IV, {{LAW}} XX). On DOES-NOT-SATISFY, hand the failures to the solver (optionally via [review-response](review-response.md)) and re-run fresh-eyes after the fix rather than letting the original context relitigate the ruling.
|
|
14
|
+
|
|
15
|
+
## Done when
|
|
16
|
+
- A fresh context that never saw the solving session derived the acceptance criteria from the original task alone, froze them before seeing the artifact, ruled each PASS/FAIL/UNVERIFIABLE with evidence by checking the live artifact, and returned an overall gate (SATISFIES / SATISFIES-WITH-GAPS / DOES-NOT-SATISFY) for the user to weigh — or, where no true isolation was possible, the verdict is stamped soft-isolation so it is discounted.
|
|
17
|
+
|
|
18
|
+
## Self-improvement
|
|
19
|
+
|
|
20
|
+
Close each run with one beat of reflection on the {{SKILL}} itself:
|
|
21
|
+
- A step misled, a needed step was missing, or the trigger fired wrongly — that
|
|
22
|
+
is a flaw in this file. Propose the exact edit (trigger, procedure, or
|
|
23
|
+
done-when) and apply it with the user's assent ({{LAW}} II).
|
|
24
|
+
- A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
|
|
25
|
+
clears {{LAW}} VI's bar: it would change how a future session behaves, and a
|
|
26
|
+
fresh read of the repo would not re-derive it. Update an existing memory over
|
|
27
|
+
adding one; when in doubt, leave it out.
|
|
28
|
+
- No friction, nothing learned — move on; this loop earns no ceremony. Most
|
|
29
|
+
runs end here.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# {{SKILL}}: frontend-design
|
|
2
|
+
|
|
3
|
+
> {{DESC_FRONTEND_DESIGN}}
|
|
4
|
+
|
|
5
|
+
**Trigger:** building a new UI or reshaping an existing one, and it should carry a
|
|
6
|
+
deliberate point of view rather than read as a templated default.
|
|
7
|
+
|
|
8
|
+
**Requires:** a way to render and screenshot the result (a browser or the host's
|
|
9
|
+
preview tool) — the second-pass critique in step 6 cannot run without one.
|
|
10
|
+
|
|
11
|
+
## Procedure
|
|
12
|
+
1. Ground it first: name the concrete subject, the audience, and the single job
|
|
13
|
+
this page does. Draw distinctive choices from the subject's own world — its
|
|
14
|
+
materials, instruments, artifacts, and vernacular — and build with real
|
|
15
|
+
content, not lorem.
|
|
16
|
+
2. First pass — write a compact design plan before any code:
|
|
17
|
+
- **Color:** 4–6 named hex values, each with a description.
|
|
18
|
+
- **Type:** a characterful display face used sparingly, a complementary body
|
|
19
|
+
face, and a utility face for captions/data if needed — paired deliberately,
|
|
20
|
+
not your default reach.
|
|
21
|
+
- **Layout:** one-sentence prose plus an ASCII wireframe per section.
|
|
22
|
+
- **Signature:** the single element that embodies this brief.
|
|
23
|
+
3. Open with the hero as thesis: the most characteristic thing in the subject's
|
|
24
|
+
world (headline, image, animation, live demo), not a templated big-number row.
|
|
25
|
+
4. Make structure earn its place — numbered markers (01/02/03) only for genuine
|
|
26
|
+
sequences; cut any device that decorates without encoding information. Deploy
|
|
27
|
+
motion only where it serves the subject; scattered animation reads as
|
|
28
|
+
AI-generated.
|
|
29
|
+
5. Avoid the three tells unless the brief truly calls for them: (a) cream
|
|
30
|
+
`#F4F1EA` + high-contrast serif + terracotta accent; (b) near-black + acid-green
|
|
31
|
+
or vermilion accent; (c) broadsheet hairline rules, zero radius, dense columns.
|
|
32
|
+
6. Second pass — critique against the brief ({{LAW}} III): screenshot the result
|
|
33
|
+
and read it. If any part reads like the generic default you'd produce for any
|
|
34
|
+
similar page, revise it. Spend boldness in one place and keep the rest quiet;
|
|
35
|
+
remove one accessory. Hold the quality floor without announcing it — responsive,
|
|
36
|
+
visible keyboard focus, reduced-motion support.
|
|
37
|
+
7. Treat UI copy as design material, not decoration: end-user's viewpoint, active
|
|
38
|
+
voice, one name per action through the whole flow ("Publish" → "Published").
|
|
39
|
+
Errors explain the fix; empty states invite action. Run the
|
|
40
|
+
[prose {{SKILL}}](../{{DIR_SKILLS}}/prose.md) over the words.
|
|
41
|
+
|
|
42
|
+
## Done when
|
|
43
|
+
- The design makes one justified aesthetic risk specific to this brief, carries no
|
|
44
|
+
templated tells, holds the accessibility floor, and a screenshot critique finds
|
|
45
|
+
nothing that reads as a generic default.
|
|
46
|
+
|
|
47
|
+
## Self-improvement
|
|
48
|
+
|
|
49
|
+
Close each run with one beat of reflection on the {{SKILL}} itself:
|
|
50
|
+
- A step misled, a needed step was missing, or the trigger fired wrongly — that
|
|
51
|
+
is a flaw in this file. Propose the exact edit (trigger, procedure, or
|
|
52
|
+
done-when) and apply it with the user's assent ({{LAW}} II).
|
|
53
|
+
- A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
|
|
54
|
+
clears {{LAW}} VI's bar: it would change how a future session behaves, and a
|
|
55
|
+
fresh read of the repo would not re-derive it. Update an existing memory over
|
|
56
|
+
adding one; when in doubt, leave it out.
|
|
57
|
+
- No friction, nothing learned — move on; this loop earns no ceremony. Most
|
|
58
|
+
runs end here.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# {{SKILL}}: gap-detector
|
|
2
|
+
|
|
3
|
+
> {{DESC_GAP_DETECTOR}}
|
|
4
|
+
|
|
5
|
+
**Trigger:** the user believes they already master a skill or topic and wants that belief stress-tested — "I think I already know X, prove me wrong", "test whether I really understand X", "find the holes in what I know". For routing toward a goal use [learning-path](learning-path.md); for checking freshly-studied material use [feynman](feynman.md).
|
|
6
|
+
|
|
7
|
+
## Procedure
|
|
8
|
+
1. Take the skill the user claims to master. Set the contract plainly: you will try to prove them wrong, and you will not go easy.
|
|
9
|
+
2. Ask five questions that look simple but separate someone who has truly gone deep from someone who has only skimmed — edge cases, "why", the assumption under the rule, the case where the standard answer breaks.
|
|
10
|
+
3. For every answer the user gives, say plainly what it reveals about what is still missing in their foundation. If an answer is shallow, name it as shallow and say what depth would have looked like — no flattery.
|
|
11
|
+
4. Close with the honest verdict: the specific gaps to fill before the mastery claim holds.
|
|
12
|
+
|
|
13
|
+
## Done when
|
|
14
|
+
- All five questions were asked, each answer was met with a direct read of what it exposes, and the run ends with a concrete verdict on the remaining gaps — never empty praise.
|
|
15
|
+
|
|
16
|
+
## Self-improvement
|
|
17
|
+
|
|
18
|
+
Close each run with one beat of reflection on the {{SKILL}} itself:
|
|
19
|
+
- A step misled, a needed step was missing, or the trigger fired wrongly — that
|
|
20
|
+
is a flaw in this file. Propose the exact edit (trigger, procedure, or
|
|
21
|
+
done-when) and apply it with the user's assent ({{LAW}} II).
|
|
22
|
+
- A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
|
|
23
|
+
clears {{LAW}} VI's bar: it would change how a future session behaves, and a
|
|
24
|
+
fresh read of the repo would not re-derive it. Update an existing memory over
|
|
25
|
+
adding one; when in doubt, leave it out.
|
|
26
|
+
- No friction, nothing learned — move on; this loop earns no ceremony. Most
|
|
27
|
+
runs end here.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# {{SKILL}}: geneseed-code-review
|
|
2
|
+
|
|
3
|
+
> {{DESC_CODE_REVIEW}}
|
|
4
|
+
|
|
5
|
+
**Trigger:** reviewing changes before merge, or the user asks for a review.
|
|
6
|
+
|
|
7
|
+
## Procedure
|
|
8
|
+
1. Read the task/issue the change is meant to satisfy.
|
|
9
|
+
2. Get the diff. For a large change, consider dispatching the
|
|
10
|
+
[reviewer {{AGENT}}](../{{DIR_AGENTS}}/reviewer.md) to keep the main context clean.
|
|
11
|
+
3. Pass 1 — correctness: logic errors, edge cases, error handling, race
|
|
12
|
+
conditions. Verify suspect behaviour by running tests, not by assuming.
|
|
13
|
+
4. Pass 2 — quality: duplication, naming, dead code, units that do too much.
|
|
14
|
+
5. Pass 3 — spec fidelity: compare the diff against the task or issue from
|
|
15
|
+
step 1; flag anything asked for but missing, and anything present that was
|
|
16
|
+
never asked for. No spec available → say so and skip the pass.
|
|
17
|
+
6. Write each finding as `file:line — problem — fix`, correctness first.
|
|
18
|
+
|
|
19
|
+
## Done when
|
|
20
|
+
- Findings are reported with a clear verdict: ship / fix-then-ship / block.
|
|
21
|
+
|
|
22
|
+
## Self-improvement
|
|
23
|
+
|
|
24
|
+
Close each run with one beat of reflection on the {{SKILL}} itself:
|
|
25
|
+
- A step misled, a needed step was missing, or the trigger fired wrongly — that
|
|
26
|
+
is a flaw in this file. Propose the exact edit (trigger, procedure, or
|
|
27
|
+
done-when) and apply it with the user's assent ({{LAW}} II).
|
|
28
|
+
- A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
|
|
29
|
+
clears {{LAW}} VI's bar: it would change how a future session behaves, and a
|
|
30
|
+
fresh read of the repo would not re-derive it. Update an existing memory over
|
|
31
|
+
adding one; when in doubt, leave it out.
|
|
32
|
+
- No friction, nothing learned — move on; this loop earns no ceremony. Most
|
|
33
|
+
runs end here.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# {{SKILL}}: geneseed
|
|
2
|
+
|
|
3
|
+
> {{DESC_GENESEED}}
|
|
4
|
+
|
|
5
|
+
**Trigger:** the user mentions Geneseed, the harness, `AGENT.md`, or asks you to inspect, read from, or refresh the deployed bundle — or you need to know what {{LAWS}}, {{AGENTS}}, or {{SKILLS}} are available in the current install.
|
|
6
|
+
|
|
7
|
+
## Procedure
|
|
8
|
+
1. Locate the deployment. Try in order: `command -v geneseed` (use the launcher if found); `$GENESEED_HARNESS`; `$OPENCODE_CONFIG_DIR`; `~/.config/opencode/AGENT.md`; `.opencode/AGENT.md` walking up from `pwd`; any `AGENT.md` at the repo root. Stop and say so if none resolves — do not run `setup`, `build`, or `upgrade` to "fix" this.
|
|
9
|
+
2. For state — install mode, theme, counts, version fingerprint, drift — prefer the CLI: `geneseed status`, `geneseed version`, `geneseed doctor`, `geneseed diff`. All read-only and cheap ({{LAW}} XV).
|
|
10
|
+
3. To read a specific piece, read the file directly rather than re-deriving from prose ({{LAW}} III): `<harness>/agents/<name>.md`, `<harness>/skills/<name>/SKILL.md`, `<harness>/memory/<file>.md`, `<harness>/notebook/<file>.md`. {{LAWS}} live as numbered `## N. …` sections inside `<harness>/AGENT.md`.
|
|
11
|
+
4. Side-effecting verbs need explicit assent ({{LAW}} XX): `geneseed learn` (writes to {{MEMORY}}), `geneseed context` (refreshes the project's `context.json`), `geneseed web start|stop` (the local browser UI on `127.0.0.1`). `geneseed web status` is read-only.
|
|
12
|
+
5. Never run `setup`, `build`, `upgrade`, `bootstrap`, `update`, `sync-self`, `link`, `unlink`, or `uninstall` as a side effect — these are scope-changing and only run when the user explicitly asks ({{LAW}} II).
|
|
13
|
+
6. The bundle's directory and section names are theme-independent (plain English everywhere); only voice and prose change per theme. Don't pattern-match on flavour words to find files.
|
|
14
|
+
|
|
15
|
+
## Done when
|
|
16
|
+
- The user's question about the deployed harness is answered from the live install — file paths or CLI output — not from recall.
|
|
17
|
+
|
|
18
|
+
## Self-improvement
|
|
19
|
+
|
|
20
|
+
Close each run with one beat of reflection on the {{SKILL}} itself:
|
|
21
|
+
- A step misled, a needed step was missing, or the trigger fired wrongly — that
|
|
22
|
+
is a flaw in this file. Propose the exact edit (trigger, procedure, or
|
|
23
|
+
done-when) and apply it with the user's assent ({{LAW}} II).
|
|
24
|
+
- A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
|
|
25
|
+
clears {{LAW}} VI's bar: it would change how a future session behaves, and a
|
|
26
|
+
fresh read of the repo would not re-derive it. Update an existing memory over
|
|
27
|
+
adding one; when in doubt, leave it out.
|
|
28
|
+
- No friction, nothing learned — move on; this loop earns no ceremony. Most
|
|
29
|
+
runs end here.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# {{SKILL}}: git-archaeology
|
|
2
|
+
|
|
3
|
+
> {{DESC_GIT_ARCHAEOLOGY}}
|
|
4
|
+
|
|
5
|
+
**Trigger:** you need to learn something *from* the history — when a regression was
|
|
6
|
+
introduced, who last touched a line and why, or where a symbol or string entered the
|
|
7
|
+
codebase. Read-only: this {{SKILL}} investigates, it does not change history (to repair
|
|
8
|
+
or rewrite, use git-rescue.md; to write a new commit, use commit.md).
|
|
9
|
+
|
|
10
|
+
## Procedure
|
|
11
|
+
1. State the question precisely before touching git: *when did it break*, *why does
|
|
12
|
+
this code exist*, or *where did this string/symbol come from*. The question picks
|
|
13
|
+
the lens.
|
|
14
|
+
2. **"When did it break"** → `git bisect`. Find a known-good and known-bad commit, then
|
|
15
|
+
`git bisect start <bad> <good>`. Drive it with `git bisect run <cmd>` when the test
|
|
16
|
+
is scriptable — a non-zero exit marks bad — otherwise mark each step by hand. Read
|
|
17
|
+
the actual command output at each step; never assume a result (universal {{LAW}} III).
|
|
18
|
+
3. **"Why / who"** → `git blame -w -C <file>` (ignore whitespace, follow moved code) to
|
|
19
|
+
reach the introducing commit, then `git show <sha>` for its message and full diff.
|
|
20
|
+
4. **"Where did this come from"** → the pickaxe: `git log -S'<string>'` for when a
|
|
21
|
+
string's count changed, `git log -G'<regex>'` for when matching lines changed, or
|
|
22
|
+
`git log -p -- <path>` to walk a file's history with diffs.
|
|
23
|
+
5. Read the evidence end to end before concluding — the first matching commit is not
|
|
24
|
+
always the cause. Corroborate across lenses when the answer is consequential
|
|
25
|
+
(universal {{LAW}} III).
|
|
26
|
+
6. **Reset the investigation state** when done: `git bisect reset` returns to the
|
|
27
|
+
original HEAD. Confirm the working tree is back where it started (universal {{LAW}} III).
|
|
28
|
+
7. Report the offending/originating commit with its evidence. Do **not** fix the bug
|
|
29
|
+
inside this investigation — that is a separate, single-purpose change (universal
|
|
30
|
+
{{LAW}} II); hand off to debug.md or commit.md.
|
|
31
|
+
|
|
32
|
+
## Done when
|
|
33
|
+
- The question is answered with a specific commit (or commits) and the diff/output that
|
|
34
|
+
proves it, the bisect state is reset, and the working tree is unchanged.
|
|
35
|
+
|
|
36
|
+
## Self-improvement
|
|
37
|
+
|
|
38
|
+
Close each run with one beat of reflection on the {{SKILL}} itself:
|
|
39
|
+
- A step misled, a needed step was missing, or the trigger fired wrongly — that
|
|
40
|
+
is a flaw in this file. Propose the exact edit (trigger, procedure, or
|
|
41
|
+
done-when) and apply it with the user's assent ({{LAW}} II).
|
|
42
|
+
- A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
|
|
43
|
+
clears {{LAW}} VI's bar: it would change how a future session behaves, and a
|
|
44
|
+
fresh read of the repo would not re-derive it. Update an existing memory over
|
|
45
|
+
adding one; when in doubt, leave it out.
|
|
46
|
+
- No friction, nothing learned — move on; this loop earns no ceremony. Most
|
|
47
|
+
runs end here.
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# {{SKILL}}: git-rescue
|
|
2
|
+
|
|
3
|
+
> {{DESC_GIT_RESCUE}}
|
|
4
|
+
|
|
5
|
+
**Trigger:** the repository is in a broken or messy state — a bad rebase/merge/reset,
|
|
6
|
+
lost commits, a detached HEAD, a half-finished operation, work stranded in a stash — or
|
|
7
|
+
you intend to deliberately rewrite history (interactive rebase, squash, amend). For
|
|
8
|
+
finding *when/why* something changed without altering history, use git-archaeology.md.
|
|
9
|
+
|
|
10
|
+
## Procedure
|
|
11
|
+
1. **Stop.** Do not run more commands that could compound the damage. Capture the
|
|
12
|
+
current state first and read it: `git status`, `git reflog`, and `git stash list`
|
|
13
|
+
(universal {{LAW}} III). The reflog is the safety net — every HEAD move is recoverable
|
|
14
|
+
from it.
|
|
15
|
+
2. **Back up before any destructive op.** Create a timestamped marker so the current
|
|
16
|
+
state is always recoverable: `git branch backup/$(date +%Y%m%d-%H%M%S)`. A branch
|
|
17
|
+
preserves only *committed* state — if the working tree is dirty, `git stash push -u`
|
|
18
|
+
(or a WIP commit) first, so a later `reset --hard` cannot destroy uncommitted or
|
|
19
|
+
untracked work the reflog will never see. Rewriting, resetting, and force-pushing
|
|
20
|
+
are irreversible acts — never run one without a recovery path in place (universal
|
|
21
|
+
{{LAW}} IV).
|
|
22
|
+
3. Choose the **minimal** recovery for the actual problem:
|
|
23
|
+
- *Lost commits / bad reset:* find the SHA in `git reflog`, then
|
|
24
|
+
`git reset --hard <sha>` (or `git cherry-pick`/`git branch <name> <sha>` to salvage
|
|
25
|
+
selectively).
|
|
26
|
+
- *Operation in progress gone wrong:* abort cleanly —
|
|
27
|
+
`git rebase --abort`, `git merge --abort`, `git cherry-pick --abort`.
|
|
28
|
+
- *Detached HEAD with work on it:* `git branch <name>` to anchor it before moving.
|
|
29
|
+
- *Stranded changes:* `git stash list` → `git stash apply <ref>`; recover dropped
|
|
30
|
+
stashes via their reflog SHA.
|
|
31
|
+
- *Uncommitted file clobbered:* `git restore --source=<sha> <path>`.
|
|
32
|
+
4. Resolving conflict hunks: find the primary sources for each side — commit
|
|
33
|
+
messages, PRs, original issues — and understand why each change was made.
|
|
34
|
+
Preserve both intents where possible; where incompatible, pick the one
|
|
35
|
+
matching the merge's stated goal and note the trade-off. Never invent new
|
|
36
|
+
behaviour in a resolution, and — unlike the deliberate `--abort` in step 3
|
|
37
|
+
that undoes a botched operation on purpose — never `--abort` to escape a
|
|
38
|
+
conflict you were asked to resolve. Before concluding, run the project's
|
|
39
|
+
checks (typecheck, tests, format) and fix what the merge broke.
|
|
40
|
+
5. For a **deliberate rewrite** (interactive rebase, squash, fixup, amend): work on a
|
|
41
|
+
dedicated branch, never a shared one, and keep it the only change in flight
|
|
42
|
+
(universal {{LAW}} II). A rewrite *creates commits* — amend, squash, `--continue`
|
|
43
|
+
all do — so present what will change and get the user's acceptance before running
|
|
44
|
+
it, exactly as for any commit (universal {{LAW}} XX).
|
|
45
|
+
6. Verify the result before declaring success: inspect `git log --oneline`,
|
|
46
|
+
`git status`, and the diff against the intended state — read the actual output, do
|
|
47
|
+
not assume the rewrite landed as planned (universal {{LAW}} III).
|
|
48
|
+
7. Push only with the user's explicit, per-push consent — and a history rewrite needs a
|
|
49
|
+
**force**-push (`--force-with-lease`), which is doubly outward-facing: present what
|
|
50
|
+
changed and wait for acceptance before pushing (universal {{LAW}} XX / {{LAW}} IV).
|
|
51
|
+
Never force-push a shared branch without confirming it is safe to do so.
|
|
52
|
+
|
|
53
|
+
## Done when
|
|
54
|
+
- The repository is in the intended state, verified against actual git output, and the
|
|
55
|
+
pre-rescue state is still recoverable from the backup branch or the reflog.
|
|
56
|
+
|
|
57
|
+
## Self-improvement
|
|
58
|
+
|
|
59
|
+
Close each run with one beat of reflection on the {{SKILL}} itself:
|
|
60
|
+
- A step misled, a needed step was missing, or the trigger fired wrongly — that
|
|
61
|
+
is a flaw in this file. Propose the exact edit (trigger, procedure, or
|
|
62
|
+
done-when) and apply it with the user's assent ({{LAW}} II).
|
|
63
|
+
- A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
|
|
64
|
+
clears {{LAW}} VI's bar: it would change how a future session behaves, and a
|
|
65
|
+
fresh read of the repo would not re-derive it. Update an existing memory over
|
|
66
|
+
adding one; when in doubt, leave it out.
|
|
67
|
+
- No friction, nothing learned — move on; this loop earns no ceremony. Most
|
|
68
|
+
runs end here.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# {{SKILL}}: handoff
|
|
2
|
+
|
|
3
|
+
> {{DESC_HANDOFF}}
|
|
4
|
+
|
|
5
|
+
**Trigger:** the context window is filling, a session is ending mid-task, or you're passing work to another agent or developer.
|
|
6
|
+
|
|
7
|
+
## Procedure
|
|
8
|
+
1. Capture the state in the worklog (`WORKLOG.md` or the task's plan file): the goal, what's done, the step in progress, and the exact next step.
|
|
9
|
+
2. Record open decisions, dead ends already ruled out, blockers, and any irreversible changes already made ({{LAW}} XIV) — so the next agent neither re-derives nor repeats them.
|
|
10
|
+
3. Promote any durable fact or correction learned this session into {{MEMORY}} (§4), not just the worklog.
|
|
11
|
+
4. Point to the live artifacts: branch name, changed files, how to run the tests, and where any failure reproduces.
|
|
12
|
+
5. Put a one-line "resume here" pointer at the top so a fresh context picks up in a single read ({{LAW}} XV).
|
|
13
|
+
6. Verify it: re-read the worklog as a cold reader ({{LAW}} III) — goal, progress, next step, and blockers must be answerable from it alone. Fix what isn't.
|
|
14
|
+
|
|
15
|
+
## Done when
|
|
16
|
+
- A fresh agent can resume from the worklog alone — goal, progress, next step, and blockers are all written down.
|
|
17
|
+
|
|
18
|
+
## Self-improvement
|
|
19
|
+
|
|
20
|
+
Close each run with one beat of reflection on the {{SKILL}} itself:
|
|
21
|
+
- A step misled, a needed step was missing, or the trigger fired wrongly — that
|
|
22
|
+
is a flaw in this file. Propose the exact edit (trigger, procedure, or
|
|
23
|
+
done-when) and apply it with the user's assent ({{LAW}} II).
|
|
24
|
+
- A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
|
|
25
|
+
clears {{LAW}} VI's bar: it would change how a future session behaves, and a
|
|
26
|
+
fresh read of the repo would not re-derive it. Update an existing memory over
|
|
27
|
+
adding one; when in doubt, leave it out.
|
|
28
|
+
- No friction, nothing learned — move on; this loop earns no ceremony. Most
|
|
29
|
+
runs end here.
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
<!-- Authoring note: this file is deliberately 4-6x the size of its peers — it is the only documentation the agent has for the external `herdr` CLI surface (no man page, no --help in context), so it carries the full command reference inline. Do not split it. -->
|
|
2
|
+
# {{SKILL}}: herdr
|
|
3
|
+
|
|
4
|
+
> {{DESC_HERDR}}
|
|
5
|
+
|
|
6
|
+
**Trigger:** you are running inside a herdr-managed pane (`HERDR_ENV=1`) and a task would benefit from another pane — splitting off a server, watching a long-running build, spawning a sibling agent, or reading what a neighbour is doing. If `HERDR_ENV` is unset or not `1`, you are not inside herdr — stop and do not try to control panes from outside.
|
|
7
|
+
|
|
8
|
+
**Requires:** `HERDR_ENV=1` in the environment and the `herdr` binary on `PATH`.
|
|
9
|
+
|
|
10
|
+
## What herdr gives you
|
|
11
|
+
|
|
12
|
+
herdr is a terminal-native agent multiplexer. it organises your work into **workspaces** (project contexts), each holding one or more **tabs** (subcontexts), each holding one or more **panes** (terminal splits running their own process — a shell, an agent, a server, a log stream). every level is controllable from the `herdr` CLI, which talks to the running herdr instance over a local unix socket. the binary is on your `PATH`.
|
|
13
|
+
|
|
14
|
+
From a single pane you can: see what other panes and agents are doing, create tabs for separate subcontexts, split panes and run commands in them, start servers and watch logs in siblings, wait for specific output before continuing, wait for another agent to finish, and spawn more agent instances.
|
|
15
|
+
|
|
16
|
+
For the raw protocol and the full reference, see the [socket api docs](https://herdr.dev/docs/socket-api/).
|
|
17
|
+
|
|
18
|
+
## Procedure
|
|
19
|
+
|
|
20
|
+
1. **Confirm you are inside herdr.** `echo $HERDR_ENV` should print `1`. If not, stop — the rest of this {{SKILL}} does not apply.
|
|
21
|
+
2. **Orient.** `herdr pane list` shows every pane and which is focused; the focused one is yours, the rest are neighbours. `herdr workspace list` and `herdr tab list --workspace <id>` show the broader layout.
|
|
22
|
+
3. **Pick the smallest move that gets the job done.** Read an existing pane (`pane read`), wait for an event (`wait output` / `wait agent-status`), or spawn a new pane only when you actually need parallel work. Don't open panes you won't use.
|
|
23
|
+
4. **Re-read ids after every create/split.** Workspace ids look like `1`, tab ids like `1:1`, pane ids like `1-1`. They compact when things close, so don't reuse an id you saw earlier — parse the response of `workspace create` / `tab create` / `pane split` (or re-list) to get the current id.
|
|
24
|
+
5. **Close what you opened** once the task is done — leave the workspace as you found it unless the user has asked you to keep a pane around.
|
|
25
|
+
|
|
26
|
+
## Common operations
|
|
27
|
+
|
|
28
|
+
### Discover yourself
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
herdr pane list
|
|
32
|
+
herdr workspace list
|
|
33
|
+
herdr tab list --workspace 1
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Read another pane
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
herdr pane read 1-1 --source recent --lines 50
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
- `--source visible` — current viewport
|
|
43
|
+
- `--source recent` — recent scrollback as rendered in the pane
|
|
44
|
+
- `--source recent-unwrapped` — recent terminal text with soft wraps joined back together (use this when you want to inspect the same transcript `wait output --source recent` matches against)
|
|
45
|
+
- `--format ansi` (or `--ansi`) — rendered ANSI snapshot for TUI feedback loops
|
|
46
|
+
|
|
47
|
+
### Split a pane and run a command in it
|
|
48
|
+
|
|
49
|
+
`pane split` prints JSON with the new pane id at `result.pane.pane_id`. Parse it, then run:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
NEW_PANE=$(herdr pane split 1-2 --direction right --no-focus \
|
|
53
|
+
| node -e 'console.log(JSON.parse(require("fs").readFileSync(0,"utf8")).result.pane.pane_id)')
|
|
54
|
+
herdr pane run "$NEW_PANE" "npm run dev"
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
`--direction down` splits below instead. `--no-focus` keeps your terminal context where it is — usually what you want when spawning a sibling.
|
|
58
|
+
|
|
59
|
+
### Wait for output
|
|
60
|
+
|
|
61
|
+
Block until specific text appears in a pane. Useful for servers, builds, tests.
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
herdr wait output 1-3 --match "ready on port 3000" --timeout 30000
|
|
65
|
+
herdr wait output 1-3 --match "server.*ready" --regex --timeout 30000
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Exit code `1` on timeout. With `--source recent`, matching uses unwrapped text so pane width and soft wrapping never break the match.
|
|
69
|
+
|
|
70
|
+
### Wait for an agent status
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
herdr wait agent-status 1-1 --status done --timeout 60000
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
`agent_status` is `idle`, `working`, `blocked`, `done`, or `unknown` — the same distinction the sidebar shows. `done` means the agent finished but you have not looked at that finished pane yet.
|
|
77
|
+
|
|
78
|
+
### Send text or keys to a pane
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
herdr pane send-text 1-1 "hello" # text only, no Enter
|
|
82
|
+
herdr pane send-keys 1-1 Enter # a real key press
|
|
83
|
+
herdr pane run 1-1 "echo hello" # send-text + Enter in one call
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Tab + workspace management
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
herdr tab create --workspace 1 --label "logs"
|
|
90
|
+
herdr tab rename 1:2 "logs"
|
|
91
|
+
herdr tab focus 1:2
|
|
92
|
+
herdr tab close 1:2
|
|
93
|
+
|
|
94
|
+
herdr workspace create --cwd /path/to/project --label "api server"
|
|
95
|
+
herdr workspace focus 2
|
|
96
|
+
herdr workspace rename 1 "api server"
|
|
97
|
+
herdr workspace close 2
|
|
98
|
+
|
|
99
|
+
herdr pane close 1-3
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Without `--label`, `workspace create` keeps cwd-based naming and `tab create` keeps numbered naming. `--no-focus` on create/split keeps your current pane focused.
|
|
103
|
+
|
|
104
|
+
## Recipes
|
|
105
|
+
|
|
106
|
+
### Run a server and wait until it is ready
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
NEW_PANE=$(herdr pane split 1-2 --direction right --no-focus \
|
|
110
|
+
| node -e 'console.log(JSON.parse(require("fs").readFileSync(0,"utf8")).result.pane.pane_id)')
|
|
111
|
+
herdr pane run "$NEW_PANE" "npm run dev"
|
|
112
|
+
herdr wait output "$NEW_PANE" --match "ready" --timeout 30000
|
|
113
|
+
herdr pane read "$NEW_PANE" --source recent --lines 20
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### Run tests in a sibling pane and inspect the result
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
herdr pane split 1-2 --direction down --no-focus
|
|
120
|
+
herdr pane run 1-3 "cargo test"
|
|
121
|
+
herdr wait output 1-3 --match "test result" --timeout 60000
|
|
122
|
+
herdr pane read 1-3 --source recent --lines 30
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Spawn a new agent and give it a task
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
herdr pane split 1-2 --direction right --no-focus
|
|
129
|
+
herdr pane run 1-3 "claude"
|
|
130
|
+
herdr wait output 1-3 --match ">" --timeout 15000
|
|
131
|
+
herdr pane run 1-3 "review the test coverage in src/api/"
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### Coordinate with another agent
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
herdr wait agent-status 1-1 --status done --timeout 120000
|
|
138
|
+
herdr pane read 1-1 --source recent --lines 100
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
## Notes
|
|
142
|
+
|
|
143
|
+
- `workspace list/create`, `tab list/create/get/focus/rename/close`, `pane list/get/split`, `wait output`, and `wait agent-status` print JSON on success.
|
|
144
|
+
- `pane read` prints text (or ANSI with `--format ansi`).
|
|
145
|
+
- `pane send-text`, `pane send-keys`, and `pane run` print nothing on success.
|
|
146
|
+
- `workspace create` returns `result.workspace`, `result.tab`, and `result.root_pane`. `tab create` returns `result.tab` and `result.root_pane`. `pane split` returns the new pane at `result.pane.pane_id`.
|
|
147
|
+
- Use `pane read` for output that already exists; use `wait output` for output you expect next.
|
|
148
|
+
|
|
149
|
+
## Done when
|
|
150
|
+
|
|
151
|
+
The task that motivated the side pane is finished, its output has been read (or its result captured), and any pane / tab / workspace you opened just for the task has been closed — unless the user asked you to keep it.
|
|
152
|
+
|
|
153
|
+
## Self-improvement
|
|
154
|
+
|
|
155
|
+
Close each run with one beat of reflection on the {{SKILL}} itself:
|
|
156
|
+
- A step misled, a needed step was missing, or the trigger fired wrongly — that
|
|
157
|
+
is a flaw in this file. Propose the exact edit (trigger, procedure, or
|
|
158
|
+
done-when) and apply it with the user's assent ({{LAW}} II).
|
|
159
|
+
- A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
|
|
160
|
+
clears {{LAW}} VI's bar: it would change how a future session behaves, and a
|
|
161
|
+
fresh read of the repo would not re-derive it. Update an existing memory over
|
|
162
|
+
adding one; when in doubt, leave it out.
|
|
163
|
+
- No friction, nothing learned — move on; this loop earns no ceremony. Most
|
|
164
|
+
runs end here.
|