@goondocks/myco 0.21.0 → 0.21.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.
- package/bin/myco-run +68 -7
- package/dist/{agent-eval-RJSQI5S2.js → agent-eval-YK2VP2S4.js} +7 -6
- package/dist/{agent-eval-RJSQI5S2.js.map → agent-eval-YK2VP2S4.js.map} +1 -1
- package/dist/{agent-run-2JSYFOKU.js → agent-run-GEJBD2YD.js} +5 -5
- package/dist/{agent-tasks-APFJIM2T.js → agent-tasks-5XSRGTRX.js} +5 -5
- package/dist/{chunk-R2JIJBCL.js → chunk-6ALVMIB4.js} +3 -3
- package/dist/{chunk-JZS6GZ6T.js → chunk-AUIXX33A.js} +10 -3
- package/dist/chunk-AUIXX33A.js.map +1 -0
- package/dist/{chunk-RL5R4CQU.js → chunk-DTWUHHFI.js} +39 -2
- package/dist/{chunk-RL5R4CQU.js.map → chunk-DTWUHHFI.js.map} +1 -1
- package/dist/{chunk-CESKJD44.js → chunk-EEOJWLMP.js} +5 -9
- package/dist/chunk-EEOJWLMP.js.map +1 -0
- package/dist/{chunk-BUTL6IFS.js → chunk-ENZR5NG7.js} +2 -2
- package/dist/{chunk-P66DLD6G.js → chunk-KTTSXYEK.js} +2 -2
- package/dist/chunk-LQIPXVDH.js +17 -0
- package/dist/chunk-LQIPXVDH.js.map +1 -0
- package/dist/{chunk-5ZG4RMUH.js → chunk-N2DGFACQ.js} +2 -2
- package/dist/{chunk-F3OEQYLS.js → chunk-N7Z3LUEZ.js} +33 -22
- package/dist/{chunk-F3OEQYLS.js.map → chunk-N7Z3LUEZ.js.map} +1 -1
- package/dist/{chunk-G6QIBNZM.js → chunk-NFO7BRCO.js} +4 -4
- package/dist/{chunk-VHNRMM4O.js → chunk-OTQH5KZW.js} +87 -37
- package/dist/chunk-OTQH5KZW.js.map +1 -0
- package/dist/{chunk-DJ3IHNYO.js → chunk-OZ3FBAK5.js} +2 -2
- package/dist/{chunk-6LB7XELY.js → chunk-QATYARI5.js} +15 -13
- package/dist/chunk-QATYARI5.js.map +1 -0
- package/dist/{chunk-JR54LTPP.js → chunk-QDLVIW2O.js} +3 -3
- package/dist/{chunk-LVIY7P35.js → chunk-QLLBJEM7.js} +5 -1
- package/dist/chunk-QLLBJEM7.js.map +1 -0
- package/dist/chunk-TSM6VESW.js +25 -0
- package/dist/chunk-TSM6VESW.js.map +1 -0
- package/dist/{chunk-ILJPRYES.js → chunk-USVFEWYL.js} +2 -2
- package/dist/{chunk-75Z7UKDY.js → chunk-VRI56337.js} +2 -2
- package/dist/{chunk-NGH7U6A3.js → chunk-X2IRGXGF.js} +336 -77
- package/dist/chunk-X2IRGXGF.js.map +1 -0
- package/dist/{chunk-NGROSFOH.js → chunk-Z66IT5KL.js} +14 -9
- package/dist/chunk-Z66IT5KL.js.map +1 -0
- package/dist/{cli-LNYSTDQM.js → cli-HSLIG7EX.js} +37 -37
- package/dist/{client-NWE4TCNO.js → client-Z43DNLJH.js} +3 -3
- package/dist/{detect-PXNM6TA7.js → detect-7NUD5B5R.js} +2 -2
- package/dist/{doctor-TI7EZ3RW.js → doctor-HJCWHAU4.js} +6 -6
- package/dist/{executor-F2YU7HXJ.js → executor-DO6QFC6G.js} +11 -10
- package/dist/{init-KG3TYVGE.js → init-4KVK7W2E.js} +9 -9
- package/dist/{installer-UMH7OJ5A.js → installer-N4UTEACX.js} +2 -2
- package/dist/{loader-NAVVZK63.js → loader-UDNUMEDA.js} +3 -2
- package/dist/{main-5PRQNEEE.js → main-4J4QZZTZ.js} +121 -62
- package/dist/main-4J4QZZTZ.js.map +1 -0
- package/dist/{open-5A27BCSB.js → open-7TXJQM3H.js} +5 -5
- package/dist/{post-compact-USAODKPQ.js → post-compact-7AEFVCZS.js} +7 -7
- package/dist/{post-tool-use-GMMSYBII.js → post-tool-use-TZINWWDH.js} +6 -6
- package/dist/{post-tool-use-failure-NZVSL2PO.js → post-tool-use-failure-TCFEU2GI.js} +7 -7
- package/dist/{pre-compact-LZ57DLUS.js → pre-compact-LO2VZCGR.js} +7 -7
- package/dist/{registry-M2Z5QBWH.js → registry-F3THYC5M.js} +4 -3
- package/dist/{remove-T3KE6C5N.js → remove-F77AAALE.js} +7 -7
- package/dist/{restart-YWDEVZUJ.js → restart-UEFDPMLT.js} +6 -6
- package/dist/{search-GKFDGELR.js → search-NHNVUAQQ.js} +6 -6
- package/dist/{server-AHUR6CWF.js → server-AZJSTQEK.js} +5 -5
- package/dist/{session-2ZEPLWW6.js → session-3HLC5KOD.js} +5 -5
- package/dist/{session-end-LWJYQAXX.js → session-end-FS46UARX.js} +6 -6
- package/dist/{session-start-WTA6GCOQ.js → session-start-46KPFV2H.js} +10 -10
- package/dist/{setup-llm-E7UU5IO7.js → setup-llm-JMWSNQ2C.js} +5 -5
- package/dist/src/agent/definitions/tasks/cortex-instructions.yaml +63 -41
- package/dist/src/agent/definitions/tasks/skill-evolve.yaml +177 -21
- package/dist/src/agent/definitions/tasks/skill-generate.yaml +20 -6
- package/dist/src/agent/definitions/tasks/vault-evolve.yaml +65 -55
- package/dist/src/cli.js +1 -1
- package/dist/src/daemon/main.js +1 -1
- package/dist/src/hooks/post-tool-use.js +1 -1
- package/dist/src/hooks/session-end.js +1 -1
- package/dist/src/hooks/session-start.js +1 -1
- package/dist/src/hooks/stop.js +1 -1
- package/dist/src/hooks/user-prompt-submit.js +1 -1
- package/dist/src/mcp/server.js +1 -1
- package/dist/src/symbionts/manifests/opencode.yaml +7 -0
- package/dist/src/symbionts/templates/agents-starter.md +1 -1
- package/dist/{stats-DFG6S23S.js → stats-MKMETHMA.js} +6 -6
- package/dist/{stop-WRBTXEVT.js → stop-OUEX6KA4.js} +6 -6
- package/dist/{stop-failure-32MGIG2Q.js → stop-failure-2BWVNZEG.js} +7 -7
- package/dist/{subagent-start-VFGHQFVL.js → subagent-start-J4VV6DEE.js} +7 -7
- package/dist/{subagent-stop-663FXG3P.js → subagent-stop-JMLVEPIA.js} +7 -7
- package/dist/{task-completed-ZCQYEFMZ.js → task-completed-65CHMMKA.js} +7 -7
- package/dist/{team-JTI5CDUO.js → team-U2LDKIS4.js} +3 -3
- package/dist/ui/assets/{index-DGf1h-Ha.js → index-BUGor9dk.js} +1 -1
- package/dist/ui/index.html +1 -1
- package/dist/{update-3NBQTG32.js → update-ZSHVXWSQ.js} +7 -7
- package/dist/{user-prompt-submit-ME2TBKOS.js → user-prompt-submit-APMO6FVU.js} +6 -6
- package/dist/{version-GQAFBBPX.js → version-TXPPS3L5.js} +2 -2
- package/package.json +1 -1
- package/skills/myco-rules/SKILL.md +94 -0
- package/skills/{rules → myco-rules}/references/rules-bad-example.md +1 -1
- package/skills/{rules → myco-rules}/references/rules-good-example.md +1 -1
- package/dist/chunk-6LB7XELY.js.map +0 -1
- package/dist/chunk-CESKJD44.js.map +0 -1
- package/dist/chunk-CUDIZJY7.js +0 -36
- package/dist/chunk-CUDIZJY7.js.map +0 -1
- package/dist/chunk-JZS6GZ6T.js.map +0 -1
- package/dist/chunk-LVIY7P35.js.map +0 -1
- package/dist/chunk-NGH7U6A3.js.map +0 -1
- package/dist/chunk-NGROSFOH.js.map +0 -1
- package/dist/chunk-VHNRMM4O.js.map +0 -1
- package/dist/main-5PRQNEEE.js.map +0 -1
- package/skills/myco-curate/SKILL.md +0 -86
- package/skills/rules/SKILL.md +0 -214
- /package/dist/{agent-run-2JSYFOKU.js.map → agent-run-GEJBD2YD.js.map} +0 -0
- /package/dist/{agent-tasks-APFJIM2T.js.map → agent-tasks-5XSRGTRX.js.map} +0 -0
- /package/dist/{chunk-R2JIJBCL.js.map → chunk-6ALVMIB4.js.map} +0 -0
- /package/dist/{chunk-BUTL6IFS.js.map → chunk-ENZR5NG7.js.map} +0 -0
- /package/dist/{chunk-P66DLD6G.js.map → chunk-KTTSXYEK.js.map} +0 -0
- /package/dist/{chunk-5ZG4RMUH.js.map → chunk-N2DGFACQ.js.map} +0 -0
- /package/dist/{chunk-G6QIBNZM.js.map → chunk-NFO7BRCO.js.map} +0 -0
- /package/dist/{chunk-DJ3IHNYO.js.map → chunk-OZ3FBAK5.js.map} +0 -0
- /package/dist/{chunk-JR54LTPP.js.map → chunk-QDLVIW2O.js.map} +0 -0
- /package/dist/{chunk-ILJPRYES.js.map → chunk-USVFEWYL.js.map} +0 -0
- /package/dist/{chunk-75Z7UKDY.js.map → chunk-VRI56337.js.map} +0 -0
- /package/dist/{cli-LNYSTDQM.js.map → cli-HSLIG7EX.js.map} +0 -0
- /package/dist/{client-NWE4TCNO.js.map → client-Z43DNLJH.js.map} +0 -0
- /package/dist/{detect-PXNM6TA7.js.map → detect-7NUD5B5R.js.map} +0 -0
- /package/dist/{doctor-TI7EZ3RW.js.map → doctor-HJCWHAU4.js.map} +0 -0
- /package/dist/{executor-F2YU7HXJ.js.map → executor-DO6QFC6G.js.map} +0 -0
- /package/dist/{init-KG3TYVGE.js.map → init-4KVK7W2E.js.map} +0 -0
- /package/dist/{installer-UMH7OJ5A.js.map → installer-N4UTEACX.js.map} +0 -0
- /package/dist/{loader-NAVVZK63.js.map → loader-UDNUMEDA.js.map} +0 -0
- /package/dist/{open-5A27BCSB.js.map → open-7TXJQM3H.js.map} +0 -0
- /package/dist/{post-compact-USAODKPQ.js.map → post-compact-7AEFVCZS.js.map} +0 -0
- /package/dist/{post-tool-use-GMMSYBII.js.map → post-tool-use-TZINWWDH.js.map} +0 -0
- /package/dist/{post-tool-use-failure-NZVSL2PO.js.map → post-tool-use-failure-TCFEU2GI.js.map} +0 -0
- /package/dist/{pre-compact-LZ57DLUS.js.map → pre-compact-LO2VZCGR.js.map} +0 -0
- /package/dist/{registry-M2Z5QBWH.js.map → registry-F3THYC5M.js.map} +0 -0
- /package/dist/{remove-T3KE6C5N.js.map → remove-F77AAALE.js.map} +0 -0
- /package/dist/{restart-YWDEVZUJ.js.map → restart-UEFDPMLT.js.map} +0 -0
- /package/dist/{search-GKFDGELR.js.map → search-NHNVUAQQ.js.map} +0 -0
- /package/dist/{server-AHUR6CWF.js.map → server-AZJSTQEK.js.map} +0 -0
- /package/dist/{session-2ZEPLWW6.js.map → session-3HLC5KOD.js.map} +0 -0
- /package/dist/{session-end-LWJYQAXX.js.map → session-end-FS46UARX.js.map} +0 -0
- /package/dist/{session-start-WTA6GCOQ.js.map → session-start-46KPFV2H.js.map} +0 -0
- /package/dist/{setup-llm-E7UU5IO7.js.map → setup-llm-JMWSNQ2C.js.map} +0 -0
- /package/dist/{stats-DFG6S23S.js.map → stats-MKMETHMA.js.map} +0 -0
- /package/dist/{stop-WRBTXEVT.js.map → stop-OUEX6KA4.js.map} +0 -0
- /package/dist/{stop-failure-32MGIG2Q.js.map → stop-failure-2BWVNZEG.js.map} +0 -0
- /package/dist/{subagent-start-VFGHQFVL.js.map → subagent-start-J4VV6DEE.js.map} +0 -0
- /package/dist/{subagent-stop-663FXG3P.js.map → subagent-stop-JMLVEPIA.js.map} +0 -0
- /package/dist/{task-completed-ZCQYEFMZ.js.map → task-completed-65CHMMKA.js.map} +0 -0
- /package/dist/{team-JTI5CDUO.js.map → team-U2LDKIS4.js.map} +0 -0
- /package/dist/{update-3NBQTG32.js.map → update-ZSHVXWSQ.js.map} +0 -0
- /package/dist/{user-prompt-submit-ME2TBKOS.js.map → user-prompt-submit-APMO6FVU.js.map} +0 -0
- /package/dist/{version-GQAFBBPX.js.map → version-TXPPS3L5.js.map} +0 -0
|
@@ -2,17 +2,20 @@ name: skill-evolve
|
|
|
2
2
|
displayName: Skill Evolution
|
|
3
3
|
description: >-
|
|
4
4
|
Evaluate and evolve existing Myco-managed skills. Assesses content
|
|
5
|
-
freshness
|
|
6
|
-
|
|
5
|
+
freshness against new spores AND codebase drift from refactors,
|
|
6
|
+
identifies merge and narrowness opportunities, and autonomously
|
|
7
|
+
consolidates the skill inventory.
|
|
7
8
|
agent: myco-agent
|
|
8
9
|
prompt: >-
|
|
9
|
-
Assess and evolve skills that have new knowledge
|
|
10
|
-
overlap. The instruction contains pre-filtered skills
|
|
11
|
-
content, new spore IDs, and pre-computed similarity
|
|
10
|
+
Assess and evolve skills that have new knowledge, codebase drift,
|
|
11
|
+
or structural overlap. The instruction contains pre-filtered skills
|
|
12
|
+
with their content, new spore IDs, and pre-computed similarity
|
|
13
|
+
analysis; the verify phase fact-checks the broader active skill
|
|
14
|
+
set against the codebase.
|
|
12
15
|
isDefault: false
|
|
13
16
|
reasoningLevel: default
|
|
14
|
-
maxTurns:
|
|
15
|
-
timeoutSeconds:
|
|
17
|
+
maxTurns: 72
|
|
18
|
+
timeoutSeconds: 2400
|
|
16
19
|
schedule:
|
|
17
20
|
enabled: false
|
|
18
21
|
intervalSeconds: 900
|
|
@@ -81,13 +84,145 @@ phases:
|
|
|
81
84
|
required: true
|
|
82
85
|
readOnly: true
|
|
83
86
|
|
|
87
|
+
- name: verify
|
|
88
|
+
reasoningLevel: default
|
|
89
|
+
prompt: |
|
|
90
|
+
Fact-check active skills against the actual codebase. This phase
|
|
91
|
+
catches silent drift from refactors that didn't produce spores —
|
|
92
|
+
e.g., a file was renamed, a function was removed, a pattern was
|
|
93
|
+
replaced — so the spore-driven assessment in the next phase would
|
|
94
|
+
otherwise leave the skill's stale content in place.
|
|
95
|
+
|
|
96
|
+
## Selection
|
|
97
|
+
|
|
98
|
+
List active skills via vault_skill_records (action: list,
|
|
99
|
+
status: active). Prioritize up to 3 skills with the OLDEST
|
|
100
|
+
`last_verified_at` in properties (missing/zero counts as oldest,
|
|
101
|
+
so never-verified skills sort to the front). If fewer than 3
|
|
102
|
+
active skills exist, verify them all. This watermark is
|
|
103
|
+
independent of `last_assessed_at` — it rotates verify coverage
|
|
104
|
+
even when assess never touches the skill, which is the whole
|
|
105
|
+
point: skills that never get new spores still need to be
|
|
106
|
+
fact-checked for silent refactor drift. Full rotation time
|
|
107
|
+
scales with the active skill count divided by 3, so a larger
|
|
108
|
+
skill inventory naturally stretches the verify cadence.
|
|
109
|
+
|
|
110
|
+
Skills flagged by the inventory phase (merge_candidates or
|
|
111
|
+
narrow_candidates in vault_state:skill-evolve-inventory) can be
|
|
112
|
+
skipped here — they're already going to be rewritten in act.
|
|
113
|
+
|
|
114
|
+
## Per-skill procedure
|
|
115
|
+
|
|
116
|
+
For each selected skill:
|
|
117
|
+
|
|
118
|
+
1. Read full content via vault_skill_records (action: get).
|
|
119
|
+
2. Identify the 3-5 most LOAD-BEARING concrete claims. A claim
|
|
120
|
+
is load-bearing if the procedure depends on it being true.
|
|
121
|
+
Examples:
|
|
122
|
+
- "Edit `packages/myco/src/db/schema.ts`" — path claim
|
|
123
|
+
- "Call `setFocusedPanel()`" — identifier claim
|
|
124
|
+
- "The daemon restarts executor on SIGHUP" — behavior claim
|
|
125
|
+
Skip generic advice ("use good naming"), tool names that are
|
|
126
|
+
universal (e.g., `grep`), and illustrative code snippets that
|
|
127
|
+
aren't literal file content.
|
|
128
|
+
3. Verify each claim with the cheapest tool that answers it:
|
|
129
|
+
- **Path claim** → fs_read with a narrow line window (e.g.,
|
|
130
|
+
start_line=1, end_line=30). ENOENT or unrelated content =
|
|
131
|
+
MISSING/OUTDATED. For a DIRECTORY path, use fs_list or
|
|
132
|
+
fs_tree instead — fs_read on a directory returns an error
|
|
133
|
+
and burns a turn.
|
|
134
|
+
- **Identifier claim** → code_grep for the symbol with a
|
|
135
|
+
path+glob filter. Zero hits in expected location = MISSING.
|
|
136
|
+
- **Behavior claim** → code_grep for signature patterns that
|
|
137
|
+
would implement it. Zero hits = MISSING.
|
|
138
|
+
|
|
139
|
+
HARD LIMIT: **at most 2 tool calls per claim**, and **at most
|
|
140
|
+
4 claims per skill**, so ~8 filesystem calls per skill
|
|
141
|
+
absolute maximum. If your first grep returns too many hits
|
|
142
|
+
or the wrong ones, DO NOT refine and retry — accept
|
|
143
|
+
INCONCLUSIVE and move on. Exploratory refinement is exactly
|
|
144
|
+
how this phase burned through budget on earlier runs.
|
|
145
|
+
|
|
146
|
+
4. Categorize each claim: VERIFIED / MISSING / OUTDATED /
|
|
147
|
+
INCONCLUSIVE. INCONCLUSIVE is fine when the claim is too
|
|
148
|
+
fuzzy to verify cheaply — don't burn turns on it.
|
|
149
|
+
|
|
150
|
+
5. Aggregate for the skill:
|
|
151
|
+
- confidence: high (>=80% verified), medium, or low
|
|
152
|
+
- severity: none / minor (1 cosmetic miss) / major
|
|
153
|
+
(load-bearing miss) / critical (most refs gone)
|
|
154
|
+
|
|
155
|
+
6. Update the skill's verify watermark REGARDLESS of severity —
|
|
156
|
+
skipping this step on severity=none would make verify re-pick
|
|
157
|
+
the same skill forever. Example call:
|
|
158
|
+
|
|
159
|
+
vault_skill_records({
|
|
160
|
+
action: "update",
|
|
161
|
+
id: "<the-skill-uuid>",
|
|
162
|
+
properties: "{\"last_verified_at\": 1776580022}"
|
|
163
|
+
})
|
|
164
|
+
|
|
165
|
+
`properties` is a JSON string, merged into the skill's existing
|
|
166
|
+
properties. Any recent epoch-seconds integer works as the
|
|
167
|
+
timestamp — this is a rotation cursor, not an audit timestamp.
|
|
168
|
+
|
|
169
|
+
## Budget discipline
|
|
170
|
+
|
|
171
|
+
Total budget for this phase: {{max_turns}} turns covering ALL
|
|
172
|
+
selected skills combined. Plan per-skill budget as roughly
|
|
173
|
+
`{{max_turns}} / skills_selected` turns. Recommended shape:
|
|
174
|
+
1 content read + up to 4 claim checks × up to 2 tool calls +
|
|
175
|
+
1 watermark write. Stop verifying a skill as soon as severity
|
|
176
|
+
is clear — finding one MISSING load-bearing claim is enough
|
|
177
|
+
to flag the skill; don't check remaining claims.
|
|
178
|
+
|
|
179
|
+
Prefer narrow fs_read windows (start/end lines) over whole-file
|
|
180
|
+
reads. Prefer code_grep with a path/glob filter over an open grep.
|
|
181
|
+
When a tool returns "Not a file" or zero matches, accept that
|
|
182
|
+
answer and move on — do not retry with adjusted args.
|
|
183
|
+
|
|
184
|
+
Tools available for this phase: {{phase_tools}}.
|
|
185
|
+
|
|
186
|
+
## Store results
|
|
187
|
+
|
|
188
|
+
Store via vault_set_state (key: skill-evolve-drift) as JSON:
|
|
189
|
+
{
|
|
190
|
+
"verified_at": <epoch-seconds>,
|
|
191
|
+
"reports": [
|
|
192
|
+
{
|
|
193
|
+
"skill_id": "...",
|
|
194
|
+
"name": "...",
|
|
195
|
+
"severity": "none|minor|major|critical",
|
|
196
|
+
"confidence": "high|medium|low",
|
|
197
|
+
"notes": "Short: what's missing or outdated.",
|
|
198
|
+
"load_bearing_misses": ["claim 1", "claim 2"]
|
|
199
|
+
}
|
|
200
|
+
]
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
Report via vault_report. If no active skills are selectable
|
|
204
|
+
(e.g., all were flagged by inventory for merge), store an empty
|
|
205
|
+
reports array and report skip.
|
|
206
|
+
tools:
|
|
207
|
+
- vault_skill_records
|
|
208
|
+
- vault_set_state
|
|
209
|
+
- vault_report
|
|
210
|
+
- fs_read
|
|
211
|
+
- fs_list
|
|
212
|
+
- code_grep
|
|
213
|
+
maxTurns: 24
|
|
214
|
+
required: true
|
|
215
|
+
dependsOn:
|
|
216
|
+
- inventory
|
|
217
|
+
|
|
84
218
|
- name: assess
|
|
85
219
|
reasoningLevel: default
|
|
86
220
|
prompt: |
|
|
87
|
-
Read
|
|
88
|
-
|
|
221
|
+
Read two pre-computed inputs from vault_state:
|
|
222
|
+
- key: skill-evolve-inventory (merge/narrow candidates)
|
|
223
|
+
- key: skill-evolve-drift (codebase verification reports)
|
|
89
224
|
|
|
90
|
-
There are
|
|
225
|
+
There are THREE sources of skills to assess:
|
|
91
226
|
|
|
92
227
|
**A. Skills with new knowledge** — listed in the instruction
|
|
93
228
|
with descriptions and new spore IDs (full content is NOT in
|
|
@@ -98,8 +233,8 @@ phases:
|
|
|
98
233
|
get, id: "<name>") and verify 2-3 code references via
|
|
99
234
|
vault_search_fts. Skip content reads for skills where
|
|
100
235
|
the new spores are clearly unrelated.
|
|
101
|
-
3. Check the inventory
|
|
102
|
-
for merge or
|
|
236
|
+
3. Check the inventory AND drift analyses: is this skill also
|
|
237
|
+
flagged for merge, narrowness, or codebase drift?
|
|
103
238
|
|
|
104
239
|
**B. Inventory-flagged skills** — merge_candidates and
|
|
105
240
|
narrow_candidates from the inventory analysis. These may NOT
|
|
@@ -109,12 +244,30 @@ phases:
|
|
|
109
244
|
2. Verify the inventory's merge/narrow recommendation by
|
|
110
245
|
reading both skills' content.
|
|
111
246
|
|
|
112
|
-
|
|
247
|
+
**C. Drift-flagged skills** — reports from the verify phase with
|
|
248
|
+
severity of `minor`, `major`, or `critical`. These may NOT appear
|
|
249
|
+
in the instruction (no new spores) but need attention because
|
|
250
|
+
their content no longer matches the codebase. For each drift
|
|
251
|
+
report not already covered above:
|
|
252
|
+
1. Read the skill's content via vault_skill_records (action: get).
|
|
253
|
+
2. Trust the verify phase's load_bearing_misses as the STALE
|
|
254
|
+
detail set. You do NOT need to re-run fs_read/code_grep —
|
|
255
|
+
the verify phase already did that work. Only re-check if
|
|
256
|
+
the verify report's confidence is low.
|
|
257
|
+
3. Major/critical severity with confidence high/medium should
|
|
258
|
+
classify as STALE (or DEPRECATED if the entire subsystem
|
|
259
|
+
described is gone). Minor severity may stay CURRENT unless
|
|
260
|
+
combined with new-spore evidence.
|
|
261
|
+
|
|
262
|
+
For ALL skills from all three sources, classify with one of:
|
|
113
263
|
- CURRENT — still accurate, no changes needed.
|
|
114
|
-
- STALE — new knowledge changes specific
|
|
115
|
-
or gotchas. Note exactly WHAT is new
|
|
264
|
+
- STALE — new knowledge OR drift report changes specific
|
|
265
|
+
steps, paths, or gotchas. Note exactly WHAT is new or
|
|
266
|
+
wrong (cite the drift report's load_bearing_misses if
|
|
267
|
+
that's the driver).
|
|
116
268
|
- DEPRECATED — key code references are gone or the
|
|
117
269
|
procedure is no longer relevant. Note what's missing.
|
|
270
|
+
Drift severity=critical is the strongest signal here.
|
|
118
271
|
- MERGE — overlaps significantly with another skill
|
|
119
272
|
(from inventory analysis). Note the TARGET skill to
|
|
120
273
|
merge into.
|
|
@@ -122,10 +275,11 @@ phases:
|
|
|
122
275
|
inventory analysis). Note the BROADER skill to absorb
|
|
123
276
|
into.
|
|
124
277
|
|
|
125
|
-
Bias toward CURRENT. A skill that is 90%
|
|
126
|
-
better left alone than rewritten with risk of
|
|
127
|
-
|
|
128
|
-
|
|
278
|
+
Bias toward CURRENT for cosmetic issues. A skill that is 90%
|
|
279
|
+
accurate is better left alone than rewritten with risk of
|
|
280
|
+
losing detail. Do NOT bias toward CURRENT when a drift report
|
|
281
|
+
flags load-bearing misses with high confidence — that's
|
|
282
|
+
exactly the refactor-drift case this pipeline exists to catch.
|
|
129
283
|
|
|
130
284
|
5. Update the skill's properties with the new watermark:
|
|
131
285
|
vault_skill_records (action: update, id: <skill_id>,
|
|
@@ -143,8 +297,9 @@ phases:
|
|
|
143
297
|
Report via vault_report.
|
|
144
298
|
|
|
145
299
|
If the instruction says "No skills need assessment" AND the
|
|
146
|
-
inventory has no merge/narrow candidates
|
|
147
|
-
|
|
300
|
+
inventory has no merge/narrow candidates AND the drift report
|
|
301
|
+
has no minor+ severity entries, report skip via vault_report
|
|
302
|
+
and finish.
|
|
148
303
|
tools:
|
|
149
304
|
- vault_spores
|
|
150
305
|
- vault_search_fts
|
|
@@ -155,6 +310,7 @@ phases:
|
|
|
155
310
|
required: true
|
|
156
311
|
dependsOn:
|
|
157
312
|
- inventory
|
|
313
|
+
- verify
|
|
158
314
|
|
|
159
315
|
- name: act
|
|
160
316
|
reasoningLevel: low
|
|
@@ -11,7 +11,7 @@ prompt: >-
|
|
|
11
11
|
source material. Stage the skill, validate it, then finalize it.
|
|
12
12
|
isDefault: false
|
|
13
13
|
reasoningLevel: default
|
|
14
|
-
maxTurns:
|
|
14
|
+
maxTurns: 32
|
|
15
15
|
timeoutSeconds: 900
|
|
16
16
|
schedule:
|
|
17
17
|
enabled: false
|
|
@@ -177,9 +177,22 @@ phases:
|
|
|
177
177
|
staging path's dedup gate already ran on your description;
|
|
178
178
|
this is a sanity check on the procedural content itself.
|
|
179
179
|
|
|
180
|
-
7. **Accuracy
|
|
181
|
-
|
|
182
|
-
|
|
180
|
+
7. **Accuracy (codebase-grounded):** Identify the 3-5 most
|
|
181
|
+
LOAD-BEARING concrete claims — paths, function/class names,
|
|
182
|
+
patterns the procedure depends on — and verify each against
|
|
183
|
+
the actual source:
|
|
184
|
+
- **Path claim** → `fs_read` (narrow window). ENOENT or
|
|
185
|
+
unrelated content = FAIL.
|
|
186
|
+
- **Identifier claim** → `code_grep` with a path+glob filter.
|
|
187
|
+
Zero hits in the expected location = FAIL.
|
|
188
|
+
- **Behavior claim** → `code_grep` for signature patterns
|
|
189
|
+
that would implement it. Zero hits = FAIL.
|
|
190
|
+
Budget 1-2 tool calls per claim.
|
|
191
|
+
|
|
192
|
+
If any load-bearing claim FAILS, treat as a criterion failure
|
|
193
|
+
and re-stage with corrected content. Do not finalize a skill
|
|
194
|
+
whose load-bearing paths can't be verified against the
|
|
195
|
+
current codebase — that's how hallucinated paths ship.
|
|
183
196
|
|
|
184
197
|
## If criteria fail
|
|
185
198
|
|
|
@@ -216,9 +229,10 @@ phases:
|
|
|
216
229
|
- vault_skill_records
|
|
217
230
|
- vault_skill_candidates
|
|
218
231
|
- vault_spores
|
|
219
|
-
- vault_search_fts
|
|
220
232
|
- vault_report
|
|
221
|
-
|
|
233
|
+
- fs_read
|
|
234
|
+
- code_grep
|
|
235
|
+
maxTurns: 18
|
|
222
236
|
required: true
|
|
223
237
|
dependsOn:
|
|
224
238
|
- draft
|
|
@@ -262,67 +262,77 @@ phases:
|
|
|
262
262
|
reasoningLevel: default
|
|
263
263
|
dependsOn: [consolidate]
|
|
264
264
|
prompt: |
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
-
|
|
318
|
-
|
|
265
|
+
Gather material for AT MOST ONE digest tier update per run. The
|
|
266
|
+
rotation decision is made by the `vault_read_digest` tool, not
|
|
267
|
+
by you — the tool returns which tier needs attention (or tells
|
|
268
|
+
you to skip). Over 3 runs every tier gets one deep pass.
|
|
269
|
+
|
|
270
|
+
Total budget: {{max_turns}} turns.
|
|
271
|
+
|
|
272
|
+
## Step 1: Get the rotation decision (1 turn)
|
|
273
|
+
|
|
274
|
+
Call `vault_read_digest` with:
|
|
275
|
+
pick: "rotate_oldest"
|
|
276
|
+
min_staleness_seconds: 1800
|
|
277
|
+
|
|
278
|
+
The tool returns one of two shapes:
|
|
279
|
+
|
|
280
|
+
**Skip shape** — `{mode:"rotate_oldest", skip:true, reason, all_tiers}`.
|
|
281
|
+
Every tier was generated within the last 30 minutes. Call
|
|
282
|
+
`vault_report` with action "skip" passing the reason through.
|
|
283
|
+
STOP — do not run steps 2-3.
|
|
284
|
+
|
|
285
|
+
**Rotate shape** — `{mode:"rotate_oldest", selected_tier,
|
|
286
|
+
selected_generated_at, selected_content, rotation_reason, all_tiers}`.
|
|
287
|
+
Proceed to step 2, scoped to `selected_tier`.
|
|
288
|
+
|
|
289
|
+
## Step 2: Gather material for `selected_tier` (budget: half
|
|
290
|
+
of remaining)
|
|
291
|
+
|
|
292
|
+
Scope the search to what belongs at the selected tier:
|
|
293
|
+
- **1500 (executive briefing):** only critical decisions,
|
|
294
|
+
reversals, state-of-system changes.
|
|
295
|
+
- **5000 (deep onboarding):** trade-offs, patterns, active
|
|
296
|
+
decisions, unresolved gotchas.
|
|
297
|
+
- **10000 (full archive):** any new content worth preserving.
|
|
298
|
+
|
|
299
|
+
Use `vault_search_semantic` for themes from new/superseded spores,
|
|
300
|
+
`vault_spores` for specific content, `vault_sessions` for recent
|
|
301
|
+
session context. Make each call count — do not repeatedly search
|
|
302
|
+
for variations of the same theme. Accept "good enough" findings
|
|
303
|
+
and move on.
|
|
304
|
+
|
|
305
|
+
## Step 3: Produce findings
|
|
306
|
+
|
|
307
|
+
Your final response is the per-tier phases' primary context
|
|
308
|
+
(they cannot call vault_spores or vault_sessions). Structure it:
|
|
309
|
+
|
|
310
|
+
**Chosen tier for this run: <selected_tier>**
|
|
311
|
+
Include the rotation_reason verbatim from the tool so readers
|
|
312
|
+
can audit the decision.
|
|
313
|
+
|
|
314
|
+
**New material to integrate (scoped to the chosen tier):**
|
|
315
|
+
- List each insight with enough detail that the tier writer can
|
|
316
|
+
incorporate it without re-searching
|
|
317
|
+
- Include specific spore content, not just spore counts
|
|
318
|
+
|
|
319
|
+
**Themes and connections** relevant to the chosen tier.
|
|
320
|
+
|
|
321
|
+
**Per-tier directives** — mark exactly the `selected_tier` as
|
|
322
|
+
UPDATE, the other two as SKIP, and include the tool's
|
|
323
|
+
rotation_reason in the UPDATE line:
|
|
324
|
+
- 10000: UPDATE or SKIP + one-line reason
|
|
325
|
+
- 5000: UPDATE or SKIP + one-line reason
|
|
326
|
+
- 1500: UPDATE or SKIP + one-line reason
|
|
327
|
+
|
|
328
|
+
Tools available: {{phase_tools}}.
|
|
319
329
|
tools:
|
|
320
330
|
- vault_spores
|
|
321
331
|
- vault_sessions
|
|
322
332
|
- vault_search_semantic
|
|
323
333
|
- vault_read_digest
|
|
324
334
|
- vault_report
|
|
325
|
-
maxTurns:
|
|
335
|
+
maxTurns: 12
|
|
326
336
|
required: true
|
|
327
337
|
|
|
328
338
|
- name: digest-10000
|
package/dist/src/cli.js
CHANGED
package/dist/src/daemon/main.js
CHANGED
|
@@ -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-
|
|
4
|
+
var { main } = await import("../../main-4J4QZZTZ.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-
|
|
4
|
+
var { main } = await import("../../post-tool-use-TZINWWDH.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-
|
|
4
|
+
var { main } = await import("../../session-end-FS46UARX.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-
|
|
4
|
+
var { main } = await import("../../session-start-46KPFV2H.js");
|
|
5
5
|
await main();
|
|
6
6
|
//# sourceMappingURL=session-start.js.map
|
package/dist/src/hooks/stop.js
CHANGED
|
@@ -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-
|
|
4
|
+
var { main } = await import("../../stop-OUEX6KA4.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-
|
|
4
|
+
var { main } = await import("../../user-prompt-submit-APMO6FVU.js");
|
|
5
5
|
await main();
|
|
6
6
|
//# sourceMappingURL=user-prompt-submit.js.map
|
package/dist/src/mcp/server.js
CHANGED
|
@@ -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-
|
|
4
|
+
var { main } = await import("../../server-AZJSTQEK.js");
|
|
5
5
|
await main();
|
|
6
6
|
//# sourceMappingURL=server.js.map
|
|
@@ -21,6 +21,13 @@ registration:
|
|
|
21
21
|
# opencode.json hosts MCP + permissions under non-standard keys
|
|
22
22
|
mcpTarget: opencode.json
|
|
23
23
|
mcpServersKey: mcp
|
|
24
|
+
# Opencode prepends /opt/homebrew/bin ahead of ~/.local/bin in the env it
|
|
25
|
+
# gives MCP children, so `myco-run` resolves to the prod shim regardless
|
|
26
|
+
# of the user's shell PATH. Bake the runtime.command alias into the MCP
|
|
27
|
+
# command at install time so the spawn skips PATH resolution entirely.
|
|
28
|
+
# Every other symbiont resolves `myco-run` via PATH and then uses the
|
|
29
|
+
# shim's runtime.command walk-up — no install-time substitution needed.
|
|
30
|
+
substituteRuntimeCommand: true
|
|
24
31
|
settingsTarget: opencode.json
|
|
25
32
|
skillsTarget: .agents/skills
|
|
26
33
|
# No instructionsFile — opencode reads AGENTS.md natively
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
|
|
3
3
|
<!-- This starter file was created by Myco. Replace it with your project's rules and conventions. -->
|
|
4
4
|
|
|
5
|
-
Rules haven't been defined yet. Use the `/rules` skill to
|
|
5
|
+
Rules haven't been defined yet. Use the `/myco-rules` skill to add durable project rules, or edit this file directly.
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
gatherStats
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-VRI56337.js";
|
|
5
5
|
import {
|
|
6
6
|
initVaultDb
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-QDLVIW2O.js";
|
|
8
8
|
import "./chunk-SAKJMNSR.js";
|
|
9
|
-
import "./chunk-
|
|
9
|
+
import "./chunk-OTQH5KZW.js";
|
|
10
10
|
import "./chunk-X3IGT5RV.js";
|
|
11
11
|
import "./chunk-53RPGOEN.js";
|
|
12
12
|
import "./chunk-OUJSQSKE.js";
|
|
13
13
|
import "./chunk-POEPHBQK.js";
|
|
14
14
|
import "./chunk-MYX5NCRH.js";
|
|
15
|
-
import "./chunk-
|
|
16
|
-
import "./chunk-
|
|
15
|
+
import "./chunk-KTTSXYEK.js";
|
|
16
|
+
import "./chunk-ENZR5NG7.js";
|
|
17
17
|
import "./chunk-LPUQPDC2.js";
|
|
18
18
|
import "./chunk-6C6QZ4PM.js";
|
|
19
19
|
import "./chunk-UUHLLQXO.js";
|
|
@@ -94,4 +94,4 @@ function formatUptime(seconds) {
|
|
|
94
94
|
export {
|
|
95
95
|
run
|
|
96
96
|
};
|
|
97
|
-
//# sourceMappingURL=stats-
|
|
97
|
+
//# sourceMappingURL=stats-MKMETHMA.js.map
|
|
@@ -2,16 +2,16 @@ import { createRequire as __cr } from 'node:module'; const require = __cr(import
|
|
|
2
2
|
import {
|
|
3
3
|
normalizeHookInput,
|
|
4
4
|
readStdin
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-N2DGFACQ.js";
|
|
6
6
|
import "./chunk-ZXZPJJN3.js";
|
|
7
7
|
import {
|
|
8
8
|
resolveVaultDir
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-TSM6VESW.js";
|
|
10
10
|
import {
|
|
11
11
|
DaemonClient
|
|
12
|
-
} from "./chunk-
|
|
13
|
-
import "./chunk-
|
|
14
|
-
import "./chunk-
|
|
12
|
+
} from "./chunk-KTTSXYEK.js";
|
|
13
|
+
import "./chunk-ENZR5NG7.js";
|
|
14
|
+
import "./chunk-Z66IT5KL.js";
|
|
15
15
|
import "./chunk-LPUQPDC2.js";
|
|
16
16
|
import "./chunk-6C6QZ4PM.js";
|
|
17
17
|
import "./chunk-UUHLLQXO.js";
|
|
@@ -46,4 +46,4 @@ async function main() {
|
|
|
46
46
|
export {
|
|
47
47
|
main
|
|
48
48
|
};
|
|
49
|
-
//# sourceMappingURL=stop-
|
|
49
|
+
//# sourceMappingURL=stop-OUEX6KA4.js.map
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
sendEvent
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-NFO7BRCO.js";
|
|
5
5
|
import "./chunk-V7XG6V6C.js";
|
|
6
|
-
import "./chunk-
|
|
6
|
+
import "./chunk-N2DGFACQ.js";
|
|
7
7
|
import "./chunk-ZXZPJJN3.js";
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-TSM6VESW.js";
|
|
9
|
+
import "./chunk-KTTSXYEK.js";
|
|
10
|
+
import "./chunk-ENZR5NG7.js";
|
|
11
|
+
import "./chunk-Z66IT5KL.js";
|
|
12
12
|
import "./chunk-LPUQPDC2.js";
|
|
13
13
|
import "./chunk-6C6QZ4PM.js";
|
|
14
14
|
import "./chunk-UUHLLQXO.js";
|
|
@@ -28,4 +28,4 @@ async function main() {
|
|
|
28
28
|
export {
|
|
29
29
|
main
|
|
30
30
|
};
|
|
31
|
-
//# sourceMappingURL=stop-failure-
|
|
31
|
+
//# sourceMappingURL=stop-failure-2BWVNZEG.js.map
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
sendEvent
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-NFO7BRCO.js";
|
|
5
5
|
import "./chunk-V7XG6V6C.js";
|
|
6
|
-
import "./chunk-
|
|
6
|
+
import "./chunk-N2DGFACQ.js";
|
|
7
7
|
import "./chunk-ZXZPJJN3.js";
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-TSM6VESW.js";
|
|
9
|
+
import "./chunk-KTTSXYEK.js";
|
|
10
|
+
import "./chunk-ENZR5NG7.js";
|
|
11
|
+
import "./chunk-Z66IT5KL.js";
|
|
12
12
|
import "./chunk-LPUQPDC2.js";
|
|
13
13
|
import "./chunk-6C6QZ4PM.js";
|
|
14
14
|
import "./chunk-UUHLLQXO.js";
|
|
@@ -28,4 +28,4 @@ async function main() {
|
|
|
28
28
|
export {
|
|
29
29
|
main
|
|
30
30
|
};
|
|
31
|
-
//# sourceMappingURL=subagent-start-
|
|
31
|
+
//# sourceMappingURL=subagent-start-J4VV6DEE.js.map
|