SkillOpt-Sleep: offline self-evolution for a local Claude agent

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 'make my agent better the more I use it', 'review my past sessions', 'learn my preferences', 'consolidate what you learned', 'run the sleep cycle', or wants to schedule offline self-optimization.

How to use it

Claude Code
  1. Run the line below. It pulls the whole folder into ~/.claude/skills/skillopt-sleep-2, including the files SKILL.md points to.
  2. Describe your job in plain words. Claude Code follows the skill from there.
Claude Code — installs the whole folder, not just SKILL.md
npx degit alirezarezvani/claude-skills/engineering/skillopt-sleep/skills/skillopt-sleep#main ~/.claude/skills/skillopt-sleep-2

For one project only, change the path to .claude/skills/skillopt-sleep-2. This skill also uses proposed_CLAUDE.md, proposed_SKILL.md, report.md — copying SKILL.md alone won't be enough. See the folder on GitHub.

Claude (web or desktop app)
  1. On this page open ⋯ → Download .md.
  2. Save it as SKILL.md in a folder, zip the folder, then Customize → Skills → + → Create skill → Upload a skill.
  3. Pick the file and Save. Claude shows the name and description and runs a security scan.
  4. Check the skill is switched on.
  5. Start a new chat and describe your job in plain words. The AI follows the skill from there.
ChatGPT or another app
  1. ChatGPT: make a Project and paste it into Instructions.
  2. Neither? Paste it at the top of a new chat — it works for that chat.
Not working?
  • Check which app you pasted it into — the steps above name the right one.
  • Some skills need the paid tier of Claude or ChatGPT.
Step-by-step guide with screenshots · Ask in the forum

Paste into Claude, ChatGPT or Cursor.

Source of SkillOpt-Sleep: offline self-evolution for a local Claude agent

Show the full text129 lines
namedescription
skillopt-sleepUse 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 'make my agent better the more I use it', '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 and 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" / "get better the more 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 → TaskRecords (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 /skillopt-sleep command. Under the hood it calls the bundled runner:

"${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.
Scheduling
"${CLAUDE_PLUGIN_ROOT}/scripts/sleep.sh" schedule --project "$(pwd)" --hour 3 --minute 17
"${CLAUDE_PLUGIN_ROOT}/scripts/sleep.sh" unschedule --project "$(pwd)"

Installs a nightly cron entry. unschedule --all removes every managed entry.

All CLI flags

Flag Default Description
--project PATH cwd Project directory to evolve
--scope all|invoked invoked Harvest scope
--backend mock|claude|codex|copilot mock Replay backend (mock = no API spend)
--model NAME backend default Override the model used for replay
--source claude|codex|auto claude Transcript source
--lookback-hours N 72 Harvest window
--max-sessions N unlimited Cap harvested sessions
--max-tasks N 40 Cap mined tasks
--target-skill-path PATH auto Explicit SKILL.md to evolve
--tasks-file PATH — Reviewed TaskRecord JSON (skip harvest)
--progress off Print phase progress to stderr
--auto-adopt off Auto-adopt if gate passes
--edit-budget N 4 Max bounded edits per night
--json off Machine-readable JSON output

Config keys (~/.skillopt-sleep/config.json)

Beyond the CLI flags, advanced behavior is controlled via config:

  • preferences — free-text house rules injected into the optimizer's reflect step (e.g. "Always use async/await", "Answers in \boxed{}").
  • gate_mode — on (default, validation-gated) or off (greedy, accept all edits).
  • gate_metric — hard, soft, or mixed (default). Controls how the held-out gate scores.
  • dream_rollouts — >1 enables multi-rollout contrastive reflection per task.
  • recall_k — >0 recalls K similar past tasks into the dream (long-term memory).
  • evolve_memory / evolve_skill — independently toggle CLAUDE.md vs SKILL.md consolidation.

Memory consolidation

The sleep cycle can consolidate both:

  • SKILL.md — the managed skill file (bounded edits: add/delete/replace)
  • CLAUDE.md — the project memory (same bounded edits)

Both are gated by the same held-out validation score. Set evolve_memory: false to consolidate only skills, or evolve_skill: false for only memory.

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

# 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 the upstream SkillOpt-Sleep guide section (https://microsoft.github.io/SkillOpt/docs/guideline.html#sleep) for recorded output and the full design. (The original repo-relative design-doc path, docs/superpowers/specs/..., is not vendored into this repo — see this skill's README.md "What was and wasn't vendored" table.)

1---
2name: skillopt-sleep
3description: "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 'make my agent better the more I use it', '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 and SKILL.md behind a held-out gate."
4---
5 
6# SkillOpt-Sleep: offline self-evolution for a local Claude agent
7 
8SkillOpt-Sleep gives the user's agent a **sleep cycle**. While the user is
9offline (e.g. nightly), it reviews their real past Claude Code sessions,
10re-runs recurring tasks on their own API budget, and consolidates what it
11learns into **memory** (`CLAUDE.md`) and **skills** (`SKILL.md`) — but only
12keeps changes that pass a held-out validation gate, and only after the user
13adopts them. The agent gets measurably better at *this* user's recurring work,
14with no model-weight training. It is the deployment-time analogue of training:
15short-term experience → long-term competence.
16 
17It synthesizes three ideas:
18- **SkillOpt** — the skill/memory doc is trainable text; bounded add/delete/replace
19 edits; accepted only through a held-out gate; rejected edits become negative feedback.
20- **Claude Dreams** — offline consolidation that reads past sessions and rebuilds
21 memory (dedup/merge/resolve); the input is never mutated; output is reviewed then adopted.
22- **Agent sleep** — periodic offline replay turns episodes into durable skill.
23 
24## When to use this skill
25 
26Trigger when the user wants any of:
27- "make my agent learn from how I use it" / "get better the more I use it" / "remember my preferences across sessions"
28- a nightly/scheduled or on-demand **offline self-improvement / dream / sleep** run
29- to **review past sessions/trajectories** and distill recurring tasks
30- to **consolidate** feedback into `CLAUDE.md` or a managed skill
31- to **schedule** the cycle (cron) or **adopt** a staged proposal
32 
33## The cycle (six stages)
34 
351. **Harvest** — read `~/.claude/projects/*/<session>.jsonl` + `~/.claude/history.jsonl` (READ-ONLY) → session digests.
362. **Mine** — digests → `TaskRecord`s (recurring intents + outcome labels + checkable refs where possible).
373. **Replay** — re-run tasks offline under the *current* skill+memory → (hard, soft) scores.
384. **Consolidate** — reflect on failures → propose bounded edits → **gate** on a held-out slice; accept only if it strictly improves.
395. **Stage** — write `proposed_CLAUDE.md`, `proposed_SKILL.md`, a diff, and `report.md` into `<project>/.skillopt-sleep/staging/<date>/`. **Nothing live changes.**
406. **Adopt** — explicit (or opt-in auto): copy staged files over live ones, backing up first.
41 
42## How to drive it
43 
44Prefer the `/skillopt-sleep` command. Under the hood it calls the bundled runner:
45 
46```bash
47"${CLAUDE_PLUGIN_ROOT}/scripts/sleep.sh" status # what's happened
48"${CLAUDE_PLUGIN_ROOT}/scripts/sleep.sh" dry-run --project "$(pwd)" # safe preview
49"${CLAUDE_PLUGIN_ROOT}/scripts/sleep.sh" run --project "$(pwd)" # full cycle, stages a proposal
50"${CLAUDE_PLUGIN_ROOT}/scripts/sleep.sh" adopt --project "$(pwd)" # apply staged proposal (with backup)
51```
52 
53- Default backend is `mock` (deterministic, **no API spend**) — good for trying the plumbing.
54- Add `--backend claude` or `--backend codex` to spend the user's real budget for genuine improvement.
55- Scope defaults to the invoked project; `--scope all` harvests every project.
56 
57### Scheduling
58 
59```bash
60"${CLAUDE_PLUGIN_ROOT}/scripts/sleep.sh" schedule --project "$(pwd)" --hour 3 --minute 17
61"${CLAUDE_PLUGIN_ROOT}/scripts/sleep.sh" unschedule --project "$(pwd)"
62```
63 
64Installs a nightly cron entry. `unschedule --all` removes every managed entry.
65 
66## All CLI flags
67 
68| Flag | Default | Description |
69|------|---------|-------------|
70| `--project PATH` | cwd | Project directory to evolve |
71| `--scope all\|invoked` | invoked | Harvest scope |
72| `--backend mock\|claude\|codex\|copilot` | mock | Replay backend (mock = no API spend) |
73| `--model NAME` | backend default | Override the model used for replay |
74| `--source claude\|codex\|auto` | claude | Transcript source |
75| `--lookback-hours N` | 72 | Harvest window |
76| `--max-sessions N` | unlimited | Cap harvested sessions |
77| `--max-tasks N` | 40 | Cap mined tasks |
78| `--target-skill-path PATH` | auto | Explicit SKILL.md to evolve |
79| `--tasks-file PATH` | — | Reviewed TaskRecord JSON (skip harvest) |
80| `--progress` | off | Print phase progress to stderr |
81| `--auto-adopt` | off | Auto-adopt if gate passes |
82| `--edit-budget N` | 4 | Max bounded edits per night |
83| `--json` | off | Machine-readable JSON output |
84 
85## Config keys (`~/.skillopt-sleep/config.json`)
86 
87Beyond the CLI flags, advanced behavior is controlled via config:
88 
89- **`preferences`** — free-text house rules injected into the optimizer's reflect step (e.g. "Always use async/await", "Answers in `\boxed{}`").
90- **`gate_mode`** — `on` (default, validation-gated) or `off` (greedy, accept all edits).
91- **`gate_metric`** — `hard`, `soft`, or `mixed` (default). Controls how the held-out gate scores.
92- **`dream_rollouts`** — >1 enables multi-rollout contrastive reflection per task.
93- **`recall_k`** — >0 recalls K similar past tasks into the dream (long-term memory).
94- **`evolve_memory`** / **`evolve_skill`** — independently toggle CLAUDE.md vs SKILL.md consolidation.
95 
96## Memory consolidation
97 
98The sleep cycle can consolidate both:
99- **SKILL.md** — the managed skill file (bounded edits: add/delete/replace)
100- **CLAUDE.md** — the project memory (same bounded edits)
101 
102Both are gated by the same held-out validation score. Set `evolve_memory: false` to consolidate only skills, or `evolve_skill: false` for only memory.
103 
104## Hard rules
105 
106- **Never** hand-edit the user's `CLAUDE.md` / `SKILL.md` as part of this skill.
107 Only the `adopt` action changes live files, and it backs them up first.
108- Harvest is read-only. `mock` replay has no side effects.
109- Always show the user the **held-out baseline → candidate** score and the
110 exact proposed edits before suggesting adoption. Evidence before adoption.
111- If asked whether it really helps, run
112 `python -m skillopt_sleep.experiments.run_experiment --persona researcher --json`
113 — a deterministic demo that proves held-out lift and that the gate blocks
114 harmful edits.
115 
116## Validate / demo
117 
118```bash
119# deterministic proof (no API): held-out score rises, gate blocks regressions
120python -m skillopt_sleep.experiments.run_experiment --persona researcher --assert-improves
121python -m skillopt_sleep.experiments.run_experiment --persona programmer --assert-improves
122```
123 
124See the upstream SkillOpt-Sleep guide section
125(https://microsoft.github.io/SkillOpt/docs/guideline.html#sleep) for recorded
126output and the full design. (The original repo-relative design-doc path,
127`docs/superpowers/specs/...`, is not vendored into this repo — see this
128skill's README.md "What was and wasn't vendored" table.)
129 

Discussion

Alternatives

Also in Agents & MCPSee all 533 in Development →