@goondocks/myco 0.14.4 → 0.15.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 (172) hide show
  1. package/dist/{agent-run-GZ5UVLDV.js → agent-run-DUOJ3KDI.js} +6 -6
  2. package/dist/{agent-tasks-KKQ2GBBB.js → agent-tasks-LUWBY5JD.js} +6 -6
  3. package/dist/{chunk-X34OFKYU.js → chunk-23FJUKCN.js} +2 -2
  4. package/dist/{chunk-KNTJOMWY.js → chunk-3MEOYXOW.js} +2 -2
  5. package/dist/{chunk-PSYLKCWQ.js → chunk-4BQ5QE76.js} +24 -5
  6. package/dist/chunk-4BQ5QE76.js.map +1 -0
  7. package/dist/{chunk-JTYZRPX5.js → chunk-5ZT2Q6P5.js} +1 -1
  8. package/dist/{chunk-JJXVDCEX.js → chunk-75J2BR4P.js} +486 -488
  9. package/dist/chunk-75J2BR4P.js.map +1 -0
  10. package/dist/{chunk-GMTWRMLP.js → chunk-B3SF2CCW.js} +3 -3
  11. package/dist/{chunk-S6I62FAH.js → chunk-CUADDHHU.js} +4 -2
  12. package/dist/{chunk-S6I62FAH.js.map → chunk-CUADDHHU.js.map} +1 -1
  13. package/dist/{chunk-4VF6KQ2Z.js → chunk-DJQOYEK3.js} +87 -84
  14. package/dist/chunk-DJQOYEK3.js.map +1 -0
  15. package/dist/{chunk-LD6U3L6O.js → chunk-DK5VEBB5.js} +5 -5
  16. package/dist/{chunk-STBNNKL5.js → chunk-DKGUCEWU.js} +6 -6
  17. package/dist/{chunk-OQVKLTQY.js → chunk-EYMKBNRP.js} +2 -2
  18. package/dist/{chunk-KH64DHOY.js → chunk-GDY63YAW.js} +279 -277
  19. package/dist/chunk-GDY63YAW.js.map +1 -0
  20. package/dist/{chunk-ZESTWGJT.js → chunk-GYIA6XLB.js} +2 -2
  21. package/dist/{chunk-BCKYVLUZ.js → chunk-GZ7MXWYX.js} +3 -3
  22. package/dist/{chunk-S66YG6QK.js → chunk-LF5Z62X6.js} +46 -7
  23. package/dist/chunk-LF5Z62X6.js.map +1 -0
  24. package/dist/{chunk-TFBAV3PV.js → chunk-OMZCVRX6.js} +2 -2
  25. package/dist/{chunk-UZ5Y6XMP.js → chunk-R3YW7XVF.js} +2 -2
  26. package/dist/{chunk-PX5KIOKY.js → chunk-SPJGJEFV.js} +10 -2
  27. package/dist/{chunk-PX5KIOKY.js.map → chunk-SPJGJEFV.js.map} +1 -1
  28. package/dist/{chunk-QFMBZ72S.js → chunk-SV6UCB2Z.js} +2 -2
  29. package/dist/{chunk-NVCGF2DS.js → chunk-X4XFJG6I.js} +10 -6
  30. package/dist/chunk-X4XFJG6I.js.map +1 -0
  31. package/dist/{chunk-TNCBMGWB.js → chunk-X5IXK5KO.js} +262 -226
  32. package/dist/chunk-X5IXK5KO.js.map +1 -0
  33. package/dist/{chunk-TVV6PZOC.js → chunk-Z7TZJ2SP.js} +2 -2
  34. package/dist/{cli-JLDCZ77U.js → cli-YBD2GPK4.js} +45 -44
  35. package/dist/cli-YBD2GPK4.js.map +1 -0
  36. package/dist/{client-LRQMMKLP.js → client-CJ3X252K.js} +4 -4
  37. package/dist/{config-H657SF6B.js → config-MOWCOJJ4.js} +4 -4
  38. package/dist/{detect-27DN6UTL.js → detect-GFYKKHLJ.js} +3 -3
  39. package/dist/{detect-providers-PAVE2X6O.js → detect-providers-EU35RUL3.js} +2 -2
  40. package/dist/{doctor-IG3CXMI7.js → doctor-JR7NEL7K.js} +38 -19
  41. package/dist/doctor-JR7NEL7K.js.map +1 -0
  42. package/dist/{executor-HKNINUWO.js → executor-7XOKS6HS.js} +439 -248
  43. package/dist/executor-7XOKS6HS.js.map +1 -0
  44. package/dist/{init-RHQUINC2.js → init-PDLKYWQ4.js} +41 -23
  45. package/dist/init-PDLKYWQ4.js.map +1 -0
  46. package/dist/{init-wizard-ZB3JRDLE.js → init-wizard-WH3SXNMB.js} +7 -7
  47. package/dist/{installer-25TSX4SR.js → installer-BTUNKWOU.js} +2 -2
  48. package/dist/{llm-T3QVHC3Y.js → llm-DK44LYO6.js} +4 -4
  49. package/dist/{loader-WQKVWL5D.js → loader-WC4U5NM5.js} +4 -4
  50. package/dist/{loader-JQLO6K44.js → loader-WGDVRGLM.js} +6 -4
  51. package/dist/{logs-LXHPDKUA.js → logs-WFBX2I7C.js} +3 -3
  52. package/dist/{main-MVXPBP5Z.js → main-JB3R3DQE.js} +2346 -1912
  53. package/dist/main-JB3R3DQE.js.map +1 -0
  54. package/dist/{open-CVEMRH3Z.js → open-AADZPSLW.js} +6 -6
  55. package/dist/{openai-embeddings-5T5ZP7LO.js → openai-embeddings-SEIV7AM3.js} +2 -2
  56. package/dist/{openrouter-RD2COFC7.js → openrouter-ELODIZRP.js} +2 -2
  57. package/dist/{post-compact-ALQ2UGZ7.js → post-compact-KNQ4DYLM.js} +9 -9
  58. package/dist/{post-tool-use-SPL7HIYU.js → post-tool-use-OMWHFQLM.js} +10 -10
  59. package/dist/{post-tool-use-failure-B3CUYBTR.js → post-tool-use-failure-KFP6MB7Z.js} +9 -9
  60. package/dist/{pre-compact-KPWC4V64.js → pre-compact-2ZYE2HRB.js} +9 -9
  61. package/dist/{provider-check-QN7OGXZA.js → provider-check-B66E5PWS.js} +2 -2
  62. package/dist/{registry-2XQMCPA6.js → registry-DHWVHXWY.js} +5 -5
  63. package/dist/{remove-O2WCN6RC.js → remove-QT7634L5.js} +52 -20
  64. package/dist/remove-QT7634L5.js.map +1 -0
  65. package/dist/{resolution-events-5EVUEWHS.js → resolution-events-DBCRVZGU.js} +4 -4
  66. package/dist/{restart-S52VV3SP.js → restart-YQNQEHOU.js} +7 -7
  67. package/dist/{search-IOJ5O37S.js → search-C6JTQDWY.js} +6 -6
  68. package/dist/{server-T4VPK6FU.js → server-QJ3RWZZZ.js} +8 -8
  69. package/dist/{session-ID6BX72K.js → session-JLVL5TYX.js} +8 -8
  70. package/dist/{session-end-I7ZABXRI.js → session-end-XFZRRP5H.js} +10 -10
  71. package/dist/{session-start-VPOUY42U.js → session-start-XGINISXO.js} +15 -15
  72. package/dist/{setup-llm-G5UG5N3T.js → setup-llm-X2OCM6R7.js} +8 -8
  73. package/dist/src/agent/definitions/tasks/full-intelligence.yaml +8 -7
  74. package/dist/src/agent/definitions/tasks/skill-evolve.yaml +71 -144
  75. package/dist/src/agent/definitions/tasks/skill-generate.yaml +10 -62
  76. package/dist/src/agent/definitions/tasks/skill-survey.yaml +87 -53
  77. package/dist/src/agent/prompts/agent.md +1 -0
  78. package/dist/src/cli.js +1 -1
  79. package/dist/src/daemon/main.js +1 -1
  80. package/dist/src/hooks/post-tool-use.js +1 -1
  81. package/dist/src/hooks/session-end.js +1 -1
  82. package/dist/src/hooks/session-start.js +1 -1
  83. package/dist/src/hooks/stop.js +1 -1
  84. package/dist/src/hooks/user-prompt-submit.js +1 -1
  85. package/dist/src/mcp/server.js +1 -1
  86. package/dist/src/worker/src/schema.ts +14 -0
  87. package/dist/{stats-GRI4MTS2.js → stats-2EAETG2T.js} +9 -9
  88. package/dist/{stop-UTZ2CXI2.js → stop-WOBDYTSA.js} +10 -10
  89. package/dist/{stop-failure-CECM5NB7.js → stop-failure-QEC7ZGBQ.js} +9 -9
  90. package/dist/{subagent-start-SYZGJYUN.js → subagent-start-H6DVRVOE.js} +9 -9
  91. package/dist/{subagent-stop-7WWW7TGQ.js → subagent-stop-LKENKJ65.js} +9 -9
  92. package/dist/{task-completed-N7SIY6T6.js → task-completed-ZZ47PRPD.js} +9 -9
  93. package/dist/{team-SJPDXELY.js → team-J62N7VMG.js} +34 -26
  94. package/dist/team-J62N7VMG.js.map +1 -0
  95. package/dist/ui/assets/index-Bx9l8uxa.js +837 -0
  96. package/dist/ui/assets/{index-BmsHIwjl.css → index-DlEQ8A8Y.css} +1 -1
  97. package/dist/ui/index.html +2 -2
  98. package/dist/{update-DZZYQ4NJ.js → update-LX3CJ4TJ.js} +30 -14
  99. package/dist/update-LX3CJ4TJ.js.map +1 -0
  100. package/dist/{user-prompt-submit-UUNRRS5P.js → user-prompt-submit-NNMLY3EW.js} +10 -10
  101. package/dist/{verify-JHIMXTY5.js → verify-AMRQXQ3K.js} +6 -6
  102. package/dist/{version-VKNCAPZW.js → version-6OJH5HLZ.js} +2 -2
  103. package/package.json +2 -2
  104. package/dist/chunk-4VF6KQ2Z.js.map +0 -1
  105. package/dist/chunk-JJXVDCEX.js.map +0 -1
  106. package/dist/chunk-KH64DHOY.js.map +0 -1
  107. package/dist/chunk-NVCGF2DS.js.map +0 -1
  108. package/dist/chunk-PSYLKCWQ.js.map +0 -1
  109. package/dist/chunk-S66YG6QK.js.map +0 -1
  110. package/dist/chunk-TNCBMGWB.js.map +0 -1
  111. package/dist/cli-JLDCZ77U.js.map +0 -1
  112. package/dist/doctor-IG3CXMI7.js.map +0 -1
  113. package/dist/executor-HKNINUWO.js.map +0 -1
  114. package/dist/init-RHQUINC2.js.map +0 -1
  115. package/dist/main-MVXPBP5Z.js.map +0 -1
  116. package/dist/remove-O2WCN6RC.js.map +0 -1
  117. package/dist/resolve-3FEUV462.js +0 -9
  118. package/dist/team-SJPDXELY.js.map +0 -1
  119. package/dist/ui/assets/index-Cn6cQwJy.js +0 -842
  120. package/dist/update-DZZYQ4NJ.js.map +0 -1
  121. package/dist/version-VKNCAPZW.js.map +0 -1
  122. /package/dist/{agent-run-GZ5UVLDV.js.map → agent-run-DUOJ3KDI.js.map} +0 -0
  123. /package/dist/{agent-tasks-KKQ2GBBB.js.map → agent-tasks-LUWBY5JD.js.map} +0 -0
  124. /package/dist/{chunk-X34OFKYU.js.map → chunk-23FJUKCN.js.map} +0 -0
  125. /package/dist/{chunk-KNTJOMWY.js.map → chunk-3MEOYXOW.js.map} +0 -0
  126. /package/dist/{chunk-JTYZRPX5.js.map → chunk-5ZT2Q6P5.js.map} +0 -0
  127. /package/dist/{chunk-GMTWRMLP.js.map → chunk-B3SF2CCW.js.map} +0 -0
  128. /package/dist/{chunk-LD6U3L6O.js.map → chunk-DK5VEBB5.js.map} +0 -0
  129. /package/dist/{chunk-STBNNKL5.js.map → chunk-DKGUCEWU.js.map} +0 -0
  130. /package/dist/{chunk-OQVKLTQY.js.map → chunk-EYMKBNRP.js.map} +0 -0
  131. /package/dist/{chunk-ZESTWGJT.js.map → chunk-GYIA6XLB.js.map} +0 -0
  132. /package/dist/{chunk-BCKYVLUZ.js.map → chunk-GZ7MXWYX.js.map} +0 -0
  133. /package/dist/{chunk-TFBAV3PV.js.map → chunk-OMZCVRX6.js.map} +0 -0
  134. /package/dist/{chunk-UZ5Y6XMP.js.map → chunk-R3YW7XVF.js.map} +0 -0
  135. /package/dist/{chunk-QFMBZ72S.js.map → chunk-SV6UCB2Z.js.map} +0 -0
  136. /package/dist/{chunk-TVV6PZOC.js.map → chunk-Z7TZJ2SP.js.map} +0 -0
  137. /package/dist/{client-LRQMMKLP.js.map → client-CJ3X252K.js.map} +0 -0
  138. /package/dist/{config-H657SF6B.js.map → config-MOWCOJJ4.js.map} +0 -0
  139. /package/dist/{detect-27DN6UTL.js.map → detect-GFYKKHLJ.js.map} +0 -0
  140. /package/dist/{detect-providers-PAVE2X6O.js.map → detect-providers-EU35RUL3.js.map} +0 -0
  141. /package/dist/{init-wizard-ZB3JRDLE.js.map → init-wizard-WH3SXNMB.js.map} +0 -0
  142. /package/dist/{installer-25TSX4SR.js.map → installer-BTUNKWOU.js.map} +0 -0
  143. /package/dist/{llm-T3QVHC3Y.js.map → llm-DK44LYO6.js.map} +0 -0
  144. /package/dist/{loader-JQLO6K44.js.map → loader-WC4U5NM5.js.map} +0 -0
  145. /package/dist/{loader-WQKVWL5D.js.map → loader-WGDVRGLM.js.map} +0 -0
  146. /package/dist/{logs-LXHPDKUA.js.map → logs-WFBX2I7C.js.map} +0 -0
  147. /package/dist/{open-CVEMRH3Z.js.map → open-AADZPSLW.js.map} +0 -0
  148. /package/dist/{openai-embeddings-5T5ZP7LO.js.map → openai-embeddings-SEIV7AM3.js.map} +0 -0
  149. /package/dist/{openrouter-RD2COFC7.js.map → openrouter-ELODIZRP.js.map} +0 -0
  150. /package/dist/{post-compact-ALQ2UGZ7.js.map → post-compact-KNQ4DYLM.js.map} +0 -0
  151. /package/dist/{post-tool-use-SPL7HIYU.js.map → post-tool-use-OMWHFQLM.js.map} +0 -0
  152. /package/dist/{post-tool-use-failure-B3CUYBTR.js.map → post-tool-use-failure-KFP6MB7Z.js.map} +0 -0
  153. /package/dist/{pre-compact-KPWC4V64.js.map → pre-compact-2ZYE2HRB.js.map} +0 -0
  154. /package/dist/{provider-check-QN7OGXZA.js.map → provider-check-B66E5PWS.js.map} +0 -0
  155. /package/dist/{registry-2XQMCPA6.js.map → registry-DHWVHXWY.js.map} +0 -0
  156. /package/dist/{resolution-events-5EVUEWHS.js.map → resolution-events-DBCRVZGU.js.map} +0 -0
  157. /package/dist/{restart-S52VV3SP.js.map → restart-YQNQEHOU.js.map} +0 -0
  158. /package/dist/{search-IOJ5O37S.js.map → search-C6JTQDWY.js.map} +0 -0
  159. /package/dist/{server-T4VPK6FU.js.map → server-QJ3RWZZZ.js.map} +0 -0
  160. /package/dist/{session-ID6BX72K.js.map → session-JLVL5TYX.js.map} +0 -0
  161. /package/dist/{session-end-I7ZABXRI.js.map → session-end-XFZRRP5H.js.map} +0 -0
  162. /package/dist/{session-start-VPOUY42U.js.map → session-start-XGINISXO.js.map} +0 -0
  163. /package/dist/{setup-llm-G5UG5N3T.js.map → setup-llm-X2OCM6R7.js.map} +0 -0
  164. /package/dist/{stats-GRI4MTS2.js.map → stats-2EAETG2T.js.map} +0 -0
  165. /package/dist/{stop-UTZ2CXI2.js.map → stop-WOBDYTSA.js.map} +0 -0
  166. /package/dist/{stop-failure-CECM5NB7.js.map → stop-failure-QEC7ZGBQ.js.map} +0 -0
  167. /package/dist/{subagent-start-SYZGJYUN.js.map → subagent-start-H6DVRVOE.js.map} +0 -0
  168. /package/dist/{subagent-stop-7WWW7TGQ.js.map → subagent-stop-LKENKJ65.js.map} +0 -0
  169. /package/dist/{task-completed-N7SIY6T6.js.map → task-completed-ZZ47PRPD.js.map} +0 -0
  170. /package/dist/{user-prompt-submit-UUNRRS5P.js.map → user-prompt-submit-NNMLY3EW.js.map} +0 -0
  171. /package/dist/{verify-JHIMXTY5.js.map → verify-AMRQXQ3K.js.map} +0 -0
  172. /package/dist/{resolve-3FEUV462.js.map → version-6OJH5HLZ.js.map} +0 -0
@@ -9,7 +9,7 @@ prompt: >-
9
9
  Survey the vault knowledge graph for procedural skill candidates.
10
10
  isDefault: false
11
11
  model: claude-sonnet-4-6
12
- maxTurns: 40
12
+ maxTurns: 65
13
13
  timeoutSeconds: 600
14
14
  schedule:
15
15
  enabled: true
@@ -19,77 +19,83 @@ schedule:
19
19
  phases:
20
20
  - name: explore-spores
21
21
  prompt: |
22
- Explore ALL spores in the vault to identify procedural patterns.
22
+ Identify procedural patterns from spores and entities.
23
23
  You are one of three parallel exploration phases — focus only on spores.
24
+ Budget is tight — be efficient, not exhaustive.
24
25
 
25
- 1. Query wisdom spores first (vault_spores, observation_type: wisdom).
26
- These are the highest signal synthesized from multiple sessions.
26
+ 1. Read the digest (vault_read_digest) for a high-level overview.
27
+ This gives you the landscape in one call.
27
28
 
28
- 2. Query decisions, discoveries, and gotchas. Paginate through ALL
29
- active spores (use offset parameter), not just the first page.
29
+ 2. Query wisdom spores (vault_spores, observation_type: wisdom).
30
+ These are highest signal synthesized from multiple sessions.
30
31
 
31
- 3. Use vault_entities to see what components and concepts exist.
32
- High-mention-count entities often indicate areas that need skills.
32
+ 3. Query decisions and gotchas (vault_spores, limit 30 each).
33
+ One page per type is sufficient don't paginate exhaustively.
33
34
 
34
- 4. Read the digest (vault_read_digest) for a high-level overview.
35
+ 4. Check vault_entities for high-mention components.
35
36
 
36
- For each finding, note: what procedure does this relate to?
37
37
  Group findings by procedural topic ("how to do X").
38
+ Stop when you have a clear picture — diminishing returns
39
+ from additional queries waste turns.
38
40
  tools:
39
41
  - vault_spores
40
42
  - vault_entities
41
43
  - vault_edges
42
44
  - vault_read_digest
43
- maxTurns: 8
45
+ maxTurns: 15
44
46
  required: true
47
+ readOnly: true
45
48
 
46
49
  - name: explore-sessions
47
50
  prompt: |
48
- Explore ALL sessions in the vault to identify procedural workflows.
51
+ Identify procedural workflows from session history.
49
52
  You are one of three parallel exploration phases — focus only on sessions.
53
+ Budget is tight — be efficient, not exhaustive.
50
54
 
51
- 1. List all sessions (vault_sessions). Paginate through them.
52
- Session summaries describe workflows and multi-step implementations.
55
+ 1. List recent sessions (vault_sessions, limit 20). Read summaries
56
+ to identify multi-step workflows and recurring implementation patterns.
53
57
 
54
- 2. Look for recurring themes "3+ sessions touched the same component"
55
- is a strong skill candidate signal.
58
+ 2. Do 2-3 targeted FTS searches for procedural keywords:
59
+ vault_search_fts with queries like "migration step", "configure install",
60
+ "refactor debug". Combine related terms in ONE query rather than
61
+ searching each keyword separately.
56
62
 
57
- 3. Use vault_search_fts to search session content for procedural
58
- keywords: "how to", "step", "migration", "refactor", "debug",
59
- "configure", "install", "deploy".
60
-
61
- For each finding, note: what procedure does this relate to?
62
63
  Group findings by procedural topic ("how to do X").
64
+ Stop when you have a clear picture — you don't need to search
65
+ every possible keyword.
63
66
  tools:
64
67
  - vault_sessions
65
68
  - vault_search_fts
66
- maxTurns: 8
69
+ maxTurns: 10
67
70
  required: true
71
+ readOnly: true
68
72
 
69
73
  - name: explore-plans
70
74
  prompt: |
71
- Explore ALL plans and artifacts in the vault to identify procedures.
75
+ Identify procedures from plans and artifacts.
72
76
  You are one of three parallel exploration phases — focus only on plans.
77
+ Budget is tight — be efficient, not exhaustive.
73
78
 
74
79
  Plans contain explicit step-by-step procedures and design decisions.
75
80
  They are often the most directly skill-ready content.
76
81
 
77
- 1. Use vault_search_semantic with broad queries to find plans:
82
+ 1. Use vault_search_semantic with 2-3 broad queries to find plans:
78
83
  - "implementation plan design architecture"
79
- - "migration refactor setup configuration"
80
- - "testing deployment workflow pipeline"
81
- - "debugging troubleshooting fix"
84
+ - "migration setup configuration deployment"
85
+ Combine related concepts in each query. Do NOT search each
86
+ keyword separately.
82
87
 
83
- 2. Use vault_search_fts to search for specific procedural terms
84
- across plans and artifacts.
88
+ 2. If semantic search returns thin results, do ONE targeted FTS
89
+ search for a specific procedural term.
85
90
 
86
- For each finding, note: what procedure does this relate to?
87
91
  Group findings by procedural topic ("how to do X").
92
+ Stop when you have coverage — more queries have diminishing returns.
88
93
  tools:
89
94
  - vault_search_semantic
90
95
  - vault_search_fts
91
- maxTurns: 8
96
+ maxTurns: 22
92
97
  required: true
98
+ readOnly: true
93
99
 
94
100
  - name: evaluate
95
101
  prompt: |
@@ -97,20 +103,45 @@ phases:
97
103
  spores and entities, one explored sessions, one explored plans.
98
104
  Their findings are in the prior context.
99
105
 
100
- For each procedural cluster identified across the exploration phases:
101
-
102
- 1. Is this a procedure (how to do something in this project)?
103
- Only procedures become skills. "What is X" is not a skill.
104
- "How to do X" is a skill.
105
-
106
- 2. Is there enough cross-session evidence?
107
- Minimum: knowledge from 2+ sessions, 3+ source items across
108
- sessions, spores, and plans.
109
-
110
- 3. Does an existing skill or candidate already cover this topic?
111
- Use vault_skill_candidates (action: list) to check.
112
-
113
- 4. Score confidence (0.0-1.0) based on:
106
+ BEFORE creating any candidates, you MUST load the dedup context:
107
+ 1. vault_skill_records (action: list) — all active skills on disk
108
+ 2. vault_skill_candidates (action: list) all existing candidates
109
+ Keep both lists for reference throughout this phase.
110
+
111
+ For each procedural cluster identified, evaluate ALL of these
112
+ criteria. A candidate must pass EVERY one:
113
+
114
+ 1. PROCEDURE TEST: Is this "how to do X in this project"?
115
+ "What is X" or "X exists" is knowledge, not a skill. Skip it.
116
+
117
+ 2. REPEATABILITY TEST: Will someone need to do this again?
118
+ Skills are repeatable how-to's for recurring tasks — things
119
+ a developer will do more than once as the project grows.
120
+ One-time fixes, bug patches, version-specific workarounds,
121
+ and already-applied migration steps are NOT skills. They are
122
+ vault knowledge (spores/wisdom) that should stay as spores.
123
+ Ask: "if a new contributor joined tomorrow, would they ever
124
+ need to follow this procedure?" If the answer is "no, it was
125
+ done once and the result is permanent," it is not a skill.
126
+ Examples of SKILLS: adding a new symbiont, creating a DB
127
+ migration, registering an MCP tool, authoring an agent task.
128
+ NOT skills: fixing a specific bug, applying a one-off schema
129
+ change, adapting to a framework update, addressing a one-off
130
+ behavioral change in a dependency.
131
+
132
+ 3. CROSS-SESSION EVIDENCE: Knowledge from 2+ sessions, 3+ source
133
+ items across sessions, spores, and plans.
134
+
135
+ 4. DEDUPLICATION (mandatory — failures here create real problems):
136
+ Check BOTH lists from step 0 above.
137
+ - If an active skill record's name or description covers the
138
+ same procedure, do NOT create a duplicate. Skip it entirely.
139
+ - If a non-dismissed candidate covers the same topic, UPDATE
140
+ that candidate with new evidence instead of creating a new one.
141
+ - If a generated/dismissed candidate covered this, it was
142
+ already handled. Do not re-create it.
143
+
144
+ 5. CONFIDENCE SCORE (0.0-1.0):
114
145
  - Knowledge density (more sources = higher)
115
146
  - Cross-session evidence (wider = higher)
116
147
  - Presence of wisdom spores (higher quality signal)
@@ -120,13 +151,16 @@ phases:
120
151
  with topic, rationale, confidence, and source_ids (JSON array of
121
152
  {id, type} objects referencing the spores, sessions, and plans).
122
153
 
123
- IMPORTANT: Write the rationale field as markdown. Use:
124
- - **Bold** for key terms and pass/fail verdicts
125
- - Numbered lists for the procedure steps identified
126
- - Inline `code` for file paths, function names, and config keys
127
- - A brief summary sentence, then the evidence structure
128
-
129
- The rationale is displayed directly to the user in the dashboard.
154
+ IMPORTANT: Write the rationale field as markdown. Include these
155
+ sections in every rationale:
156
+ - **Procedure verdict**: PASS/FAIL
157
+ - **Repeatability verdict**: PASS/FAIL with justification
158
+ - **Cross-session evidence**: session IDs and source count
159
+ - **Existing coverage**: list the skills/candidates you checked
160
+ and why this is genuinely new (not "NONE" name what you checked)
161
+ Use **bold** for verdicts, numbered lists for steps, `code` for
162
+ file paths and function names. The rationale is displayed directly
163
+ to the user in the dashboard.
130
164
 
131
165
  If an existing candidate has new evidence, use vault_skill_candidates
132
166
  (action: update) to increase confidence and add source_ids.
@@ -141,7 +175,7 @@ phases:
141
175
  - vault_skill_records
142
176
  - vault_set_state
143
177
  - vault_report
144
- maxTurns: 8
178
+ maxTurns: 12
145
179
  required: true
146
180
  dependsOn:
147
181
  - explore-spores
@@ -142,6 +142,7 @@ For phased tasks, follow only your assigned phase instructions. The executor con
142
142
  - One observation per spore, specific not vague
143
143
  - Report via `vault_report` after each significant action
144
144
  - If no work to do, report "skip" with reason and finish
145
+ - Be efficient with tool calls — batch related queries, stop searching when you have enough data. Each turn has a cost. Prefer one broad query over five narrow ones.
145
146
 
146
147
  ## Exit Behavior
147
148
 
package/dist/src/cli.js CHANGED
@@ -2,5 +2,5 @@
2
2
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
3
3
 
4
4
  // src/entries/cli.ts
5
- await import("../cli-JLDCZ77U.js");
5
+ await import("../cli-YBD2GPK4.js");
6
6
  //# sourceMappingURL=cli.js.map
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
 
3
3
  // src/entries/daemon.ts
4
- var { main } = await import("../../main-MVXPBP5Z.js");
4
+ var { main } = await import("../../main-JB3R3DQE.js");
5
5
  await main();
6
6
  //# sourceMappingURL=main.js.map
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
 
3
3
  // src/entries/post-tool-use.ts
4
- var { main } = await import("../../post-tool-use-SPL7HIYU.js");
4
+ var { main } = await import("../../post-tool-use-OMWHFQLM.js");
5
5
  await main();
6
6
  //# sourceMappingURL=post-tool-use.js.map
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
 
3
3
  // src/entries/session-end.ts
4
- var { main } = await import("../../session-end-I7ZABXRI.js");
4
+ var { main } = await import("../../session-end-XFZRRP5H.js");
5
5
  await main();
6
6
  //# sourceMappingURL=session-end.js.map
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
 
3
3
  // src/entries/session-start.ts
4
- var { main } = await import("../../session-start-VPOUY42U.js");
4
+ var { main } = await import("../../session-start-XGINISXO.js");
5
5
  await main();
6
6
  //# sourceMappingURL=session-start.js.map
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
 
3
3
  // src/entries/stop.ts
4
- var { main } = await import("../../stop-UTZ2CXI2.js");
4
+ var { main } = await import("../../stop-WOBDYTSA.js");
5
5
  await main();
6
6
  //# sourceMappingURL=stop.js.map
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
 
3
3
  // src/entries/user-prompt-submit.ts
4
- var { main } = await import("../../user-prompt-submit-UUNRRS5P.js");
4
+ var { main } = await import("../../user-prompt-submit-NNMLY3EW.js");
5
5
  await main();
6
6
  //# sourceMappingURL=user-prompt-submit.js.map
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
 
3
3
  // src/entries/mcp-server.ts
4
- var { main } = await import("../../server-T4VPK6FU.js");
4
+ var { main } = await import("../../server-QJ3RWZZZ.js");
5
5
  await main();
6
6
  //# sourceMappingURL=server.js.map
@@ -229,6 +229,7 @@ const SKILL_USAGE_TABLE = `
229
229
  skill_id TEXT NOT NULL,
230
230
  session_id TEXT NOT NULL,
231
231
  detected_at INTEGER NOT NULL,
232
+ synced_at INTEGER,
232
233
  PRIMARY KEY (id, machine_id)
233
234
  )`;
234
235
 
@@ -284,9 +285,22 @@ const ALL_DDLS = [
284
285
 
285
286
  /**
286
287
  * Create all D1 tables and indexes. Fully idempotent via IF NOT EXISTS.
288
+ * Includes ALTER TABLE migrations for columns added after initial deployment.
287
289
  */
288
290
  export async function initD1Schema(db: D1Database): Promise<void> {
289
291
  const statements = [...ALL_DDLS, ...SECONDARY_INDEXES];
290
292
  const batch = statements.map((sql) => db.prepare(sql));
291
293
  await db.batch(batch);
294
+
295
+ // Migrations for existing tables (safe to re-run — silently ignored if column exists)
296
+ const migrations = [
297
+ 'ALTER TABLE skill_usage ADD COLUMN synced_at INTEGER',
298
+ ];
299
+ for (const sql of migrations) {
300
+ try {
301
+ await db.prepare(sql).run();
302
+ } catch {
303
+ // Column already exists — expected after first run
304
+ }
305
+ }
292
306
  }
@@ -1,23 +1,23 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
  import {
3
3
  gatherStats
4
- } from "./chunk-GMTWRMLP.js";
4
+ } from "./chunk-B3SF2CCW.js";
5
5
  import {
6
6
  initVaultDb
7
- } from "./chunk-BCKYVLUZ.js";
7
+ } from "./chunk-GZ7MXWYX.js";
8
8
  import "./chunk-SAKJMNSR.js";
9
- import "./chunk-TNCBMGWB.js";
9
+ import "./chunk-X5IXK5KO.js";
10
10
  import "./chunk-HHZ3RTEI.js";
11
- import "./chunk-PSYLKCWQ.js";
11
+ import "./chunk-4BQ5QE76.js";
12
12
  import "./chunk-MYX5NCRH.js";
13
- import "./chunk-UZ5Y6XMP.js";
14
- import "./chunk-TFBAV3PV.js";
13
+ import "./chunk-R3YW7XVF.js";
14
+ import "./chunk-OMZCVRX6.js";
15
15
  import "./chunk-LPUQPDC2.js";
16
16
  import "./chunk-TRA3R4EC.js";
17
- import "./chunk-S6I62FAH.js";
17
+ import "./chunk-CUADDHHU.js";
18
18
  import "./chunk-D7TYRPRM.js";
19
19
  import "./chunk-E4VLWIJC.js";
20
- import "./chunk-KH64DHOY.js";
20
+ import "./chunk-GDY63YAW.js";
21
21
  import "./chunk-PZUWP5VK.js";
22
22
 
23
23
  // src/cli/stats.ts
@@ -92,4 +92,4 @@ function formatUptime(seconds) {
92
92
  export {
93
93
  run
94
94
  };
95
- //# sourceMappingURL=stats-GRI4MTS2.js.map
95
+ //# sourceMappingURL=stats-2EAETG2T.js.map
@@ -2,21 +2,21 @@ import { createRequire as __cr } from 'node:module'; const require = __cr(import
2
2
  import {
3
3
  normalizeHookInput,
4
4
  readStdin
5
- } from "./chunk-OQVKLTQY.js";
5
+ } from "./chunk-EYMKBNRP.js";
6
+ import {
7
+ resolveVaultDir
8
+ } from "./chunk-5ZT2Q6P5.js";
6
9
  import {
7
10
  DaemonClient
8
- } from "./chunk-UZ5Y6XMP.js";
9
- import "./chunk-TFBAV3PV.js";
10
- import "./chunk-QFMBZ72S.js";
11
+ } from "./chunk-R3YW7XVF.js";
12
+ import "./chunk-OMZCVRX6.js";
13
+ import "./chunk-SV6UCB2Z.js";
11
14
  import "./chunk-LPUQPDC2.js";
12
15
  import "./chunk-TRA3R4EC.js";
13
- import "./chunk-S6I62FAH.js";
16
+ import "./chunk-CUADDHHU.js";
14
17
  import "./chunk-D7TYRPRM.js";
15
18
  import "./chunk-E4VLWIJC.js";
16
- import "./chunk-KH64DHOY.js";
17
- import {
18
- resolveVaultDir
19
- } from "./chunk-JTYZRPX5.js";
19
+ import "./chunk-GDY63YAW.js";
20
20
  import "./chunk-PZUWP5VK.js";
21
21
 
22
22
  // src/hooks/stop.ts
@@ -45,4 +45,4 @@ async function main() {
45
45
  export {
46
46
  main
47
47
  };
48
- //# sourceMappingURL=stop-UTZ2CXI2.js.map
48
+ //# sourceMappingURL=stop-WOBDYTSA.js.map
@@ -1,19 +1,19 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
  import {
3
3
  sendEvent
4
- } from "./chunk-STBNNKL5.js";
4
+ } from "./chunk-DKGUCEWU.js";
5
5
  import "./chunk-V7XG6V6C.js";
6
- import "./chunk-OQVKLTQY.js";
7
- import "./chunk-UZ5Y6XMP.js";
8
- import "./chunk-TFBAV3PV.js";
9
- import "./chunk-QFMBZ72S.js";
6
+ import "./chunk-EYMKBNRP.js";
7
+ import "./chunk-5ZT2Q6P5.js";
8
+ import "./chunk-R3YW7XVF.js";
9
+ import "./chunk-OMZCVRX6.js";
10
+ import "./chunk-SV6UCB2Z.js";
10
11
  import "./chunk-LPUQPDC2.js";
11
12
  import "./chunk-TRA3R4EC.js";
12
- import "./chunk-S6I62FAH.js";
13
+ import "./chunk-CUADDHHU.js";
13
14
  import "./chunk-D7TYRPRM.js";
14
15
  import "./chunk-E4VLWIJC.js";
15
- import "./chunk-KH64DHOY.js";
16
- import "./chunk-JTYZRPX5.js";
16
+ import "./chunk-GDY63YAW.js";
17
17
  import "./chunk-PZUWP5VK.js";
18
18
 
19
19
  // src/hooks/stop-failure.ts
@@ -27,4 +27,4 @@ async function main() {
27
27
  export {
28
28
  main
29
29
  };
30
- //# sourceMappingURL=stop-failure-CECM5NB7.js.map
30
+ //# sourceMappingURL=stop-failure-QEC7ZGBQ.js.map
@@ -1,19 +1,19 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
  import {
3
3
  sendEvent
4
- } from "./chunk-STBNNKL5.js";
4
+ } from "./chunk-DKGUCEWU.js";
5
5
  import "./chunk-V7XG6V6C.js";
6
- import "./chunk-OQVKLTQY.js";
7
- import "./chunk-UZ5Y6XMP.js";
8
- import "./chunk-TFBAV3PV.js";
9
- import "./chunk-QFMBZ72S.js";
6
+ import "./chunk-EYMKBNRP.js";
7
+ import "./chunk-5ZT2Q6P5.js";
8
+ import "./chunk-R3YW7XVF.js";
9
+ import "./chunk-OMZCVRX6.js";
10
+ import "./chunk-SV6UCB2Z.js";
10
11
  import "./chunk-LPUQPDC2.js";
11
12
  import "./chunk-TRA3R4EC.js";
12
- import "./chunk-S6I62FAH.js";
13
+ import "./chunk-CUADDHHU.js";
13
14
  import "./chunk-D7TYRPRM.js";
14
15
  import "./chunk-E4VLWIJC.js";
15
- import "./chunk-KH64DHOY.js";
16
- import "./chunk-JTYZRPX5.js";
16
+ import "./chunk-GDY63YAW.js";
17
17
  import "./chunk-PZUWP5VK.js";
18
18
 
19
19
  // src/hooks/subagent-start.ts
@@ -27,4 +27,4 @@ async function main() {
27
27
  export {
28
28
  main
29
29
  };
30
- //# sourceMappingURL=subagent-start-SYZGJYUN.js.map
30
+ //# sourceMappingURL=subagent-start-H6DVRVOE.js.map
@@ -1,19 +1,19 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
  import {
3
3
  sendEvent
4
- } from "./chunk-STBNNKL5.js";
4
+ } from "./chunk-DKGUCEWU.js";
5
5
  import "./chunk-V7XG6V6C.js";
6
- import "./chunk-OQVKLTQY.js";
7
- import "./chunk-UZ5Y6XMP.js";
8
- import "./chunk-TFBAV3PV.js";
9
- import "./chunk-QFMBZ72S.js";
6
+ import "./chunk-EYMKBNRP.js";
7
+ import "./chunk-5ZT2Q6P5.js";
8
+ import "./chunk-R3YW7XVF.js";
9
+ import "./chunk-OMZCVRX6.js";
10
+ import "./chunk-SV6UCB2Z.js";
10
11
  import "./chunk-LPUQPDC2.js";
11
12
  import "./chunk-TRA3R4EC.js";
12
- import "./chunk-S6I62FAH.js";
13
+ import "./chunk-CUADDHHU.js";
13
14
  import "./chunk-D7TYRPRM.js";
14
15
  import "./chunk-E4VLWIJC.js";
15
- import "./chunk-KH64DHOY.js";
16
- import "./chunk-JTYZRPX5.js";
16
+ import "./chunk-GDY63YAW.js";
17
17
  import "./chunk-PZUWP5VK.js";
18
18
 
19
19
  // src/hooks/subagent-stop.ts
@@ -29,4 +29,4 @@ async function main() {
29
29
  export {
30
30
  main
31
31
  };
32
- //# sourceMappingURL=subagent-stop-7WWW7TGQ.js.map
32
+ //# sourceMappingURL=subagent-stop-LKENKJ65.js.map
@@ -1,19 +1,19 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
  import {
3
3
  sendEvent
4
- } from "./chunk-STBNNKL5.js";
4
+ } from "./chunk-DKGUCEWU.js";
5
5
  import "./chunk-V7XG6V6C.js";
6
- import "./chunk-OQVKLTQY.js";
7
- import "./chunk-UZ5Y6XMP.js";
8
- import "./chunk-TFBAV3PV.js";
9
- import "./chunk-QFMBZ72S.js";
6
+ import "./chunk-EYMKBNRP.js";
7
+ import "./chunk-5ZT2Q6P5.js";
8
+ import "./chunk-R3YW7XVF.js";
9
+ import "./chunk-OMZCVRX6.js";
10
+ import "./chunk-SV6UCB2Z.js";
10
11
  import "./chunk-LPUQPDC2.js";
11
12
  import "./chunk-TRA3R4EC.js";
12
- import "./chunk-S6I62FAH.js";
13
+ import "./chunk-CUADDHHU.js";
13
14
  import "./chunk-D7TYRPRM.js";
14
15
  import "./chunk-E4VLWIJC.js";
15
- import "./chunk-KH64DHOY.js";
16
- import "./chunk-JTYZRPX5.js";
16
+ import "./chunk-GDY63YAW.js";
17
17
  import "./chunk-PZUWP5VK.js";
18
18
 
19
19
  // src/hooks/task-completed.ts
@@ -28,4 +28,4 @@ async function main() {
28
28
  export {
29
29
  main
30
30
  };
31
- //# sourceMappingURL=task-completed-N7SIY6T6.js.map
31
+ //# sourceMappingURL=task-completed-ZZ47PRPD.js.map