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