mole
tw93/Mole开源磁盘清理工具 Mole CLI(mo,支持 macOS 和 Windows)的官方 skill:按 Mole 的 JSON 输出查看磁盘占用、预览并执行清理、查看已安装应用、读取系统健康状态和清理记录。清理前先用 --dry-run 预览并征得同意,卸载应用和需要管理员权限的步骤留给用户在自己的终端里执行。插件只带 skill,CLI 需另外安装。
观察 agent 执行轨迹,在每个成功回合结束时按信号触发 LLM 评审,把值得复用的工作流结晶为已注册技能,并随后续运行持续改进。
English | 中文
A skill self-evolution plugin for DeepSeek Harness (DSH): it watches agent execution traces and, at the end of every successful turn, fires an LLM review when signals trip — distilling workflows worth reusing into crystallized skills registered in the skill catalog. Later runs of the same workflow fold fresh lessons into the existing skill — skills are alive and get better with use.
NOTHING_TO_SAVE is a first-class outcomeFOLD_INTO) blocks near-duplicates reached through different tool sequencesgenerated/ and re-register on restart; host half depends only on node: builtinsSkills tab — skill cards with value (high/medium/low), version, invocation count and update-time chips; expand for crystallization signals, tool sequence and the full SKILL.md:
Settings tab — status overview, review model, generation language and the configuration panels:
Thresholds & controls — every parameter embedded in the pipeline diagram, editable exactly where it takes effect:
At every turn end (turn/end), successful traces meeting a minimum step count are checked against three signals:
| Signal | Condition | Meaning |
|---|---|---|
complex | successful turn with ≥ minToolCalls tool calls (default 5) | completed a complex task |
recovered | had failed steps but the turn still succeeded | hit dead ends and found a working path around them |
repeated | same tool sequence recurred ≥ minPatternOccurrences times with success rate ≥ minSuccessRate | a recurring, proven workflow |
Corroboration gate (complexRequiresCorroboration, on by default): a lone complex signal is weak evidence (any long turn qualifies), so by default it must be corroborated by recovered or repeated before review; withheld turns are logged and re-submitted once the sequence later earns a corroborating signal.
The reviewer LLM receives full evidence (signals, user intent, tool sequence, per-step outcomes and summaries) plus the existing evolved-skill list, and answers one of: SAVE (crystallize a new skill), FOLD_INTO (merge into an existing skill), or NOTHING_TO_SAVE.
Hard do-not-capture list — the following is never crystallized:
FOLD_INTO) — the same class of experience can reappear via a different tool sequence, which pure sequence matching cannot catch. The crystallization reviewer sees the existing skill list (name + description) and may answer VERDICT: FOLD_INTO: <existing-skill-name>; the host then runs the improvement pipeline against that skillClass-level, kebab-case skills with the standard SKILL.md shape (# Title / ## When to Use / ## Procedure / ## Pitfalls / ## Verification). NAME and section headings are always English; body language follows skillLanguage.
dsh plugin --profile web add dsh-skill-evolution
The bundled dsh.bundle.patch mounts automatically — no profile edits needed.
git clone https://github.com/VanadisGithub/dsh-skill-evolution.git ~/Code/dsh-skill-evolution
Add to dependencies in ~/.dsh/profiles/web/package.json:
"dsh-skill-evolution": "link:/Users/<you>/Code/dsh-skill-evolution"
Then run pnpm install in ~/.dsh/profiles/web and hard-refresh the browser.
Place the repo anywhere (e.g. ~/.dsh/plugins/skill-evolution/) and append to ~/.dsh/cordis.patch.yml:
- insert:
- id: 'skill-evolution'
name: file:///Users/<you>/.dsh/plugins/skill-evolution/plugin.mjs?v=1
config:
minToolCalls: 5
minPatternOccurrences: 3
autoRegister: true
llmProvider: deepseek # adjust to a provider available in your deployment
llmModel: deepseek-chat
?v=N busts the Node module cache; bump it whenever plugin.mjs changes. Host-half changes need a loader patch replay; browser-half changes just need a hard refresh.
⚠️ Pick exactly one option — duplicate mounts cause a dual instance.
Every key below works both via mount config and directly in the Settings panel (panel edits persist to runtime-config.json in the plugin directory, overriding mount config across restarts):
| Key | Default | Description |
|---|---|---|
enabled | true | master switch: false stops turn observation and review (existing skills stay registered) |
minTraceSteps | 3 | minimum trace steps (noise floor) |
minToolCalls | 5 | complex signal threshold |
minPatternOccurrences | 3 | repeated signal threshold |
minSuccessRate | 0.7 | repeated signal success-rate floor |
signals | all on | {complex, recovered, repeated} individual toggles |
complexRequiresCorroboration | true | a lone complex signal needs corroboration before review |
autoRegister | true | auto-register crystallized skills into the catalog |
llmProvider / llmModel | deepseek / deepseek-chat | review model (the picker cascades to the provider's model catalog) |
skillLanguage | en | generated-skill language: zh / en |
maxEvolvedSkills | 20 | evolved-skill capacity |
improvementEvery | 3 | trigger an improvement review every N same-sequence reruns |
maxImprovementsPerSkill | 5 | max improvements per skill |
maxEvidenceSteps | 30 | max evidence steps sent to review (truncation guard) |
maxTracesPerSession | 200 | per-session trace cache cap (memory guard) |
maxStepTextLength | 200 | per-step summary truncation length |
reviewSystemPrompt | built-in | override the crystallization review system prompt |
improveSystemPrompt | built-in | override the improvement review system prompt |
The "Skill Evolution" section in Settings, a two-tab layout with a master switch in the top-right corner:
generated/*.json: SKILL.md body, signals, sequences, stats) and runtime-config.jsongenerated/ goes with the directory)Two-sided plugin package (host + web client):
| File | Role |
|---|---|
plugin.mjs | host half: trace observation, signal detection, LLM review, skill registration, ./generated/ persistence, authenticated /skill-evolution RPC channel (list / get / remove / clear / listModels / setModel / setLanguage / setEnabled / setTuning / setPrompt …) |
client.js | browser half: the Settings "Skill Evolution" section |
cordis.patch.yml | dsh.bundle.patch mount layer |
test/smoke.mjs | host-half smoke test (mock cordis context, 51 assertions covering crystallization/improvement/FOLD_INTO/dedup/RPC/counting) |
test/screenshot.mjs | headless screenshot script (CDP-driven, full-screen mode) |
node --check plugin.mjs && node --check client.js # syntax
node test/smoke.mjs # smoke test
node test/screenshot.mjs <output-dir> # re-capture README screenshots
Only node: builtins are imported — no @deepseek-ai packages — avoiding any dual-instance conflict with the host's own cordis.