WODE25500/dsh-skillopt
Nightly self-improvement for your DeepSeek Harness agent: harvest past sessions, replay recurring tasks, and consolidate validated skills behind a held-out gate. Brings microsoft/SkillOpt's SkillOpt-Sleep engine to dsh as native tools + a bundled skill (MIT).
Project Overview项目介绍
dsh-skillopt is a DeepSeek Harness plugin that wires the SkillOpt-Sleep engine into the agent runtime, exposing seven skillopt_* tools plus a bundled skill for nightly self-improvement. It reads past sessions, replays recurring tasks on the operator's API budget, and proposes validated skills behind a held-out gate, configurable via Schemastery and a cordis.patch.yml bundle overlay. Use it to give a dsh agent an offline consolidation loop with explicit operator-controlled adoption. Caveat: real backends transmit truncated transcript excerpts, and outbound prompts are not guaranteed secret-free — review provider policy and enable autoAdopt only in trusted environments.
dsh-skillopt 是 DeepSeek Harness 框架的插件,集成 SkillOpt-Sleep 引擎,为 agent 添加离线夜间"睡眠"周期能力,可回顾历史会话、重放常规任务、提炼经验并通过验证关卡生成新技能。提供 7 个 skillopt_* 工具,支持状态查看、干跑、执行、采纳及定时任务管理。需配合 Python 3.10+ 与 skillopt 包使用。实后端会上传部分会话内容,默认不会修改任何文件,直到显式调用采纳操作;autoAdopt 标志仅供运维启用。
请帮我了解并安装插件:【dsh-skillopt】【https://github.com/WODE25500/dsh-skillopt】
Send this message to DSH in your current session. CLI install commands may not be accurate across systems — DSH will figure it out for you.把上面这条消息直接发给当前会话里的 DSH,让它帮你了解并安装。安装命令不一定准确,发给 DSH 更稳。
Or use CLI install (for developers)或使用命令行安装(适合开发者)
CLI Install命令行安装
dsh plugin --profile web add github:WODE25500/dsh-skillopt
把 WODE25500/dsh-skillopt 加入你的 DSH 配置(web profile)即可启用。
READMEREADME
SkillOpt-Sleep — DeepSeek Harness (dsh) integration
Give your DeepSeek Harness agent a nightly sleep cycle: it reviews past sessions offline, replays your recurring tasks on your own API budget, and consolidates what it learns into validated skills behind a held-out gate. Same engine as the Claude Code / Codex / Cursor integrations (skillopt_sleep), wired into dsh's plugin system as native tools plus a bundled skill.
DeepSeek Harness is the "everything is a plugin" agent framework
(deepseek-ai/deepseek-harness).
Plugins are TypeScript modules exporting an apply(ctx) function that register
capabilities (tools, services, events, settings) on the Cordis context.
Why a sleep cycle?
Skills improve when an agent re-examines its own sessions — not just when you hand-tune a prompt. The sleep cycle turns your everyday usage into a nightly, validation-gated skill-improvement loop: harvest what you actually did, replay the recurring tasks on your own API budget, and keep only the changes that pass a held-out gate. It's the same engine as the Claude Code / Codex / Cursor integrations, wired into dsh as native tools plus a bundled skill.
What this integration adds
| Component | Purpose |
|---|---|
src/index.js |
dsh plugin entry: registers 7 skillopt_* tools + Schemastery config |
cordis.patch.yml |
bundle patch layer — drop dsh-skillopt into any profile's bundles |
skills/skillopt-sleep/SKILL.md |
agent skill: when to use the tools, operating rules, data-boundary rules |
scripts/sleep.py |
bootstrap/self-check runner (same command shape the tools use) |
package.json |
npm package metadata (bundle manifest) |
Tools
| Tool | skillopt_sleep action | Behavior |
|---|---|---|
skillopt_status |
status |
state, engine availability, latest staged proposal & report |
skillopt_dry_run |
dry-run |
full preview (harvest+mine+replay), stages nothing |
skillopt_run |
run |
full cycle, stages a proposal (live files unchanged) |
skillopt_adopt |
adopt |
apply latest staged proposal (with backup) — the live-change boundary |
skillopt_harvest |
harvest |
read-only show/export of mined tasks |
skillopt_schedule / skillopt_unschedule |
schedule / unschedule |
install/remove the nightly cron entry |
Prerequisites
- DeepSeek Harness (dsh) installed
- Python 3.10+ with the SkillOpt-Sleep engine:
pip install skillopt # or use this source checkout
Install
As a bundle in a profile
Add dsh-skillopt to the profile's bundles, or in the profile cordis.patch.yml:
- insert:
- id: skillopt
name: './src/index.js'
config:
backend: mock # or codex / claude / cursor / pi / opencode / handoff …
project: /path/to/project
preferences: 'Always use async/await'
Local patch overlay (dev)
Run from a DeepSeek Harness source checkout (the official dev workflow,
pnpm resolves the workspace dsh bin):
pnpm dsh web --patch ./plugins/dsh/cordis.patch.yml
If dsh is installed globally (npm install -g), use it directly:
dsh web --patch ./plugins/dsh/cordis.patch.yml
Either way the patch inserts the skillopt plugin row into the profile; then
ask the agent: "Use skillopt_status to check the sleep cycle state."
Config keys
| Key | Default | Purpose |
|---|---|---|
pythonCmd |
python |
Python interpreter for the engine |
module |
— (bootstrap) | engine Python module override (python -m <module>) |
engineScript |
— (scripts/sleep.py) | engine bootstrap script override |
project |
— | default project directory |
scope |
— | harvest scope: all | invoked |
backend |
— | mock|claude|codex|copilot|cursor|pi|opencode|handoff|azure_openai |
source |
— | claude|codex|copilot|cursor|pi|opencode|auto |
model |
— | backend model override |
maxTasks / maxSessions |
— | mine/harvest caps |
editBudget |
— | bounded edits per cycle |
preferences |
— | house rules for the reflection prior |
jsonOutput |
false |
machine-readable JSON output |
autoAdopt |
false |
OPERATOR-ONLY: auto-adopt a passed proposal without asking |
unscheduleAll |
false |
OPERATOR-ONLY: allow skillopt_unschedule to remove every managed entry |
timeoutMs |
600000 |
per-call engine timeout in milliseconds |
Advanced engine keys (gate_mode, gate_metric, gate_no_regression,
dream_rollouts, recall_k, evolve_memory/evolve_skill) go in
~/.skillopt-sleep/config.json — the same file shared by all integrations.
Data boundary
- Harvest is read-only;
mock/handoffmake no network calls. runstages proposals;adoptis the normal live-change boundary and backs up first.- Real backends send truncated transcript excerpts and derived tasks to the
selected provider. For sensitive sessions, export tasks first (
skillopt_harvestwithoutput=), redact, set"reviewed": true, then replay — real backends refuse unreviewed task files. - Outbound prompts are not guaranteed secret-free; review source & provider policy.
Validate (no API spend)
python -m skillopt_sleep.experiments.run_experiment --persona researcher --assert-improves
See the SkillOpt-Sleep documentation for recorded results, limitations, and the supported integration surface.
dushaobindoudou/dsh-acp
xlennart/dsh-goal-mode-enhance
JinPLu/dsh-plugin-discussion-intent
GanyuanRan/Aegis
Jayden-X-L/forkprobe