skill-evolution

July 6, 2026 · View on GitHub

A Claude Code plugin that adds measured, GEPA-style evolution of learned skills — the companion half to UniM0cha/claude-self-improving-skills.

That plugin acquires and maintains learned skills (distills them from complex work, curates stale ones). What it does not do is record whether a skill actually worked or use that signal to improve the skill. This plugin adds exactly that missing axis — the reward signal at the heart of Nous Research's Hermes Agent self-evolution (DSPy + GEPA).

What it does

  1. Outcome telemetry — a Stop hook records, per learned skill used in a session, whether the work that followed looked like a success or failure (a following is_error tool result or a user correction ⇒ failure). Stored in ~/.claude/self-improve/skill_outcomes.json. It is a pure recorder: emits no Stop decision, so it never interferes with the sibling plugin's distillation nudge, and fails safe to a no-op on any error.

  2. Reflective optimization/optimize-skill [name] runs a GEPA-style loop: gather the failure traces for a skill (the why) → generate 2–3 candidate rewrites → score each against a rubric built from the failures (LLM-as-judge) → pick the Pareto-best (quality first, size as tiebreak) → present a diff for human approval before applying. The apply passes through the sibling plugin's backup/validate/rollback hooks automatically.

  3. /evolution-status — ranks skills by use × failure_rate so you can see which skill is worth evolving.

Install

/plugin marketplace add okdk7788/skill-evolution
/plugin install skill-evolution@skill-evolution

Headless / auto-mode:

claude plugin marketplace add okdk7788/skill-evolution
claude plugin install skill-evolution@skill-evolution

Pairs best with self-improving-skills installed alongside it (it reads that plugin's skill_usage.json for the usage side of the ranking), but the outcome telemetry and /optimize-skill work standalone too.

Commands

  • /evolution-status — outcome stats + optimization-candidate ranking
  • /optimize-skill [name] — evolve a skill (auto-picks the top candidate if no name)

Design

  • Never auto-commits. Mutation/evaluation/selection are automatic; the actual file rewrite is human-gated (Hermes' "never direct commit, always review").
  • No data ⇒ no evolution. Without outcome traces, /optimize-skill stops rather than guessing.
  • Coarse but honest attribution: a "did the segment end clean?" signal, not a proof of causation. Failure signals are only counted after the skill's use.
  • Default engine is a dependency-free "Claude-as-optimizer" reflective loop. A quantitative DSPy + GEPA engine (intertwine/dspy-agent-skills) can be wired in as an opt-in (needs API keys + eval sets).

Layout

.claude-plugin/marketplace.json
plugins/skill-evolution/
  .claude-plugin/plugin.json
  hooks/       hooks.json + capture-outcome.sh (Stop)
  scripts/     outcome_store.py · capture_outcome.py · evolution_report.py
  commands/    optimize-skill.md · evolution-status.md
  tests/       test_skill_evolution.py  (15 cases, run: python3 -m pytest -q)

License

MIT