geneseed 3.11.0 → 3.13.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 (265) hide show
  1. package/CHANGELOG.md +160 -0
  2. package/README.md +5 -5
  3. package/SHIPPED.md +2 -2
  4. package/adapters/bob/README.md +1 -1
  5. package/adapters/claude-code/README.md +1 -1
  6. package/adapters/openclaude/README.md +1 -1
  7. package/adapters/opencode/README.md +3 -3
  8. package/adapters/opencode/plugins/geneseed-guard.js +157 -2
  9. package/bin/geneseed-cli.mjs +4 -0
  10. package/docs/README.md +41 -22
  11. package/docs/concepts/agents.md +3 -1
  12. package/docs/concepts/collaboration.md +3 -1
  13. package/docs/concepts/exclusions.md +4 -2
  14. package/docs/concepts/footprint.md +3 -1
  15. package/docs/concepts/foreman-mode.md +4 -2
  16. package/docs/concepts/hook-gates.md +61 -0
  17. package/docs/concepts/hooks.md +8 -56
  18. package/docs/concepts/host-matrix.md +38 -0
  19. package/docs/concepts/hosts.md +6 -32
  20. package/docs/concepts/loop-branch.md +66 -0
  21. package/docs/concepts/loop-bricks.md +48 -0
  22. package/docs/concepts/loop-contracts.md +33 -0
  23. package/docs/concepts/loop-gates.md +30 -0
  24. package/docs/concepts/loop-notes.md +43 -0
  25. package/docs/concepts/loop-risk.md +36 -0
  26. package/docs/concepts/loop-templates.md +50 -0
  27. package/docs/concepts/loops.md +73 -0
  28. package/docs/concepts/lsp.md +2 -0
  29. package/docs/concepts/memory.md +3 -1
  30. package/docs/concepts/notebook.md +3 -1
  31. package/docs/concepts/rules.md +4 -2
  32. package/docs/concepts/skills.md +3 -1
  33. package/docs/concepts/themes.md +3 -1
  34. package/docs/extending.md +28 -8
  35. package/docs/guides/autostart.md +3 -1
  36. package/docs/guides/choose-your-setup.md +5 -66
  37. package/docs/guides/headless.md +5 -3
  38. package/docs/guides/install-agent-md.md +37 -0
  39. package/docs/guides/install-bob.md +20 -0
  40. package/docs/guides/install-claude-code.md +22 -0
  41. package/docs/guides/install-clone.md +34 -0
  42. package/docs/guides/install-openclaude.md +25 -0
  43. package/docs/guides/install-opencode.md +35 -0
  44. package/docs/guides/install-scripted.md +21 -0
  45. package/docs/guides/install.md +9 -118
  46. package/docs/guides/loop-finish.md +54 -0
  47. package/docs/guides/loop-running.md +66 -0
  48. package/docs/guides/loop-which-template.md +35 -0
  49. package/docs/guides/mcp-filesystem.md +41 -0
  50. package/docs/guides/mcp-gitlab.md +66 -0
  51. package/docs/guides/mcp-markitdown.md +36 -0
  52. package/docs/guides/mcp.md +8 -137
  53. package/docs/guides/migrate.md +3 -1
  54. package/docs/guides/project-context.md +4 -2
  55. package/docs/guides/read-non-markdown.md +17 -0
  56. package/docs/guides/run-a-loop.md +64 -0
  57. package/docs/guides/run-anywhere.md +2 -0
  58. package/docs/guides/setup-doctrines.md +55 -0
  59. package/docs/guides/setup-footprint.md +48 -0
  60. package/docs/guides/uninstall.md +3 -1
  61. package/docs/guides/upgrade.md +3 -1
  62. package/docs/guides/verify.md +3 -1
  63. package/docs/guides/wiki.md +3 -1
  64. package/docs/guides/worktree.md +3 -1
  65. package/docs/reference/about.md +3 -1
  66. package/docs/reference/cli.md +2 -0
  67. package/docs/reference/env-context.md +40 -0
  68. package/docs/reference/environment.md +10 -59
  69. package/docs/reference/glossary.md +7 -1
  70. package/docs/reference/loop-actions.md +20 -0
  71. package/docs/reference/opencode-plugins.md +14 -116
  72. package/docs/reference/plugin-activity.md +20 -0
  73. package/docs/reference/plugin-context.md +27 -0
  74. package/docs/reference/plugin-guard.md +27 -0
  75. package/docs/reference/plugin-learn.md +27 -0
  76. package/docs/reference/plugin-notify.md +20 -0
  77. package/docs/reference/plugin-ponytail.md +19 -0
  78. package/docs/reference/plugin-workflow.md +25 -0
  79. package/docs/reference/troubleshoot-doctor.md +50 -0
  80. package/docs/reference/troubleshoot-hooks.md +99 -0
  81. package/docs/reference/troubleshoot-install.md +108 -0
  82. package/docs/reference/troubleshoot-tools.md +56 -0
  83. package/docs/reference/troubleshoot-update.md +23 -0
  84. package/docs/reference/troubleshoot-web.md +66 -0
  85. package/docs/reference/troubleshooting.md +13 -337
  86. package/docs/understand/a-day.md +3 -1
  87. package/docs/understand/enforced-vs-asked.md +3 -1
  88. package/docs/understand/harness.md +2 -0
  89. package/docs/understand/machine-bob.md +17 -0
  90. package/docs/understand/machine-claude.md +35 -0
  91. package/docs/understand/machine-opencode.md +36 -0
  92. package/docs/understand/on-your-machine.md +12 -55
  93. package/docs/understand/take-it-out.md +13 -0
  94. package/docs/web-ui.md +36 -5
  95. package/harness.config.json +1 -1
  96. package/js/README.md +32 -2
  97. package/js/build/driver.mjs +14 -8
  98. package/js/build/generate.mjs +10 -6
  99. package/js/build/render.mjs +5 -0
  100. package/js/build/source.mjs +5 -1
  101. package/js/cli-table.json +261 -0
  102. package/js/hosts/gitref.mjs +99 -0
  103. package/js/hosts/hooks.mjs +88 -1
  104. package/js/hosts/installs.mjs +21 -0
  105. package/js/hosts/mcp.mjs +1 -1
  106. package/js/hosts/native.mjs +43 -5
  107. package/js/inspect/checks-authoring.mjs +10 -0
  108. package/js/inspect/checks-build.mjs +28 -0
  109. package/js/inspect/diff.mjs +3 -0
  110. package/js/inspect/doctor.mjs +2 -1
  111. package/js/inspect/inventory.mjs +1 -0
  112. package/js/inspect/status.mjs +1 -1
  113. package/js/loop/catalog.mjs +127 -0
  114. package/js/loop/cli.mjs +173 -0
  115. package/js/loop/graph.mjs +163 -0
  116. package/js/loop/registry.mjs +196 -0
  117. package/js/loop/score.mjs +182 -0
  118. package/js/loop/state.mjs +436 -0
  119. package/js/maintain/migrate.mjs +4 -2
  120. package/js/maintain/setup.mjs +1 -1
  121. package/js/web/actions.mjs +34 -3
  122. package/js/web/api.mjs +51 -2
  123. package/js/web/daemon.mjs +43 -5
  124. package/js/web/docs.mjs +64 -12
  125. package/js/web/handler.mjs +1 -0
  126. package/js/web/jobs.mjs +3 -1
  127. package/js/web/routes.mjs +5 -1
  128. package/js/web/server.mjs +5 -3
  129. package/package.json +1 -1
  130. package/registry.json +14 -0
  131. package/src/AGENT.md.tmpl +2 -0
  132. package/src/agents/explorer.md +2 -2
  133. package/src/agents/researcher.md +3 -3
  134. package/src/bricks/README.md +34 -0
  135. package/src/bricks/_template.md +32 -0
  136. package/src/bricks/adr-challenge.md +20 -0
  137. package/src/bricks/adr-draft.md +15 -0
  138. package/src/bricks/apply.md +17 -0
  139. package/src/bricks/baseline-green.md +17 -0
  140. package/src/bricks/bruno-test.md +16 -0
  141. package/src/bricks/characterize.md +17 -0
  142. package/src/bricks/ci-fix.md +18 -0
  143. package/src/bricks/ci-triage.md +20 -0
  144. package/src/bricks/compat-check.md +16 -0
  145. package/src/bricks/deps-audit.md +14 -0
  146. package/src/bricks/docs-update.md +15 -0
  147. package/src/bricks/done-check.md +16 -0
  148. package/src/bricks/fitness-define.md +22 -0
  149. package/src/bricks/flake-check.md +17 -0
  150. package/src/bricks/flake-repro.md +18 -0
  151. package/src/bricks/identify.md +23 -0
  152. package/src/bricks/lint.md +14 -0
  153. package/src/bricks/migration-plan.md +21 -0
  154. package/src/bricks/mutation-check.md +18 -0
  155. package/src/bricks/plan.md +17 -0
  156. package/src/bricks/red-test.md +16 -0
  157. package/src/bricks/reproduce.md +16 -0
  158. package/src/bricks/review.md +19 -0
  159. package/src/bricks/security-scan.md +17 -0
  160. package/src/bricks/spec.md +18 -0
  161. package/src/bricks/test.md +14 -0
  162. package/src/bricks/upgrade-scout.md +16 -0
  163. package/src/doctrines/process.md +11 -8
  164. package/src/loops/api-endpoint.json +31 -0
  165. package/src/loops/architecture-decision.json +22 -0
  166. package/src/loops/bugfix.json +23 -0
  167. package/src/loops/ci-repair.json +19 -0
  168. package/src/loops/deps-upgrade.json +29 -0
  169. package/src/loops/enforce-architecture-rule.json +28 -0
  170. package/src/loops/feature.json +24 -0
  171. package/src/loops/fix-flaky-tests.json +30 -0
  172. package/src/loops/legacy-refactor.json +26 -0
  173. package/src/loops/legacy-tests.json +29 -0
  174. package/src/loops/refactor.json +24 -0
  175. package/src/loops/remove-dead-code.json +30 -0
  176. package/src/loops/spec-first-feature.json +29 -0
  177. package/src/loops/tdd.json +25 -0
  178. package/src/loops/update-contract.json +33 -0
  179. package/src/skills/brick-forge.md +48 -0
  180. package/src/skills/bruno-collection-generator.md +3 -3
  181. package/src/skills/bruno-test-writer.md +3 -3
  182. package/src/skills/ci-fix.md +3 -3
  183. package/src/skills/consolidate-memory.md +4 -4
  184. package/src/skills/council.md +1 -1
  185. package/src/skills/fresh-eyes.md +1 -1
  186. package/src/skills/geneseed.md +1 -1
  187. package/src/skills/git-archaeology.md +1 -1
  188. package/src/skills/git-rescue.md +4 -3
  189. package/src/skills/handoff.md +1 -1
  190. package/src/skills/herdr.md +1 -1
  191. package/src/skills/learn-mode.md +2 -2
  192. package/src/skills/loop.md +111 -0
  193. package/src/skills/opencode-theme.md +3 -3
  194. package/src/skills/ponytail.md +1 -1
  195. package/src/skills/profile.md +3 -4
  196. package/src/skills/prose.md +2 -3
  197. package/src/skills/quiz.md +1 -1
  198. package/src/skills/react-view-transitions/SKILL.md +1 -1
  199. package/src/skills/react-view-transitions/VENDOR.md +8 -3
  200. package/src/skills/research.md +3 -3
  201. package/src/skills/review-response.md +2 -2
  202. package/src/skills/rule.md +3 -3
  203. package/src/skills/security-audit.md +4 -4
  204. package/src/skills/teach.md +1 -1
  205. package/src/skills/wiki.md +3 -3
  206. package/src/skills/workflow.md +4 -4
  207. package/src/skills/worktree.md +2 -2
  208. package/themes/_TEMPLATE.json +2 -0
  209. package/themes/biker.json +2 -0
  210. package/themes/commentator.json +2 -0
  211. package/themes/cyberpunk.json +2 -0
  212. package/themes/gamer.json +2 -0
  213. package/themes/imperial.json +2 -0
  214. package/themes/joker.json +2 -0
  215. package/themes/marvin.json +2 -0
  216. package/themes/mean.json +2 -0
  217. package/themes/military.json +2 -0
  218. package/themes/neutral.json +2 -0
  219. package/themes/pirate.json +2 -0
  220. package/themes/sports.json +2 -0
  221. package/themes/verstappen.json +2 -0
  222. package/themes/wizard.json +2 -0
  223. package/web/dist/assets/Activity-Ca2Aruu7.js +1 -0
  224. package/web/dist/assets/ActivityDetail-Bo7v4Z_r.js +1 -0
  225. package/web/dist/assets/Dashboard-BuMq46aT.js +2 -0
  226. package/web/dist/assets/Docs-BzccCllG.js +5 -0
  227. package/web/dist/assets/FilterInput-CBcJBQPI.js +1 -0
  228. package/web/dist/assets/GreenhouseView-BCIKcnGG.js +2 -0
  229. package/web/dist/assets/Installs-DMFJvq7s.js +2 -0
  230. package/web/dist/assets/JournalView-o1rmd1_1.js +1 -0
  231. package/web/dist/assets/Laws-BANxq_I_.js +3 -0
  232. package/web/dist/assets/Library-DW4x0fbh.js +1 -0
  233. package/web/dist/assets/Loops-DEBibbBP.js +2 -0
  234. package/web/dist/assets/{Markdown-qjM2_ofS.js → Markdown-CdTX0kLe.js} +14 -14
  235. package/web/dist/assets/OperatorHudView-CLD0fYaA.js +2 -0
  236. package/web/dist/assets/Personal-6uMJvyBG.js +1 -0
  237. package/web/dist/assets/Tabs-BubnyZhF.js +1 -0
  238. package/web/dist/assets/activity-CObqyxkL.js +1 -0
  239. package/web/dist/assets/{api-Dc8f3ca-.js → api-D_ixdyEY.js} +1 -1
  240. package/web/dist/assets/drawable-C_x5xncq.js +1 -0
  241. package/web/dist/assets/index-CMPgezFm.js +2 -0
  242. package/web/dist/assets/index-DMsT4Aa6.css +1 -0
  243. package/web/dist/assets/{react-B9Z_tXRV.js → react-Bbzhmq4v.js} +1 -1
  244. package/web/dist/assets/rolldown-runtime-hePW80VL.js +1 -0
  245. package/web/dist/assets/sections-Dg23Hel5.js +1 -0
  246. package/web/dist/assets/usePoll-BOqeunzF.js +1 -0
  247. package/web/dist/index.html +6 -5
  248. package/web/dist/assets/Activity-C52LEb-2.js +0 -1
  249. package/web/dist/assets/ActivityDetail-CjNLRvXg.js +0 -1
  250. package/web/dist/assets/Dashboard-B6_sSCHi.js +0 -2
  251. package/web/dist/assets/Docs-Dj7BmCSA.js +0 -5
  252. package/web/dist/assets/FilterInput-CVyqmYWM.js +0 -1
  253. package/web/dist/assets/GreenhouseView-BALwjQsA.js +0 -2
  254. package/web/dist/assets/Installs-BbffDQm3.js +0 -2
  255. package/web/dist/assets/JournalView-JpAQ8Hqe.js +0 -1
  256. package/web/dist/assets/Laws-DK7eCWSm.js +0 -3
  257. package/web/dist/assets/Library-CoamHelE.js +0 -1
  258. package/web/dist/assets/OperatorHudView-DVx1HlBx.js +0 -2
  259. package/web/dist/assets/Personal-eaXb1zcj.js +0 -1
  260. package/web/dist/assets/Tabs-BmGtt8E2.js +0 -1
  261. package/web/dist/assets/drawable-Du_PZrQj.js +0 -1
  262. package/web/dist/assets/index-Bz_KMRDH.css +0 -1
  263. package/web/dist/assets/index-CNFH7o55.js +0 -2
  264. package/web/dist/assets/sections-GalMS0Zv.js +0 -1
  265. package/web/dist/assets/usePoll-O0sJEw1Y.js +0 -1
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "ci-repair",
3
+ "description": "Read the branch's failing CI checks, fix one code failure per iteration, test, and push, until CI is green or only flaky or infra failures remain.",
4
+ "category": "day-to-day",
5
+ "nodes": ["ci-triage", "ci-fix", "test"],
6
+ "start": "ci-triage",
7
+ "edges": [
8
+ { "from": "ci-triage", "on": "more", "to": "ci-fix" },
9
+ { "from": "ci-triage", "on": "done", "to": "$close" },
10
+ { "from": "ci-fix", "on": "pass", "to": "test" },
11
+ { "from": "ci-fix", "on": "fail", "to": "$stop" },
12
+ { "from": "test", "on": "pass", "to": "ci-triage" },
13
+ { "from": "test", "on": "fail", "to": "ci-fix" }
14
+ ],
15
+ "loops": [
16
+ { "name": "iterations", "nodes": ["ci-triage", "ci-fix", "test"], "max": 10, "iteration": true },
17
+ { "name": "fix-test", "nodes": ["ci-fix", "test"], "max": 3 }
18
+ ]
19
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "name": "deps-upgrade",
3
+ "description": "Confirm the suite is green, then upgrade one package or group per iteration: read its breaking changes, bump and adapt, test, audit, and review, until every named package is upgraded.",
4
+ "category": "day-to-day",
5
+ "rules": [
6
+ "The card's write set names the manifest, the lockfile and every file the bump adapts."
7
+ ],
8
+ "nodes": ["baseline-green", "upgrade-scout", "apply", "test", "deps-audit", "review"],
9
+ "start": "baseline-green",
10
+ "edges": [
11
+ { "from": "baseline-green", "on": "pass", "to": "upgrade-scout" },
12
+ { "from": "baseline-green", "on": "fail", "to": "$stop" },
13
+ { "from": "upgrade-scout", "on": "more", "to": "apply" },
14
+ { "from": "upgrade-scout", "on": "done", "to": "$close" },
15
+ { "from": "apply", "on": "pass", "to": "test" },
16
+ { "from": "test", "on": "pass", "to": "deps-audit" },
17
+ { "from": "test", "on": "fail", "to": "apply" },
18
+ { "from": "deps-audit", "on": "pass", "to": "review" },
19
+ { "from": "deps-audit", "on": "fail", "to": "apply" },
20
+ { "from": "review", "on": "pass", "to": "upgrade-scout" },
21
+ { "from": "review", "on": "fail", "to": "apply" }
22
+ ],
23
+ "loops": [
24
+ { "name": "iterations", "nodes": ["upgrade-scout", "apply", "test", "deps-audit", "review"], "max": 20, "iteration": true },
25
+ { "name": "apply-test", "nodes": ["apply", "test"], "max": 5 },
26
+ { "name": "review-fix", "nodes": ["apply", "test", "deps-audit", "review"], "max": 3 }
27
+ ],
28
+ "ignoreDeletions": ["**/package-lock.json", "**/yarn.lock", "**/pnpm-lock.yaml", "**/*.lock", "**/gradle.lockfile"]
29
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "enforce-architecture-rule",
3
+ "description": "Confirm the suite is green, encode the requirement's architecture rule as a test with an allowlist of today's violations for the user to review, then fix one violation per iteration, test, and review, until the allowlist is empty.",
4
+ "category": "architecture",
5
+ "rules": [
6
+ "Each fix removes its violation's allowlist entry in the same iteration."
7
+ ],
8
+ "nodes": ["baseline-green", "fitness-define", "identify", "apply", "test", "review"],
9
+ "start": "baseline-green",
10
+ "edges": [
11
+ { "from": "baseline-green", "on": "pass", "to": "fitness-define" },
12
+ { "from": "baseline-green", "on": "fail", "to": "$stop" },
13
+ { "from": "fitness-define", "on": "pass", "to": "identify" },
14
+ { "from": "fitness-define", "on": "fail", "to": "$stop" },
15
+ { "from": "identify", "on": "more", "to": "apply" },
16
+ { "from": "identify", "on": "done", "to": "$close" },
17
+ { "from": "apply", "on": "pass", "to": "test" },
18
+ { "from": "test", "on": "pass", "to": "review" },
19
+ { "from": "test", "on": "fail", "to": "apply" },
20
+ { "from": "review", "on": "pass", "to": "identify" },
21
+ { "from": "review", "on": "fail", "to": "apply" }
22
+ ],
23
+ "loops": [
24
+ { "name": "iterations", "nodes": ["identify", "apply", "test", "review"], "max": 20, "iteration": true },
25
+ { "name": "apply-test", "nodes": ["apply", "test"], "max": 5 },
26
+ { "name": "review-fix", "nodes": ["apply", "test", "review"], "max": 3 }
27
+ ]
28
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "name": "feature",
3
+ "description": "Plan the feature into ordered iterations, then build each one: apply, test, and review, until the plan is complete — and an independent done-check maps every requirement to a passing test before the loop closes.",
4
+ "category": "development",
5
+ "nodes": ["plan", "identify", "apply", "test", "review", "done-check"],
6
+ "start": "plan",
7
+ "edges": [
8
+ { "from": "plan", "on": "pass", "to": "identify" },
9
+ { "from": "identify", "on": "more", "to": "apply" },
10
+ { "from": "identify", "on": "done", "to": "done-check" },
11
+ { "from": "apply", "on": "pass", "to": "test" },
12
+ { "from": "test", "on": "pass", "to": "review" },
13
+ { "from": "test", "on": "fail", "to": "apply" },
14
+ { "from": "review", "on": "pass", "to": "identify" },
15
+ { "from": "review", "on": "fail", "to": "apply" },
16
+ { "from": "done-check", "on": "pass", "to": "$close" },
17
+ { "from": "done-check", "on": "fail", "to": "identify" }
18
+ ],
19
+ "loops": [
20
+ { "name": "iterations", "nodes": ["identify", "apply", "test", "review", "done-check"], "max": 20, "iteration": true },
21
+ { "name": "apply-test", "nodes": ["apply", "test"], "max": 5 },
22
+ { "name": "review-fix", "nodes": ["apply", "test", "review"], "max": 3 }
23
+ ]
24
+ }
@@ -0,0 +1,30 @@
1
+ {
2
+ "name": "fix-flaky-tests",
3
+ "description": "Confirm the suspected flaky tests by 20 repeated runs, then fix one per iteration at its root cause, re-confirm it with 20 runs, test, and review.",
4
+ "category": "tests",
5
+ "rules": [
6
+ "Fix at the root cause — shared state, ordering, time, concurrency — never with a retry, a sleep or a longer timeout.",
7
+ "A test that fails every run is a bug for the bugfix template; one that never fails is not fixed."
8
+ ],
9
+ "nodes": ["flake-repro", "identify", "apply", "flake-check", "test", "review"],
10
+ "start": "flake-repro",
11
+ "edges": [
12
+ { "from": "flake-repro", "on": "flaky", "to": "identify" },
13
+ { "from": "flake-repro", "on": "stable", "to": "$stop" },
14
+ { "from": "flake-repro", "on": "broken", "to": "$stop" },
15
+ { "from": "identify", "on": "more", "to": "apply" },
16
+ { "from": "identify", "on": "done", "to": "$close" },
17
+ { "from": "apply", "on": "pass", "to": "flake-check" },
18
+ { "from": "flake-check", "on": "stable", "to": "test" },
19
+ { "from": "flake-check", "on": "flaky", "to": "apply" },
20
+ { "from": "test", "on": "pass", "to": "review" },
21
+ { "from": "test", "on": "fail", "to": "apply" },
22
+ { "from": "review", "on": "pass", "to": "identify" },
23
+ { "from": "review", "on": "fail", "to": "apply" }
24
+ ],
25
+ "loops": [
26
+ { "name": "iterations", "nodes": ["identify", "apply", "flake-check", "test", "review"], "max": 10, "iteration": true },
27
+ { "name": "stabilise", "nodes": ["apply", "flake-check"], "max": 4 },
28
+ { "name": "review-fix", "nodes": ["apply", "flake-check", "test", "review"], "max": 3 }
29
+ ]
30
+ }
@@ -0,0 +1,26 @@
1
+ {
2
+ "name": "legacy-refactor",
3
+ "description": "Confirm the suite is green, pin the code's current behaviour with characterization tests in their own commit, then refactor behind that net: apply, test, and review, until the requirement is met.",
4
+ "category": "refactoring",
5
+ "nodes": ["baseline-green", "characterize", "identify", "apply", "test", "review"],
6
+ "start": "baseline-green",
7
+ "edges": [
8
+ { "from": "baseline-green", "on": "pass", "to": "characterize" },
9
+ { "from": "baseline-green", "on": "fail", "to": "$stop" },
10
+ { "from": "characterize", "on": "pass", "to": "identify" },
11
+ { "from": "characterize", "on": "fail", "to": "$stop" },
12
+ { "from": "identify", "on": "more", "to": "apply" },
13
+ { "from": "identify", "on": "done", "to": "$close" },
14
+ { "from": "apply", "on": "pass", "to": "test" },
15
+ { "from": "test", "on": "pass", "to": "review" },
16
+ { "from": "test", "on": "fail", "to": "apply" },
17
+ { "from": "review", "on": "pass", "to": "identify" },
18
+ { "from": "review", "on": "fail", "to": "apply" }
19
+ ],
20
+ "loops": [
21
+ { "name": "iterations", "nodes": ["identify", "apply", "test", "review"], "max": 20, "iteration": true },
22
+ { "name": "apply-test", "nodes": ["apply", "test"], "max": 5 },
23
+ { "name": "review-fix", "nodes": ["apply", "test", "review"], "max": 3 }
24
+ ],
25
+ "weights": { "logic": 0.6 }
26
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "name": "legacy-tests",
3
+ "description": "Confirm the suite is green, then pin legacy behaviour one change point at a time: characterization tests, a run, and a mutation check that proves they bite.",
4
+ "category": "tests",
5
+ "rules": [
6
+ "Tests only: production code is never touched."
7
+ ],
8
+ "nodes": ["baseline-green", "identify", "characterize", "test", "mutation-check"],
9
+ "start": "baseline-green",
10
+ "edges": [
11
+ { "from": "baseline-green", "on": "pass", "to": "identify" },
12
+ { "from": "baseline-green", "on": "fail", "to": "$stop" },
13
+ { "from": "identify", "on": "more", "to": "characterize" },
14
+ { "from": "identify", "on": "done", "to": "$close" },
15
+ { "from": "characterize", "on": "pass", "to": "test" },
16
+ { "from": "characterize", "on": "fail", "to": "$stop" },
17
+ { "from": "test", "on": "pass", "to": "mutation-check" },
18
+ { "from": "test", "on": "fail", "to": "characterize" },
19
+ { "from": "mutation-check", "on": "pass", "to": "identify" },
20
+ { "from": "mutation-check", "on": "fail", "to": "characterize" },
21
+ { "from": "mutation-check", "on": "unavailable", "to": "identify" }
22
+ ],
23
+ "loops": [
24
+ { "name": "iterations", "nodes": ["identify", "characterize", "test", "mutation-check"], "max": 20, "iteration": true },
25
+ { "name": "write-run", "nodes": ["characterize", "test"], "max": 3 },
26
+ { "name": "kill-mutants", "nodes": ["characterize", "test", "mutation-check"], "max": 3 }
27
+ ],
28
+ "weights": { "new-file": 0.2 }
29
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "name": "refactor",
3
+ "description": "Confirm the suite is green before touching anything, then iterate on the shape of the code alone.",
4
+ "category": "refactoring",
5
+ "rules": [
6
+ "Tests are not edited: a refactor that needs a different test is a behaviour change, not a refactor."
7
+ ],
8
+ "nodes": ["baseline-green", "identify", "apply", "test"],
9
+ "start": "baseline-green",
10
+ "edges": [
11
+ { "from": "baseline-green", "on": "pass", "to": "identify" },
12
+ { "from": "baseline-green", "on": "fail", "to": "$stop" },
13
+ { "from": "identify", "on": "more", "to": "apply" },
14
+ { "from": "identify", "on": "done", "to": "$close" },
15
+ { "from": "apply", "on": "pass", "to": "test" },
16
+ { "from": "test", "on": "pass", "to": "identify" },
17
+ { "from": "test", "on": "fail", "to": "apply" }
18
+ ],
19
+ "loops": [
20
+ { "name": "iterations", "nodes": ["identify", "apply", "test"], "max": 20, "iteration": true },
21
+ { "name": "apply-test", "nodes": ["apply", "test"], "max": 5 }
22
+ ],
23
+ "weights": { "logic": 0.6 }
24
+ }
@@ -0,0 +1,30 @@
1
+ {
2
+ "name": "remove-dead-code",
3
+ "description": "Confirm the suite is green, then remove one coherent group of unused code per iteration — exports, classes, files, retired flags — test it, and review it. Deletions score soft, not blocking.",
4
+ "category": "refactoring",
5
+ "rules": [
6
+ "Each card's intent cites the proof it is unused: the requirement's tool output (knip, ts-prune, vulture, PMD or IntelliJ inspections) and a reference search (git grep over code AND resources) for reflection, DI by name, Spring bean names and config.",
7
+ "Generated sources do not count as unused.",
8
+ "Public entry points belong in LOOP.md's contracts, not in a deletion."
9
+ ],
10
+ "nodes": ["baseline-green", "identify", "apply", "test", "review"],
11
+ "start": "baseline-green",
12
+ "edges": [
13
+ { "from": "baseline-green", "on": "pass", "to": "identify" },
14
+ { "from": "baseline-green", "on": "fail", "to": "$stop" },
15
+ { "from": "identify", "on": "more", "to": "apply" },
16
+ { "from": "identify", "on": "done", "to": "$close" },
17
+ { "from": "apply", "on": "pass", "to": "test" },
18
+ { "from": "test", "on": "pass", "to": "review" },
19
+ { "from": "test", "on": "fail", "to": "apply" },
20
+ { "from": "review", "on": "pass", "to": "identify" },
21
+ { "from": "review", "on": "fail", "to": "apply" }
22
+ ],
23
+ "loops": [
24
+ { "name": "iterations", "nodes": ["identify", "apply", "test", "review"], "max": 20, "iteration": true },
25
+ { "name": "apply-test", "nodes": ["apply", "test"], "max": 5 },
26
+ { "name": "review-fix", "nodes": ["apply", "test", "review"], "max": 3 }
27
+ ],
28
+ "weights": { "delete": 0.5 },
29
+ "ignoreDeletions": ["**/generated/**", "**/generated-sources/**", "**/target/**", "**/build/generated/**"]
30
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "name": "spec-first-feature",
3
+ "description": "Write the feature's spec first — specs/<slug>/spec.md with EARS acceptance criteria and an ordered task list — for the user to review, commit it, then build it task by task: apply, test, review. An independent done-check maps every criterion to a passing test before the loop closes.",
4
+ "category": "development",
5
+ "rules": [
6
+ "One spec task per iteration, in the spec's order.",
7
+ "Open questions in the spec wait for the user's answers; never answer them yourself."
8
+ ],
9
+ "nodes": ["spec", "identify", "apply", "test", "review", "done-check"],
10
+ "start": "spec",
11
+ "edges": [
12
+ { "from": "spec", "on": "pass", "to": "identify" },
13
+ { "from": "spec", "on": "fail", "to": "$stop" },
14
+ { "from": "identify", "on": "more", "to": "apply" },
15
+ { "from": "identify", "on": "done", "to": "done-check" },
16
+ { "from": "apply", "on": "pass", "to": "test" },
17
+ { "from": "test", "on": "pass", "to": "review" },
18
+ { "from": "test", "on": "fail", "to": "apply" },
19
+ { "from": "review", "on": "pass", "to": "identify" },
20
+ { "from": "review", "on": "fail", "to": "apply" },
21
+ { "from": "done-check", "on": "pass", "to": "$close" },
22
+ { "from": "done-check", "on": "fail", "to": "identify" }
23
+ ],
24
+ "loops": [
25
+ { "name": "iterations", "nodes": ["identify", "apply", "test", "review", "done-check"], "max": 20, "iteration": true },
26
+ { "name": "apply-test", "nodes": ["apply", "test"], "max": 5 },
27
+ { "name": "review-fix", "nodes": ["apply", "test", "review"], "max": 3 }
28
+ ]
29
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "name": "tdd",
3
+ "description": "Plan the work, then build it test-first: each iteration writes a failing test, makes it pass, and reviews the diff, until the plan is complete.",
4
+ "category": "tests",
5
+ "nodes": ["plan", "identify", "red-test", "apply", "test", "review"],
6
+ "start": "plan",
7
+ "edges": [
8
+ { "from": "plan", "on": "pass", "to": "identify" },
9
+ { "from": "identify", "on": "more", "to": "red-test" },
10
+ { "from": "identify", "on": "done", "to": "$close" },
11
+ { "from": "red-test", "on": "red", "to": "apply" },
12
+ { "from": "red-test", "on": "green", "to": "test" },
13
+ { "from": "red-test", "on": "untestable", "to": "$stop" },
14
+ { "from": "apply", "on": "pass", "to": "test" },
15
+ { "from": "test", "on": "pass", "to": "review" },
16
+ { "from": "test", "on": "fail", "to": "apply" },
17
+ { "from": "review", "on": "pass", "to": "identify" },
18
+ { "from": "review", "on": "fail", "to": "apply" }
19
+ ],
20
+ "loops": [
21
+ { "name": "iterations", "nodes": ["identify", "red-test", "apply", "test", "review"], "max": 20, "iteration": true },
22
+ { "name": "apply-test", "nodes": ["apply", "test"], "max": 5 },
23
+ { "name": "review-fix", "nodes": ["apply", "test", "review"], "max": 3 }
24
+ ]
25
+ }
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "update-contract",
3
+ "description": "Change an interface with live consumers — an API, a schema, an event — as expand, migrate one consumer per iteration, contract: plan it for the user to review, then apply, test, check old and new consumers, and review.",
4
+ "category": "architecture",
5
+ "rules": [
6
+ "Contract files (OpenAPI, AsyncAPI, protobuf, Avro, GraphQL schemas, Flyway and Liquibase migrations) stop for a human by default; a stop on one is expected, not a failure.",
7
+ "`geneseed loop init --contracts <globs>` appends more contract globs, and LOOP.md's `contracts` can be trimmed."
8
+ ],
9
+ "nodes": ["migration-plan", "identify", "apply", "test", "compat-check", "review"],
10
+ "start": "migration-plan",
11
+ "edges": [
12
+ { "from": "migration-plan", "on": "pass", "to": "identify" },
13
+ { "from": "migration-plan", "on": "fail", "to": "$stop" },
14
+ { "from": "identify", "on": "more", "to": "apply" },
15
+ { "from": "identify", "on": "done", "to": "$close" },
16
+ { "from": "apply", "on": "pass", "to": "test" },
17
+ { "from": "test", "on": "pass", "to": "compat-check" },
18
+ { "from": "test", "on": "fail", "to": "apply" },
19
+ { "from": "compat-check", "on": "pass", "to": "review" },
20
+ { "from": "compat-check", "on": "fail", "to": "apply" },
21
+ { "from": "review", "on": "pass", "to": "identify" },
22
+ { "from": "review", "on": "fail", "to": "apply" }
23
+ ],
24
+ "loops": [
25
+ { "name": "iterations", "nodes": ["identify", "apply", "test", "compat-check", "review"], "max": 20, "iteration": true },
26
+ { "name": "apply-test", "nodes": ["apply", "test"], "max": 5 },
27
+ { "name": "review-fix", "nodes": ["apply", "test", "compat-check", "review"], "max": 3 }
28
+ ],
29
+ "contracts": [
30
+ "**/openapi*.yaml", "**/openapi*.yml", "**/openapi*.json", "**/asyncapi*.yaml", "**/*.proto", "**/*.avsc",
31
+ "**/*.graphqls", "**/*.graphql", "**/asyncapi*.yml", "**/asyncapi*.json", "**/db/migration/**", "**/db/changelog/**"
32
+ ]
33
+ }
@@ -0,0 +1,48 @@
1
+ # {{SKILL}}: brick-forge
2
+
3
+ > {{DESC_BRICK_FORGE}}
4
+
5
+ **Trigger:** the user wants a new loop brick, or to adapt an existing one to their stack — "make
6
+ a brick for…", "our tests run differently, change the `test` brick", "the loop needs a step
7
+ that…".
8
+
9
+ ## Procedure
10
+
11
+ 1. **Interview, one question at a time:**
12
+ - **name** — kebab-case, the file stem.
13
+ - **what it does** — one line; it becomes `description`.
14
+ - **effect** — does it ever create, edit or delete a file? Yes → `mutate`; never → `read`;
15
+ unsure → `mutate`. A `read` brick that writes stops the loop.
16
+ - **who runs it** — exactly one of an `agent` (one of the {{AGENTS}}) or a `skill`.
17
+ - **outcomes** — every result it can report, comma-separated. Each becomes an edge label a
18
+ loop graph must route (`{from, on: "<outcome>", to}`).
19
+ - **level** — project `<repo>/.geneseed/bricks/` (committed, shared with the team), global
20
+ `$XDG_CONFIG_HOME/geneseed/bricks/` (default `~/.config/geneseed/bricks/`, every project on
21
+ this machine), or shipped `src/bricks/` — only inside the Geneseed repository itself.
22
+ 2. **Write `<level>/<name>.md`**, the file stem equal to `name`:
23
+
24
+ ```
25
+ ---
26
+ name: <kebab-name>
27
+ description: <one line>
28
+ effect: read | mutate
29
+ agent: <agent> (or skill: <skill> — exactly one of the two)
30
+ outcomes: <a>, <b>
31
+ ---
32
+ <4-10 lines of direct instructions, ending with exactly how to choose among the outcomes>
33
+ ```
34
+
35
+ No double-brace tokens in the body: the loop hands it to the model raw. If the brick finds
36
+ something the next brick needs, have it write that to a file in the OS temp directory and
37
+ report the path with the outcome — the loop skill records it as a note.
38
+ 3. **Overriding by name** — a project or global brick named like a shipped one replaces it in
39
+ every template. That is allowed; say so to the user. `geneseed loop check` lists overrides under `overridden`.
40
+ 4. **Check it:** `geneseed loop check --brick <path>` (this file alone), then
41
+ `geneseed loop check` from the repository (the whole catalogue, including every template that
42
+ now routes through it). Fix every listed problem and re-run both.
43
+
44
+ ## Done when
45
+
46
+ - The brick file exists at the chosen level, and both checks print `ok: true`.
47
+
48
+ <!-- INCLUDE: skills/_self-improvement.md -->
@@ -3,9 +3,9 @@
3
3
  > {{DESC_BRUNO_COLLECTION_GENERATOR}}
4
4
 
5
5
  **Trigger:** creating, converting, or reorganising a [Bruno](https://www.usebruno.com/)
6
- collection — requests, folders, environments, request docs — from backend routes, an
7
- OpenAPI snippet, pasted API docs, curl commands, or a plain endpoint list, as `.bru`
8
- files or OpenCollection YAML.
6
+ collection as `.bru` files or OpenCollection YAML. The collection covers requests,
7
+ folders, environments and request docs; the source can be backend routes, an OpenAPI
8
+ snippet, pasted API docs, curl commands, or a plain endpoint list.
9
9
 
10
10
  ## Procedure
11
11
  1. Gather the inputs, and state every assumption you fill in ({{LAW:echo-the-intent}}): the source
@@ -3,9 +3,9 @@
3
3
  > {{DESC_BRUNO_TEST_WRITER}}
4
4
 
5
5
  **Trigger:** writing, reviewing, or strengthening tests for a [Bruno](https://www.usebruno.com/)
6
- request or collection — assertions, `tests` blocks, pre-request and post-response
7
- scripts, request chaining, schema checks, edge cases — in `.bru` files or
8
- OpenCollection YAML.
6
+ request or collection in `.bru` files or OpenCollection YAML. Covers assertions, `tests`
7
+ blocks, pre-request and post-response scripts, request chaining, schema checks, and
8
+ edge cases.
9
9
 
10
10
  ## Procedure
11
11
  1. Understand the request or collection first: method, path, auth, body, headers,
@@ -2,9 +2,9 @@
2
2
 
3
3
  > {{DESC_CI_FIX}}
4
4
 
5
- **Trigger:** a CI run, pipeline job, or pre-merge check is red — on a PR you opened, a
6
- branch you are on, or one the user points you at — or the user says "CI is failing",
7
- "fix the build", "why is the pipeline red". The [debug {{SKILL}}](debug.md) drives
5
+ **Trigger:** a CI run, pipeline job, or pre-merge check is red, or the user says "CI is
6
+ failing", "fix the build", "why is the pipeline red". The red run can be on a PR the agent
7
+ opened, the branch it is on, or one the user points at. The [debug {{SKILL}}](debug.md) drives
8
8
  the root-causing once the failure reproduces locally; this {{SKILL}} gets it there and
9
9
  gets the fix back through the same gate.
10
10
 
@@ -2,10 +2,10 @@
2
2
 
3
3
  > {{DESC_CONSOLIDATE_MEMORY}}
4
4
 
5
- **Trigger:** the {{MEMORY}} index has grown past what a session can usefully read
6
- (~40 lines), two entries say the same or opposite things, a memory names a file, flag,
7
- or command that no longer exists, a `feedback` lesson keeps recurring, or the user
8
- says "clean up memory", "consolidate", "what do you actually remember". Also worth a
5
+ **Trigger:** the {{MEMORY}} index has outgrown one useful read (~40 lines) or holds
6
+ duplicate, contradictory, or stale entries. Stale means a memory naming a file, flag, or
7
+ command that no longer exists; a `feedback` lesson that keeps recurring counts too, as
8
+ does the user saying "clean up memory", "consolidate", "what do you actually remember". Also worth a
9
9
  pass after a release or a large refactor, when many recorded facts just changed. The
10
10
  [rule {{SKILL}}](rule.md) writes one memory or one rule; this {{SKILL}} tends the
11
11
  whole set. The user's wiki is out of scope — that is the [wiki {{SKILL}}](wiki.md).
@@ -2,7 +2,7 @@
2
2
 
3
3
  > {{DESC_COUNCIL}}
4
4
 
5
- **Trigger:** the user asks to "convene a council", "debate this", "argue both sides", "stress-test this decision", or wants a change, plan, or claim challenged from several points of view before committing to it.
5
+ **Trigger:** the user asks to "convene a council", "debate this", or "argue both sides", or wants a decision stress-tested from several points of view. A change, plan, or claim all qualify, as long as it is challenged before committing to it.
6
6
 
7
7
  ## Procedure
8
8
  1. Frame the motion in one line — the exact decision, change, or claim under debate — and name what it feeds (a choice to make, a design to accept, a discussion to settle). Ground it in the real artifact and the project's own docs ({{DOCTRINE:read-the-docs-first}}) so the council argues the actual thing; if the motion is unclear or bundles several questions, split it and ask once, then proceed.
@@ -2,7 +2,7 @@
2
2
 
3
3
  > {{DESC_FRESH_EYES}}
4
4
 
5
- **Trigger:** a task is claimed done and the solving session believes the artifact works — before merge or handoff, or when the user asks to "validate", "fresh eyes", "prove it meets the spec", "did this actually solve it", or "independent sign-off", and the cost of a confidently-wrong "done" is high. This re-judges the *result* from zero context — distinct from [geneseed-code-review](geneseed-code-review.md), which reviews a *diff* with full knowledge of the change. For an open-ended quality critique use [roast-me](roast-me.md); for a multi-stance debate over an undecided question use [council](council.md).
5
+ **Trigger:** work is claimed done and needs a blind check against the original ask. That is before merge or handoff, while the solving session believes the artifact works, or when the user asks to "validate", "fresh eyes", "prove it meets the spec", "did this actually solve it", or "independent sign-off" — and the cost of a confidently-wrong "done" is high. This re-judges the *result* from zero context — distinct from [geneseed-code-review](geneseed-code-review.md), which reviews a *diff* with full knowledge of the change. For an open-ended quality critique use [roast-me](roast-me.md); for a multi-stance debate over an undecided question use [council](council.md).
6
6
 
7
7
  ## Procedure
8
8
  1. Capture the firewall input as TWO things and nothing else: (a) the **verbatim original task/spec** — the raw issue or request text, NOT a solver-written summary or "spec card" (a distilled card launders the solving session's framing into the rubric, the very bias this {{SKILL}} exists to defeat), and (b) a pointer to the **final artifact** as it stands — file paths, built output, or the command to run it. If the raw task is too thin to yield acceptance criteria, have the **user** (never the solver) confirm a one-line acceptance bar, then proceed ({{LAW:echo-the-intent}}); if it is too fuzzy even for that, this is a judgement call — convene [council](council.md) instead.
@@ -8,7 +8,7 @@
8
8
  1. **Locate.** Run `geneseed status --json` first: `installs` lists every install on this machine — host, scope, root, state, theme, footprint, posture, mode, packs, excluded rules — and `rebuild`, the command that reproduces each one exactly. `geneseed` not on PATH → ask the user before using `npx geneseed` (it downloads the package), and prefix every command below the same way. Still nothing → look for a host root file: `~/.config/opencode/AGENT.md` or `.opencode/AGENT.md` (OpenCode), `~/.claude/CLAUDE.md` or `.claude/` (Claude Code), `.openclaude/` (OpenClaude), `AGENTS.md` beside `.bob/` (Bob). None → say so; never install to "fix" it.
9
9
  2. **Read state** with the read-only verbs, cheapest first ({{DOCTRINE:context-economy}}): `geneseed status --json`, `geneseed version`, `geneseed catalog` (optionally `agents|skills|laws|ontology|doctrines`), `geneseed doctor`, `geneseed diff`, `geneseed mcp`, `geneseed memory list`, `geneseed exclude list`.
10
10
  3. **Read a piece** from disk, not from recall ({{LAW:verify-before-asserting}}): `<root>/agents/<name>.md`, `<root>/skills/<name>/SKILL.md`, `<root>/memory/`, `<root>/notebook/`. The {{ONTOLOGY}}, the {{LAWS}} and the active {{DOCTRINES}} are numbered `## N. …` sections of the install's root file.
11
- 4. **Change an install only when the user asked for that change** ({{LAW:one-intent-one-act}}). Take that install's `rebuild` command from step 1, edit only the flag the user named (add it if the command omits it — `--posture` and `--mode` are left out at their defaults) — `--theme`, `--footprint lean|full`, `--posture`, `--mode direct|foreman`, `--doctrines craft,rigor|none`, `--exclude-rules "process 7"|none` — dry-run it first by running the same flags through `geneseed validate`, show the command, and run it once the user agrees. Never rebuild from a bare `geneseed build`: every omitted flag resets that setting to the generator default. Confirm with `geneseed status`.
11
+ 4. **Change an install only when the user asked for that change** ({{LAW:one-intent-one-act}}). Take that install's `rebuild` command from step 1, edit only the flag the user named (add it if the command omits it — `--posture`, `--mode` and `--trust` are left out at their defaults) — `--theme`, `--footprint lean|full`, `--posture`, `--mode direct|foreman`, `--trust prudent|balanced|aggressive`, `--doctrines craft,rigor|none`, `--exclude-rules "process 7"|none` — dry-run it first by running the same flags through `geneseed validate`, show the command, and run it once the user agrees. Never rebuild from a bare `geneseed build`: every omitted flag resets that setting to the generator default. Confirm with `geneseed status`.
12
12
  5. **Other writes also need the user's word:** `geneseed memory rm <name>`, `geneseed exclude add|remove <path>`, `geneseed web start|stop`, `geneseed uninstall --target <root> --yes`. Personal rules and the profile belong to their own {{SKILLS}}; do not edit `user-rules.md` or `PROFILE.md` from here.
13
13
  6. **Never on your own initiative:** `geneseed setup` (interactive only), `geneseed upgrade`, `geneseed update`, `geneseed bootstrap`, `geneseed sync-self`, `geneseed rebuild-all`, `geneseed migrate`, `geneseed link`, `geneseed unlink`. `learn`, `context` and the `*-gate` verbs are `geneseed-hook` verbs the host's hooks run — never run them by hand.
14
14
  7. Directory and section names are plain English in every theme; only prose changes. Do not search by flavour words.
@@ -2,7 +2,7 @@
2
2
 
3
3
  > {{DESC_GIT_ARCHAEOLOGY}}
4
4
 
5
- **Trigger:** you need to learn something *from* the history — when a regression was
5
+ **Trigger:** something must be learned *from* the history — when a regression was
6
6
  introduced, who last touched a line and why, or where a symbol or string entered the
7
7
  codebase. Read-only: this {{SKILL}} investigates, it does not change history (to repair
8
8
  or rewrite, use git-rescue.md; to write a new commit, use commit.md).
@@ -2,9 +2,10 @@
2
2
 
3
3
  > {{DESC_GIT_RESCUE}}
4
4
 
5
- **Trigger:** the repository is in a broken or messy state — a bad rebase/merge/reset,
6
- lost commits, a detached HEAD, a half-finished operation, work stranded in a stash — or
7
- you intend to deliberately rewrite history (interactive rebase, squash, amend). For
5
+ **Trigger:** commits are lost, a rebase/merge/reset went wrong, or history is to be
6
+ deliberately rewritten (interactive rebase, squash, amend). The repository can also be
7
+ messy in other ways: a detached HEAD, a half-finished operation, or work stranded in a
8
+ stash. For
8
9
  finding *when/why* something changed without altering history, use git-archaeology.md.
9
10
 
10
11
  ## Procedure
@@ -2,7 +2,7 @@
2
2
 
3
3
  > {{DESC_HANDOFF}}
4
4
 
5
- **Trigger:** the context window is filling, a session is ending mid-task, or you're passing work to another agent or developer.
5
+ **Trigger:** the context window is filling, a session is ending mid-task, or work is passing to another agent or developer.
6
6
 
7
7
  ## Procedure
8
8
  1. Capture the state in the worklog (`WORKLOG.md` or the task's plan file): the goal, what's done, the step in progress, and the exact next step.
@@ -4,7 +4,7 @@
4
4
  > {{DESC_HERDR}}
5
5
  <!-- invocation: user -->
6
6
 
7
- **Trigger:** you are running inside a herdr-managed pane (`HERDR_ENV=1`) and a task would benefit from another pane — splitting off a server, watching a long-running build, spawning a sibling agent, or reading what a neighbour is doing. If `HERDR_ENV` is unset or not `1`, you are not inside herdr — stop and do not try to control panes from outside.
7
+ **Trigger:** the session runs inside a herdr-managed pane (`HERDR_ENV=1`) and a task would benefit from another pane. Typical cases: splitting off a server, watching a long-running build, spawning a sibling agent, or reading what a neighbour is doing. If `HERDR_ENV` is unset or not `1`, you are not inside herdr — stop and do not try to control panes from outside.
8
8
 
9
9
  **Requires:** `HERDR_ENV=1` in the environment and the `herdr` binary on `PATH`.
10
10
 
@@ -4,8 +4,8 @@
4
4
 
5
5
  <!-- invocation: user -->
6
6
 
7
- **Trigger:** the user wants to *learn while building* rather than be handed finished code —
8
- "learn mode", "turn on learning", "I want to understand what we build", "let me design it,
7
+ **Trigger:** the user wants to *learn while building* rather than be handed finished code.
8
+ Phrases: "learn mode", "turn on learning", "I want to understand what we build", "let me design it,
9
9
  you write it". Also "pause learning" / "resume learning" / "stop learn mode". To be taught a
10
10
  topic outside a build, use the [teach {{SKILL}}](teach.md); to have knowledge tested, the
11
11
  [quiz {{SKILL}}](quiz.md).