Skip to content

Latest commit

 

History

10 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Skill Evolver

Point it at a skill. Wake up to a better skill.

Autonomous evolution engine for AI coding agent skills — search, verify, gate, keep, repeat.

Claude Code Skill OpenCode Codex License: MIT Python 3.10+

English · 中文 · Architecture


            ┌──────────────────┐
            │    Your Skill    │
            └────────┬─────────┘
                     │
                     ▼
    ┌──────────────────────────────────┐
    │          Skill Evolver           │
    │                                  │
    │    search → modify → evaluate    │
    │      → gate → keep/discard       │
    │             → repeat             │
    └────────────────┬─────────────────┘
                     │
                     ▼
            ┌──────────────────┐
            │  A Better Skill  │
            └──────────────────┘

In one sentence: train your Skill the way you'd train a model

If you've done machine learning, you already understand what Skill Evolver does.

Training a model Training a Skill (Skill Evolver)
Training data GT (Ground Truth) — test cases + assertions in evals.json
Define loss function 8 assertion types + 5-way AND gate — multi-dimensional definition of "is this skill actually good?"
Train (SGD / iteration) 8-phase loop — search → modify → evaluate → gate → keep/discard → repeat
Pick a checkpoint best_versions/ — snapshot on every keep, select the best
Overfitting detection holdout split (Anti-Goodhart) — never shown to the proposer during iteration
Regression test regression split — make sure improving A doesn't break B
Learning rate / step size Layered mutation (description → body → scripts) — small changes first, big ones later
Early stopping Stuck detection + convergence — N consecutive discards triggers layer promotion or halt

The key insight: this is NOT about making a skill's "syntax check" pass rate higher. Just like training a model isn't about making the code compile — it's about fitting the skill to your data. Your GT defines "what a good skill should produce given these inputs", and Skill Evolver's loop drives the skill toward that target, the same way SGD drives a model toward the loss minimum.

What you get is not just a skill that "works" — it's a skill that has been systematically trained on your evaluation dimensions.


Why Skill Evolver?

Skills are the next standard abstraction across Claude Code, Codex CLI, and OpenCode — but skill iteration is still entirely manual today. Hand-edit, hand-test, repeat. Not reproducible, not scalable, not auditable.

Three public SOTA projects each solve part of this, but nobody has fused them specifically for skill optimization:

Pillar Source What it gives Evolver
Evaluation engine skill-creator (official Anthropic skill) Grading, comparison, HTML viewer, test-case design, full eval protocol. Hard dependency, called by reference — Creator updates auto-propagate
Autonomous outer loop Karpathy autoresearchuditgoenka/autoresearch (skill-ified) The modify → verify → keep/discard → repeat 8-phase loop and its 5 principles: one metric / constrained scope / fast verification / automatic rollback / git as memory. Karpathy originally built it for autonomous optimization of nanochat LLM training code (700 experiments in 2 days); uditgoenka generalized it into a Claude Code skill
Failure diagnosis philosophy (inspired by Meta-Harness) Stanford Meta-Harness (Lee et al. 2026) Paper quote: "access to raw execution traces is the key ingredient for enabling harness search." Table 3 ablation: Scores Only 34.6 → Scores+Summary 34.9 → Full traces 50.0. What we borrow: don't hand the proposer just scores — expose the raw evaluation record (per-case prompt + skill output + per-assertion PASS/FAIL) so diagnosis is grounded in "seeing the scene", not guessing from numbers

What Skill Evolver adds on top

  1. 5-way AND gate — quality / trigger F1 / cost / latency / regression must all pass to keep. Any fail triggers a real git revert
  2. Workspace git isolation — experiment commits land in an independent git, zero pollution of the project git
  3. Meta-evolution self-proof — used on itself for 21+ iterations across two sessions (v1: 88.9% → 100%; v2: 126/126 all-green across 49 GT cases, 0 crashes), every iteration surfacing a bug the author couldn't see

🌍 Run it anywhere

One source of truth, three platform variants — generated on demand, never out of sync.

skill-evolver isn't locked to a single agent platform. The full skill lives in plugin/skills/skill-evolver/ — that is the single source of truth. Sync scripts (scripts/sync-codex.sh, scripts/sync-opencode.sh) project that source into platform-specific variants for Codex (.agents/) and OpenCode (.opencode/), applying each platform's quirks (CLI command names, mention syntax, etc.) automatically. The unified scripts/install.sh wraps both steps into a single command per platform.

Platform Command
🤖 Claude Code bash scripts/install.sh --claude --global
💻 Codex CLI bash scripts/install.sh --codex --global
🌌 OpenCode bash scripts/install.sh --opencode --global
🌐 All three bash scripts/install.sh --all --global

The platform mirrors (.agents/, .opencode/) are not committed to git — they are build artifacts, generated by the sync scripts at install time. This keeps the repo lean, eliminates mirror drift, and ensures every install pulls fresh content from plugin/. One source. Three platforms. Zero drift.


Quick Start

0. Install skill-creator first (hard dependency)

In Claude Code:

/install skill-creator

Or see Installing skill-creator below for manual options. skill-evolver refuses to start without it — no silent degradation.

Claude Code

Option A — Plugin install (recommended):

/plugin marketplace add FishSerrie/skill-evolver
/plugin install skill-evolver

Restart Claude Code. /skill-evolver is available immediately.

Option B — Guided installer:

git clone https://github.com/FishSerrie/skill-evolver.git
cd skill-evolver
bash scripts/install.sh --claude --global

Installs to ~/.claude/skills/skill-evolver/.

Option C — Manual copy:

git clone https://github.com/FishSerrie/skill-evolver.git
mkdir -p ~/.claude/skills
cp -R skill-evolver/plugin/skills/skill-evolver ~/.claude/skills/skill-evolver

Codex Quick Start

Codex invocation: use $skill-evolver mention syntax. The skill is auto-discovered from .agents/skills/ directories. The sync step handles Codex-specific replacements (claudecodex, /skill-evolver$skill-evolver, etc.) automatically.

Option A — Guided installer (recommended):

git clone https://github.com/FishSerrie/skill-evolver.git
cd skill-evolver
bash scripts/install.sh --codex --global

Installs to ~/.agents/skills/skill-evolver/.

Option B — Project-local:

git clone https://github.com/FishSerrie/skill-evolver.git
cd your-project
bash ../skill-evolver/scripts/install.sh --codex --project

Installs to ./.agents/skills/skill-evolver/ in the current directory.

OpenCode Quick Start

OpenCode invocation: use the standard skill loading; command names follow the same conventions as other OpenCode skills. The sync step handles OpenCode-specific adjustments automatically.

Option A — Guided installer (recommended):

git clone https://github.com/FishSerrie/skill-evolver.git
cd skill-evolver
bash scripts/install.sh --opencode --global

Installs to ~/.config/opencode/skills/skill-evolver/.

Option B — Project-local:

git clone https://github.com/FishSerrie/skill-evolver.git
cd your-project
bash ../skill-evolver/scripts/install.sh --opencode --project

Installs to ./.opencode/skills/skill-evolver/ in the current directory.

Install for all three at once

bash scripts/install.sh --all --global

Dry-run first if you want to see exactly what will happen:

bash scripts/install.sh --all --global --dry-run

Verify the install

python3 -c "
import sys; sys.path.insert(0, 'plugin/skills/skill-evolver/scripts')
from common import require_creator
print(f'skill-creator: {require_creator()}')
print('skill-evolver: ready')
"

If skill-creator is missing, you'll see a clear CreatorNotFoundError with three install options.

Try the Demo

cd examples/hello-skill && git init && git add -A && git commit -m "init"
python3 ../../plugin/skills/skill-evolver/scripts/evolve_loop.py . --gt evals.json --run --max-iterations 5 --evaluator local

See examples/README.md for the full 5-minute walkthrough.


Prerequisites

Requirement Required? Purpose
Python 3.10+ Yes Runs evaluation scripts
Git Yes Tracks changes in the workspace, enables keep/discard/revert
skill-creator Yes (hard dependency) Provides quick_validate, eval-viewer, grader/comparator protocols
Claude Code CLI For semantic assertions LLM binary classification for path_hit / fact_coverage (program-only assertions work without it)

Installing skill-creator (Hard Dependency)

skill-creator is required. Without it, Evolver errors out at startup with installation instructions. Install in one of three ways:

  1. Plugin marketplace (recommended): In Claude Code, run /install skill-creator

  2. Manual install from GitHub:

    git clone https://github.com/anthropics/skills.git /tmp/anthropic-skills-latest
    cp -r /tmp/anthropic-skills-latest/skills/skill-creator ~/.claude/skills/skill-creator

    Source: https://github.com/anthropics/skills/tree/main/skills/skill-creator

  3. Already installed at a custom path?

    export SKILL_CREATOR_PATH=/your/path/to/skill-creator
    # or pass via CLI:
    python3 scripts/evolve_loop.py ./my-skill --gt ./evals.json --run --creator-path /your/path

Path discovery order (scripts/common.py:find_creator_path):

  1. $SKILL_CREATOR_PATH env var
  2. ~/.claude/plugins/marketplaces/*/plugins/skill-creator/skills/skill-creator/
  3. ~/.claude/skills/skill-creator/
  4. .claude/skills/skill-creator/
  5. /tmp/anthropic-skills-latest/skills/skill-creator/

If none of these resolve, require_creator() raises CreatorNotFoundError with the install message above. There is no silent fallback.

Without Claude Code CLI

The 6 program-only assertion types (contains, not_contains, regex, json_schema, script_check, file_exists) work without any LLM. Use --evaluator local. Only path_hit and fact_coverage need an LLM backend.

Multi-Platform Support

Platform Install Notes
🤖 Claude Code bash scripts/install.sh --claude --global Source of truth lives in plugin/skills/skill-evolver/. Or use /plugin install.
💻 Codex CLI bash scripts/install.sh --codex --global Generates .agents/skills/skill-evolver/ via sync; uses $skill-evolver mention syntax.
🌌 OpenCode bash scripts/install.sh --opencode --global Generates .opencode/skills/skill-evolver/ via sync.
🌐 All three at once bash scripts/install.sh --all --global Runs all three installers in sequence.
HTTP endpoint Set EVOLVER_LLM_URL env var Backend-only override.

See Quick Start above for full per-platform instructions including project-local install (--project) and --dry-run mode.

Set LLM_BACKEND=codex (or opencode, http) to override auto-detection.


Five Modes

Evolve is the reason this tool exists. The other four modes all exist to serve it.

⭐ Evolve (the core)

/skill-evolver evolve ./my-skill/

Autonomous optimization loop, unattended. Runs the 8-phase loop until convergence or max_iterations. keep / discard / revert decisions are actually executed — not just logged. This is the whole point of Skill Evolver; every other mode below exists as scaffolding for this one.

Eval

/skill-evolver eval ./my-skill/ --gt ./evals.json

One-shot evaluation. Outputs pass rates, per-case breakdown, and optional HTML viewer.

Create

/skill-evolver create

Generate a new skill from requirements. Creates SKILL.md + workspace + initial GT.

Improve

/skill-evolver improve ./my-skill/

Human-directed improvement. You decide what to change; Evolver provides trace-based diagnostic evidence and executes.

Benchmark

/skill-evolver benchmark ./skill-v1/ ./skill-v2/ --gt ./evals.json

A/B comparison of two skill versions. Per-case pass/fail matrix, winner determination.


How It Works

The 8-Phase Loop

Phase 0: Setup    → Create workspace + eval plan + baseline
Phase 1: Review   → Read memory + execution traces (Meta-Harness)
Phase 2: Ideate   → Diagnose failures from traces, propose atomic change
Phase 3: Modify   → Apply ONE change to the skill
Phase 4: Commit   → Git commit (before verification — preserves audit trail)
Phase 5: Verify   → Three-tier evaluation (Quick Gate + Dev Eval + Strict Eval)
Phase 6: Gate     → 5-way AND: quality + trigger + cost + latency + regression
Phase 7: Log      → Write results.tsv + experiments.jsonl + traces
Phase 8: Loop     → Continue, promote layer, or stop

Three-Tier Evaluation (Phase 5 in detail)

Phase 5 is not a single eval pass. It is a three-tier pipeline — cheaper tiers run every iteration, expensive tiers run only when warranted.

Naming map — L1 / L2 / L3 are the same thing as Quick Gate / Dev Eval / Strict Eval. The L* labels come from the script filenames (run_l1_gate.py, run_l2_eval.py) and still appear throughout the codebase and protocol. The Quick Gate / Dev Eval / Strict Eval names are the conceptual names used in docs. Both names refer to the exact same thing — we just use whichever reads more clearly in context.

Label Also called What it checks Speed When it runs Script
L1 Quick Gate YAML frontmatter syntax, SKILL.md body non-empty, directory structure, Creator's quick_validate.py, GT file structure (prompt + assertions present) Seconds Every iteration — the gatekeeper. If it fails, Phase 5 skips directly to discard; Dev Eval is not run. scripts/run_l1_gate.py
L2 Dev Eval All dev-split GT cases graded assertion-by-assertion. 6 program-only types (contains / not_contains / regex / file_exists / json_schema / script_check) are scored by Python code. 2 semantic types (path_hit / fact_coverage) are scored by BinaryLLMJudge — the LLM answers YES/NO only, the program sums up. Result: pass_rate = passed_assertions / total_assertions. Minutes Every iteration (or every N, configured by evolve_plan.md) — the main signal driving the Phase 6 gate decision. scripts/run_l2_eval.py + scripts/evaluators.py
L3 Strict Eval holdout split (overfitting detection — never shown to the proposer, Anti-Goodhart principle) + regression split (ensures no existing capability was broken) + optional blind A/B comparison via Creator's agents/comparator.md. ~10 minutes Conditional — triggered by evolve_plan.md rules: every N iterations / when dev pass_rate exceeds a threshold / before a layer promotion. Not every iteration. No dedicated script — Claude orchestrates run_l2_eval.py with a different split (holdout / regression).

Fail-fast principle: if L1 (Quick Gate) fails, the iteration is a discard and Phase 6 runs immediately — L2 (Dev Eval) never runs for a broken skill. This keeps bad iterations cheap.

Adaptive thresholds: sample sizes, tier frequencies, focus areas, and pass thresholds are all per-skill, not hardcoded. They live in <workspace>/evolve/evolve_plan.md, which Claude generates during Phase 0 by analyzing skill type, GT volume, and assertion distribution. A customer-service QA skill gets different thresholds than a code-generation skill. See references/eval_strategy.md for the templates.

Layered Mutation Strategy

Layer What changes Cost When
Layer 1: Description Trigger keywords Low Default start
Layer 2: Body SKILL.md instructions Medium After Layer 1 plateaus
Layer 3: Scripts Helper code, references High After Layer 2 plateaus

Rule: One layer at a time. No cross-layer changes. Promote only when stuck.

Multi-Gate Decision (AND Logic)

Every iteration must pass ALL five gates to be kept:

Gate What it checks Default threshold
Quality pass_rate improved +2% min delta
Trigger trigger F1 not degraded 5% tolerance
Cost tokens not exploded 20% max increase
Latency duration not exploded 20% max increase
Regression existing cases not broken 5% tolerance

GT (Ground Truth) Format

GT is the fuel of evolution. No GT = no optimization. (If GT is missing, Evolver auto-generates it from SKILL.md.)

{
  "evals": [
    {
      "id": 1,
      "prompt": "User's input to the skill",
      "assertions": [
        {"type": "contains", "value": "expected text", "description": "what this checks"}
      ],
      "split": "dev",
      "metadata": {}
    }
  ]
}

GT can be in any language — Chinese, English, Japanese, etc. Assertion matching is language-agnostic.

8 Assertion Types

Type Who judges How
contains Program Case-insensitive substring match
not_contains Program Must NOT contain text
regex Program Regex pattern match
file_exists Program File exists on disk
json_schema Program Validates against JSON schema
script_check Program External script returns exit code 0
path_hit LLM (YES/NO) "Does this text reference path X?"
fact_coverage LLM (YES/NO per fact) Checks coverage of key fact points

fact_coverage supports two modes:

  • Preset: GT includes "facts": ["fact1", "fact2"] → LLM checks each fact → program counts
  • Online: No facts array → keyword matching (no LLM needed)

Data Splits

Split Purpose When used
dev Optimization target Every iteration
holdout Overfitting detection Before convergence declaration
regression Prevent capability loss Every gate check

Architecture

┌─────────────────────────────────────────────────────────┐
│  Layer 3: Meta-Harness                                   │
│  Trace storage · Active diagnosis · Anti-Goodhart        │
├─────────────────────────────────────────────────────────┤
│  Layer 2: Creator                                        │
│  Binary LLM + program scoring · 8 assertion types        │
│  GT auto-construction · Eval viewer · Trigger eval       │
├─────────────────────────────────────────────────────────┤
│  Layer 1: AutoResearch                                   │
│  Autonomous loop · Multi-gate AND · Structured memory    │
│  Stuck detection · Layer promotion · Git-based rollback  │
└─────────────────────────────────────────────────────────┘

Universal Evaluator System

Not tied to any specific creator. Four built-in evaluators:

Evaluator Use case Command
local Built-in assertion matching — deterministic, no subprocess, no LLM --evaluator local
creator Wraps local + additionally calls Creator's run_eval.py for trigger F1 (default when no --evaluator is passed) --evaluator creator
script Your own eval script --evaluator script --evaluator-script ./my_eval.py
pytest Standard test framework --evaluator pytest --evaluator-test-cmd "pytest tests/"

Note on "lazy imports": import evaluators itself never loads the three non-default backends (evaluator_backends.py stays absent from sys.modules). The factory get_evaluator lazy-imports the specific backend class only when that backend is actually requested. Because the factory's built-in default is creator, the first call to get_evaluator() with no evaluator key will lazy-load CreatorEvaluator (which in turn holds a LocalEvaluator fallback internally). To skip the lazy load entirely, pass --evaluator local on the CLI or set evaluator: local in evolve_plan.md — that path touches only LocalEvaluator and never enters evaluator_backends.py.


Configuration

Gate thresholds are defined per-skill in evolve_plan.md:

min_delta: 0.02
trigger_tolerance: 0.05
max_token_increase: 0.20
max_latency_increase: 0.20
regression_tolerance: 0.05
max_iterations: 20
stuck_threshold: 5

CLI Reference

# Full evolve loop
python3 scripts/evolve_loop.py <skill-path> --gt <evals.json> --run [--max-iterations N]

# Preview the first-iteration mutation without committing (safe dry-run)
python3 scripts/evolve_loop.py <skill-path> --gt <evals.json> --dry-run

# Setup only (no loop)
python3 scripts/evolve_loop.py <skill-path> --gt <evals.json>

# A/B benchmark
python3 scripts/aggregate_results.py --benchmark <skill-a> <skill-b> --gt <evals.json>

# Cleanup
python3 scripts/evolve_loop.py <skill-path> --cleanup
python3 scripts/evolve_loop.py <skill-path> --cleanup-versions

Conversation interface (primary mode — no CLI needed)

The CLI is a fallback for unattended / CI runs. The primary user interface is natural-language requests inside Claude Code (or Codex, OpenCode). The skill's description field triggers on phrases like:

User says What Claude does
"Optimize this skill" or "optimize my skill at X" Enter evolve mode on that path
"帮我优化这个 skill" / "帮我优化 xxx skill" Enter evolve mode (Chinese)
"Use skill-evolver to tune ./foo" Enter evolve mode on that path
"/skill-evolver evolve ./my-skill" or "/evolve" Enter evolve mode explicitly
"Evaluate this skill, don't change anything" Run eval mode only
"Compare ./v1 and ./v2" Run benchmark mode
"Show me what the first iteration would change" Run evolve with --dry-run

Claude then executes the 8-Phase loop directly in the conversation — reading memory, diagnosing failures with Meta-Harness traces, making atomic edits with the Edit tool, committing, gating, logging. End users never see a CLI command; Claude handles all the mechanics internally. See plugin/skills/skill-evolver/SKILL.md How the user invokes it section for the full pattern list.

Auto-persisting per-case traces (in-conversation mode)

Meta-Harness diagnosis requires per-case JSON files at <workspace>/evolve/iteration-E{N}/cases/case_*.json. For in-conversation callers, LocalEvaluator.full_eval accepts an optional cases_dir kwarg that auto-writes the structured traces so the next iteration's Phase 1/2 has evidence to grep/cat without calling persist_cases separately:

from evaluators import LocalEvaluator
from pathlib import Path
r = LocalEvaluator().full_eval(
    skill_path,
    gt_path,
    split='dev',
    cases_dir=str(workspace / 'evolve' / f'iteration-E{N}' / 'cases'),
)
# case_001.json, case_002.json, ... auto-written to cases_dir

Repo Structure

skill-evolver/
├── plugin/skills/skill-evolver/       # The actual skill (source of truth)
│   ├── SKILL.md                       # Main entry point
│   ├── references/                    # Protocol documents
│   ├── agents/                        # Agent protocols
│   └── scripts/                       # 13 single-purpose Python files
├── examples/hello-skill/              # 5-minute demo
├── docs/
│   ├── architecture.md                # Technical architecture (Chinese)
│   ├── architecture.en.md             # Technical architecture (English)
│   └── README_CN.md                   # Chinese README
│   # Note: docs/private/ exists locally (self-iteration reports, presentation
│   #       drafts, WeChat article drafts) but is gitignored and not shipped.
├── scripts/                           # Build, sync, and install scripts
│   ├── install.sh                     # Unified installer (--claude/--codex/--opencode/--all)
│   ├── sync-codex.sh                  # Generates .agents/ from plugin/
│   ├── sync-opencode.sh               # Generates .opencode/ from plugin/
│   └── sync-all.sh                    # Runs both sync scripts
├── README.md
└── LICENSE                            # MIT

scripts/ layout (15 single-purpose files)

After the iter-15 through iter-19 refactor, plugin/skills/skill-evolver/scripts/ is split by concern. Every file owns one thing; from evolve_loop import X still works for back-compat via top-level re-exports and PEP 562 __getattr__.

File Owns
evolve_loop.py Phase functions 0 / 1 / 4 / 5 / 7 / 8 + git helpers + persist_cases / write_cases_to_dir + CLI entry (delegates to orchestrator.main)
orchestrator.py run_evolve_loop (the 8-Phase driver) + main (argparse + dispatch) + _eval_holdout_or_none
gate.py phase_6_gate_decision — pure function, stdlib-only
llm.py LLM_BACKENDS registry + _call_llm / _call_llm_http + phase_2_3_ideate_and_modify + run_l2_eval_via_claude + auto_construct_gt
cleanup.py _iter_num + cleanup_best_versions + cleanup_eval_outputs + _try_launch_eval_viewer
evaluators.py Evaluator ABC + LocalEvaluator + get_evaluator factory (lazy-imports backends) + back-compat re-exports
evaluator_backends.py CreatorEvaluator + ScriptEvaluator + PytestEvaluator (lazy-loaded only when config requests them)
trace_enrichment.py Per-assertion rich field helpers: locate_in_corpus / nearest_match / check_script_rich / check_fact_coverage_rich / check_json_schema_rich
binary_judge.py BinaryLLMJudge — atomic YES/NO LLM calls with judge_with_reasoning rationale capture
common.py Python version gate + Creator path discovery + find_workspace + parse_skill_md
aggregate_results.py parse_results_tsv + run_benchmark A/B + markdown report formatter
run_l1_gate.py L1 quick-gate helper + P0 quality rules (SEC001-006, S003+, TD011, C001, C005) with code-markup stripping
run_l2_eval.py L2 eval library helpers
setup_workspace.py Workspace bootstrap + evolve_plan.md template generation
__init__.py Package marker

See plugin/skills/skill-evolver/SKILL.md Code Organization section for the full import-graph and cycle-breaker design (PEP 562 __getattr__ + lazy factory imports).


Technical Documentation

Document Language Content
Architecture English Full technical design, 4-layer architecture, Creator hard-dependency model, scripts/ layout
Architecture Chinese Same content, Chinese version
README_CN Chinese Full Chinese README

Private notes: self-iteration reports, design-decision comparison, presentation drafts, and WeChat article drafts live in docs/private/ locally. They are .gitignore-excluded and not published to GitHub — available on request for collaborators.


Contributing

  1. Fork the repo
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Run the self-eval to verify nothing breaks:
    python3 -c "
    import sys; sys.path.insert(0, 'plugin/skills/skill-evolver/scripts')
    from evaluators import LocalEvaluator; from pathlib import Path
    e = LocalEvaluator()
    for s in ['dev','holdout','regression']:
        r = e.full_eval(Path('plugin/skills/skill-evolver'), Path('.claude/skills/skill-evolver-workspace/evals/evals.json'), s)
        print(f'{s}: {r[\"pass_rate\"]:.0%}')
    "
  4. Commit your changes
  5. Open a Pull Request

License

MIT


Acknowledgments

  • skill-creator by Anthropic — the evaluation engine. Hard dependency, called by reference, never copied. Creator updates flow into Evolver automatically.
  • AutoResearch — Karpathy-inspired autonomous iteration loop that became Evolver's 8-phase outer loop with real keep/discard/revert (not "edit and forget")
  • Meta-Harness — execution-trace-based active diagnosis pattern from Meta's agent-optimization work. Every iteration must cite specific trace evidence from iteration-E{N}/cases/case_*.json before proposing a change. Auto-persisted by LocalEvaluator.full_eval(..., cases_dir=...).
  • ServiceClaw QA V2 — "LLM classifies, program scores" evaluation philosophy
  • Built for the Claude Code ecosystem

About

Autonomous skill evolution engine — fuses AutoResearch's self-driving loop, skill-creator's GT-based evaluation, and Meta-Harness's trace diagnosis to automatically optimize AI agent skills through gated iteration.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages