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,49 @@
1
+ # {{SKILL}}: ingest
2
+
3
+ > {{DESC_INGEST}}
4
+
5
+ **Trigger:** a task needs the *content* of a non-markdown document — a PDF, Word
6
+ (`.docx`), PowerPoint (`.pptx`), Excel (`.xlsx`), HTML, EPUB — or a web URL. This is
7
+ the read-before counterpart for documents the convention can't read directly
8
+ (universal {{LAW}} XVII): the context discovery only sees `.md`, so anything else
9
+ must be converted first.
10
+
11
+ ## Procedure
12
+ 1. **Don't read the binary.** Convert it to markdown first, then read the markdown —
13
+ reading a raw PDF/Office file wastes context and garbles structure.
14
+ 2. **Use the best available converter** (check what's installed; do not assume):
15
+ - **An MCP converter**, if the tool exposes one (e.g. `markitdown-mcp`,
16
+ `docling-mcp`) — zero install, preferred on an MCP-capable host.
17
+ - **MarkItDown** (Microsoft) — broadest coverage (PDF, Office, HTML, images,
18
+ URLs): `markitdown <file> -o out.md`. Fast; shallow on complex tables.
19
+ - **Pandoc** — excellent for Office/HTML/EPUB (headings, tables preserved):
20
+ `pandoc <file> -t gfm -o out.md`. Not for PDFs.
21
+ - **Docling** (IBM) — when tables, formulas, multi-column, or scanned pages
22
+ matter and the above output is garbled: `docling <file> --to md`.
23
+ (Exact flags vary by version — confirm with `--help`; universal {{LAW}} III.)
24
+ 3. **For a URL**, convert the page to markdown (MarkItDown takes a URL; or use the
25
+ tool's own web-fetch) rather than pasting raw HTML.
26
+ 4. **Never install a converter silently.** They are external dependencies and the
27
+ host's choice. If none is available, report which one to install and stop — do
28
+ not run `pip install`/`brew install` without the user's say-so.
29
+ 5. **Read the slice you need**, not the whole dump — locate the relevant section in
30
+ the markdown, then read it (universal {{LAW}} XV).
31
+ 6. **Treat the converted file as a scratch artifact.** Don't commit it unless the
32
+ task calls for it (universal {{LAW}} IV); prefer a temp path or `.gitignore` it.
33
+
34
+ ## Done when
35
+ - The document's content is available as markdown and the slice the task needs has
36
+ been read — without reading the binary or committing a stray conversion.
37
+
38
+ ## Self-improvement
39
+
40
+ Close each run with one beat of reflection on the {{SKILL}} itself:
41
+ - A step misled, a needed step was missing, or the trigger fired wrongly — that
42
+ is a flaw in this file. Propose the exact edit (trigger, procedure, or
43
+ done-when) and apply it with the user's assent ({{LAW}} II).
44
+ - A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
45
+ clears {{LAW}} VI's bar: it would change how a future session behaves, and a
46
+ fresh read of the repo would not re-derive it. Update an existing memory over
47
+ adding one; when in doubt, leave it out.
48
+ - No friction, nothing learned — move on; this loop earns no ceremony. Most
49
+ runs end here.
@@ -0,0 +1,26 @@
1
+ # {{SKILL}}: learning-path
2
+
3
+ > {{DESC_LEARNING_PATH}}
4
+
5
+ **Trigger:** the user wants to learn a skill toward a *specific* result by a deadline and asks for a plan or route — "build me a learning path", "how do I get to X in N days", "I need to be able to do Y by [date]". For pressure-testing a mastery the user already claims, use [gap-detector](gap-detector.md); for checking whether something just-studied stuck, use [feynman](feynman.md).
6
+
7
+ ## Procedure
8
+ 1. Pin the *real* goal, not the subject: the specific result wanted, the deadline, and what the user already masters. Ask once if any of the three is missing — do not plan around "learn X in general".
9
+ 2. Build a day-by-day path to that result. Each day carries exactly three things: one task that fits the user's stated time budget (default 45 minutes), a concrete criterion so they can tell whether they did it correctly, and one explicit *what not to do* that day so time is not wasted.
10
+ 3. Trace the whole path against the goal. If finishing every day would not actually deliver the result, rebuild it until it does.
11
+
12
+ ## Done when
13
+ - The user has a dated, day-by-day path where each day has a timed task, a correctness criterion, and a what-not-to-do — and the path provably reaches the stated goal.
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,45 @@
1
+ # {{SKILL}}: migrate
2
+
3
+ > {{DESC_MIGRATE}}
4
+
5
+ **Trigger:** upgrading a dependency, framework, language version, or moving code
6
+ onto a new API.
7
+
8
+ ## Procedure
9
+ 1. Read the upstream migration guide and changelog *first* (universal {{LAW}} XVII);
10
+ list the breaking changes that actually touch this codebase.
11
+ 2. Work on a dedicated branch, never directly on a shared one, so a failed
12
+ migration rolls back cleanly (universal {{LAW}} XX applies its shared-branch
13
+ care to anything that does land there).
14
+ 3. Migrate one dependency — or one breaking change — at a time. Never batch
15
+ unrelated bumps into a single step (universal {{LAW}} II).
16
+ 4. Run the project's checks after *each* step. A green suite between steps is what
17
+ lets you bisect a later failure to the exact change that caused it
18
+ (universal {{LAW}} III).
19
+ 5. Keep the version bump itself a separate commit from any code changes it forces,
20
+ each through the [commit {{SKILL}}](commit.md) (universal {{LAW}} XX), so each
21
+ diff is reviewable in isolation.
22
+
23
+ **Schema migrations stay backward-compatible.** For a database or stored-format
24
+ change, move in expand → backfill → contract phases so every migration is
25
+ compatible with the currently running code, and never bundle a destructive schema
26
+ change into the same deploy as the code that depends on it (universal {{LAW}} II,
27
+ {{LAW}} IV) — the old code must keep working until the new code is live.
28
+
29
+ ## Done when
30
+ - The dependency or API is on the target version, every check passes, and the
31
+ changelog / lockfile reflect the new state with its docs updated
32
+ (universal {{LAW}} XI).
33
+
34
+ ## Self-improvement
35
+
36
+ Close each run with one beat of reflection on the {{SKILL}} itself:
37
+ - A step misled, a needed step was missing, or the trigger fired wrongly — that
38
+ is a flaw in this file. Propose the exact edit (trigger, procedure, or
39
+ done-when) and apply it with the user's assent ({{LAW}} II).
40
+ - A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
41
+ clears {{LAW}} VI's bar: it would change how a future session behaves, and a
42
+ fresh read of the repo would not re-derive it. Update an existing memory over
43
+ adding one; when in doubt, leave it out.
44
+ - No friction, nothing learned — move on; this loop earns no ceremony. Most
45
+ runs end here.
@@ -0,0 +1,52 @@
1
+ # {{SKILL}}: opencode-theme
2
+
3
+ > {{DESC_THEME}}
4
+
5
+ **Trigger:** the user wants their own OpenCode colour theme — "make me a theme",
6
+ "create a custom theme", "I want my own colours", "a theme that matches <brand>", "a
7
+ darker/transparent version of <theme>", or asks to tweak the shipped colours. For
8
+ changing the agent's *voice* (imperial, pirate…) that is a different concept — point
9
+ them at `--theme` / the setup wizard, not this {{SKILL}}.
10
+
11
+ ## Procedure
12
+ 1. **Pick a starting palette.** Fastest is to clone a shipped one and tweak a few hues —
13
+ `catppuccin tokyonight rosepine gruvbox nord everforest kanagawa dracula`. If the user
14
+ describes a vibe ("warm terminal green", "my brand is #ff0066"), derive the full
15
+ palette yourself: fill all 19 roles in `themes/opencode/README.md` (`bg bgPanel
16
+ bgElement fg fgMuted accent secondary border ok warn err kw str fn num type comment
17
+ addBg delBg`), every value a `#rrggbb` hex.
18
+ 2. **Respect legibility and semantics.** `fg` on `bg` must stay readable (~7:1), `error`
19
+ stays a red-family hue, `warning` amber, `success` green — users read state from these.
20
+ Keep `addBg`/`delBg` distinct from each other and from the background.
21
+ 3. **Write the palette to a small JSON** (a bare `{role: "#hex", …}` map or
22
+ `{"palette": {…}}`) — only the roles you are overriding if you also pass `--from`.
23
+ 4. **Run the CLI** — it expands your palette into the full slot set and writes both
24
+ flavours into the live themes dir (per-repo `.opencode/themes/`, else the global
25
+ config dir), using the same logic as the shipped themes:
26
+ ```
27
+ geneseed theme <name> --from <shipped> --palette <file.json>
28
+ ```
29
+ Use `--from` alone to clone-and-rename, `--palette` alone for a from-scratch palette,
30
+ or both (palette overrides the cloned base). `--solid-only` / `--transparent-only` to
31
+ write just one flavour; `--global` to force the global dir from inside a repo.
32
+ 5. **Tell the user how to select it:** the name is branded `geneseed-<name>` so every
33
+ harness theme groups together in the picker — `/theme geneseed-<name>` (opaque) or
34
+ `/theme geneseed-<name>-transparent` (terminal background shows through). A rebuild
35
+ never erases it — preservation keys off the emit set, not the prefix.
36
+
37
+ ## Done when
38
+ - Both `<name>.json` (and/or `<name>-transparent.json`) exist in the active themes dir,
39
+ the CLI reported the path, and the user knows the `/theme <name>` command to select it.
40
+
41
+ ## Self-improvement
42
+
43
+ Close each run with one beat of reflection on the {{SKILL}} itself:
44
+ - A step misled, a needed step was missing, or the trigger fired wrongly — that
45
+ is a flaw in this file. Propose the exact edit (trigger, procedure, or
46
+ done-when) and apply it with the user's assent ({{LAW}} II).
47
+ - A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
48
+ clears {{LAW}} VI's bar: it would change how a future session behaves, and a
49
+ fresh read of the repo would not re-derive it. Update an existing memory over
50
+ adding one; when in doubt, leave it out.
51
+ - No friction, nothing learned — move on; this loop earns no ceremony. Most
52
+ runs end here.
@@ -0,0 +1,28 @@
1
+ # {{SKILL}}: parallel-agents
2
+
3
+ > {{DESC_PARALLEL_AGENTS}}
4
+
5
+ **Trigger:** two or more independent subtasks with no shared state or ordering between them — and a tool that can run subagents.
6
+
7
+ ## Procedure
8
+ 1. Confirm independence: the subtasks must not depend on each other's output or write the same files. If they're sequential or share state, use [plan](plan.md) instead.
9
+ 2. Split the work into self-contained units, each with one clear goal and a defined output contract — what it must return.
10
+ 3. Dispatch each unit to its own subagent in one batch, each under a handoff envelope: the unit's goal, the inputs it needs, its output contract, and the inherited constraints (no commit/push — {{LAW}} XX stays with you; gaps reported, never invented). Prefer the read-only [explorer {{AGENT}}](../{{DIR_AGENTS}}/explorer.md) for investigation so the heavy reading stays out of the main context ({{LAW}} XV). Where no subagent capability exists, run the units sequentially as personas instead, converging the same way.
11
+ 4. Keep the main context lean: collect each subagent's distilled result, not its working transcript.
12
+ 5. Converge: reconcile the results, resolve conflicts yourself, and verify the combined outcome.
13
+
14
+ ## Done when
15
+ - Independent units ran concurrently, each returned a distilled result, and the reconciled outcome is verified.
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,52 @@
1
+ # {{SKILL}}: pipeline
2
+
3
+ > {{DESC_PIPELINE}}
4
+
5
+ **Trigger:** [foreman mode](../modes/foreman.md) routes a triaged *substantial* task here; also directly invocable without that mode whenever the user asks to "run a pipeline" for a development, documentation, research, or review task.
6
+
7
+ ## What it is
8
+
9
+ A pipeline is a small crew of {{AGENTS}} — analyst, developer, tester, plus whatever specialists the task demands — working a single task in isolation from the rest of the session, so the parent can keep answering the user while the crew runs. The parent never re-verifies the crew's work; it checks the crew's own mechanical proof and merges on that.
10
+
11
+ ## Crew floors
12
+
13
+ The minimum roster per task type. The parent may add specialists on top — security, architect, reviewer, docs, historian, or any other {{AGENT}} the task genuinely needs — but never dispatches below the floor.
14
+
15
+ | Task type | Floor |
16
+ |---|---|
17
+ | Development | [explorer](../{{DIR_AGENTS}}/explorer.md) (analyst) → [developer](../{{DIR_AGENTS}}/developer.md) → [tester](../{{DIR_AGENTS}}/tester.md) + lint gate |
18
+ | Documentation | [explorer](../{{DIR_AGENTS}}/explorer.md) (analyst) → [docs](../{{DIR_AGENTS}}/docs.md) |
19
+ | Research / investigation | [explorer](../{{DIR_AGENTS}}/explorer.md) (analyst) alone |
20
+ | Review / audit | [reviewer](../{{DIR_AGENTS}}/reviewer.md) + [skeptic](../{{DIR_AGENTS}}/skeptic.md) |
21
+
22
+ ## Procedure
23
+
24
+ 1. Confirm the task is genuinely substantial — a trivial one-file tweak or a question does not warrant a crew; do it directly instead.
25
+ 2. Compose the crew from the floor above, adding specialists only where the task demands them.
26
+ 3. Isolate the crew's work in its own git worktree/branch (the SETUP.md worktree add-on). Where worktrees are unavailable, fall back to a single tree, one pipeline at a time, and say so.
27
+ 4. **The dev↔tester loop:** the developer implements, the tester validates — runs the tests and lint, produces raw logs. On failure, the findings go back to the developer. Cap at **5** iterations; on exhaustion, stop, do not merge, and report the failure with the branch left in place for inspection.
28
+ 5. **Two execution shapes**, chosen by host capability (same pattern as the [workflow {{SKILL}}](workflow.md)):
29
+ - *Deterministic:* where the host exposes a `workflow` tool, run a saved script encoding analyst → developer → (tester ⇄ developer)×≤5 → proof.
30
+ - *Model-driven fallback:* everywhere else, run the same stages via the [parallel-agents {{SKILL}}](parallel-agents.md) or sequential personas, with the same handoff envelopes and the same delivery contract.
31
+ 6. On success, attach the mechanical proof to the branch (test + lint output, exit codes) and hand the result back to the parent for the merge decision — the pipeline never commits, pushes, or merges on its own ({{LAW}} XX).
32
+
33
+ ## Delivery contract
34
+
35
+ A branch/worktree containing the work **plus** the mechanical proof: test and lint output with exit codes, either committed alongside the run's notes or handed back in the result envelope. Anything without green proof is surfaced, never merged — merging on proof (not re-verification) is only sound because every {{AGENT}} in the crew inherits all {{LAWS}} through the handoff envelope.
36
+
37
+ ## Done when
38
+
39
+ - Green proof: the crew delivered a branch with passing tests and lint, and the parent merged it — or the loop cap was exhausted and the failure was reported with the branch left in place.
40
+
41
+ ## Self-improvement
42
+
43
+ Close each run with one beat of reflection on the {{SKILL}} itself:
44
+ - A step misled, a needed step was missing, or the trigger fired wrongly — that
45
+ is a flaw in this file. Propose the exact edit (trigger, procedure, or
46
+ done-when) and apply it with the user's assent ({{LAW}} II).
47
+ - A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
48
+ clears {{LAW}} VI's bar: it would change how a future session behaves, and a
49
+ fresh read of the repo would not re-derive it. Update an existing memory over
50
+ adding one; when in doubt, leave it out.
51
+ - No friction, nothing learned — move on; this loop earns no ceremony. Most
52
+ runs end here.
@@ -0,0 +1,45 @@
1
+ # {{SKILL}}: plan
2
+
3
+ > {{DESC_PLAN}}
4
+
5
+ **Trigger:** a task with more than a couple of steps, or touching several files
6
+ (universal {{LAW}} XIV).
7
+
8
+ ## Procedure
9
+ 1. If a design or spec already exists (e.g. from the brainstorm {{SKILL}}), derive the
10
+ plan from it; if the task is design-heavy and none exists yet, run the
11
+ [brainstorm {{SKILL}}](brainstorm.md) first rather than planning blind. Otherwise
12
+ restate the goal in one line. Either way, confirm the actual starting state before
13
+ designing the steps (universal {{LAW}} III — verify before designing).
14
+ 2. Write a numbered plan to `WORKLOG.md` (or `plans/<task>.md`): ordered steps, each
15
+ independently checkable. Group the steps into milestones — coherent chunks after
16
+ which the work can be verified and reviewed.
17
+ 3. Execute one step at a time. After each, update the worklog — mark it done, note
18
+ the current step, the next step, and any blockers.
19
+ 4. At each milestone, stop and verify before continuing — run the project's checks
20
+ and read the output (universal {{LAW}} III); on a consequential or ambiguous
21
+ direction, surface the result for review before pressing on.
22
+ 5. If the plan proves wrong, revise the file *before* continuing. The file, not
23
+ your memory, is the source of truth for where you are.
24
+ 6. On finishing, clear or archive the worklog.
25
+
26
+ ## Done when
27
+ - Every plan step is checked off, each milestone was verified, and the goal's
28
+ done-condition is confirmed.
29
+
30
+ > The worklog is external memory: it lets a context-limited agent recover its
31
+ > place after the window fills, and lets the user correct course early. Consider
32
+ > git-ignoring `WORKLOG.md` if it should stay local to each developer.
33
+
34
+ ## Self-improvement
35
+
36
+ Close each run with one beat of reflection on the {{SKILL}} itself:
37
+ - A step misled, a needed step was missing, or the trigger fired wrongly — that
38
+ is a flaw in this file. Propose the exact edit (trigger, procedure, or
39
+ done-when) and apply it with the user's assent ({{LAW}} II).
40
+ - A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
41
+ clears {{LAW}} VI's bar: it would change how a future session behaves, and a
42
+ fresh read of the repo would not re-derive it. Update an existing memory over
43
+ adding one; when in doubt, leave it out.
44
+ - No friction, nothing learned — move on; this loop earns no ceremony. Most
45
+ runs end here.
@@ -0,0 +1,29 @@
1
+ # {{SKILL}}: ponytail
2
+
3
+ > {{DESC_PONYTAIL}}
4
+
5
+ **Trigger:** the user says "ponytail", "be lazy", "lazy mode", "simplest/minimal solution", "yagni", "do less", or "shortest path", or complains about over-engineering, bloat, boilerplate, or needless dependencies. Sets a build *mode* that persists across the session, not a one-shot edit — off by default until invoked. Off again on "stop ponytail" / "normal mode". For restructuring code that already exists use [refactor](refactor.md); to critique an artifact use [roast-me](roast-me.md).
6
+
7
+ ## Procedure
8
+ 1. Set the intensity. Ponytail is **off by default**; invoking it turns it on at **full** unless a level is named. **lite** — build what's asked, name the lazier alternative in one line, user picks. **full** — the ladder enforced, shortest diff, shortest explanation. **ultra** — YAGNI extremist, ship the one-liner and challenge the rest of the requirement in the same breath. Switch any time with `/ponytail lite|full|ultra|off` (on OpenCode this command persists the level for the geneseed-ponytail plugin; `off` stops it).
9
+ 2. Before writing code, climb the ladder and stop at the first rung that holds — it is a reflex, not a research project: ① does this need to exist at all? Speculative need → skip it, say so in one line ({{LAW}} on scope). ② stdlib does it? ③ native platform feature covers it (`<input type="date">` over a picker lib, CSS over JS, a DB constraint over app code)? ④ an already-installed dependency solves it — never add a new one for what a few lines do? ⑤ can it be one line? ⑥ only then the minimum code that works.
10
+ 3. Build the lazy version: no abstraction with one implementation, no scaffolding "for later", deletion over addition, fewest files, shortest working diff. Reuse before authoring ({{LAW}} on reuse).
11
+ 4. Mark each deliberate simplification with a `ponytail:` comment naming the ceiling and upgrade path — `# ponytail: global lock, per-account locks if throughput matters` — so the shortcut reads as intent, not ignorance.
12
+ 5. Leave the check non-trivial logic needs (a branch, loop, parser, money/security path): one runnable `assert`-based self-check or one small `test_*.py`, the smallest thing that fails if the logic breaks. Trivial one-liners need none. **Never** simplify away input validation at trust boundaries, error handling that prevents data loss, security, accessibility basics, hardware calibration knobs, or anything explicitly requested — if the user insists on the full version, build it without re-arguing.
13
+ 6. Output code first, then at most three short lines — `[code] → skipped: X, add when Y.` If the explanation runs longer than the code, cut it; prose defending a simplification is complexity smuggled back in. Explanation the user explicitly asked for is not debt — give it in full.
14
+
15
+ ## Done when
16
+ - The shipped solution sits on the highest ladder rung that works, deliberate shortcuts carry a `ponytail:` comment with their upgrade path, non-trivial logic has one runnable check, and nothing on the never-simplify list was cut.
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}}: profile
2
+
3
+ > {{DESC_PROFILE}}
4
+
5
+ **Trigger:** the user wants the agent to know who they are — "set up my profile",
6
+ "create my profile", "update my profile" — a fresh install whose `PROFILE.md` is
7
+ still the untouched stub, or an existing profile visibly contradicts how the user
8
+ now works.
9
+
10
+ ## Procedure
11
+ 1. Locate `PROFILE.md` beside the deployed AGENT.md and read it ({{LAW}} III — the
12
+ real current file, not a remembered copy). The build seeds it once and never
13
+ overwrites it; if it is genuinely absent, start from the stub's three sections
14
+ (below) and note that a rebuild would have seeded it.
15
+ 2. **Interview, don't infer.** Ask short, concrete questions a few at a time —
16
+ a conversation, not a form dump — covering the stub's three sections:
17
+ - **Who I am** — role, domains known deeply, domains being learned, what they
18
+ usually come here to do.
19
+ - **How I work** — stack, shell, environment, conventions they hold to, the
20
+ things that reliably annoy them.
21
+ - **Register preferences** — terse or expansive, teach-me or just-do-it, how
22
+ much pushback they want, the language(s) they think in.
23
+ What the session has already shown — their tone, their corrections — may be
24
+ offered back as a *proposal to confirm*, never written as a silent conclusion.
25
+ Every section is optional: a declined question is dropped, not padded.
26
+ 3. **Keep identity and rules apart.** When an answer is really a standing rule
27
+ ("never push without asking"), route it to `user-rules.md` via the rule
28
+ {{SKILL}} and say so — the profile colours how
29
+ you work, it never binds. A durable project fact belongs in {{MEMORY}}, not here.
30
+ 4. Draft the profile in the stub's shape — the `##` sections above, short plain
31
+ prose, no placeholders left standing. Keep it lean: a profile is read every
32
+ session, and bloat dilutes the parts that matter.
33
+ 5. Show the full draft and wait for explicit consent ({{LAW}} IV) before writing
34
+ `PROFILE.md`. Remind the user the file is theirs — hand-editable any time, and
35
+ it survives updates, rebuilds, and theme switches.
36
+
37
+ **Refresh flow** (on request, or when the profile has drifted): read the current
38
+ file, name the drift plainly, and propose the specific edits — same consent gate
39
+ as creation, and never discard a section the user wrote by hand.
40
+
41
+ ## Done when
42
+ - `PROFILE.md` holds a consented, current picture of who the user is and how they
43
+ like to work — with anything that was really a rule or a fact routed to
44
+ `user-rules.md` or {{MEMORY}} instead — or the user declined, and the file is
45
+ untouched.
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,42 @@
1
+ # {{SKILL}}: prose
2
+
3
+ > {{DESC_PROSE}}
4
+
5
+ **Trigger:** about to hand a human written prose — a commit body, PR description,
6
+ doc, code comment, {{MEMORY}} note, or a written reply — and it should read like a
7
+ person wrote it, not a model.
8
+
9
+ ## Procedure
10
+ 1. Draft for content first, fix voice on a second pass — don't self-censor while
11
+ the idea is still forming.
12
+ 2. Cut throat-clearing and filler: openers like "In today's world", "It's worth
13
+ noting", "I'll help you", and hedges that carry no information.
14
+ 3. Active voice, human subject. Don't let inanimate things perform human actions
15
+ ("the test wants…", "the code believes…").
16
+ 4. Be concrete: swap vague abstractions and intensifiers for the specific fact,
17
+ number, or name. Drop adverbs propping up a weak verb ({{LAW}} XV — every word
18
+ earns its place).
19
+ 5. Vary rhythm: don't run three same-length sentences back to back, and break the
20
+ reflex "X, Y, and Z" triad when it shows up in every paragraph.
21
+ 6. Trust the reader: cut restatements, summaries of what you just said, and
22
+ quotable-sounding pronouncements. Remove decorative em-dashes.
23
+ 7. Read it once as the recipient. Rate 1–10 on directness, rhythm, reader-trust,
24
+ authentic voice, and density (how much is still cuttable); under ~35/50, cut
25
+ and revise before sending.
26
+
27
+ ## Done when
28
+ - The text says what it means in the fewest honest words, carries no AI tells,
29
+ and would pass as written by a careful human.
30
+
31
+ ## Self-improvement
32
+
33
+ Close each run with one beat of reflection on the {{SKILL}} itself:
34
+ - A step misled, a needed step was missing, or the trigger fired wrongly — that
35
+ is a flaw in this file. Propose the exact edit (trigger, procedure, or
36
+ done-when) and apply it with the user's assent ({{LAW}} II).
37
+ - A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
38
+ clears {{LAW}} VI's bar: it would change how a future session behaves, and a
39
+ fresh read of the repo would not re-derive it. Update an existing memory over
40
+ adding one; when in doubt, leave it out.
41
+ - No friction, nothing learned — move on; this loop earns no ceremony. Most
42
+ runs end here.
@@ -0,0 +1,44 @@
1
+ # {{SKILL}}: prototype
2
+
3
+ > {{DESC_PROTOTYPE}}
4
+
5
+ **Trigger:** a design question needs a runnable answer — "does this state
6
+ model feel right?" or "what should this look like?" — before committing to a
7
+ real implementation.
8
+
9
+ ## Procedure
10
+ 1. Name the question the prototype answers; the question decides the shape. A
11
+ logic or state question → a tiny interactive terminal app that pushes the
12
+ state machine through the cases that are hard to reason about on paper. A
13
+ UI question → several radically different variations on one route,
14
+ switchable at runtime. If ambiguous, pick from the surrounding code
15
+ (backend module → logic; page or component → UI) and state the assumption.
16
+ 2. Throwaway from day one, and marked as such: place it near the code it
17
+ prototypes for, but name it so a casual reader sees it is not production.
18
+ No persistence (state lives in memory), no tests, no error handling beyond
19
+ what makes it runnable, no abstractions ({{LAW}} XXV).
20
+ 3. One command to run, using the project's existing task runner — the user
21
+ must be able to start it without thinking.
22
+ 4. Surface the full relevant state after every action or variant switch, so
23
+ the user sees exactly what changed.
24
+ 5. When the question is answered: fold the validated decision into the real
25
+ code, record the verdict and the question it settled (issue comment, ADR,
26
+ or commit message), park the prototype on a throwaway branch, and keep the
27
+ main branch clean of prototype code.
28
+
29
+ ## Done when
30
+ - The question has a recorded verdict, the decision lives in the real code,
31
+ and no prototype code remains on the main branch.
32
+
33
+ ## Self-improvement
34
+
35
+ Close each run with one beat of reflection on the {{SKILL}} itself:
36
+ - A step misled, a needed step was missing, or the trigger fired wrongly — that
37
+ is a flaw in this file. Propose the exact edit (trigger, procedure, or
38
+ done-when) and apply it with the user's assent ({{LAW}} II).
39
+ - A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
40
+ clears {{LAW}} VI's bar: it would change how a future session behaves, and a
41
+ fresh read of the repo would not re-derive it. Update an existing memory over
42
+ adding one; when in doubt, leave it out.
43
+ - No friction, nothing learned — move on; this loop earns no ceremony. Most
44
+ runs end here.