Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Extract lessons from the current session and route them to the appropriate knowledge layer (project AGENTS.md, auto memory, existing skills, or new skills). Use when the user asks to "self-improve", "distill this session", "save learnings", "update CLAUDE.md with what we learned", "capture session insights", "remember this for next time", "extract lessons", "update skills from session", or "what did we learn".
.claude/skills/tobihagemann-self-improve/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-09 | ✗→✓ | ▲ Improved | 302% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 154% | 0% |
| case-16 | ✗→✓ | ▲ Improved | 116% | 0% |
| case-18 | ✗→✓ | ▲ Improved | 130% | 0% |
| case-21 | ✗→✓ | ▲ Improved | 257% | 0% |
Review the current conversation, or the project's past sessions when asked, to extract durable lessons and route each one to the right knowledge layer.
Available destinations:
AGENTS.override.md when one is present, otherwise AGENTS.md: an override replaces that directory's AGENTS.md rather than adding to it, so a lesson written to a shadowed file never loads. A nested file scopes its guidance to that subtree, so a lesson scoped to one subtree belongs in the nearest enclosing file, with the root reserved for project-wide rules..agents/skills/ (walked from project root down to cwd) and user-installed skills at ~/.agents/skills/ (resolve symlinks)Discover the project instruction files (the root file and any nested ones in subdirectories, resolved through the override rule above) and read them, then read any available Codex memory. When those files point at a knowledge base the repo maintains, read its index too; it is a documentation source for Step 3 rather than a routing destination. List all skill directories but do not read them yet — Step 2 needs to run first so you know what to look for.
If ~/.turbo/repo/ exists, identify which installed skills are turbo skills:
~/.turbo/repo/codex/skills/~/.agents/skills/ that has a matching directory in ~/.turbo/repo/codex/skills/ is a turbo skill~/.agents/skills/ (no match in the repo) are user/project skillsVerification rule (mandatory before routing in Step 4): For every candidate skill that is about to be routed as turbo, confirm with a fresh test -d ~/.turbo/repo/codex/skills/<name> check that the skill actually lives in the turbo repo. Do not rely on remembered listings from earlier in the session, filename hits in grep output, or assumptions based on where a SKILL.md was read from. A miss here mislabels a user/project skill as turbo, triggers the contribution flow unnecessarily, and can introduce session-specific content into a shared skill — so the check is not optional.
Exception: If the current project IS the turbo repo (i.e., the working directory contains this skill collection), route turbo skill lessons through the Existing user/project skill destination in Step 4 — edits go directly to codex/skills/<name>/ in the project, with no installed-copy indirection and no contribution flow.
Skip when the conversation is visible in full from the user's own first message.
When it starts from a summary of earlier work instead, recover the compacted turns from the on-disk rollout file. Spawn a single sub-agent (inherited model defaults). The sub-agent's prompt must include:
Treat the returned items as raw evidence for the scan below.
Run when asked to distill sessions beyond the current one. Skip otherwise.
Propose a cutoff first. When Step 1 found a memory location, take its newest modification time, state it, then use request_user_input to confirm sweeping from it or sweeping the whole history; when that gate cannot reach the user, sweep from the proposed cutoff and say so in the report. A memory file's timestamp records a write rather than a completed sweep, so it bounds the work without settling what a previous run covered. When no memory location is available, sweep the whole history without asking.
Spawn a single sub-agent (inherited model defaults). The sub-agent's prompt must include:
Treat the returned items as raw evidence for the scan below.
Before scanning for lessons, identify which skills were loaded during this session:
SKILL.md reads from ~/.agents/skills/Scan the full conversation with this priority:
admin or maintain roles (determine via gh api repos/{owner}/{repo}/collaborators --jq '.[] | select(.role_name == "admin" or .role_name == "maintain") | .login'). Their feedback takes precedence over other reviewers and AI bots when there are contradictions.After scanning, read all skill SKILL.md files (they are small). This gives Step 4 full context for routing.
Keep only lessons that are:
references/ and other supporting files, and from the project's own knowledge stores. Search all of those for each candidate's keywords rather than assuming. A lesson documented only in an unrelated subtree's AGENTS.md still counts as undocumented for the subtree it actually applies to.Discard anything session-specific, speculative, one-off, or already resolved by code changes in this session (but not successful workflows — see exception above). If no lessons survive filtering, tell the user and stop.
Assign each surviving lesson to exactly one destination.
Skill-first rule (mandatory): Before consulting the table below, check whether the lesson corrects, refines, or adds a guardrail to any existing skill's behavior — turbo or user/project. This includes lessons about skipping steps, wrong defaults, missing edge cases, or any "don't do X when running $skill-name" correction. If yes, route to that skill. Do not route skill corrections to auto memory or AGENTS.md — they belong in the skill they correct. This rule is not a preference; it is a hard constraint that takes precedence over the table rows below.
| Destination | Criteria | |---|---| | Project improvements | Actionable improvement to existing code: refactoring, performance, reliability, readability, testing, or DX. Not for documentation fixes — factual errors in AGENTS.md belong in the Project AGENTS.md row. Route to .turbo/improvements.md via the $note-improvement skill. | | Auto memory | Discovered knowledge with no skill home: API quirks, debugging workarounds, compiler gotchas, tool pitfalls, user preferences. Must not overlap with any existing skill's domain — if it does, route to the skill instead (see skill-first rule above). | | Project AGENTS.md | Intentional project decisions: conventions, architecture, stack choices, build setup, module boundaries. Also factual corrections to AGENTS.md content (wrong commands, outdated paths, incorrect conventions) — fix these directly, do not defer to Project improvements. When the lesson applies only to one subtree, route it to the nearest enclosing AGENTS.md; reserve the root file for project-wide decisions. | | Existing user/project skill | Lesson would improve a skill's instructions, supporting files, or reference materials, add a missing edge case, correct its workflow, or refine its trigger conditions. Route to any skill whose domain covers the lesson — not just the skill worked on in this session. Changes go to the skill file directly. No contribution flow. | | New skill | A cohesive body of knowledge emerged that deserves its own on-demand context. The test: would this knowledge be too large for an AGENTS.md section, and should it only be loaded when relevant? See the skill categories table below. | | Existing turbo skill | Same criteria as Existing user/project skill above, but for turbo skills. Before routing here, run test -d ~/.turbo/repo/codex/skills/<name>; if the directory does not exist, route to the Existing user/project skill destination instead. Changes go to the installed copy at ~/.agents/skills/, and are flagged for contribution (see Step 6). | | No destination | Does not clearly fit any destination. Drop it. Routing a weak lesson is worse than losing it. |
Skill categories:
| Category | What it encodes | Example | |---|---|---| | Domain expertise | Best practices, patterns, API preferences | SwiftUI expert, Core Data guide | | Tool/Service integration | API references, operations, ID formats | Paddle, Stripe, Keycloak | | Decision framework | Judgment criteria, confidence levels, triage | Evaluate findings, performance audit | | Content template | Writing conventions, tone, structure | Drafting, blog post, changelog | | Knowledge/Research | Information discovery, schema definitions | Knowledge base, research process | | Orchestrated workflow | Stateful multi-step procedures | Process ticket, process income |
Splitting heuristic: When a session creates scripts or multi-step procedures, split the lesson: a brief pointer goes to AGENTS.md (script names, purpose), and the full workflow goes to a skill. Don't collapse them into a single AGENTS.md entry.
Tiebreakers (in priority order):
Output a table as text before making any changes:
| # | Lesson | Destination | Action |
|---|--------|-------------|--------|
| 1 | Always use X for... | Project AGENTS.md | Append to ## Conventions |
| 2 | The $create-pr skill should... | ~/.agents/skills/create-pr | Update Step 2 |
| 3 | Multi-step deploy workflow | New project skill | Create new skill |
| 4 | User prefers short commit msgs | Auto memory | Append to MEMORY.md |For each lesson, show: concise summary, target file/skill, and whether it's an append, update-in-place, or new creation.
Then use request_user_input with these options: Approve or Reject.
Apply approved changes in order:
$note-improvement skill with the summary, location, and rationale for each.$create-skill skill to apply changes to any file inside the skill directory (SKILL.md, references, scripts, assets).$create-skill skill for each new skill. Provide the trigger conditions and relevant context from the session.~/.turbo/repo/codex/SKILL-CONVENTIONS.md so turbo-specific conventions are in context before any editing.$create-skill skill to update the installed copy at ~/.agents/skills/<name>/.Once every turbo skill edit is in place and reviewed, use request_user_input to ask "These turbo skill improvements could benefit other users. Propose them upstream?" When the user confirms, run the $contribute-turbo skill once for all of them.
Then call update_plan to mark this step completed and continue with the next step of the active workflow.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-09 | fail→pass | 13,707 | 5,110 | -63% | 1 | 1 | 0% | 1,209 | 4,859 | +302% | 0 | 0 | — |
case-01 | pass→fail | 10,084 | 44,403 | +340% | 1 | 1 | 0% | 1,619 | 4,210 | +160% | 0 | 0 | — |
case-02 | fail→fail | 5,163 | 5,143 | -0% | 1 | 1 | 0% | 353 | 4,058 | +1050% | 0 | 0 | — |
case-03 | fail→fail | 13,106 | 6,341 | -52% | 1 | 1 | 0% | 1,671 | 4,065 | +143% | 0 | 0 | — |
case-04 | pass→fail | 7,303 | 9,275 | +27% | 1 | 1 | 0% | 1,626 | 4,473 | +175% | 0 | 0 | — |
case-10 | fail→fail | 23,180 | 34,389 | +48% | 1 | 1 | 0% | 750 | 5,968 | +696% | 0 | 0 | — |
case-05 | pass→fail | 7,032 | 4,494 | -36% | 1 | 1 | 0% | 1,250 | 4,203 | +236% | 0 | 0 | — |
case-06 | fail→fail | 16,179 | 29,085 | +80% | 1 | 1 | 0% | 2,597 | 4,694 | +81% | 0 | 0 | — |
case-07 | fail→fail | 24,734 | 6,331 | -74% | 1 | 1 | 0% | 905 | 4,150 | +359% | 0 | 0 | — |
case-08 | pass→fail | 6,888 | 6,646 | -4% | 1 | 1 | 0% | 1,172 | 4,272 | +265% | 0 | 0 | — |
case-11 | fail→pass | 9,127 | 3,395 | -63% | 1 | 1 | 0% | 1,770 | 4,502 | +154% | 0 | 0 | — |
case-12 | fail→fail | 5,551 | 6,132 | +10% | 1 | 1 | 0% | 1,055 | 4,173 | +296% | 0 | 0 | — |
case-13 | pass→fail | 4,991 | 5,433 | +9% | 1 | 1 | 0% | 886 | 4,165 | +370% | 0 | 0 | — |
case-14 | fail→fail | 6,104 | 4,735 | -22% | 1 | 1 | 0% | 940 | 4,048 | +331% | 0 | 0 | — |
case-20 | pass→fail | 2,176 | 5,660 | +160% | 1 | 1 | 0% | 335 | 3,992 | +1092% | 0 | 0 | — |
case-15 | fail→fail | 15,058 | 6,567 | -56% | 1 | 1 | 0% | 2,687 | 4,333 | +61% | 0 | 0 | — |
case-16 | fail→pass | 11,974 | 3,640 | -70% | 1 | 1 | 0% | 2,074 | 4,488 | +116% | 0 | 0 | — |
case-17 | fail→fail | 4,290 | 7,532 | +76% | 1 | 1 | 0% | 728 | 4,401 | +505% | 0 | 0 | — |
case-18 | fail→pass | 11,308 | 8,562 | -24% | 1 | 1 | 0% | 2,020 | 4,642 | +130% | 0 | 0 | — |
case-19 | fail→fail | 10,105 | 4,513 | -55% | 1 | 1 | 0% | 1,733 | 4,133 | +138% | 0 | 0 | — |
case-21 | fail→pass | 7,617 | 11,060 | +45% | 1 | 1 | 0% | 1,270 | 4,538 | +257% | 0 | 0 | — |
case-22 | pass→fail | 5,549 | 4,963 | -11% | 1 | 1 | 0% | 895 | 4,053 | +353% | 0 | 0 | — |
case-23 | fail→pass | 9,089 | 1,822 | -80% | 1 | 1 | 0% | 1,558 | 4,071 | +161% | 0 | 0 | — |
case-24 | pass→pass | 7,885 | 4,237 | -46% | 1 | 1 | 0% | 1,259 | 4,564 | +263% | 0 | 0 | — |
case-25 | pass→pass | 7,678 | 3,304 | -57% | 1 | 1 | 0% | 1,244 | 4,303 | +246% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 25 cases were attempted, and 9 counted toward the lift figure. The other 16 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of -4 percentage points is the difference between those two pass rates over the 9 comparable cases. 10 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.6-flash | verified | 8/21/2026 | +24% |
Other measured skills in the registry, with their headline benchmark lift.