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
- Run the line below. It pulls the whole folder into
~/.claude/skills/skillopt-sleep-2, including the files SKILL.md points to. - Describe your job in plain words. Claude Code follows the skill from there.
npx degit alirezarezvani/claude-skills/engineering/skillopt-sleep/skills/skillopt-sleep#main ~/.claude/skills/skillopt-sleep-2For 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)
- On this page open ⋯ → Download .md.
- Save it as SKILL.md in a folder, zip the folder, then Customize → Skills → + → Create skill → Upload a skill.
- Pick the file and Save. Claude shows the name and description and runs a security scan.
- Check the skill is switched on.
- Start a new chat and describe your job in plain words. The AI follows the skill from there.
ChatGPT or another app
- ChatGPT: make a Project and paste it into Instructions.
- 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.
Paste into Claude, ChatGPT or Cursor.
Source of SkillOpt-Sleep: offline self-evolution for a local Claude agent
Show the full text129 lines
| name | description |
|---|---|
| skillopt-sleep | 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. |
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.mdor a managed skill - to schedule the cycle (cron) or adopt a staged proposal
The cycle (six stages)
- Harvest — read
~/.claude/projects/*/<session>.jsonl+~/.claude/history.jsonl(READ-ONLY) → session digests. - Mine — digests →
TaskRecords (recurring intents + outcome labels + checkable refs where possible). - Replay — re-run tasks offline under the current skill+memory → (hard, soft) scores.
- Consolidate — reflect on failures → propose bounded edits → gate on a held-out slice; accept only if it strictly improves.
- Stage — write
proposed_CLAUDE.md,proposed_SKILL.md, a diff, andreport.mdinto<project>/.skillopt-sleep/staging/<date>/. Nothing live changes. - 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 claudeor--backend codexto spend the user's real budget for genuine improvement. - Scope defaults to the invoked project;
--scope allharvests 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) oroff(greedy, accept all edits).gate_metric—hard,soft, ormixed(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.mdas part of this skill. Only theadoptaction changes live files, and it backs them up first. - Harvest is read-only.
mockreplay 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 | |
| 2 | name skillopt-sleep |
| 3 | 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 '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 | |
| 8 | SkillOpt-Sleep gives the user's agent a **sleep cycle**. While the user is |
| 9 | offline (e.g. nightly), it reviews their real past Claude Code sessions, |
| 10 | re-runs recurring tasks on their own API budget, and consolidates what it |
| 11 | learns into **memory** (`CLAUDE.md`) and **skills** (`SKILL.md`) — but only |
| 12 | keeps changes that pass a held-out validation gate, and only after the user |
| 13 | adopts them. The agent gets measurably better at *this* user's recurring work, |
| 14 | with no model-weight training. It is the deployment-time analogue of training: |
| 15 | short-term experience → long-term competence. |
| 16 | |
| 17 | It 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 | |
| 26 | Trigger 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 | |
| 35 | **Harvest** — read `~/.claude/projects/*/<session>.jsonl` + `~/.claude/history.jsonl` (READ-ONLY) → session digests. |
| 36 | **Mine** — digests → `TaskRecord`s (recurring intents + outcome labels + checkable refs where possible). |
| 37 | **Replay** — re-run tasks offline under the *current* skill+memory → (hard, soft) scores. |
| 38 | **Consolidate** — reflect on failures → propose bounded edits → **gate** on a held-out slice; accept only if it strictly improves. |
| 39 | **Stage** — write `proposed_CLAUDE.md`, `proposed_SKILL.md`, a diff, and `report.md` into `<project>/.skillopt-sleep/staging/<date>/`. **Nothing live changes.** |
| 40 | **Adopt** — explicit (or opt-in auto): copy staged files over live ones, backing up first. |
| 41 | |
| 42 | ## How to drive it |
| 43 | |
| 44 | Prefer the `/skillopt-sleep` command. Under the hood it calls the bundled runner: |
| 45 | |
| 46 | |
| 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 | |
| 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 | |
| 64 | Installs 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 | |
| 87 | Beyond 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 | |
| 98 | The 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 | |
| 102 | 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. |
| 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 | |
| 119 | # deterministic proof (no API): held-out score rises, gate blocks regressions |
| 120 | python -m skillopt_sleep.experiments.run_experiment --persona researcher --assert-improves |
| 121 | python -m skillopt_sleep.experiments.run_experiment --persona programmer --assert-improves |
| 122 | |
| 123 | |
| 124 | See the upstream SkillOpt-Sleep guide section |
| 125 | (https://microsoft.github.io/SkillOpt/docs/guideline.html#sleep) for recorded |
| 126 | output and the full design. (The original repo-relative design-doc path, |
| 127 | `docs/superpowers/specs/...`, is not vendored into this repo — see this |
| 128 | skill's README.md "What was and wasn't vendored" table.) |
| 129 |
Discussion
Browse more free Claude skills or everything in Development.