@goondocks/myco 0.17.2 → 0.18.1

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 (196) hide show
  1. package/README.md +14 -22
  2. package/bin/myco-run +15 -2
  3. package/dist/{agent-run-7AYHXIEF.js → agent-run-I4O2K2CK.js} +7 -7
  4. package/dist/{agent-tasks-UUIFKBD4.js → agent-tasks-UOW5BQIB.js} +7 -7
  5. package/dist/{chunk-XD3NEN3Q.js → chunk-2V7HR7HB.js} +2 -2
  6. package/dist/chunk-44PZCAYS.js +107 -0
  7. package/dist/chunk-44PZCAYS.js.map +1 -0
  8. package/dist/{chunk-DT42247G.js → chunk-75AZFBFW.js} +3 -3
  9. package/dist/{chunk-RMJPQZGF.js → chunk-C3EGL5JX.js} +755 -266
  10. package/dist/chunk-C3EGL5JX.js.map +1 -0
  11. package/dist/{chunk-7DAH5GLC.js → chunk-CKJAWZQE.js} +5 -1
  12. package/dist/chunk-CKJAWZQE.js.map +1 -0
  13. package/dist/{chunk-ML6GTPZU.js → chunk-CML4MCYF.js} +2 -2
  14. package/dist/{chunk-UTLWSKDV.js → chunk-CURS2TNP.js} +45 -4
  15. package/dist/chunk-CURS2TNP.js.map +1 -0
  16. package/dist/{chunk-EBIYONNZ.js → chunk-DPSLJ242.js} +34 -2
  17. package/dist/chunk-DPSLJ242.js.map +1 -0
  18. package/dist/{chunk-BZDZORVP.js → chunk-LSP5HYOO.js} +19 -16
  19. package/dist/chunk-LSP5HYOO.js.map +1 -0
  20. package/dist/{chunk-NUSTG3BH.js → chunk-N75GMQGA.js} +3 -3
  21. package/dist/{chunk-F6C4IC6R.js → chunk-NI23QCHB.js} +3 -3
  22. package/dist/{chunk-C3C5QVLK.js → chunk-O3TRN3RC.js} +2 -2
  23. package/dist/{chunk-3NCVCGUZ.js → chunk-RAV5YMRU.js} +3 -3
  24. package/dist/{chunk-25WHTV4N.js → chunk-RIDSOQDR.js} +21 -7
  25. package/dist/chunk-RIDSOQDR.js.map +1 -0
  26. package/dist/{chunk-HPZ7YAMA.js → chunk-TCSVDQF5.js} +1130 -195
  27. package/dist/chunk-TCSVDQF5.js.map +1 -0
  28. package/dist/{chunk-CTF7TQMJ.js → chunk-TLK46KKD.js} +14 -4
  29. package/dist/chunk-TLK46KKD.js.map +1 -0
  30. package/dist/{chunk-IGBHLFV5.js → chunk-TOER6RNC.js} +22 -2
  31. package/dist/chunk-TOER6RNC.js.map +1 -0
  32. package/dist/{chunk-ZSJPI5MS.js → chunk-TZAXQKO6.js} +6 -2
  33. package/dist/chunk-TZAXQKO6.js.map +1 -0
  34. package/dist/{chunk-RKPTMHED.js → chunk-U3J2DDSR.js} +2 -2
  35. package/dist/{chunk-SI5BBQAT.js → chunk-W7WENJ6F.js} +2 -2
  36. package/dist/{chunk-VVGZL2HX.js → chunk-WYOE4IAX.js} +153 -15
  37. package/dist/{chunk-VVGZL2HX.js.map → chunk-WYOE4IAX.js.map} +1 -1
  38. package/dist/{chunk-XZWFMMJR.js → chunk-XWOQL4XN.js} +3 -3
  39. package/dist/{chunk-5ZISXCDC.js → chunk-YZPI2Y3E.js} +39 -5
  40. package/dist/chunk-YZPI2Y3E.js.map +1 -0
  41. package/dist/{cli-WJVYP2QT.js → cli-D3TJYJ2U.js} +40 -40
  42. package/dist/{client-LZ3ZR4HC.js → client-4LLEXLVK.js} +4 -4
  43. package/dist/{config-ZQIMG3FB.js → config-DA4IUVFL.js} +3 -3
  44. package/dist/{detect-NJ2OREDP.js → detect-SZ2KDUF4.js} +2 -2
  45. package/dist/{detect-providers-C64L3QET.js → detect-providers-PSVKXTWE.js} +4 -4
  46. package/dist/{doctor-XEPBNHM3.js → doctor-KCTXPX5D.js} +12 -12
  47. package/dist/{executor-NXKJU5KW.js → executor-UYIZC3L5.js} +93 -285
  48. package/dist/executor-UYIZC3L5.js.map +1 -0
  49. package/dist/{init-BHVQAQ27.js → init-QFNBKKDC.js} +13 -13
  50. package/dist/{installer-45ZLP2RP.js → installer-BWJED3ED.js} +2 -2
  51. package/dist/{llm-KTD6SR55.js → llm-SMA5ZEAW.js} +4 -4
  52. package/dist/{loader-SHRKUKOS.js → loader-Q3P3R4UP.js} +3 -3
  53. package/dist/{loader-NEX3UF6U.js → loader-SKKUMT5C.js} +3 -3
  54. package/dist/{main-YFVBIRRK.js → main-5THODR77.js} +751 -257
  55. package/dist/main-5THODR77.js.map +1 -0
  56. package/dist/{open-2U7ZRGA3.js → open-7737CSPN.js} +7 -7
  57. package/dist/{post-compact-QIBMEWL3.js → post-compact-2TJ5FPZH.js} +7 -7
  58. package/dist/{post-tool-use-ICGFXDVY.js → post-tool-use-FRTSICC3.js} +6 -6
  59. package/dist/{post-tool-use-failure-C7TLH3XQ.js → post-tool-use-failure-KYO2NCNB.js} +7 -7
  60. package/dist/{pre-compact-IF7K4TQK.js → pre-compact-J6GCJEJR.js} +7 -7
  61. package/dist/{provider-check-LTLQ6BUZ.js → provider-check-AE3L5Z6R.js} +4 -4
  62. package/dist/{registry-TFQ22Z7N.js → registry-O2NZLO3V.js} +4 -4
  63. package/dist/{remove-FBGM2QVJ.js → remove-3WZZC7AX.js} +9 -9
  64. package/dist/{resolution-events-HGKIJOTA.js → resolution-events-XWYLLDRK.js} +4 -4
  65. package/dist/{restart-TQEECRNW.js → restart-HUHEFOXU.js} +8 -8
  66. package/dist/{search-NN5FC4Z6.js → search-ZGN3LDXG.js} +8 -8
  67. package/dist/{server-XMWJ4GF7.js → server-PTXLVVEE.js} +4 -4
  68. package/dist/{session-GLPAFYPO.js → session-7VV3IQMO.js} +9 -9
  69. package/dist/{session-end-TI3ILRBC.js → session-end-SMU55UCM.js} +6 -6
  70. package/dist/{session-start-PJLJDVJJ.js → session-start-NIMWEOIZ.js} +29 -13
  71. package/dist/session-start-NIMWEOIZ.js.map +1 -0
  72. package/dist/{setup-llm-AQSWLXCZ.js → setup-llm-7S3VPAPN.js} +8 -8
  73. package/dist/src/agent/definitions/tasks/extract-only.yaml +1 -1
  74. package/dist/src/agent/definitions/tasks/full-intelligence.yaml +10 -0
  75. package/dist/src/agent/definitions/tasks/skill-evolve.yaml +163 -49
  76. package/dist/src/agent/definitions/tasks/skill-generate.yaml +44 -27
  77. package/dist/src/agent/definitions/tasks/skill-survey.yaml +132 -138
  78. package/dist/src/agent/definitions/tasks/supersession-sweep.yaml +1 -1
  79. package/dist/src/cli.js +1 -1
  80. package/dist/src/daemon/main.js +1 -1
  81. package/dist/src/hooks/post-tool-use.js +1 -1
  82. package/dist/src/hooks/session-end.js +1 -1
  83. package/dist/src/hooks/session-start.js +1 -1
  84. package/dist/src/hooks/stop.js +1 -1
  85. package/dist/src/hooks/user-prompt-submit.js +1 -1
  86. package/dist/src/mcp/server.js +1 -1
  87. package/dist/src/symbionts/manifests/codex.yaml +85 -0
  88. package/dist/src/symbionts/templates/claude-code/hooks.json +12 -12
  89. package/dist/src/symbionts/templates/claude-code/settings.json +3 -3
  90. package/dist/src/symbionts/templates/codex/hooks.json +4 -4
  91. package/dist/src/symbionts/templates/cursor/hooks.json +9 -9
  92. package/dist/src/symbionts/templates/cursor/settings.json +2 -2
  93. package/dist/src/symbionts/templates/gemini/hooks.json +6 -6
  94. package/dist/src/symbionts/templates/gemini/settings.json +2 -2
  95. package/dist/src/symbionts/templates/myco-run.cjs +44 -0
  96. package/dist/src/symbionts/templates/opencode/settings.json +2 -2
  97. package/dist/src/symbionts/templates/vscode-copilot/hooks.json +7 -7
  98. package/dist/src/symbionts/templates/vscode-copilot/settings.json +2 -2
  99. package/dist/src/symbionts/templates/windsurf/hooks.json +4 -4
  100. package/dist/src/symbionts/templates/windsurf/settings.json +2 -2
  101. package/dist/src/worker/package-lock.json +4338 -0
  102. package/dist/src/worker/package.json +5 -0
  103. package/dist/src/worker/src/index.ts +58 -65
  104. package/dist/src/worker/src/mcp/auth.ts +65 -0
  105. package/dist/src/worker/src/mcp/server.ts +53 -0
  106. package/dist/src/worker/src/mcp/tools/context.ts +13 -0
  107. package/dist/src/worker/src/mcp/tools/get.ts +15 -0
  108. package/dist/src/worker/src/mcp/tools/graph.ts +35 -0
  109. package/dist/src/worker/src/mcp/tools/search.ts +32 -0
  110. package/dist/src/worker/src/mcp/tools/sessions.ts +24 -0
  111. package/dist/src/worker/src/mcp/tools/skills.ts +16 -0
  112. package/dist/src/worker/src/mcp/tools/team.ts +9 -0
  113. package/dist/src/worker/src/schema.ts +5 -1
  114. package/dist/src/worker/src/search-helpers.ts +70 -0
  115. package/dist/src/worker/wrangler.toml +9 -0
  116. package/dist/{stats-BISBIBXZ.js → stats-GEOQ2DFF.js} +9 -9
  117. package/dist/{stop-47BJ42EO.js → stop-7AKYBJJ2.js} +6 -6
  118. package/dist/{stop-failure-VU5BTLWX.js → stop-failure-NLE2EURG.js} +7 -7
  119. package/dist/{subagent-start-SPTKQRHU.js → subagent-start-LBNZF2TG.js} +7 -7
  120. package/dist/{subagent-stop-UU75BYLC.js → subagent-stop-B2Z5GYAB.js} +7 -7
  121. package/dist/{task-completed-MVDO7TZF.js → task-completed-PO5TETJ7.js} +7 -7
  122. package/dist/{team-7X64J4Y6.js → team-DPNP2RN7.js} +97 -14
  123. package/dist/team-DPNP2RN7.js.map +1 -0
  124. package/dist/ui/assets/{index-rpmSpJpm.js → index-CiI1fwas.js} +120 -120
  125. package/dist/ui/index.html +1 -1
  126. package/dist/{update-DA7VEXOS.js → update-WBWB5URU.js} +18 -9
  127. package/dist/update-WBWB5URU.js.map +1 -0
  128. package/dist/{user-prompt-submit-ADZ4NTVO.js → user-prompt-submit-IZJC3NV7.js} +30 -7
  129. package/dist/user-prompt-submit-IZJC3NV7.js.map +1 -0
  130. package/dist/{verify-QYSERHF7.js → verify-FNSP62I3.js} +5 -5
  131. package/dist/{version-A72TAL2J.js → version-QEVU66NT.js} +2 -2
  132. package/package.json +7 -7
  133. package/dist/chunk-25WHTV4N.js.map +0 -1
  134. package/dist/chunk-5ZISXCDC.js.map +0 -1
  135. package/dist/chunk-7DAH5GLC.js.map +0 -1
  136. package/dist/chunk-BZDZORVP.js.map +0 -1
  137. package/dist/chunk-CTF7TQMJ.js.map +0 -1
  138. package/dist/chunk-EBIYONNZ.js.map +0 -1
  139. package/dist/chunk-HPZ7YAMA.js.map +0 -1
  140. package/dist/chunk-IGBHLFV5.js.map +0 -1
  141. package/dist/chunk-RMJPQZGF.js.map +0 -1
  142. package/dist/chunk-UTLWSKDV.js.map +0 -1
  143. package/dist/chunk-ZSJPI5MS.js.map +0 -1
  144. package/dist/executor-NXKJU5KW.js.map +0 -1
  145. package/dist/main-YFVBIRRK.js.map +0 -1
  146. package/dist/session-start-PJLJDVJJ.js.map +0 -1
  147. package/dist/src/symbionts/templates/hook-guard.cjs +0 -19
  148. package/dist/team-7X64J4Y6.js.map +0 -1
  149. package/dist/update-DA7VEXOS.js.map +0 -1
  150. package/dist/user-prompt-submit-ADZ4NTVO.js.map +0 -1
  151. /package/dist/{agent-run-7AYHXIEF.js.map → agent-run-I4O2K2CK.js.map} +0 -0
  152. /package/dist/{agent-tasks-UUIFKBD4.js.map → agent-tasks-UOW5BQIB.js.map} +0 -0
  153. /package/dist/{chunk-XD3NEN3Q.js.map → chunk-2V7HR7HB.js.map} +0 -0
  154. /package/dist/{chunk-DT42247G.js.map → chunk-75AZFBFW.js.map} +0 -0
  155. /package/dist/{chunk-ML6GTPZU.js.map → chunk-CML4MCYF.js.map} +0 -0
  156. /package/dist/{chunk-NUSTG3BH.js.map → chunk-N75GMQGA.js.map} +0 -0
  157. /package/dist/{chunk-F6C4IC6R.js.map → chunk-NI23QCHB.js.map} +0 -0
  158. /package/dist/{chunk-C3C5QVLK.js.map → chunk-O3TRN3RC.js.map} +0 -0
  159. /package/dist/{chunk-3NCVCGUZ.js.map → chunk-RAV5YMRU.js.map} +0 -0
  160. /package/dist/{chunk-RKPTMHED.js.map → chunk-U3J2DDSR.js.map} +0 -0
  161. /package/dist/{chunk-SI5BBQAT.js.map → chunk-W7WENJ6F.js.map} +0 -0
  162. /package/dist/{chunk-XZWFMMJR.js.map → chunk-XWOQL4XN.js.map} +0 -0
  163. /package/dist/{cli-WJVYP2QT.js.map → cli-D3TJYJ2U.js.map} +0 -0
  164. /package/dist/{client-LZ3ZR4HC.js.map → client-4LLEXLVK.js.map} +0 -0
  165. /package/dist/{config-ZQIMG3FB.js.map → config-DA4IUVFL.js.map} +0 -0
  166. /package/dist/{detect-NJ2OREDP.js.map → detect-SZ2KDUF4.js.map} +0 -0
  167. /package/dist/{detect-providers-C64L3QET.js.map → detect-providers-PSVKXTWE.js.map} +0 -0
  168. /package/dist/{doctor-XEPBNHM3.js.map → doctor-KCTXPX5D.js.map} +0 -0
  169. /package/dist/{init-BHVQAQ27.js.map → init-QFNBKKDC.js.map} +0 -0
  170. /package/dist/{installer-45ZLP2RP.js.map → installer-BWJED3ED.js.map} +0 -0
  171. /package/dist/{llm-KTD6SR55.js.map → llm-SMA5ZEAW.js.map} +0 -0
  172. /package/dist/{loader-NEX3UF6U.js.map → loader-Q3P3R4UP.js.map} +0 -0
  173. /package/dist/{loader-SHRKUKOS.js.map → loader-SKKUMT5C.js.map} +0 -0
  174. /package/dist/{open-2U7ZRGA3.js.map → open-7737CSPN.js.map} +0 -0
  175. /package/dist/{post-compact-QIBMEWL3.js.map → post-compact-2TJ5FPZH.js.map} +0 -0
  176. /package/dist/{post-tool-use-ICGFXDVY.js.map → post-tool-use-FRTSICC3.js.map} +0 -0
  177. /package/dist/{post-tool-use-failure-C7TLH3XQ.js.map → post-tool-use-failure-KYO2NCNB.js.map} +0 -0
  178. /package/dist/{pre-compact-IF7K4TQK.js.map → pre-compact-J6GCJEJR.js.map} +0 -0
  179. /package/dist/{provider-check-LTLQ6BUZ.js.map → provider-check-AE3L5Z6R.js.map} +0 -0
  180. /package/dist/{registry-TFQ22Z7N.js.map → registry-O2NZLO3V.js.map} +0 -0
  181. /package/dist/{remove-FBGM2QVJ.js.map → remove-3WZZC7AX.js.map} +0 -0
  182. /package/dist/{resolution-events-HGKIJOTA.js.map → resolution-events-XWYLLDRK.js.map} +0 -0
  183. /package/dist/{restart-TQEECRNW.js.map → restart-HUHEFOXU.js.map} +0 -0
  184. /package/dist/{search-NN5FC4Z6.js.map → search-ZGN3LDXG.js.map} +0 -0
  185. /package/dist/{server-XMWJ4GF7.js.map → server-PTXLVVEE.js.map} +0 -0
  186. /package/dist/{session-GLPAFYPO.js.map → session-7VV3IQMO.js.map} +0 -0
  187. /package/dist/{session-end-TI3ILRBC.js.map → session-end-SMU55UCM.js.map} +0 -0
  188. /package/dist/{setup-llm-AQSWLXCZ.js.map → setup-llm-7S3VPAPN.js.map} +0 -0
  189. /package/dist/{stats-BISBIBXZ.js.map → stats-GEOQ2DFF.js.map} +0 -0
  190. /package/dist/{stop-47BJ42EO.js.map → stop-7AKYBJJ2.js.map} +0 -0
  191. /package/dist/{stop-failure-VU5BTLWX.js.map → stop-failure-NLE2EURG.js.map} +0 -0
  192. /package/dist/{subagent-start-SPTKQRHU.js.map → subagent-start-LBNZF2TG.js.map} +0 -0
  193. /package/dist/{subagent-stop-UU75BYLC.js.map → subagent-stop-B2Z5GYAB.js.map} +0 -0
  194. /package/dist/{task-completed-MVDO7TZF.js.map → task-completed-PO5TETJ7.js.map} +0 -0
  195. /package/dist/{verify-QYSERHF7.js.map → verify-FNSP62I3.js.map} +0 -0
  196. /package/dist/{version-A72TAL2J.js.map → version-QEVU66NT.js.map} +0 -0
@@ -1,18 +1,18 @@
1
1
  name: skill-evolve
2
2
  displayName: Skill Evolution
3
3
  description: >-
4
- Evaluate and evolve existing Myco-managed skills based on new
5
- vault knowledge. Only assesses skills with new knowledge since
6
- their last assessment, throttled to once per assess_interval_hours.
4
+ Evaluate and evolve existing Myco-managed skills. Assesses content
5
+ freshness, identifies merge and narrowness opportunities, and
6
+ autonomously consolidates the skill inventory.
7
7
  agent: myco-agent
8
8
  prompt: >-
9
- Assess and update skills that have new knowledge since their last
10
- assessment. The instruction contains pre-filtered skills with their
11
- current content and new spore IDs.
9
+ Assess and evolve skills that have new knowledge or structural
10
+ overlap. The instruction contains pre-filtered skills with their
11
+ content, new spore IDs, and pre-computed similarity analysis.
12
12
  isDefault: false
13
13
  model: claude-sonnet-4-6
14
- maxTurns: 40
15
- timeoutSeconds: 1200
14
+ maxTurns: 48
15
+ timeoutSeconds: 1800
16
16
  schedule:
17
17
  enabled: false
18
18
  intervalSeconds: 900
@@ -21,75 +21,161 @@ schedule:
21
21
  preCondition: has-active-skills
22
22
  params:
23
23
  assess_interval_hours: 24
24
- max_skills_per_run: 5
24
+ max_skills_per_run: 8
25
25
  phases:
26
- - name: assess
26
+ - name: inventory
27
+ model: claude-haiku-4-5-20251001
27
28
  prompt: |
28
- The instruction contains skills that have new knowledge since
29
- their last assessment. For each skill listed:
30
-
31
- 1. Read the new spores: fetch each ID from new_spore_ids via
32
- vault_spores. Understand what changed.
33
-
34
- 2. Verify code references: use vault_search_fts to check 3-5
35
- key file paths and function names from the skill content.
36
- Are they still valid? This is bounded — check specific
37
- claims, do not search broadly.
29
+ The instruction contains pre-computed structural analysis of
30
+ all active skills. Two mechanical signals are provided:
31
+
32
+ 1. **Narrow skills** skills with <2 H2 sections are flagged
33
+ as mechanically narrow. These are NOT broad enough for
34
+ standalone domain status.
35
+
36
+ 2. **Overlap pairs** skill pairs with similar descriptions
37
+ OR overlapping H2 headings are flagged with scores.
38
+
39
+ ## Your job: validate and assign targets
40
+
41
+ For each **mechanically narrow** skill:
42
+ - Confirm it is genuinely narrow (not a false positive, e.g.,
43
+ a debugging playbook with one long section is not narrow).
44
+ - Identify which broader skill it should be absorbed into.
45
+ Look at the heading lists to find the best domain match.
46
+
47
+ For each **overlap pair**:
48
+ - Confirm the overlap is real (not just shared vocabulary).
49
+ - If real, decide merge direction: which skill is the target
50
+ (broader, higher generation) and which is the source.
51
+
52
+ If no skills are flagged as narrow and no overlap pairs exist,
53
+ skip to storing an empty analysis.
54
+
55
+ ## Store results
56
+
57
+ Store via vault_set_state (key: skill-evolve-inventory) as:
58
+ {
59
+ "merge_candidates": [
60
+ { "source": "skill-name-a", "target": "skill-name-b",
61
+ "reason": "..." }
62
+ ],
63
+ "narrow_candidates": [
64
+ { "skill": "skill-name", "absorb_into": "broader-skill",
65
+ "reason": "..." }
66
+ ]
67
+ }
68
+
69
+ Only override the mechanical signals when you have clear
70
+ evidence that the flag is wrong. The default is to act on
71
+ the mechanical flags, not to find reasons to keep everything.
38
72
 
39
- 3. Classify:
40
- - CURRENT new knowledge doesn't affect this skill's procedures
41
- - STALE — new knowledge changes a specific step, path, or gotcha.
42
- Note exactly WHAT is new.
43
- - DEPRECATED — key code references are gone or the procedure
44
- is no longer relevant. Note what's missing.
45
-
46
- Bias toward CURRENT. A skill that is 90% accurate is better
47
- left alone than rewritten with the risk of losing detail.
73
+ If the instruction says "No skills need assessment", report
74
+ skip via vault_report and finish.
75
+ tools:
76
+ - vault_skill_records
77
+ - vault_set_state
78
+ - vault_report
79
+ maxTurns: 8
80
+ required: true
81
+ readOnly: true
48
82
 
49
- 4. Update the skill's properties with the new watermark:
83
+ - name: assess
84
+ model: claude-sonnet-4-6
85
+ prompt: |
86
+ Read the inventory analysis from vault_state
87
+ (key: skill-evolve-inventory).
88
+
89
+ There are TWO sources of skills to assess:
90
+
91
+ **A. Skills with new knowledge** — listed in the instruction
92
+ with descriptions and new spore IDs (full content is NOT in
93
+ the instruction — read it on-demand). For each:
94
+ 1. Read new spores via vault_spores. Understand what changed.
95
+ 2. Only if the new spores suggest a procedural change, read
96
+ the skill's full content via vault_skill_records (action:
97
+ get, id: "<name>") and verify 2-3 code references via
98
+ vault_search_fts. Skip content reads for skills where
99
+ the new spores are clearly unrelated.
100
+ 3. Check the inventory analysis: is this skill also flagged
101
+ for merge or narrowness?
102
+
103
+ **B. Inventory-flagged skills** — merge_candidates and
104
+ narrow_candidates from the inventory analysis. These may NOT
105
+ appear in the instruction (they may have no new knowledge).
106
+ For each flagged skill not already covered above:
107
+ 1. Read its content via vault_skill_records (action: get).
108
+ 2. Verify the inventory's merge/narrow recommendation by
109
+ reading both skills' content.
110
+
111
+ For ALL skills from both sources, classify with one of:
112
+ - CURRENT — still accurate, no changes needed.
113
+ - STALE — new knowledge changes specific steps, paths,
114
+ or gotchas. Note exactly WHAT is new.
115
+ - DEPRECATED — key code references are gone or the
116
+ procedure is no longer relevant. Note what's missing.
117
+ - MERGE — overlaps significantly with another skill
118
+ (from inventory analysis). Note the TARGET skill to
119
+ merge into.
120
+ - NARROW — too specific for standalone status (from
121
+ inventory analysis). Note the BROADER skill to absorb
122
+ into.
123
+
124
+ Bias toward CURRENT. A skill that is 90% accurate is
125
+ better left alone than rewritten with risk of losing detail.
126
+ Only classify MERGE/NARROW when the inventory analysis
127
+ supports it AND you agree after reading the content.
128
+
129
+ 5. Update the skill's properties with the new watermark:
50
130
  vault_skill_records (action: update, id: <skill_id>,
51
- properties: '{"last_assessed_at": <now>, "knowledge_watermark": <now>, "last_classification": "<classification>"}')
131
+ properties: '{"last_assessed_at": <now>,
132
+ "knowledge_watermark": <now>,
133
+ "last_classification": "<classification>"}')
52
134
 
53
- 5. Store classifications via vault_set_state
54
- (key: skill-evolve-classifications) as JSON.
135
+ 6. Store classifications via vault_set_state
136
+ (key: skill-evolve-classifications) as JSON:
137
+ [{ "skill_id": "...", "name": "...",
138
+ "classification": "...",
139
+ "target_skill": "..." (for MERGE/NARROW),
140
+ "details": "..." }]
55
141
 
56
142
  Report via vault_report.
57
143
 
58
- If the instruction says "No skills need assessment", report
59
- skip via vault_report and finish immediately.
144
+ If the instruction says "No skills need assessment" AND the
145
+ inventory has no merge/narrow candidates, report skip via
146
+ vault_report and finish.
60
147
  tools:
61
148
  - vault_spores
62
149
  - vault_search_fts
63
150
  - vault_skill_records
64
151
  - vault_set_state
65
152
  - vault_report
66
- maxTurns: 20
153
+ maxTurns: 18
67
154
  required: true
155
+ dependsOn:
156
+ - inventory
68
157
 
69
- - name: evolve
158
+ - name: act
159
+ model: claude-haiku-4-5-20251001
70
160
  prompt: |
71
161
  Read classifications from vault_state
72
162
  (key: skill-evolve-classifications). Parse the JSON.
73
163
 
74
- For each skill classified as STALE or DEPRECATED:
164
+ For each classified skill, take the appropriate action:
165
+
166
+ ## CURRENT — No action. Skip.
75
167
 
76
168
  ## STALE — Targeted update
77
169
 
78
170
  1. Read the current skill content from vault_skill_records
79
171
  (action: get).
80
-
81
172
  2. START from the existing content as-is. Copy it verbatim.
82
- Then make ONLY the specific changes needed — insert new
83
- sections, update incorrect facts, add missing steps.
84
-
173
+ Then make ONLY the specific changes needed.
85
174
  The diff between old and new should be MINIMAL.
86
-
87
- Protected frontmatter rules (vault_write_skill enforces
88
- these and will REJECT writes that violate them):
175
+ Protected frontmatter rules (enforced by vault_write_skill):
89
176
  - user-invocable: copy EXACT value from existing skill
90
177
  - allowed-tools: copy EXACT value from existing skill
91
178
  - description: do not shorten (>10% reduction is rejected)
92
-
93
179
  3. Write via vault_write_skill with a rationale explaining
94
180
  what specifically changed.
95
181
 
@@ -98,17 +184,45 @@ phases:
98
184
  1. vault_skill_records (action: update, status: retired)
99
185
  2. vault_skill_records (action: delete)
100
186
 
101
- ## CURRENTNo action. Skip.
187
+ ## MERGEAbsorb into target skill
188
+
189
+ 1. Read BOTH skills' full content from vault_skill_records
190
+ (action: get) — the source and the target.
191
+ 2. Write MERGED content to the TARGET skill via
192
+ vault_write_skill. The merged skill should:
193
+ - Keep the target skill's name and frontmatter
194
+ - Incorporate the source skill's procedures as new sections
195
+ - Preserve all concrete file paths, code patterns, and
196
+ gotchas from both skills
197
+ - Have a coherent structure (not just concatenation)
198
+ Protected frontmatter rules apply to the target.
199
+ 3. Rationale should explain: "Merged <source> into <target>:
200
+ <what was added>."
201
+ 4. Delete the SOURCE skill: vault_skill_records (action: delete)
202
+ This cascades (lineage, usage, linked candidates).
203
+
204
+ ## NARROW — Absorb into broader skill
205
+
206
+ Same as MERGE: read both, write merged content to the broader
207
+ skill, delete the narrow one. The narrow skill becomes a section
208
+ within the broader skill.
209
+
210
+ ## Important
211
+
212
+ - Process MERGE/NARROW actions AFTER STALE updates, so you're
213
+ merging already-refreshed content.
214
+ - If vault_write_skill rejects a merge (e.g., dedup gate trips),
215
+ check the error and adjust content. If truly blocked, skip
216
+ and report the issue.
102
217
 
103
218
  Report all actions via vault_report.
104
219
  tools:
105
220
  - vault_write_skill
106
221
  - vault_skill_records
107
222
  - vault_skill_candidates
108
- - vault_state
109
223
  - vault_search_fts
110
224
  - vault_report
111
- maxTurns: 20
225
+ maxTurns: 18
112
226
  required: true
113
227
  dependsOn:
114
228
  - assess
@@ -33,34 +33,40 @@ phases:
33
33
  ---
34
34
  name: myco:kebab-case-name
35
35
  description: |
36
- One paragraph that serves as the PRIMARY triggering mechanism.
37
- Be explicit about when this skill activates. Include concrete
38
- keywords, file names, and scenarios. Be somewhat pushy to
39
- counter undertriggering — include "even if the user doesn't
40
- explicitly ask for [topic]" language when appropriate.
36
+ One paragraph serving as the PRIMARY triggering mechanism.
37
+ Cover the full procedural domain mention all the major
38
+ procedures this skill covers. Be explicit about when this
39
+ activates. Include "even if the user doesn't explicitly
40
+ ask for [topic]" language when appropriate.
41
41
  managed_by: myco
42
42
  user-invocable: true
43
43
  allowed-tools: Read, Edit, Write, Bash, Grep, Glob
44
44
  ---
45
45
 
46
- # Skill Title
46
+ # Domain Title
47
47
 
48
- Brief context paragraph (2-3 sentences) explaining what this
49
- procedure accomplishes and when you'd use it.
48
+ Brief context paragraph (2-3 sentences) explaining the
49
+ procedural domain and when you'd use this skill.
50
50
 
51
51
  ## Prerequisites
52
52
 
53
- What must be true before starting.
53
+ What must be true before starting any procedure in this domain.
54
54
 
55
- ## Steps
55
+ ## Procedure A: [Name]
56
56
 
57
- Numbered, concrete steps with file paths and code examples.
58
- Each step should reference specific files in this project.
57
+ Steps for the first major procedure in this domain.
59
58
 
60
- ## Common Pitfalls
59
+ ## Procedure B: [Name]
61
60
 
62
- Inline with the steps where possible, or as a short section
63
- at the end for cross-cutting gotchas.
61
+ Steps for the second major procedure.
62
+
63
+ ## Procedure C: [Name]
64
+
65
+ Steps for the third major procedure.
66
+
67
+ ## Cross-Cutting Gotchas
68
+
69
+ Pitfalls that span multiple procedures in this domain.
64
70
  ```
65
71
 
66
72
  ## Frontmatter Fields
@@ -79,21 +85,27 @@ phases:
79
85
 
80
86
  ## Writing Principles
81
87
 
88
+ - **This candidate represents a procedural domain** — a family
89
+ of related tasks that share prerequisite knowledge. The skill
90
+ should cover the full domain, not just a single procedure.
91
+ - **A well-scoped skill has 3-6 major sections**, each describing
92
+ a distinct procedure within the domain. If the candidate maps
93
+ to fewer than 2 sections, note this in the rationale — it may
94
+ be too narrow.
82
95
  - **Explain reasoning, not rigid rules.** "Because X, do Y"
83
- is better than "ALWAYS do Y." Use theory of mind — the agent
84
- using this skill is smart enough to understand WHY.
85
- - **Stay under 500 lines.** Be concise but complete.
86
- - **Use concrete file paths** from this project, not generic examples.
96
+ is better than "ALWAYS do Y." The agent using this skill
97
+ understands WHY.
98
+ - **Stay under 800 lines.** Be concise but complete.
99
+ - **Use concrete file paths** from this project.
87
100
  - **Include code patterns** where they help (inline code blocks).
88
101
  - **Include examples** — show input/output or before/after where
89
102
  it makes the procedure clearer.
90
- - **Reference gotchas inline** where the developer would encounter
91
- them, not in a separate section.
103
+ - **Reference gotchas inline** where the developer would
104
+ encounter them, not in a separate section.
92
105
  - **The description is the trigger.** An agent reading just the
93
- description should know whether this skill applies to their task.
106
+ description should know whether this skill applies.
94
107
  - **Be general enough to survive change.** The skill should teach
95
- the pattern, not just document the current state. If a file path
96
- changes, the procedure should still make sense.
108
+ the pattern, not just document the current state.
97
109
 
98
110
  ## Tool Call
99
111
 
@@ -143,14 +155,19 @@ phases:
143
155
  function names, and code patterns from this project?
144
156
  Generic advice ("add a config file") is not enough.
145
157
 
146
- 4. **Length:** Under 500 lines?
158
+ 4. **Length:** Under 800 lines?
159
+
160
+ 5. **Domain scope:** Does this skill cover a procedural domain
161
+ (multiple related procedures as sections) or just a single
162
+ procedure? If single, flag as potentially too narrow. Count
163
+ the ## headings — expect 3-6 for a well-scoped domain skill.
147
164
 
148
- 5. **Conflicts:** Does it overlap with existing skills?
165
+ 6. **Conflicts:** Does it overlap with existing skills?
149
166
  Use vault_skill_records (action: list) to check. The
150
167
  staging path's dedup gate already ran on your description;
151
168
  this is a sanity check on the procedural content itself.
152
169
 
153
- 6. **Accuracy:** Spot-check 2-3 specific claims against the
170
+ 7. **Accuracy:** Spot-check 2-3 specific claims against the
154
171
  vault. Use vault_search_fts to verify file paths and
155
172
  function names mentioned in the skill.
156
173