geneseed 3.2.0 → 3.4.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 (171) hide show
  1. package/CHANGELOG.md +150 -0
  2. package/README.md +24 -14
  3. package/SETUP.md +38 -7
  4. package/SHIPPED.md +6 -5
  5. package/adapters/bob/README.md +40 -10
  6. package/adapters/claude-code/README.md +5 -0
  7. package/adapters/claude-code/settings.json +8 -1
  8. package/adapters/copilot/README.md +52 -25
  9. package/adapters/opencode/README.md +11 -3
  10. package/adapters/opencode/plugins/geneseed-guard.js +40 -6
  11. package/bin/build-driver.mjs +16 -10
  12. package/bin/geneseed-cli.mjs +55 -56
  13. package/bin/geneseed-hook.mjs +21 -14
  14. package/docs/candidate-hosts.md +74 -0
  15. package/docs/extending.md +10 -8
  16. package/docs/token-footprint.md +32 -21
  17. package/docs/web/agents.md +1 -1
  18. package/docs/web/first-session.md +1 -1
  19. package/docs/web/skills.md +1 -1
  20. package/docs/web-ui.md +5 -13
  21. package/harness.config.json +1 -1
  22. package/js/README.md +5 -6
  23. package/js/build/emit-claude.mjs +22 -7
  24. package/js/build/render.mjs +37 -19
  25. package/js/build/source.mjs +22 -2
  26. package/js/cli-table.json +84 -0
  27. package/js/hosts/hooks.mjs +240 -78
  28. package/js/hosts/hosts.mjs +56 -2
  29. package/js/hosts/link.mjs +1 -1
  30. package/js/hosts/mcp.mjs +3 -1
  31. package/js/hosts/native.mjs +86 -15
  32. package/js/hosts/opencode.mjs +14 -0
  33. package/js/hosts/settings.mjs +173 -5
  34. package/js/inspect/excludes.mjs +1 -1
  35. package/js/inspect/inventory.mjs +13 -8
  36. package/js/inspect/status.mjs +50 -2
  37. package/js/maintain/uninstall.mjs +38 -11
  38. package/js/maintain/update.mjs +2 -2
  39. package/js/web/actions.mjs +8 -8
  40. package/js/web/api.mjs +5 -10
  41. package/js/web/docs.mjs +9 -31
  42. package/js/web/handler.mjs +20 -30
  43. package/js/web/jobs.mjs +5 -26
  44. package/js/web/routes.mjs +18 -84
  45. package/js/web/server.mjs +3 -3
  46. package/package.json +1 -1
  47. package/registry.json +99 -78
  48. package/src/AGENT.md.tmpl +69 -28
  49. package/src/agents/architect.md +4 -1
  50. package/src/agents/explorer.md +3 -1
  51. package/src/agents/operator.md +13 -0
  52. package/src/agents/pragmatist.md +12 -0
  53. package/src/agents/researcher.md +72 -0
  54. package/src/agents/security.md +7 -1
  55. package/src/agents/skeptic.md +2 -1
  56. package/src/agents/tester.md +5 -1
  57. package/src/agents/user-advocate.md +13 -0
  58. package/src/doctrines/README.md +3 -3
  59. package/src/doctrines/rigor.md +14 -1
  60. package/src/laws/universal.md +98 -20
  61. package/src/ontology/universal.md +38 -13
  62. package/src/skills/_self-improvement.md +19 -0
  63. package/src/skills/_template.md +6 -13
  64. package/src/skills/brainstorm.md +37 -19
  65. package/src/skills/bruno-collection-generator.md +52 -0
  66. package/src/skills/bruno-test-writer.md +51 -0
  67. package/src/skills/ci-fix.md +49 -0
  68. package/src/skills/codebase-design.md +1 -12
  69. package/src/skills/commit.md +1 -12
  70. package/src/skills/consolidate-memory.md +50 -0
  71. package/src/skills/council.md +1 -12
  72. package/src/skills/debug.md +1 -12
  73. package/src/skills/deps-audit.md +46 -0
  74. package/src/skills/develop.md +38 -20
  75. package/src/skills/document-project.md +1 -12
  76. package/src/skills/domain-modeling.md +1 -12
  77. package/src/skills/forge-mcp.md +2 -13
  78. package/src/skills/fresh-eyes.md +1 -12
  79. package/src/skills/frontend-design.md +1 -12
  80. package/src/skills/geneseed-code-review.md +1 -12
  81. package/src/skills/geneseed.md +1 -12
  82. package/src/skills/git-archaeology.md +1 -12
  83. package/src/skills/git-rescue.md +1 -12
  84. package/src/skills/handoff.md +1 -12
  85. package/src/skills/herdr.md +2 -12
  86. package/src/skills/ingest.md +1 -12
  87. package/src/skills/migrate.md +1 -12
  88. package/src/skills/opencode-theme.md +2 -12
  89. package/src/skills/parallel-agents.md +1 -12
  90. package/src/skills/pipeline.md +2 -13
  91. package/src/skills/plan.md +1 -12
  92. package/src/skills/ponytail.md +1 -12
  93. package/src/skills/profile.md +1 -12
  94. package/src/skills/prose.md +1 -12
  95. package/src/skills/prototype.md +1 -12
  96. package/src/skills/quiz.md +43 -0
  97. package/src/skills/refactor.md +1 -12
  98. package/src/skills/release.md +1 -12
  99. package/src/skills/repo-map.md +1 -12
  100. package/src/skills/research.md +6 -14
  101. package/src/skills/review-response.md +1 -12
  102. package/src/skills/roast-me.md +1 -12
  103. package/src/skills/rule.md +1 -12
  104. package/src/skills/security-audit.md +51 -0
  105. package/src/skills/ship.md +1 -12
  106. package/src/skills/skill-forge.md +59 -0
  107. package/src/skills/teach.md +50 -0
  108. package/src/skills/tickets.md +1 -12
  109. package/src/skills/wayfinder.md +1 -12
  110. package/src/skills/wiki.md +1 -12
  111. package/src/skills/workflow.md +74 -26
  112. package/src/skills/worktree.md +52 -0
  113. package/themes/_TEMPLATE.json +12 -8
  114. package/themes/biker.json +12 -8
  115. package/themes/commentator.json +12 -8
  116. package/themes/cyberpunk.json +12 -8
  117. package/themes/gamer.json +12 -8
  118. package/themes/imperial.json +12 -8
  119. package/themes/joker.json +12 -8
  120. package/themes/marvin.json +12 -8
  121. package/themes/mean.json +12 -8
  122. package/themes/military.json +12 -8
  123. package/themes/neutral.json +12 -8
  124. package/themes/pirate.json +12 -8
  125. package/themes/sports.json +12 -8
  126. package/themes/verstappen.json +12 -8
  127. package/themes/wizard.json +12 -8
  128. package/web/dist/assets/Activity-DMGhhjQc.js +1 -0
  129. package/web/dist/assets/ActivityDetail-CeQcDA7e.js +1 -0
  130. package/web/dist/assets/{CatalogRow-DqS4e5XM.js → CatalogRow-CnSbDPyg.js} +1 -1
  131. package/web/dist/assets/{Diff-CIrGbiqm.js → Diff-D_ksMBD1.js} +1 -1
  132. package/web/dist/assets/{Doctor-CpI53oHY.js → Doctor-Brb3_oCT.js} +1 -1
  133. package/web/dist/assets/FilterInput-DbRWPhtT.js +1 -0
  134. package/web/dist/assets/GreenhouseView-F3VNFr73.js +2 -0
  135. package/web/dist/assets/{Harness-vRYs11kX.js → Harness-DJSwfYeF.js} +1 -1
  136. package/web/dist/assets/JournalView-BLRYRnB3.js +1 -0
  137. package/web/dist/assets/Laws-CKYns9qe.js +3 -0
  138. package/web/dist/assets/Library-BK0YloSv.js +1 -0
  139. package/web/dist/assets/{Markdown-kgpg9EQM.js → Markdown-BzTRzc7a.js} +1 -1
  140. package/web/dist/assets/OperatorHudView-D3OQSGp5.js +2 -0
  141. package/web/dist/assets/{Profile-CHr-PPf6.js → Profile-CPA2u_0g.js} +1 -1
  142. package/web/dist/assets/{Rules-CsC6hfqk.js → Rules-Lukel-Ru.js} +1 -1
  143. package/web/dist/assets/Skills-BKRLHH7m.js +1 -0
  144. package/web/dist/assets/{StatusBadge-gRrak0nO.js → StatusBadge-DI3weRKd.js} +1 -1
  145. package/web/dist/assets/{activity-B0-FXZCj.js → activity-C_H2Bx1P.js} +1 -1
  146. package/web/dist/assets/{index-Bx3I7cRW.js → index-B7_Wga23.js} +1 -1
  147. package/web/dist/assets/index-DzdQjvM1.css +1 -0
  148. package/web/dist/assets/{index-DJOhOwwR.js → index-N8dTrVro.js} +1 -1
  149. package/web/dist/assets/index-Py_IQjgK.js +10 -0
  150. package/web/dist/assets/jobBuckets-DfTUJUxR.js +1 -0
  151. package/web/dist/assets/lawCats-DUS9UTH4.js +1 -0
  152. package/web/dist/index.html +2 -2
  153. package/web/src/pages/Laws.jsx +82 -64
  154. package/js/web/graph.mjs +0 -0
  155. package/src/skills/clarify.md +0 -28
  156. package/src/skills/crash-course.md +0 -28
  157. package/src/skills/decode.md +0 -28
  158. package/src/skills/drill.md +0 -28
  159. package/src/skills/feynman.md +0 -26
  160. package/src/skills/gap-detector.md +0 -27
  161. package/src/skills/learning-path.md +0 -26
  162. package/src/skills/tdd.md +0 -31
  163. package/web/dist/assets/Activity-BTCG2gMl.js +0 -1
  164. package/web/dist/assets/ActivityDetail-julsmPDB.js +0 -1
  165. package/web/dist/assets/Graph-CS4tA7YS.js +0 -1
  166. package/web/dist/assets/Laws-BjbHJrJt.js +0 -3
  167. package/web/dist/assets/Library-CjC7BAWN.js +0 -1
  168. package/web/dist/assets/Skills-BvatJGfe.js +0 -1
  169. package/web/dist/assets/index-BnRWQbZb.js +0 -12
  170. package/web/dist/assets/index-D0f9tJlA.css +0 -1
  171. package/web/dist/assets/roman-DkYN0LX9.js +0 -1
@@ -29,15 +29,4 @@
29
29
  - Version, changelog, and tag all name the same number, and the release is pushed
30
30
  (or staged for the pipeline) with no unrelated changes bundled in.
31
31
 
32
- ## Self-improvement
33
-
34
- Close each run with one beat of reflection on the {{SKILL}} itself:
35
- - A step misled, a needed step was missing, or the trigger fired wrongly — that
36
- is a flaw in this file. Propose the exact edit (trigger, procedure, or
37
- done-when) and apply it with the user's assent ({{LAW}} II).
38
- - A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
39
- clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
40
- fresh read of the repo would not re-derive it. Update an existing memory over
41
- adding one; when in doubt, leave it out.
42
- - No friction, nothing learned — move on; this loop earns no ceremony. Most
43
- runs end here.
32
+ <!-- INCLUDE: skills/_self-improvement.md -->
@@ -22,15 +22,4 @@
22
22
  - `ARCHITECTURE.md` reflects the current structure, and a fresh agent could orient
23
23
  from it in a single read.
24
24
 
25
- ## Self-improvement
26
-
27
- Close each run with one beat of reflection on the {{SKILL}} itself:
28
- - A step misled, a needed step was missing, or the trigger fired wrongly — that
29
- is a flaw in this file. Propose the exact edit (trigger, procedure, or
30
- done-when) and apply it with the user's assent ({{LAW}} II).
31
- - A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
32
- clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
33
- fresh read of the repo would not re-derive it. Update an existing memory over
34
- adding one; when in doubt, leave it out.
35
- - No friction, nothing learned — move on; this loop earns no ceremony. Most
36
- runs end here.
25
+ <!-- INCLUDE: skills/_self-improvement.md -->
@@ -11,10 +11,13 @@ stop and report it ({{LAW}} V); never substitute recall for verified research.
11
11
 
12
12
  ## Procedure
13
13
  1. State the question and what a complete answer must contain. Break a broad question
14
- into specific sub-questions.
14
+ into specific sub-questions. Where the host runs subagents, hand the sub-questions
15
+ to the [researcher {{AGENT}}](../{{DIR_AGENTS}}/researcher.md) — it runs steps 2–5
16
+ in its own context and returns only the sourced findings ({{DOCTRINE}} process 3);
17
+ otherwise carry on here.
15
18
  2. Search the web — use the host's web-search tool or a connected search provider
16
19
  ({{DOCTRINE}} ops 1). Query from several angles; one search is not research,
17
- and one empty result is not absence ({{LAW}} XI). If the host
20
+ and one empty result is not absence ({{LAW}} III). If the host
18
21
  exposes no web capability at all, stop and report that ({{LAW}} V) — never
19
22
  substitute your own knowledge for verified research.
20
23
  3. Open the most promising sources and extract only the relevant slice, not the whole
@@ -30,15 +33,4 @@ stop and report it ({{LAW}} V); never substitute recall for verified research.
30
33
  - The question is answered, every material claim is traceable to a cited,
31
34
  cross-checked source, and remaining uncertainties are flagged explicitly.
32
35
 
33
- ## Self-improvement
34
-
35
- Close each run with one beat of reflection on the {{SKILL}} itself:
36
- - A step misled, a needed step was missing, or the trigger fired wrongly — that
37
- is a flaw in this file. Propose the exact edit (trigger, procedure, or
38
- done-when) and apply it with the user's assent ({{LAW}} II).
39
- - A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
40
- clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
41
- fresh read of the repo would not re-derive it. Update an existing memory over
42
- adding one; when in doubt, leave it out.
43
- - No friction, nothing learned — move on; this loop earns no ceremony. Most
44
- runs end here.
36
+ <!-- INCLUDE: skills/_self-improvement.md -->
@@ -22,15 +22,4 @@ are about to act on it.
22
22
  - Every comment has a reasoned response and either an applied change or a justified
23
23
  decline, and the resulting changes are verified.
24
24
 
25
- ## Self-improvement
26
-
27
- Close each run with one beat of reflection on the {{SKILL}} itself:
28
- - A step misled, a needed step was missing, or the trigger fired wrongly — that
29
- is a flaw in this file. Propose the exact edit (trigger, procedure, or
30
- done-when) and apply it with the user's assent ({{LAW}} II).
31
- - A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
32
- clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
33
- fresh read of the repo would not re-derive it. Update an existing memory over
34
- adding one; when in doubt, leave it out.
35
- - No friction, nothing learned — move on; this loop earns no ceremony. Most
36
- runs end here.
25
+ <!-- INCLUDE: skills/_self-improvement.md -->
@@ -14,15 +14,4 @@
14
14
  ## Done when
15
15
  - Findings are severity-ranked, every one carries a fix, and the highest-impact change is named.
16
16
 
17
- ## Self-improvement
18
-
19
- Close each run with one beat of reflection on the {{SKILL}} itself:
20
- - A step misled, a needed step was missing, or the trigger fired wrongly — that
21
- is a flaw in this file. Propose the exact edit (trigger, procedure, or
22
- done-when) and apply it with the user's assent ({{LAW}} II).
23
- - A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
24
- clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
25
- fresh read of the repo would not re-derive it. Update an existing memory over
26
- adding one; when in doubt, leave it out.
27
- - No friction, nothing learned — move on; this loop earns no ceremony. Most
28
- runs end here.
17
+ <!-- INCLUDE: skills/_self-improvement.md -->
@@ -86,15 +86,4 @@ adoption.
86
86
  {{LAWS}}, consented to explicitly, with any promoted source memory archived. The
87
87
  {{ONTOLOGY}}, {{LAWS}} and {{DOCTRINES}} files are untouched either way.
88
88
 
89
- ## Self-improvement
90
-
91
- Close each run with one beat of reflection on the {{SKILL}} itself:
92
- - A step misled, a needed step was missing, or the trigger fired wrongly — that
93
- is a flaw in this file. Propose the exact edit (trigger, procedure, or
94
- done-when) and apply it with the user's assent ({{LAW}} II).
95
- - A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
96
- clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
97
- fresh read of the repo would not re-derive it. Update an existing memory over
98
- adding one; when in doubt, leave it out.
99
- - No friction, nothing learned — move on; this loop earns no ceremony. Most
100
- runs end here.
89
+ <!-- INCLUDE: skills/_self-improvement.md -->
@@ -0,0 +1,51 @@
1
+ # {{SKILL}}: security-audit
2
+
3
+ > {{DESC_SECURITY_AUDIT}}
4
+
5
+ **Trigger:** a change touches the security surface — authentication, authorisation,
6
+ session or token handling, input from outside the trust boundary, file or shell
7
+ access, cryptography, secrets, a new dependency, a network-facing endpoint — or the
8
+ user asks for a "security review", "threat model", or "is this safe". The
9
+ [geneseed-code-review {{SKILL}}](geneseed-code-review.md) reviews a diff for
10
+ correctness first; this one asks a different question of the same diff: *how would
11
+ this be attacked, and what does it leak*. Run both before shipping anything on the
12
+ surface.
13
+
14
+ ## Procedure
15
+ 1. **Draw the surface.** From the diff and the code it lands in, name the trust
16
+ boundaries the change crosses (user input, another service, the filesystem, a
17
+ subprocess, the network), what an attacker controls on each, and the assets behind
18
+ them (data, credentials, the host). No boundary crossed → say so, verdict *not on
19
+ the surface*, stop.
20
+ 2. **Dispatch the [security {{AGENT}}](../{{DIR_AGENTS}}/security.md)** with the surface
21
+ from step 1 and the diff — read-only, in its own context so the main one stays
22
+ clean ({{DOCTRINE}} process 3). It runs the passes below; for a small change you may
23
+ run them yourself.
24
+ 3. **Pass 1 — the classic classes**, each checked against the actual code, not
25
+ assumed: injection (SQL, shell, path, template), broken auth or missing authz on
26
+ a new route, unsafe deserialisation, SSRF, insecure defaults, missing rate or size
27
+ limits, error messages that leak internals. Verify by reading the handling at the
28
+ boundary and, where a test can exercise it, by running one ({{LAW}} III).
29
+ 4. **Pass 2 — secrets and data.** Nothing sensitive in code, config, logs, fixtures,
30
+ or the commit itself ({{LAW}} I); PII handled and logged to the project's policy;
31
+ tokens scoped and expiring. Grep the diff for key-shaped strings, and check what the
32
+ new code *logs*.
33
+ 5. **Pass 3 — the supply chain.** A new or bumped dependency: who publishes it, how
34
+ maintained, what it pulls in transitively, any advisory against the pinned version
35
+ (the [deps-audit {{SKILL}}](deps-audit.md) carries the tooling). A destructive
36
+ capability exposed to an agent or a tool: its guard is enforced server-side, at the
37
+ boundary the call crosses, never left to the caller's judgement ({{DOCTRINE}} rigor 5).
38
+ 6. **Report, don't fix.** Each finding as `file:line — attack — impact — fix`, ranked
39
+ critical → high → medium → note, with the evidence that made it a finding. Then the
40
+ verdict — **ship / fix-then-ship / block** — and, for anything above medium, the
41
+ test that would pin the fix. Applying fixes is a [develop {{SKILL}}](develop.md)
42
+ task on its own commit ({{LAW}} II); a review that quietly edits the code it judges
43
+ has stopped being a review.
44
+
45
+ ## Done when
46
+ - The trust boundaries the change crosses are named, each class was checked against
47
+ the real code with evidence, no secret or unguarded destructive path rides along,
48
+ and a ranked findings list ends in a ship / fix-then-ship / block verdict — with no
49
+ code changed by the review itself.
50
+
51
+ <!-- INCLUDE: skills/_self-improvement.md -->
@@ -35,15 +35,4 @@ request or merge the branch.
35
35
  - The PR is open (or the branch is merged) with a body stating what / why / how it
36
36
  was tested, and nothing unrelated rides along.
37
37
 
38
- ## Self-improvement
39
-
40
- Close each run with one beat of reflection on the {{SKILL}} itself:
41
- - A step misled, a needed step was missing, or the trigger fired wrongly — that
42
- is a flaw in this file. Propose the exact edit (trigger, procedure, or
43
- done-when) and apply it with the user's assent ({{LAW}} II).
44
- - A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
45
- clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
46
- fresh read of the repo would not re-derive it. Update an existing memory over
47
- adding one; when in doubt, leave it out.
48
- - No friction, nothing learned — move on; this loop earns no ceremony. Most
49
- runs end here.
38
+ <!-- INCLUDE: skills/_self-improvement.md -->
@@ -0,0 +1,59 @@
1
+ # {{SKILL}}: skill-forge
2
+
3
+ > {{DESC_SKILL_FORGE}}
4
+
5
+ **Trigger:** a task has repeated and no {{SKILL}} covers it; a {{SKILL}}'s
6
+ self-improvement loop produced an edit worth making; the user says "make this a
7
+ skill", "write a skill for…", "fix the trigger of…"; or two {{SKILLS}} keep
8
+ disambiguating against each other and should merge. Meta by nature: it edits the
9
+ apparatus, so every step ends in the user's assent ({{LAW}} II, {{LAW}} IV).
10
+
11
+ ## Procedure
12
+ 1. **Reuse before authoring** ({{DOCTRINE}} craft 1, craft 4). Read the catalogue — the
13
+ host's skill list, or AGENT.md §4 — and the nearest existing {{SKILL}} in full. If
14
+ its domain already covers the need, the change is an *edit* to that file (a step,
15
+ a trigger phrase, a done-when), not a new file. Name the skill by its domain, not
16
+ the situation that prompted it.
17
+ 2. **Write the trigger first, then the procedure.** Start from
18
+ `{{DIR_SKILLS}}/_template.md`. The purpose line says *what*; the **Trigger** line
19
+ says *when*, in the words a user would actually say and the situations the model
20
+ would actually meet — the emitted `description:` is purpose + trigger, and it is
21
+ the only text the host matches a task against. Then the numbered procedure (each
22
+ step an action with a verification), and a **Done when** that a stranger could
23
+ check. Keep it to one coherent domain; a "Requires:" line only for a hard external
24
+ prerequisite. When only the user should ever open it (a teaching drill, a tool
25
+ gated on an environment the model cannot see), put the `invocation: user` HTML
26
+ comment on the line after the purpose blockquote — the template shows it. Never
27
+ quote that marker inside another skill's body: the emit matches it anywhere in the
28
+ text, and the quoting skill silently drops out of the model's catalogue.
29
+ A name the host already owns as a built-in command (Claude Code ships
30
+ `security-review`, `code-review`, `simplify`, `init`) is shadowed — pick another.
31
+ 3. **Test the trigger against its neighbours.** For three real asks the skill should
32
+ catch and two it should not, decide from the descriptions alone which skill fires.
33
+ A wrong pick is a trigger to sharpen — or a sign two skills should be one. A trigger
34
+ that needs a "not this, use that" clause to be safe is a trigger with a fuzzy edge;
35
+ fix the edge rather than adding the clause.
36
+ 4. **Register it where the host expects.** In an *installed* harness: the file under
37
+ `{{DIR_SKILLS}}/`, one row in AGENT.md §4's table, then `geneseed doctor` — it fails
38
+ if the table and the files disagree. In the *Geneseed source repo* the cost is the
39
+ full satellite set (`docs/extending.md` §3): the file, the §4 row, `DESC_<NAME>` in
40
+ every theme, `SKILL_CLASS`, a `registry.json` row, the README enumeration, then
41
+ `doctor --all` and the suites. A skill that bundles a script or several files is a
42
+ folder skill (`<name>/SKILL.md` + `VENDOR.md`), listed in `VENDORED_SKILL_DIRS`.
43
+ 5. **Merge or retire honestly.** When two skills fold into one: keep the best steps of
44
+ each, rewrite the exit so the survivor routes to what the retired one led to, and
45
+ remove the retired file and *every* reference to it (table row, sibling links, theme
46
+ tokens, registry, README) — a dangling link is a build failure, a dangling trigger
47
+ phrase is a silent miss. Retirement is deletion; get consent ({{LAW}} IV).
48
+ 6. **Verify by rendering.** Build or re-emit, open the emitted `SKILL.md`, read the
49
+ frontmatter description as the host will, and confirm the body carries no
50
+ unresolved token or dead link (`doctor`, or `geneseed-build --validate-only`).
51
+ Show the user the diff and the emitted description before it lands ({{LAW}} II).
52
+
53
+ ## Done when
54
+ - The need is met by an edit to an existing {{SKILL}} or by one new file in its own
55
+ domain; the emitted description names both purpose and trigger and wins its five
56
+ test asks against the neighbours; every satellite the host or the repo demands is in
57
+ place, `doctor` is green, and the user saw and accepted the change.
58
+
59
+ <!-- INCLUDE: skills/_self-improvement.md -->
@@ -0,0 +1,50 @@
1
+ # {{SKILL}}: teach
2
+
3
+ > {{DESC_TEACH}}
4
+
5
+ <!-- invocation: user -->
6
+
7
+ **Trigger:** the user wants to *learn* something and asks you to teach — "teach me X",
8
+ "get me up to speed on X", "this is confusing, break it down", "explain this passage",
9
+ "how do I get to X in N days". Three shapes, picked from the ask: a **crash course**
10
+ (from zero to functional, fast), a **decode** (confusing material handed over, make it
11
+ click), or a **path** (a specific result by a deadline, day by day). To *test* what the
12
+ user already knows rather than teach it, use the [quiz {{SKILL}}](quiz.md); to gather
13
+ facts from the web first, [research](research.md); to convert a PDF or web page into
14
+ readable form, [ingest](ingest.md).
15
+
16
+ ## Procedure
17
+ 1. Pin the footing before teaching anything: what the user wants to be able to *do*
18
+ afterwards, how much time they have, and what they already know. Ask once if any of
19
+ the three is missing, then proceed — do not plan around "learn X in general".
20
+ 2. Pick the shape and run it:
21
+ - **Crash course** — act as a teacher who has only this one session and will never
22
+ see them again; the sole objective is *functional* before time runs out. Name
23
+ three things explicitly: **what to learn first**, **what to ignore completely**
24
+ (for now), and **the single exercise that, done once, puts them ahead of most
25
+ people who have studied this for months**. No theory without immediate use, no
26
+ bare lists. Have them do the exercise — or set it up so they can — rather than
27
+ read about it.
28
+ - **Decode** — read what they are stuck on and, before explaining anything, find the
29
+ one keystone sentence that makes the rest fall into place. Explain only that
30
+ sentence first, with an everyday analogy and no technical terms; confirm it
31
+ landed; then let the rest follow from it instead of re-explaining every line.
32
+ - **Path** — build a day-by-day route to the stated result. Each day carries exactly
33
+ three things: one task that fits the stated time budget (default 45 minutes), a
34
+ concrete criterion so they can tell they did it right, and one explicit
35
+ *what-not-to-do* that day. Trace the whole path against the goal; if finishing
36
+ every day would not deliver the result, rebuild it until it does.
37
+ 3. Check it took: ask three questions only someone who understood could answer (a
38
+ crash course or decode), or walk the first day together (a path). A miss goes back
39
+ to the analogy or the exercise — re-anchor, don't hand over the answer.
40
+ 4. Close by naming what to practise next and the gap most likely to trip them, so the
41
+ learning continues without you; offer the [quiz {{SKILL}}](quiz.md) for when they
42
+ want it tested.
43
+
44
+ ## Done when
45
+ - The user is functional (crash course), has the keystone idea in plain terms and
46
+ passed the three questions (decode), or holds a dated path whose every day has a
47
+ timed task, a criterion and a what-not-to-do (path) — and knows what to practise
48
+ next.
49
+
50
+ <!-- INCLUDE: skills/_self-improvement.md -->
@@ -30,15 +30,4 @@ tracker issues that fresh sessions can pick up independently.
30
30
  - Every slice of the spec is a published ticket with explicit blockers, each
31
31
  sized for one session, and at least one unblocked ticket exists to start on.
32
32
 
33
- ## Self-improvement
34
-
35
- Close each run with one beat of reflection on the {{SKILL}} itself:
36
- - A step misled, a needed step was missing, or the trigger fired wrongly — that
37
- is a flaw in this file. Propose the exact edit (trigger, procedure, or
38
- done-when) and apply it with the user's assent ({{LAW}} II).
39
- - A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
40
- clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
41
- fresh read of the repo would not re-derive it. Update an existing memory over
42
- adding one; when in doubt, leave it out.
43
- - No friction, nothing learned — move on; this loop earns no ceremony. Most
44
- runs end here.
33
+ <!-- INCLUDE: skills/_self-improvement.md -->
@@ -35,15 +35,4 @@ the destination can be named but the route to it cannot; the user says
35
35
  - Every decision ticket is closed, the map indexes them all, and someone could
36
36
  pursue the destination without a single further decision.
37
37
 
38
- ## Self-improvement
39
-
40
- Close each run with one beat of reflection on the {{SKILL}} itself:
41
- - A step misled, a needed step was missing, or the trigger fired wrongly — that
42
- is a flaw in this file. Propose the exact edit (trigger, procedure, or
43
- done-when) and apply it with the user's assent ({{LAW}} II).
44
- - A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
45
- clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
46
- fresh read of the repo would not re-derive it. Update an existing memory over
47
- adding one; when in doubt, leave it out.
48
- - No friction, nothing learned — move on; this loop earns no ceremony. Most
49
- runs end here.
38
+ <!-- INCLUDE: skills/_self-improvement.md -->
@@ -54,15 +54,4 @@ truth.
54
54
  - anything written follows the wiki's `conventions`, links into the graph,
55
55
  sits in the right folder (or the `inbox`), and touches nothing `protected`.
56
56
 
57
- ## Self-improvement
58
-
59
- Close each run with one beat of reflection on the {{SKILL}} itself:
60
- - A step misled, a needed step was missing, or the trigger fired wrongly — that
61
- is a flaw in this file. Propose the exact edit (trigger, procedure, or
62
- done-when) and apply it with the user's assent ({{LAW}} II).
63
- - A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
64
- clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
65
- fresh read of the repo would not re-derive it. Update an existing memory over
66
- adding one; when in doubt, leave it out.
67
- - No friction, nothing learned — move on; this loop earns no ceremony. Most
68
- runs end here.
57
+ <!-- INCLUDE: skills/_self-improvement.md -->
@@ -2,37 +2,85 @@
2
2
 
3
3
  > {{DESC_WORKFLOW}}
4
4
 
5
- **Trigger:** a task that benefits from *deterministic* multi-agent orchestration — fan-out across independent units, a staged find→verify pipeline, or a loop that accumulates to a target — **and** the host provides the `workflow` tool (OpenCode). When the host has no such tool, use [parallel-agents](parallel-agents.md) or [council](council.md) instead — those are *model-driven*; this {{SKILL}} is *code-driven*.
5
+ **Trigger:** a task that benefits from *deterministic* multi-agent orchestration — a
6
+ fan-out across independent units, a staged find→verify pipeline, a fresh-context
7
+ handoff between phases, or a loop that accumulates to a target — **and** the host
8
+ exposes a workflow tool. When it does not, use [parallel-agents](parallel-agents.md)
9
+ or [council](council.md) instead — those are *model-driven*; this {{SKILL}} is
10
+ *code-driven*.
6
11
 
7
12
  ## What it is
8
13
 
9
- A `workflow` is a saved script that orchestrates subagents in **code**, not prose. The script — not the model — decides what fans out, what runs in sequence, and what verifies. The host runs it and hands you back the distilled result. Use it when the control flow should be exact and repeatable rather than re-improvised each time.
14
+ A workflow is a script that orchestrates subagents in **code**, not prose. The
15
+ script — not the model — decides what fans out, what runs in sequence, and what
16
+ verifies; the host runs it and hands back a distilled result. Use it when the control
17
+ flow should be exact and repeatable rather than re-improvised each time, and when the
18
+ work is worth a crew: a one-file tweak or a question never is.
10
19
 
11
- Saved workflows live in the host's workflows directory — on OpenCode that is `.opencode/workflows/` in the repo, or `workflows/` under the global config (see the adapter README) — and you run one **by name**, you do not author one inline. To add a new workflow, copy an existing script and register it there.
20
+ ## The hosts
21
+
22
+ | Host | Tool | Scripts | Opt-in |
23
+ |---|---|---|---|
24
+ | OpenCode | `workflow` (the `geneseed-workflow` plugin) | **saved only** — `<name>.js` in `.opencode/workflows/` per repo or `<config>/workflows/` global (`GENESEED_WORKFLOWS_DIR` overrides); nothing inline is eval'd | none — call it when the shape fits |
25
+ | Claude Code | `Workflow` (native) | a saved `.claude/workflows/<name>` by `name`, **or** an inline `script` you author | **required** — the tool refuses unless the user opted in for this task ("use a workflow", "ultracode", a skill that says so) |
26
+ | Bob, Copilot | none | — | fall back to [parallel-agents](parallel-agents.md) / [council](council.md) |
27
+
28
+ Both runtimes speak the same primitives — `agent()`, `parallel()`, `pipeline()`,
29
+ `phase()`, `args` — and every script opens with a literal `export const meta = { name,
30
+ description, phases }`. The four shipped scripts are OpenCode-saved today; on Claude
31
+ Code the same shapes are authored inline (the host's `workflow-authoring` reference
32
+ carries the script API — load it before writing one).
33
+
34
+ ## The shipped shapes
35
+
36
+ - **review** — sweep a change across dimensions, then adversarially verify each
37
+ finding before reporting (the canonical find→verify pipeline: a dimension's findings
38
+ verify as soon as that dimension returns, no barrier).
39
+ - **research-plan-implement** — three clean phases, each in its own child context,
40
+ carrying only the distilled output of the prior phase.
41
+ - **council** — the [council](council.md) debate on rails: seat the stance {{AGENTS}},
42
+ gather positions in parallel, chair synthesises, dissent preserved.
43
+ - **dispatch** — decompose a multi-domain goal, route each subtask to its owning
44
+ capability {{AGENT}}, converge (model-driven fallback: [parallel-agents](parallel-agents.md)).
12
45
 
13
46
  ## Procedure
14
- 1. Confirm the host exposes the `workflow` tool. If not, fall back to [parallel-agents](parallel-agents.md) / [council](council.md) and stop here.
15
- 2. Pick the saved workflow that fits the shape of the work — call `workflow` with no `name`, or an unknown one, to list what is available:
16
- - **review** — sweep a change across dimensions, then adversarially verify each finding before reporting (the canonical find→verify pipeline).
17
- - **research-plan-implement** — three clean phases with fresh-context handoffs between them.
18
- - **council** — the [council](council.md) debate as deterministic code: seat the stance {{AGENTS}}, gather positions in parallel, synthesise a verdict.
19
- - **dispatch** — decompose a multi-domain goal, route each subtask to its owning capability {{AGENT}}, converge the results (the live-orchestrator shape; model-driven fallback: [parallel-agents](parallel-agents.md)).
20
- 3. Run it: `workflow({ name, args })`. Pass the task-specific inputs (target paths, the motion, the question) as `args` — the script reads them.
21
- 4. Read the returned summary. The full structured result and a phase-by-phase trace are written to the run's progress file; point the user at it if they want the detail.
22
- 5. Act on the result yourself — the workflow gathers and verifies, but committing, pushing, or merging stays with you ({{DOCTRINE}} process 5).
47
+ 1. **Confirm the host and the opt-in.** OpenCode: the `workflow` tool is present. Claude
48
+ Code: the tool is present *and* the user opted in — if the shape plainly warrants a
49
+ workflow but they have not, describe it in two lines with its rough cost (how many
50
+ agents) and ask; never call the tool on your own judgement. No tool at all → fall
51
+ back and stop here.
52
+ 2. **Confirm the task is crew-sized** and the shape is one of the four above (or a
53
+ plain variation). Sequential work with shared state is a [plan](plan.md); a
54
+ dev↔test loop in an isolated tree is a [pipeline](pipeline.md), which itself runs on
55
+ a workflow where one exists.
56
+ 3. **Pick saved over inline.** List what is available first — OpenCode: call `workflow`
57
+ with no `name`; Claude Code: read `.claude/workflows/`. A saved script has been run
58
+ before; an inline one has not. Author inline only when no saved shape fits, keep it
59
+ to the primitives, and hold to the host's size guideline unless the user asked for
60
+ more.
61
+ 4. **Pass the task as `args`, never baked in** — target paths, the motion, the question,
62
+ any timestamp. Scripts stay deterministic: no wall clock, no randomness, nothing
63
+ read from the environment that the next run would see differently, so a run is a
64
+ pure function of (script, args, child replies) and can be replayed.
65
+ 5. **Run it and wait for the result, not the transcript.** The run is asynchronous on
66
+ Claude Code (a task notification arrives; `/workflows` watches it live) and
67
+ synchronous on OpenCode. Read the returned summary; the full structured result and
68
+ the phase-by-phase trace are in the run's progress file — point the user there for
69
+ detail, do not paste it. Never fabricate a result for a run that has not returned.
70
+ 6. **On failure, resume — don't rerun.** A script that died mid-way keeps its completed
71
+ `agent()` results; fix the script or the args and resume from the run id where the
72
+ host supports it, so finished stages are not paid twice. A stage that keeps failing
73
+ is a finding about the task, not a reason to loop.
74
+ 7. **Exit — carry the conclusion yourself.** The workflow gathers and verifies;
75
+ committing, pushing, merging, or opening anything outward stays with you
76
+ ({{DOCTRINE}} process 5, {{LAW}} IV). State what the run concluded, what you are
77
+ doing with it, and where the trace lives.
23
78
 
24
79
  ## Done when
25
- - The right saved workflow ran to completion, its result was read, and you have carried its conclusion forward — or, where no `workflow` tool exists, the equivalent model-driven {{SKILL}} was used instead.
26
-
27
- ## Self-improvement
28
-
29
- Close each run with one beat of reflection on the {{SKILL}} itself:
30
- - A step misled, a needed step was missing, or the trigger fired wrongly — that
31
- is a flaw in this file. Propose the exact edit (trigger, procedure, or
32
- done-when) and apply it with the user's assent ({{LAW}} II).
33
- - A lesson that is *not* a flaw in this file goes to {{MEMORY}} only if it
34
- clears {{DOCTRINE}} process 1's bar: it would change how a future session behaves, and a
35
- fresh read of the repo would not re-derive it. Update an existing memory over
36
- adding one; when in doubt, leave it out.
37
- - No friction, nothing learned — move on; this loop earns no ceremony. Most
38
- runs end here.
80
+ - The right shape ran to completion on the host's tool (with the user's opt-in where
81
+ the host demands one), its summary was read and its trace is locatable, a failed run
82
+ was resumed rather than restarted, and you — not the script — have carried its
83
+ conclusion into the next {{SKILL}} or the commit gate. Or: no tool existed, and the
84
+ model-driven equivalent ran instead.
85
+
86
+ <!-- INCLUDE: skills/_self-improvement.md -->
@@ -0,0 +1,52 @@
1
+ # {{SKILL}}: worktree
2
+
3
+ > {{DESC_WORKTREE}}
4
+
5
+ **Trigger:** work must not share a working tree with what is already in flight — a
6
+ [pipeline](pipeline.md) crew needs its own tree, a second task starts while the first
7
+ is uncommitted, another agent or session is editing this checkout, a risky migration
8
+ or rewrite needs a disposable copy, or the user says "worktree", "isolate this",
9
+ "don't touch my checkout". Also the first thing to reach for when `git status` shows
10
+ changes you did not make.
11
+
12
+ ## Procedure
13
+ 1. **Look before you branch** ({{LAW}} III). `git status` and `git worktree list`
14
+ first. Uncommitted changes you did not author mean someone else owns this tree —
15
+ never `checkout -b` from it (that moves *their* HEAD onto your branch) and never
16
+ stash or revert it. Note the branch they are on; you will not touch it.
17
+ 2. **Create the tree beside the repo, from a clean base:**
18
+ ```
19
+ git worktree add -b <type>/<slug> ../<repo>-<slug> <base>
20
+ ```
21
+ `<base>` is the integration branch (`main`, or `origin/main` after a `git fetch`),
22
+ never the dirty tree's HEAD. One worktree per task; name the directory after the
23
+ branch so `git worktree list` reads as a task list.
24
+ 3. **Make it runnable.** A worktree shares the repository, not the untracked files:
25
+ install dependencies (`npm ci`, the project's equivalent) or link the ones that are
26
+ large and pure; copy no `.env` — secrets are the user's to place ({{LAW}} I). Run
27
+ the project's checks once in the new tree and read the output before changing
28
+ anything, so a later red is yours.
29
+ 4. **Work only in the worktree.** Every edit, test, commit and `doctor`/lint run
30
+ happens under its path — use absolute paths in tools whose cwd resets. The
31
+ original checkout stays as found. Host hooks or shims that write machine-wide
32
+ state (a global config, a hook shim) run from the worktree only when they resolve
33
+ the repo through it; verify with the tool's own status command rather than assume.
34
+ 5. **Integrate through the normal gate** — commit via the [commit {{SKILL}}](commit.md),
35
+ ship via [ship](ship.md). A worktree earns no exemption from per-commit and
36
+ per-push consent ({{DOCTRINE}} process 5). Expect conflicts with a sibling tree that
37
+ touched the same files; resolve them on the branch, not in the other tree.
38
+ 6. **Clean up when the branch is merged or abandoned** — with consent, since removal
39
+ is deletion ({{LAW}} IV):
40
+ ```
41
+ git worktree remove ../<repo>-<slug>
42
+ git branch -d <type>/<slug>
43
+ ```
44
+ `git worktree prune` after a directory was deleted by hand. Leave nothing listed
45
+ that no task owns.
46
+
47
+ ## Done when
48
+ - The task ran to its commit or PR entirely inside its own tree from a clean base,
49
+ the original checkout is byte-for-byte as it was found, and the worktree is either
50
+ still listed with a live task or removed with its branch.
51
+
52
+ <!-- INCLUDE: skills/_self-improvement.md -->
@@ -23,6 +23,7 @@
23
23
  "DESC_DOCS": "<one-line description: writes user-facing docs after code lands>",
24
24
  "DESC_SECURITY": "<one-line description: audits changes touching the security surface>",
25
25
  "DESC_EXPLORER": "<one-line description: reads/searches widely, returns only distilled findings>",
26
+ "DESC_RESEARCHER": "<one-line description: searches and fetches the open web, cross-checks every claim, returns sourced findings>",
26
27
  "DESC_ADVOCATE": "<council seat: argues the strongest case FOR the proposal>",
27
28
  "DESC_SKEPTIC": "<council seat: devil's advocate — failure modes and hidden assumptions>",
28
29
  "DESC_PRAGMATIST": "<council seat: weighs cost, effort, complexity vs payoff>",
@@ -42,7 +43,6 @@
42
43
  "DESC_COMMIT": "<one-line description: stage the right paths and write a focused commit>",
43
44
  "DESC_CODE_REVIEW": "<one-line description: review a diff/PR — correctness first, quality second>",
44
45
  "DESC_BRAINSTORM": "<one-line description: turn a raw idea into an approved design before code>",
45
- "DESC_CLARIFY": "<one-line description: interview the user to pin goal, scope, success criteria>",
46
46
  "DESC_CODEBASE_DESIGN": "<one-line description: design deep modules behind small interfaces at deliberate seams>",
47
47
  "DESC_DOMAIN_MODELING": "<one-line description: maintain the domain glossary and record decisions as ADRs>",
48
48
  "DESC_WAYFINDER": "<one-line description: map an oversized effort as decision tickets and resolve them until the route is clear>",
@@ -57,19 +57,20 @@
57
57
  "DESC_PONYTAIL": "<one-line description: force the laziest working solution — minimal, shortest path, stdlib/native before custom code; lite/full/ultra intensity>",
58
58
  "DESC_PARALLEL_AGENTS": "<one-line description: fan independent subtasks to concurrent subagents, then converge>",
59
59
  "DESC_PIPELINE": "<one-line description: spawn a small crew — analyst, developer, tester — to work a substantial task in isolation, merging only on mechanical proof (tests + lint green)>",
60
- "DESC_TDD": "<one-line description: drive implementation with a failing test first>",
61
60
  "DESC_DEVELOP": "<one-line description: drive a code change through cover-and-verify — smallest change, tests written for it, affected suite green, committed slice by slice>",
61
+ "DESC_TEACH": "<one-line description: teach toward a result — crash course, decode confusing material, or a day-by-day path to a deadline>",
62
+ "DESC_QUIZ": "<one-line description: test what the user knows instead of explaining — drill, explain-it-back check, or mastery claim stress-tested>",
63
+ "DESC_SECURITY_AUDIT": "<one-line description: review a change for how it would be attacked and what it leaks, ending in ship / fix / block>",
64
+ "DESC_SKILL_FORGE": "<one-line description: author, sharpen, merge, or retire a skill — reuse first, trigger tested, every satellite registered>",
65
+ "DESC_WORKTREE": "<one-line description: isolate a task in its own git worktree from a clean base, integrate through the normal gate, remove when merged>",
66
+ "DESC_CI_FIX": "<one-line description: turn a red CI run green at the cause — read the log, reproduce under CI's conditions, fix, watch the re-run>",
67
+ "DESC_DEPS_AUDIT": "<one-line description: survey dependencies — outdated, vulnerable, abandoned, unused — into a risk-ordered upgrade plan, installing nothing>",
68
+ "DESC_CONSOLIDATE_MEMORY": "<one-line description: tend the memory set — verify facts against the live repo, merge, retire, promote, rebuild the index>",
62
69
  "DESC_HANDOFF": "<one-line description: snapshot task state so a fresh context can resume in one read>",
63
70
  "DESC_SHIP": "<one-line description: open a PR with a structured body, or finish and merge a branch>",
64
71
  "DESC_RELEASE": "<one-line description: cut a release — bump, changelog, tag, kept in sync>",
65
72
  "DESC_INGEST": "<one-line description: convert a PDF/Office/web doc into clean markdown before reading>",
66
73
  "DESC_RESEARCH": "<one-line description: answer from the open web, verifying each claim against independent sources>",
67
- "DESC_LEARNING_PATH": "<one-line description: turn a goal+deadline into a day-by-day path — daily timed task, correctness criterion, what not to do>",
68
- "DESC_GAP_DETECTOR": "<one-line description: stress-test a mastery claim with five simple-looking questions, blunt verdict on the gaps>",
69
- "DESC_FEYNMAN": "<one-line description: explain-it-simply check, caught on jargon/skipped steps/over-simplification, readout of what isn't solid>",
70
- "DESC_CRASH_COURSE": "<one-line description: go from zero to functional in a skill fast — what to learn first, what to ignore, the one exercise that puts you ahead>",
71
- "DESC_DRILL": "<one-line description: turn shaky knowledge into reflex — real situations, questioned through your mistakes, answer withheld until you've tried>",
72
- "DESC_DECODE": "<one-line description: make confusing material click — one keystone sentence, an everyday analogy, then a comprehension check>",
73
74
  "DESC_HERDR": "<one-line description: drive herdr from inside it — split panes, spawn agents, read panes>",
74
75
  "DESC_RULE": "<one-line description: ask whether the user wants a standing rule or a durable memory, then write the memory, or pressure-test the rule until it is generic and adopt it in user-rules.md>",
75
76
  "DESC_PROFILE": "<one-line description: interview the user and draft or refresh PROFILE.md — who they are, how they work, how they like answers pitched; identity only, rules go to user-rules.md>",
@@ -100,6 +101,7 @@
100
101
  "DOC_RIGOR_2": "<themed title for rigor doctrine 2 (Honest Tests)>",
101
102
  "DOC_RIGOR_3": "<themed title for rigor doctrine 3 (Cover and Verify)>",
102
103
  "DOC_RIGOR_4": "<themed title for rigor doctrine 4 (Prove the Gate)>",
104
+ "DOC_RIGOR_5": "<themed title for rigor doctrine 5 (External Gate — the gate you build stands outside the mind it governs)>",
103
105
  "DOC_OPS_1": "<themed title for ops doctrine 1 (Tool Discovery)>",
104
106
  "DOC_OPS_2": "<themed title for ops doctrine 2 (Commands Must Return)>",
105
107
  "DOC_OPS_3": "<themed title for ops doctrine 3 (Edit the Source, Not the Surface)>",
@@ -138,6 +140,8 @@
138
140
  "INTRO_WIKI": "<themed intro to the Wiki section — the user's cross-project knowledge base>",
139
141
  "DESC_WIKI": "<one-line description: consult and grow the user's personal knowledge base>",
140
142
  "DESC_MCP": "<one-line description: build or harden an MCP server — research the spec, design task-shaped tools, test with the Inspector, prove it with evals>",
143
+ "DESC_BRUNO_COLLECTION_GENERATOR": "<one-line description: build a Bruno collection — requests, environments, docs — from routes, OpenAPI, curl or an endpoint list, secrets as placeholders>",
144
+ "DESC_BRUNO_TEST_WRITER": "<one-line description: write Bruno tests — status, shape, chaining — for a request or collection without leaking secrets or asserting on unproven fields>",
141
145
  "DESC_PROSE": "<one-line description: write prose for a human that doesn't read like a model — cut filler, active voice, vary rhythm, trust the reader>",
142
146
  "DESC_FRONTEND_DESIGN": "<one-line description: design a UI with intent — palette/type/layout chosen for the brief, not templated defaults; plan tokens, critique against the brief, keep one bold move>",
143
147
  "DESC_WORKFLOW": "<one-line description: run a saved, code-driven workflow that orchestrates subagents deterministically>",