f9db99853b
Restructure into plugins/{claude-code,codex,copilot}/ — one engine, three thin
shells, all calling the shared plugins/run-sleep.sh -> python -m skillopt_sleep.
- claude-code/: existing plugin moved here; runner delegates to the shared
launcher (fixes repo-root resolution after the move).
- codex/: ~/.codex/prompts/sleep.md custom prompt + ~/.agents/skills SKILL.md +
install.sh + AGENTS.md hint — Codex's documented, stable extension surfaces.
- copilot/: a stdlib-only MCP server (mcp_server.py) exposing sleep_* tools,
plus mcp-config.example.json and a copilot-instructions snippet. Verified end
to end (initialize -> tools/list -> tools/call returns real engine output).
- plugins/README.md overview table; main README News + a dedicated SkillOpt-Sleep
section; pyproject lists skillopt_sleep as a first-class package.
Decoupling emphasized throughout: open-source tool (skillopt_sleep/) with zero
dependency on the research package. 29 tests pass; all three shells resolve.
Co-Authored-By: Claude Opus 4 <noreply@anthropic.com>
80 lines
4.6 KiB
Markdown
80 lines
4.6 KiB
Markdown
---
|
|
name: skillopt-sleep
|
|
description: "Use when the user wants their Claude agent to self-improve from past usage, asks about a nightly/offline 'sleep' or 'dream' cycle, memory/skill consolidation, or says things like '让 agent 越用越好用', 'review my past sessions', 'learn my preferences', 'consolidate what you learned', 'run the sleep cycle', or wants to schedule offline self-optimization. Drives the skillopt_sleep engine: harvest past sessions → mine recurring tasks → replay offline → consolidate validated CLAUDE.md/SKILL.md behind a held-out gate."
|
|
---
|
|
|
|
# SkillOpt-Sleep: offline self-evolution for a local Claude agent
|
|
|
|
SkillOpt-Sleep gives the user's agent a **sleep cycle**. While the user is
|
|
offline (e.g. nightly), it reviews their real past Claude Code sessions,
|
|
re-runs recurring tasks on their own API budget, and consolidates what it
|
|
learns into **memory** (`CLAUDE.md`) and **skills** (`SKILL.md`) — but only
|
|
keeps changes that pass a held-out validation gate, and only after the user
|
|
adopts them. The agent gets measurably better at *this* user's recurring work,
|
|
with no model-weight training. It is the deployment-time analogue of training:
|
|
short-term experience → long-term competence.
|
|
|
|
It synthesizes three ideas:
|
|
- **SkillOpt** — the skill/memory doc is trainable text; bounded add/delete/replace
|
|
edits; accepted only through a held-out gate; rejected edits become negative feedback.
|
|
- **Claude Dreams** — offline consolidation that reads past sessions and rebuilds
|
|
memory (dedup/merge/resolve); the input is never mutated; output is reviewed then adopted.
|
|
- **Agent sleep** — periodic offline replay turns episodes into durable skill.
|
|
|
|
## When to use this skill
|
|
|
|
Trigger when the user wants any of:
|
|
- "make my agent learn from how I use it" / "越用越好用" / "remember my preferences across sessions"
|
|
- a nightly/scheduled or on-demand **offline self-improvement / dream / sleep** run
|
|
- to **review past sessions/trajectories** and distill recurring tasks
|
|
- to **consolidate** feedback into `CLAUDE.md` or a managed skill
|
|
- to **schedule** the cycle (cron) or **adopt** a staged proposal
|
|
|
|
## The cycle (six stages)
|
|
|
|
1. **Harvest** — read `~/.claude/projects/*/<session>.jsonl` + `~/.claude/history.jsonl` (READ-ONLY) → session digests.
|
|
2. **Mine** — digests → `TaskRecord`s (recurring intents + outcome labels + checkable refs where possible).
|
|
3. **Replay** — re-run tasks offline under the *current* skill+memory → (hard, soft) scores.
|
|
4. **Consolidate** — reflect on failures → propose bounded edits → **gate** on a held-out slice; accept only if it strictly improves.
|
|
5. **Stage** — write `proposed_CLAUDE.md`, `proposed_SKILL.md`, a diff, and `report.md` into `<project>/.skillopt-sleep/staging/<date>/`. **Nothing live changes.**
|
|
6. **Adopt** — explicit (or opt-in auto): copy staged files over live ones, backing up first.
|
|
|
|
## How to drive it
|
|
|
|
Prefer the `/sleep` command. Under the hood it calls the bundled runner:
|
|
|
|
```bash
|
|
"${CLAUDE_PLUGIN_ROOT}/scripts/sleep.sh" status # what's happened
|
|
"${CLAUDE_PLUGIN_ROOT}/scripts/sleep.sh" dry-run --project "$(pwd)" # safe preview
|
|
"${CLAUDE_PLUGIN_ROOT}/scripts/sleep.sh" run --project "$(pwd)" # full cycle, stages a proposal
|
|
"${CLAUDE_PLUGIN_ROOT}/scripts/sleep.sh" adopt --project "$(pwd)" # apply staged proposal (with backup)
|
|
```
|
|
|
|
- Default backend is `mock` (deterministic, **no API spend**) — good for trying the plumbing.
|
|
- Add `--backend claude` or `--backend codex` to spend the user's real budget for genuine improvement.
|
|
- Scope defaults to the invoked project; `--scope all` harvests every project.
|
|
|
|
## Hard rules
|
|
|
|
- **Never** hand-edit the user's `CLAUDE.md` / `SKILL.md` as part of this skill.
|
|
Only the `adopt` action changes live files, and it backs them up first.
|
|
- Harvest is read-only. `mock` replay has no side effects.
|
|
- Always show the user the **held-out baseline → candidate** score and the
|
|
exact proposed edits before suggesting adoption. Evidence before adoption.
|
|
- If asked whether it really helps, run
|
|
`python -m skillopt_sleep.experiments.run_experiment --persona researcher --json`
|
|
— a deterministic demo that proves held-out lift and that the gate blocks
|
|
harmful edits.
|
|
|
|
## Validate / demo
|
|
|
|
```bash
|
|
# deterministic proof (no API): held-out score rises, gate blocks regressions
|
|
python -m skillopt_sleep.experiments.run_experiment --persona researcher --assert-improves
|
|
python -m skillopt_sleep.experiments.run_experiment --persona programmer --assert-improves
|
|
```
|
|
|
|
See `docs/sleep/experiment_results.md` for recorded output and
|
|
`docs/superpowers/specs/2026-06-07-skillopt-sleep-claude-code-plugin-design.md`
|
|
for the full design.
|