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.
Files changed (337) hide show
  1. package/CHANGELOG.md +938 -0
  2. package/DESIGN.md +1423 -0
  3. package/LICENSE +21 -0
  4. package/QUICKSTART.md +48 -0
  5. package/README.md +336 -0
  6. package/SETUP.md +1027 -0
  7. package/SHIPPED.md +70 -0
  8. package/adapters/bob/README.md +100 -0
  9. package/adapters/claude-code/README.md +101 -0
  10. package/adapters/claude-code/settings.json +47 -0
  11. package/adapters/claude-code/skills/geneseed/SKILL.md +72 -0
  12. package/adapters/copilot/README.md +76 -0
  13. package/adapters/opencode/GLOBAL-HARNESS-SPEC.md +434 -0
  14. package/adapters/opencode/HOW-OPENCODE-LOADS.md +158 -0
  15. package/adapters/opencode/README.md +582 -0
  16. package/adapters/opencode/agents/orchestrator.md +25 -0
  17. package/adapters/opencode/opencode.json +44 -0
  18. package/adapters/opencode/plugins/geneseed-activity.js +430 -0
  19. package/adapters/opencode/plugins/geneseed-context.js +876 -0
  20. package/adapters/opencode/plugins/geneseed-guard.js +290 -0
  21. package/adapters/opencode/plugins/geneseed-learn.js +396 -0
  22. package/adapters/opencode/plugins/geneseed-notify.js +142 -0
  23. package/adapters/opencode/plugins/geneseed-ponytail.js +148 -0
  24. package/adapters/opencode/plugins/geneseed-workflow.js +183 -0
  25. package/adapters/opencode/workflows/_runtime.js +277 -0
  26. package/adapters/opencode/workflows/council.js +64 -0
  27. package/adapters/opencode/workflows/dispatch.js +89 -0
  28. package/adapters/opencode/workflows/research-plan-implement.js +43 -0
  29. package/adapters/opencode/workflows/review.js +57 -0
  30. package/bin/geneseed-cli.mjs +412 -0
  31. package/bin/geneseed-hook.mjs +129 -0
  32. package/bin/geneseed.mjs +1086 -0
  33. package/docs/declined.md +149 -0
  34. package/docs/limits.md +270 -0
  35. package/docs/opencode-plugin-setup.md +64 -0
  36. package/docs/token-footprint.md +68 -0
  37. package/docs/web/_groups.json +45 -0
  38. package/docs/web/about.md +6 -0
  39. package/docs/web/adapters-claude-code.md +8 -0
  40. package/docs/web/adapters-opencode-loads.md +8 -0
  41. package/docs/web/adapters-opencode-spec.md +8 -0
  42. package/docs/web/adapters-opencode.md +8 -0
  43. package/docs/web/agents.md +8 -0
  44. package/docs/web/authoring.md +11 -0
  45. package/docs/web/autostart.md +9 -0
  46. package/docs/web/claude-hooks.md +36 -0
  47. package/docs/web/cli.md +6 -0
  48. package/docs/web/collaboration.md +27 -0
  49. package/docs/web/configure-wiki.md +9 -0
  50. package/docs/web/design.md +7 -0
  51. package/docs/web/env-knobs.md +9 -0
  52. package/docs/web/exclusions.md +26 -0
  53. package/docs/web/first-session.md +28 -0
  54. package/docs/web/footprint.md +31 -0
  55. package/docs/web/foreman-mode.md +33 -0
  56. package/docs/web/glossary.md +6 -0
  57. package/docs/web/harnesses.md +28 -0
  58. package/docs/web/headless.md +9 -0
  59. package/docs/web/ingest-docs.md +9 -0
  60. package/docs/web/install-paths.md +9 -0
  61. package/docs/web/install-quick.md +35 -0
  62. package/docs/web/lsp-overview.md +37 -0
  63. package/docs/web/mcp-claude-code.md +10 -0
  64. package/docs/web/mcp-filesystem.md +9 -0
  65. package/docs/web/mcp-gitlab.md +9 -0
  66. package/docs/web/mcp-markitdown.md +9 -0
  67. package/docs/web/mcp-overview.md +34 -0
  68. package/docs/web/mcp-trouble.md +9 -0
  69. package/docs/web/mcp-verify.md +9 -0
  70. package/docs/web/memory.md +7 -0
  71. package/docs/web/migrate.md +39 -0
  72. package/docs/web/model.md +20 -0
  73. package/docs/web/notebook.md +7 -0
  74. package/docs/web/pipelines.md +24 -0
  75. package/docs/web/plugin-activity.md +23 -0
  76. package/docs/web/plugin-context.md +26 -0
  77. package/docs/web/plugin-guard.md +24 -0
  78. package/docs/web/plugin-learn.md +27 -0
  79. package/docs/web/plugin-notify.md +24 -0
  80. package/docs/web/plugin-ponytail.md +23 -0
  81. package/docs/web/plugin-setup.md +7 -0
  82. package/docs/web/plugin-workflow.md +24 -0
  83. package/docs/web/plugins.md +17 -0
  84. package/docs/web/project-context.md +9 -0
  85. package/docs/web/rules.md +8 -0
  86. package/docs/web/run-anywhere.md +9 -0
  87. package/docs/web/self-improve.md +8 -0
  88. package/docs/web/setup-choices.md +39 -0
  89. package/docs/web/skills.md +8 -0
  90. package/docs/web/themes-author.md +8 -0
  91. package/docs/web/themes.md +9 -0
  92. package/docs/web/token-footprint.md +7 -0
  93. package/docs/web/trouble.md +38 -0
  94. package/docs/web/upgrade.md +9 -0
  95. package/docs/web/verify.md +30 -0
  96. package/docs/web/wiki.md +7 -0
  97. package/docs/web/worktree.md +10 -0
  98. package/docs/web-ui.md +144 -0
  99. package/docs/wiki.md +43 -0
  100. package/geneseed +39 -0
  101. package/geneseed.cmd +34 -0
  102. package/harness.config.json +6 -0
  103. package/js/anim.mjs +326 -0
  104. package/js/catalog.mjs +112 -0
  105. package/js/checkout.mjs +88 -0
  106. package/js/cli-table.json +1034 -0
  107. package/js/cli.mjs +498 -0
  108. package/js/diff.mjs +384 -0
  109. package/js/doctor.mjs +1364 -0
  110. package/js/emit.mjs +1373 -0
  111. package/js/excludes.mjs +271 -0
  112. package/js/generate.mjs +379 -0
  113. package/js/hooks.mjs +1026 -0
  114. package/js/hosts.mjs +253 -0
  115. package/js/installs.mjs +378 -0
  116. package/js/inventory.mjs +175 -0
  117. package/js/lib/fs.mjs +913 -0
  118. package/js/lib/proc.mjs +28 -0
  119. package/js/lib/udiff.mjs +275 -0
  120. package/js/link.mjs +286 -0
  121. package/js/mcp.mjs +335 -0
  122. package/js/memory.mjs +108 -0
  123. package/js/menu.mjs +118 -0
  124. package/js/migrate.mjs +251 -0
  125. package/js/native.mjs +426 -0
  126. package/js/opencode.mjs +325 -0
  127. package/js/registry.mjs +110 -0
  128. package/js/render.mjs +282 -0
  129. package/js/settings.mjs +924 -0
  130. package/js/setup.mjs +492 -0
  131. package/js/status.mjs +281 -0
  132. package/js/themes.mjs +195 -0
  133. package/js/tui.mjs +444 -0
  134. package/js/uninstall.mjs +1137 -0
  135. package/js/update.mjs +910 -0
  136. package/js/web/actions.mjs +868 -0
  137. package/js/web/activity.mjs +284 -0
  138. package/js/web/api.mjs +873 -0
  139. package/js/web/docs.mjs +531 -0
  140. package/js/web/graph.mjs +0 -0
  141. package/js/web/jobs.mjs +480 -0
  142. package/js/web/server.mjs +1135 -0
  143. package/package.json +54 -0
  144. package/registry.json +474 -0
  145. package/src/AGENT.md.tmpl +390 -0
  146. package/src/agents/_template.md +76 -0
  147. package/src/agents/advocate.md +36 -0
  148. package/src/agents/architect.md +55 -0
  149. package/src/agents/developer.md +66 -0
  150. package/src/agents/docs.md +54 -0
  151. package/src/agents/empiricist.md +39 -0
  152. package/src/agents/explorer.md +54 -0
  153. package/src/agents/framer.md +36 -0
  154. package/src/agents/historian.md +51 -0
  155. package/src/agents/operator.md +37 -0
  156. package/src/agents/pragmatist.md +37 -0
  157. package/src/agents/reviewer.md +52 -0
  158. package/src/agents/security.md +57 -0
  159. package/src/agents/skeptic.md +48 -0
  160. package/src/agents/steward.md +36 -0
  161. package/src/agents/tester.md +54 -0
  162. package/src/agents/user-advocate.md +36 -0
  163. package/src/agents/visionary.md +36 -0
  164. package/src/laws/universal.md +387 -0
  165. package/src/memory/README.md +109 -0
  166. package/src/memory/gitignore +6 -0
  167. package/src/modes/README.md +26 -0
  168. package/src/modes/direct.md +2 -0
  169. package/src/modes/foreman.md +19 -0
  170. package/src/notebook/README.md +39 -0
  171. package/src/notebook/gitignore +7 -0
  172. package/src/postures/README.md +31 -0
  173. package/src/postures/artisan.md +14 -0
  174. package/src/postures/assistant.md +12 -0
  175. package/src/postures/expert.md +11 -0
  176. package/src/postures/mentor.md +11 -0
  177. package/src/postures/peer.md +12 -0
  178. package/src/skills/_template.md +47 -0
  179. package/src/skills/brainstorm.md +28 -0
  180. package/src/skills/clarify.md +28 -0
  181. package/src/skills/codebase-design.md +44 -0
  182. package/src/skills/commit.md +48 -0
  183. package/src/skills/council.md +34 -0
  184. package/src/skills/crash-course.md +28 -0
  185. package/src/skills/daydream/.claude-plugin/plugin.json +9 -0
  186. package/src/skills/daydream/SKILL.md +74 -0
  187. package/src/skills/daydream/VENDOR.md +25 -0
  188. package/src/skills/daydream/critic-prompt.md +38 -0
  189. package/src/skills/daydream/instructions.md +422 -0
  190. package/src/skills/daydream/synthesizer-prompt.md +41 -0
  191. package/src/skills/debug.md +37 -0
  192. package/src/skills/decode.md +28 -0
  193. package/src/skills/develop.md +29 -0
  194. package/src/skills/document-project.md +79 -0
  195. package/src/skills/domain-modeling.md +38 -0
  196. package/src/skills/drill.md +28 -0
  197. package/src/skills/feynman.md +26 -0
  198. package/src/skills/forge-mcp.md +48 -0
  199. package/src/skills/fresh-eyes.md +29 -0
  200. package/src/skills/frontend-design.md +58 -0
  201. package/src/skills/gap-detector.md +27 -0
  202. package/src/skills/geneseed-code-review.md +33 -0
  203. package/src/skills/geneseed.md +29 -0
  204. package/src/skills/git-archaeology.md +47 -0
  205. package/src/skills/git-rescue.md +68 -0
  206. package/src/skills/handoff.md +29 -0
  207. package/src/skills/herdr.md +164 -0
  208. package/src/skills/ingest.md +49 -0
  209. package/src/skills/learning-path.md +26 -0
  210. package/src/skills/migrate.md +45 -0
  211. package/src/skills/opencode-theme.md +52 -0
  212. package/src/skills/parallel-agents.md +28 -0
  213. package/src/skills/pipeline.md +52 -0
  214. package/src/skills/plan.md +45 -0
  215. package/src/skills/ponytail.md +29 -0
  216. package/src/skills/profile.md +58 -0
  217. package/src/skills/prose.md +42 -0
  218. package/src/skills/prototype.md +44 -0
  219. package/src/skills/react-view-transitions/AGENTS.md +955 -0
  220. package/src/skills/react-view-transitions/README.md +42 -0
  221. package/src/skills/react-view-transitions/SKILL.md +320 -0
  222. package/src/skills/react-view-transitions/VENDOR.md +16 -0
  223. package/src/skills/react-view-transitions/metadata.json +12 -0
  224. package/src/skills/react-view-transitions/references/css-recipes.md +242 -0
  225. package/src/skills/react-view-transitions/references/implementation.md +182 -0
  226. package/src/skills/react-view-transitions/references/nextjs.md +176 -0
  227. package/src/skills/react-view-transitions/references/patterns.md +262 -0
  228. package/src/skills/refactor.md +32 -0
  229. package/src/skills/release.md +43 -0
  230. package/src/skills/repo-map.md +36 -0
  231. package/src/skills/research.md +42 -0
  232. package/src/skills/review-response.md +36 -0
  233. package/src/skills/roast-me.md +28 -0
  234. package/src/skills/rule.md +100 -0
  235. package/src/skills/ship.md +49 -0
  236. package/src/skills/tdd.md +31 -0
  237. package/src/skills/tickets.md +44 -0
  238. package/src/skills/token-report/SKILL.md +76 -0
  239. package/src/skills/token-report/VENDOR.md +23 -0
  240. package/src/skills/token-report/scripts/token_report.mjs +1301 -0
  241. package/src/skills/wayfinder.md +49 -0
  242. package/src/skills/wiki.md +68 -0
  243. package/src/skills/workflow.md +38 -0
  244. package/themes/README.md +69 -0
  245. package/themes/_TEMPLATE.json +147 -0
  246. package/themes/biker.json +147 -0
  247. package/themes/commentator.json +147 -0
  248. package/themes/cyberpunk.json +147 -0
  249. package/themes/gamer.json +147 -0
  250. package/themes/imperial.json +147 -0
  251. package/themes/joker.json +147 -0
  252. package/themes/marvin.json +147 -0
  253. package/themes/mean.json +147 -0
  254. package/themes/military.json +147 -0
  255. package/themes/neutral.json +147 -0
  256. package/themes/opencode/README.md +58 -0
  257. package/themes/opencode/catppuccin.json +27 -0
  258. package/themes/opencode/dracula.json +27 -0
  259. package/themes/opencode/everforest.json +27 -0
  260. package/themes/opencode/gruvbox.json +27 -0
  261. package/themes/opencode/kanagawa.json +27 -0
  262. package/themes/opencode/neon.json +27 -0
  263. package/themes/opencode/nord.json +27 -0
  264. package/themes/opencode/rosepine.json +27 -0
  265. package/themes/opencode/tokyonight.json +27 -0
  266. package/themes/pirate.json +147 -0
  267. package/themes/sports.json +147 -0
  268. package/themes/verstappen.json +147 -0
  269. package/themes/wizard.json +147 -0
  270. package/web/dist/assets/About-DX1-VTBP.js +1 -0
  271. package/web/dist/assets/Activity-Dp9NaXOn.js +1 -0
  272. package/web/dist/assets/ActivityDetail-HpOBtrXS.js +1 -0
  273. package/web/dist/assets/Diff-Ct4G3Se8.js +5 -0
  274. package/web/dist/assets/Doctor-DGjkZFuA.js +1 -0
  275. package/web/dist/assets/Graph-b8o-S6kv.js +1 -0
  276. package/web/dist/assets/Harnesses-gr3-aHBF.js +1 -0
  277. package/web/dist/assets/Laws-DTwF5tTC.js +1 -0
  278. package/web/dist/assets/Library-BEZscyaQ.js +1 -0
  279. package/web/dist/assets/Markdown-k_LSLBGq.js +1 -0
  280. package/web/dist/assets/Profile-DydukTxP.js +1 -0
  281. package/web/dist/assets/Rules-CIRG4Ldt.js +1 -0
  282. package/web/dist/assets/Skills-Buoi1IBr.js +1 -0
  283. package/web/dist/assets/StatusBadge-CE_AJttl.js +1 -0
  284. package/web/dist/assets/Themes-CI4o3gJC.js +2 -0
  285. package/web/dist/assets/activity-BCW7e6Cy.js +1 -0
  286. package/web/dist/assets/audiowide-latin-400-normal-6GFCX7ni.woff2 +0 -0
  287. package/web/dist/assets/geist-mono-latin-400-normal-DKaoCDn5.woff2 +0 -0
  288. package/web/dist/assets/geist-mono-latin-500-normal-C3sF8Y1B.woff2 +0 -0
  289. package/web/dist/assets/geist-mono-latin-600-normal-BHzjB6_C.woff2 +0 -0
  290. package/web/dist/assets/hanken-grotesk-latin-400-italic-Bserb8X5.woff2 +0 -0
  291. package/web/dist/assets/hanken-grotesk-latin-400-normal-BG6hkEXj.woff2 +0 -0
  292. package/web/dist/assets/hanken-grotesk-latin-500-italic-BGfwwhek.woff2 +0 -0
  293. package/web/dist/assets/hanken-grotesk-latin-500-normal-DrDcrrxK.woff2 +0 -0
  294. package/web/dist/assets/hanken-grotesk-latin-600-normal-CIXX6EOa.woff2 +0 -0
  295. package/web/dist/assets/hanken-grotesk-latin-700-normal-CeQ8H3UY.woff2 +0 -0
  296. package/web/dist/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2 +0 -0
  297. package/web/dist/assets/ibm-plex-mono-latin-500-normal-DSY6xOcd.woff2 +0 -0
  298. package/web/dist/assets/ibm-plex-mono-latin-600-normal-BgSNZQsw.woff2 +0 -0
  299. package/web/dist/assets/ibm-plex-serif-latin-400-normal-BIGslYFI.woff2 +0 -0
  300. package/web/dist/assets/ibm-plex-serif-latin-500-normal-REKAfBVG.woff2 +0 -0
  301. package/web/dist/assets/ibm-plex-serif-latin-600-normal-DAxitmSu.woff2 +0 -0
  302. package/web/dist/assets/index-B1PIx7RM.js +1 -0
  303. package/web/dist/assets/index-BnTQUSUz.js +12 -0
  304. package/web/dist/assets/index-Ck2iCdaC.js +2 -0
  305. package/web/dist/assets/index-DUCsDv7z.css +1 -0
  306. package/web/dist/assets/inter-latin-400-normal-C38fXH4l.woff2 +0 -0
  307. package/web/dist/assets/inter-latin-500-normal-Cerq10X2.woff2 +0 -0
  308. package/web/dist/assets/inter-latin-600-normal-LgqL8muc.woff2 +0 -0
  309. package/web/dist/assets/inter-latin-700-normal-Yt3aPRUw.woff2 +0 -0
  310. package/web/dist/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2 +0 -0
  311. package/web/dist/assets/jetbrains-mono-latin-500-normal-BWZEU5yA.woff2 +0 -0
  312. package/web/dist/assets/jetbrains-mono-latin-600-normal-C8RAYTDA.woff2 +0 -0
  313. package/web/dist/assets/marked.esm-JKvyS0Pp.js +46 -0
  314. package/web/dist/assets/oswald-latin-400-normal-BAFo8sP8.woff2 +0 -0
  315. package/web/dist/assets/oswald-latin-500-normal-B-eyT0Dw.woff2 +0 -0
  316. package/web/dist/assets/oswald-latin-600-normal-plFmSr5g.woff2 +0 -0
  317. package/web/dist/assets/oswald-latin-700-normal-vy6hmKSr.woff2 +0 -0
  318. package/web/dist/assets/poppins-latin-400-normal-cpxAROuN.woff2 +0 -0
  319. package/web/dist/assets/poppins-latin-500-normal-C8OXljZJ.woff2 +0 -0
  320. package/web/dist/assets/poppins-latin-600-normal-zEkxB9Mr.woff2 +0 -0
  321. package/web/dist/assets/poppins-latin-700-normal-Qrb0O0WB.woff2 +0 -0
  322. package/web/dist/assets/react-DOpiTn5v.js +32 -0
  323. package/web/dist/assets/roman-DkYN0LX9.js +1 -0
  324. package/web/dist/assets/space-grotesk-latin-400-normal-CJ-V5oYT.woff2 +0 -0
  325. package/web/dist/assets/space-grotesk-latin-500-normal-lFbtlQH6.woff2 +0 -0
  326. package/web/dist/assets/space-grotesk-latin-600-normal-DjKNqYRj.woff2 +0 -0
  327. package/web/dist/assets/space-grotesk-latin-700-normal-RjhwGPKo.woff2 +0 -0
  328. package/web/dist/assets/space-mono-latin-400-italic-YylcN9Ay.woff2 +0 -0
  329. package/web/dist/assets/space-mono-latin-400-normal-Rg4St2Dn.woff2 +0 -0
  330. package/web/dist/assets/space-mono-latin-700-italic-vNvENeTh.woff2 +0 -0
  331. package/web/dist/assets/space-mono-latin-700-normal-mWgeinG7.woff2 +0 -0
  332. package/web/dist/icon-maskable.svg +10 -0
  333. package/web/dist/icon.svg +8 -0
  334. package/web/dist/index.html +21 -0
  335. package/web/dist/manifest.webmanifest +14 -0
  336. package/web/dist/sw.js +40 -0
  337. 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.