evolve-skill
Skill2 starsChanged 7 months agoMITView on GitHub
Evolve Skill: measurement-first skill optimizer. Evaluates SKILL.md files against an anchored 9-dimension rubric, validates that the rubric itself is stable (test-retest), optimizes with a hill-climbing loop that only accepts improvements larger than measurement noise, protects against overfitting with train/holdout prompt splits, and preserves original function via semantic diff checks. Use when user mentions: optimize skill, skill review, skill audit, improve SKILL.md, skill score, skill rubric, skill quality, make my skill better, rate my skills, evolve skills, skill hill climbing, automated skill improvement.
5 other projects use a version of this.
Adopted by
Most recently taken up by
- danielvm-git/bigpowerstheir own version, first seen Nov 6, 2026
- RafalKielbasa/claude-skillstheir own version, first seen Nov 6, 2026
- iliaal/whetstonetheir own version, first seen Jul 12, 2026
- drewdrewthis/claude-skillstheir own version, first seen Apr 22, 2026
- Ecrypted-Data/Evolve-Skilltheir own version, first seen Feb 24, 2026
Other versions5 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 5
- danielvm-git/bigpowers★ 288same name
- iliaal/whetstone★ 36same name
- drewdrewthis/claude-skills★ 2same name
- Ecrypted-Data/Evolve-Skill★ 2same name
- RafalKielbasa/claude-skills★ 1same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
The file
Show its rules and text
We split this skill into the rules it gives an agent
19 rules. About 0 are common, 13 are distinctive, and 6 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈13
Distinctive · estimate
This author's own choices. Worth a look.
6
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 20
If you want a quick skill tidy-up, use a simpler tool.
- Distinctive: line 26
Every optimization cycle passes through three gates.
- Very specific: line 30
Before any optimization runs, score the baseline skill three independent times using three separate sub-agents.
- Distinctive: line 40
Before and after every change, extract the skill's core functions as a bullet list (via a sub-agent).
- Very specific: line 86
Create a dated branch: evolve/YYYYMMDD-HHMM
- Very specific: line 88
Read existing playbook.md — known patterns will be tried first in Phase 3
- Very specific: line 121
If sub-agents are unavailable, set confidence=low and do not use the score for keep/revert decisions.
- Distinctive: line 179
After a skill's budget is exhausted, insert a human checkpoint:
- Distinctive: line 183
Wait for explicit user approval
- Distinctive: line 189
Run the holdout prompts (which have never been seen during optimization) against both the original and optimized versions
- Very specific: line 197
Write any discovered patterns into playbook.md
- Distinctive: line 225
No new dependencies: Do not add scripts, references, or external tools the original skill did not declare.
- Distinctive: line 228
Git-first, rollback-safe: Every change is on a branch.
- Distinctive: line 231
Localization is a dimension, not an afterthought: If a skill declares bilingual support, both languages are tested.
- Distinctive: line 291
When diagnosing the lowest-scoring dimension, consult this ranked list of proven interventions.
- Distinctive: line 303
No human checkpoint before destructive actions → insert confirmation gate
- Distinctive: line 309
No error handling → add "if X fails, then Y" branches
- Distinctive: line 315
No quick reference → add TL;DR or decision tree
- Very specific: line 317
Every P0 or P1 intervention that produces Δ ≥ 5 points must be added to playbook.md with a pattern signature.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Evolve Skill
A measurement-first skill optimizer. Inspired by Karpathy's
autoresearchand thedarwin-skillproject, but rebuilt around one conviction: if you cannot trust your measurement, you cannot trust your optimization.Every decision this skill makes is gated by whether the measurement is reliable enough to justify it.
What This Skill Is Not
This is not a formatting linter. This is not a prompt rewriter. This is not an autonomous agent that will rewrite your skills in the background.
This is a disciplined experiment loop with strict gates around scoring noise, overfitting, and function drift — the three failure modes that make most "auto-optimize" tools produce worse skills over time.
If you want a quick skill tidy-up, use a simpler tool. If you have 20+ skills and need to know which ones are actually improving, this is for you.
Core Philosophy — The Three Gates
Every optimization cycle passes through three gates. If any gate fails, the cycle stops or rolls back.
Gate 1 — Measurement Stability (can we trust the score?)
Before any optimization runs, score the baseline skill three independent times using three separate sub-agents. Compute the standard deviation. If SD > 2.0 points, the rubric is too loose and no optimization may proceed until the rubric is tightened.
A ratchet mechanism with unreliable measurement is not a ratchet — it is a random walk pretending to be progress.
Gate 2 — Effect Size (is this improvement real?)
A keep decision requires Δscore ≥ max(3, 2×SD) where SD is the measurement noise from Gate 1. A skill that "improved" by 1.5 points when noise is ±2 points did not improve.
Gate 3 — Function Preservation (is it still the same skill?)
Before and after every change, extract the skill's core functions as a bullet list (via a sub-agent). If function overlap drops below 80%, the change is rejected regardless of score. A higher-scoring skill that silently lost a capability is worse, not better.
The 9-Dimension Anchored Rubric (100 points)
Each dimension is scored 1–10. Every dimension has three anchor points (1, 5, 10) defined in rubric/anchored-rubric.md. Scorers must reference the anchors and cite which anchor their score lies closest to. This is what stabilizes inter-rater agreement.
Structure (50 points)
| # | Dimension | Weight | What it measures |
| 1 | Frontmatter quality | 8 | name format, description ≤1024 chars, triggers |
| 2 | Workflow clarity | 12 | numbered steps, I/O per step |
| 3 | Edge-case coverage | 8 | fallbacks, error recovery |
| 4 | Checkpoint design | 6 | human-in-loop gates before destructive actions |
| 5 | Instruction specificity | 12 | concrete params, formats, examples |
| 6 | Resource integration | 4 | references/scripts/assets resolve |
Effectiveness (40 points)
| # | Dimension | Weight | What it measures |
| 7 | Architectural fit | 10 | non-redundant, matches ecosystem conventions |
| 8 | Live test performance | 30 | output quality on held-out test prompts |
Localization (10 points)
| # | Dimension | Weight | What it measures |
| 9 | Localization quality | 10 | triggers + examples in all declared languages, cross-platform paths |
Total: Σ(dimension_score × weight) / 10, capped at 100.
The effectiveness dimension (30 points) is the largest single weight by design. A beautifully written skill that produces bad output is still a bad skill.
Workflow
Phase 0 — Scope and Setup
- Determine scope:
optimize all skills→ scan.claude/skills/*/SKILL.mdand skill directoriesoptimize <name>→ single skillevaluate only→ Phases 0–2 only, no edits
- Create a dated branch:
evolve/YYYYMMDD-HHMM - Initialize
results.tsvandplaybook.mdif they do not exist - Read existing
playbook.md— known patterns will be tried first in Phase 3
Phase 1 — Test Prompt Design (Train / Holdout Split)
For each skill, the user — not the agent — writes prompts. The agent may suggest, but suggestions must be confirmed.
- Training prompts (3) — seen during optimization, used to drive keep/revert decisions
- One happy-path prompt
- One complex or ambiguous prompt
- One edge-case prompt
- Holdout prompts (2) — never seen during optimization, used only for final validation
- Cover different scenarios than the training prompts
- Save to
<skill_dir>/test-prompts.jsonusing the template intemplates/test-prompts.template.json - Show both sets to the user. Confirm before proceeding.
Why both sets exist: without holdouts, the optimization overfits to the training prompts and appears to improve while quietly getting worse on unseen inputs.
Phase 2 — Baseline Evaluation with Stability Check
For each skill:
- Score three times independently using three separate sub-agents with no shared context
- Compute mean and SD across the three runs
- If
SD > 2.0 points:- Flag the skill as
calibration_required - Skip optimization for this skill
- Report to user: "Rubric is too loose for this skill. Tighten anchors before proceeding."
- Flag the skill as
- If
SD ≤ 2.0:- Store
baseline_score = mean,baseline_sd = sd - Proceed to Phase 3
- Store
For the live-test dimension (30 points): run each training prompt through two sub-agents — one with the skill loaded, one without (baseline). Compare output quality against the anchors in the rubric.
If sub-agents are unavailable, set confidence=low and do not use the score for keep/revert decisions. A low-confidence score is diagnostic only.
Phase 3 — Optimization Loop
Budget allocation follows a multi-armed bandit pattern, not round-robin:
initial_budget_per_skill = 3 rounds
total_budget = 30 rounds across 10 skills (configurable)
round allocation:
if last round Δ ≥ 5 points: +2 bonus rounds
if last round Δ between 0 and 3: continue at baseline allocation
if last round Δ ≤ 0 (reverted): forfeit remaining budget, move on
hot skills (3+ consecutive keeps) can use up to 10 rounds totalEach round:
1. Consult playbook.md:
"Has a known pattern worked for a skill like this before?"
If yes, try the known pattern first.
2. If no known pattern, diagnose:
Find the lowest-scoring dimension.
3. Generate exactly one targeted change:
- Which lines change
- Which rubric dimension this targets
- Predicted Δ score
4. Execute on an experiment branch:
git checkout -b evolve/YYYYMMDD-HHMM/<skill>/exp-<N>
edit SKILL.md
git commit -m "exp: <skill> <dimension> <summary>"
5. Re-score with an INDEPENDENT sub-agent (never the editing agent):
- Run training prompts only (holdout stays sealed)
- Compute new_score and run Gate 3 (function preservation)
6. Apply gates:
Gate 2: if new_score > old_score + max(3, 2×SD) → candidate keep
Gate 3: if function_overlap ≥ 80% → candidate keep
Otherwise → branch stays for history, move on
7. On candidate keep:
git checkout main_branch
git merge --no-ff evolve/.../exp-<N>
update results.tsv with status=keep
8. On reject:
leave the experiment branch in place (do not delete — it is training data)
update results.tsv with status=reject and reason code
9. Log to results.tsv with every column filledAfter a skill's budget is exhausted, insert a human checkpoint:
- Show diff across all kept experiments
- Show training-prompt output comparison
- Show delta summary
- Wait for explicit user approval
Phase 4 — Holdout Validation (Overfitting Check)
This runs once per skill, after Phase 3 completes and the user has approved.
- Run the holdout prompts (which have never been seen during optimization) against both the original and optimized versions
- Score only the live-test dimension (30 points)
- If
holdout_delta < 0:- The optimization overfit to the training prompts
- Roll back the entire optimization for this skill
- Log as
overfit_detectedin results.tsv
- If
holdout_delta ≥ 0:- Optimization is validated
- Write any discovered patterns into
playbook.md
Phase 5 — Playbook Update and Reporting
For every keep that produced Δ ≥ 5 points, add an entry to playbook.md:
## Pattern: <short name>
- **Problem signature:** <what triggers this pattern's applicability>
- **Intervention:** <the specific edit>
- **Measured impact:** <skill, Δ, n observations>
- **Where it worked:** <skill names>
- **Where it failed:** <skill names, if any>Phase 3 of future runs will check this playbook before diagnosing fresh.
Final report includes:
- Per-skill before/after with confidence intervals
- Holdout validation results
- Playbook additions
- Branches with failed experiments (for later review)
Constraints
- Core function is immutable. Gate 3 enforces this. If a change removes a capability, it is rejected even if the score went up.
- No new dependencies. Do not add scripts, references, or external tools the original skill did not declare.
- One dimension per experiment. Multi-dimension changes make keep/revert decisions unattributable.
- Size ceiling. Optimized SKILL.md must be ≤150% of original size.
- Git-first, rollback-safe. Every change is on a branch.
git revertis for merge commits only; failed branches are preserved. - Score independence. The sub-agent that edits is never the sub-agent that scores. Enforced by session separation.
- Confidence gating. A
confidence=lowscore cannot drive a keep decision under any circumstances. - Localization is a dimension, not an afterthought. If a skill declares bilingual support, both languages are tested.
File Layout
.claude/skills/evolve-skill/
├── SKILL.md # This file
├── rubric/
│ ├── anchored-rubric.md # Human-readable anchors
│ └── rubric-v1.json # Machine-readable rubric
├── scripts/
│ ├── calibrate.py # Test-retest variance
│ ├── score.py # Apply rubric with anchors
│ ├── semantic_diff.py # Function preservation
│ ├── ratchet.py # Keep/revert with CI
│ └── allocate.py # Bandit budget allocation
├── templates/
│ ├── test-prompts.template.json # Train/holdout structure
│ ├── result-card.html # Optional visual card
│ └── playbook.template.md # Starter playbook
├── examples/
│ ├── example-walkthrough.md # Full optimization run
│ └── example-results.tsv # Real log format
└── results.tsv # Created on first runPer-skill files created during optimization:
<target_skill>/
├── SKILL.md
├── test-prompts.json # Train + holdout split
├── baseline-scores.json # Three-run variance record
└── optimization-log.md # Per-skill narrativeresults.tsv Schema
Tab-separated, append-only. Every row is an event.
timestamp branch skill old_score new_score delta sd status dimension intervention function_overlap holdout_delta confidence eval_mode notesColumn definitions:
status∈ {baseline,keep,reject_effect_size,reject_function_drift,reject_noisy,overfit_detected}confidence∈ {high,medium,low} — derived fromeval_modeeval_mode∈ {full_test(sub-agents with live prompts),partial(structure only),simulation(no sub-agent available)}function_overlap— semantic-diff overlap percentage from Gate 3holdout_delta— only populated on Phase 4 rows
Intervention Playbook (Priority Order)
When diagnosing the lowest-scoring dimension, consult this ranked list of proven interventions.
P0 — Effectiveness Problems (Live-Test Signals)
- Output misses user intent → search SKILL.md for misleading instructions, prune
with_skilloutput worse thanbaseline→ skill is over-constraining, simplify- Output format inconsistent → add explicit output schema with example
P1 — Structural Problems
- Frontmatter trigger list too narrow → expand with synonyms and natural phrasings in all declared languages
- Workflow lacks Phase/Step structure → impose linear numbered flow
- No human checkpoint before destructive actions → insert confirmation gate
P2 — Specificity Problems
- Vague steps ("process the image") → replace with specific operation + parameters
- Missing I/O specs → add format, path, and example for each step
- No error handling → add "if X fails, then Y" branches
P3 — Readability Problems
- Paragraphs too long → break into tables or shorter blocks
- Repeated descriptions → deduplicate
- No quick reference → add TL;DR or decision tree
Every P0 or P1 intervention that produces Δ ≥ 5 points must be added to playbook.md with a pattern signature.
Usage Patterns
Full audit + optimization (first run)
User: "optimize all my skills"
→ Phases 0–5
→ Agent suggests starting with 5 lowest baseline scoresSingle skill
User: "optimize my blog-writer skill"
→ Phases 0–5 limited to one skillEvaluation only (no edits)
User: "rate all my skills"
→ Phases 0–2 only
→ Report includes confidence level per skillCalibration check
User: "is my rubric reliable?"
→ Phase 2 three-run variance only
→ Reports SD per skill
→ Flags which skills cannot be optimized under current rubricPlaybook review
User: "what patterns work for my skills?"
→ Display playbook.md with frequency and average Δ per patternRollback
User: "revert optimization for <skill>"
→ git checkout main_branch
→ git revert <merge_commit>
→ Restore from pre-evolution tagWhat Makes This Different from Darwin / autoresearch
| Concern | autoresearch | darwin-skill | evolve-skill |
| Measurement noise | Tolerable (loss is tight) | Unmeasured | Gate 1 requires SD ≤ 2.0 |
| Overfitting | Natural (val set) | Unprotected | Train/holdout split, Phase 4 validation |
| Function drift | Not a concern (code) | Addressed by rule, not measurement | Gate 3 semantic diff, 80% overlap minimum |
| Rubric stability | N/A | "Score 1–10" | Anchored 1/5/10 points per dimension |
| Keep threshold | new_loss < old_loss | new > old | Δ ≥ max(3, 2×SD) |
| Budget allocation | Compute-bound | Fixed 3 rounds | Multi-armed bandit |
| Failed experiments | Discarded | git revert creates noise | Preserved on branches |
| Learning across skills | N/A | None | Playbook crosstalk |
| Human oversight | None | Per-skill pause | Per-skill pause + holdout gate |
Success Criteria for This Skill Itself
This skill is working correctly if, over a full optimization run:
- Fewer than 20% of candidate changes are rejected by Gate 2 (effect-size too small) → anchors are useful
- Fewer than 5% of candidate changes are rejected by Gate 3 (function drift) → the editor is disciplined
- Holdout delta agrees with training delta direction ≥ 90% of the time → no significant overfitting
- Playbook patterns reused in later runs have positive expected delta → crosstalk works
These are meta-metrics — tracked in results.tsv over time — that tell you whether the optimizer itself is healthy.
Design Inspiration
- Karpathy, autoresearch — autonomous experiment loops driven by a measurable objective
- darwin-skill (alchaincyf) — applying the autoresearch pattern to SKILL.md optimization
- Inter-rater agreement research — why anchored rubrics reduce scorer variance
- Train/validation/test discipline from ML — why holdouts matter
The contribution of this skill is not novelty. It is measurement discipline: the loss function (rubric) is treated as a first-class object that itself must be validated, not assumed.
License
MIT. Use, fork, modify, ship. Attribution appreciated but not required.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

