eval-runner — Claude Code skill: what it does, how to install
Executes evaluation scenarios to benchmark agent performance and record run metrics.
npx skills add haabe/mycelium --skill eval-runner -a claude-codeWhat eval-runner does
The skill manages automated evaluation workflows using YAML scenarios located in .claude/evals/scenarios/. It parses task prompts, runs setup commands, executes the assignment using a reflexion loop that consults past corrections, and verifies every success criterion. Execution outputs land in .claude/evals/results/, while cumulative records go to .claude/evals/pass-history.json.
Included commands support isolated execution across multiple tests via git stash, dataset filtering by optimization or holdout splits, and automated reporting. A specialized mine mode parses .claude/state/change-log.jsonl to detect friction patterns — like repeated edits to identical files or missing tests — proposing fresh YAML scenario templates for review.
This workflow expects the Mycelium framework environment: running it standalone skips canvas state handling, theory gates, and harness checks.
What it helps with
- run agent benchmark scenarios defined in YAML configs
- generate summary pass-rate reports across scenario categories
- extract recurring failure patterns from session logs into new evals
- prune saturated, broken, or stale test cases based on history
Example prompts for the agent
- Run the discovery/auth-flow scenario with eval-runner
- Generate an evaluation summary table using eval-runner report
- Mine recent audit logs for new eval proposals with eval-runner mine
How to install eval-runner
1Skills CLI (Vercel)
npx skills add haabe/mycelium --skill eval-runner -a claude-code2Manually: put the files in place
~/.claude/skills/eval-runner/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/eval-runner/
1Skills CLI (Vercel)
npx skills add haabe/mycelium --skill eval-runner -a codex2Manually: put the files in place
.agents/skills/eval-runner/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add haabe/mycelium --skill eval-runner -a cursor2Manually: put the files in place
.cursor/skills/eval-runner/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install haabe/mycelium eval-runner2Manually: put the files in place
.github/skills/eval-runner/SKILL.md1Skills CLI (Vercel)
npx skills add haabe/mycelium --skill eval-runner -a gemini-cli2Platform CLI
gemini skills install https://github.com/haabe/mycelium --path plugins/mycelium/skills/eval-runnerManually: put the files in place
.devin/skills/eval-runner/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add haabe/mycelium --skill eval-runner -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about eval-runner
How to install eval-runner in Claude Code?
Run npx skills add haabe/mycelium --skill eval-runner -a claude-code in your terminal.
What does eval-runner do?
It benchmarks agent behavior against defined YAML tasks, checks success criteria via a reflexion workflow, and writes structured JSON reports.
Does eval-runner require the Mycelium framework?
Yes, standalone runs will bypass canvas states, theory gates, and harness behavior expected by the skill instructions.
Source text
SKILL.md · MIT
--- name: eval-runner description: "Run eval scenarios to benchmark Mycelium effectiveness. Execute tasks using reflexion loop, validate against success criteria, record metrics." metadata: instruction_budget: "41" framework_dependency: "mycelium" framework_dependency_note: "This skill is designed to run within the Mycelium framework (https://github.com/haabe/mycelium). Standalone use will skip the canvas state, theory gates, and harness behavior the skill assumes. Install: /plugin install mycelium@haabe-mycelium." --- # Eval Runner Benchmark the agent's performance against defined scenarios. Adapted from n-trax eval system. ## Commands ### `run <category/name>` 1. Read YAML from `.claude/evals/scenarios/<category>/<name>.yml` 2. Parse fields (name, category, task_prompt, success_criteria, budget) 3. Execute setup steps if defined 4. Record start time 5. Execute task via reflexion workflow (read corrections first) 6. Record end time and iteration count 7. Validate ALL success criteria 8. Write result JSON to `.claude/evals/results/<timestamp>-<name>.json` 9. Report summary ### `run-all [category]` 1. Glob `.claude/evals/scenarios/**/*.yml` 2. Skip scenarios with `status: retired` 3. For each: run in isolation (git stash), record result, restore 4. Update `.claude/evals/pass-history.json` with each result 5. Aggregate and report ### `run-split <optimization|holdout>` 1. Glob `.claude/evals/scenarios/**/*.yml` 2. Read each YAML, filter by `split` field matching the requested set 3. Skip scenarios with `status: retired` 4. For each matching scenario: run in isolation, record result, restore 5. Update `.claude/evals/pass-history.json` with each result 6. Aggregate and report (label output clearly as "Optimization Set" or "Holdout Set") ### `report` 1. Read all results from `.claude/evals/results/` 2. Generate summary table: ``` | Category | Pass Rate | Avg Iterations | Avg Time | Notes | |-------------|-----------|----------------|----------|-------| | discovery | ... | ... | ... | | | delivery | ... | ... | ... | | | integration | ... | ... | ... | | | **Overall** | ... | ... | ... | | ``` 3. List failure patterns and recommendations ### `prune` 1. Read `.claude/evals/pass-history.json` 2. Flag evals where `last_5` is all-pass (`saturated`) or all-fail (`broken`) 3. Flag evals with no runs in 30+ days (`stale`) 4. For saturated evals, suggest: retire or increase difficulty 5. For broken evals, suggest: fix criteria or retire 6. Present recommendations — do NOT auto-retire 7. On user confirmation: set `status: retired` in scenario YAML, update pass-history.json, log in .claude/harness/decision-log.md ### `mine` Analyze audit logs to propose new eval scenarios from observed failure patterns. 1. Read `.claude/state/change-log.jsonl` (last 100 entries) 2. Read `.claude/state/diamond-state-audit.jsonl` (all entries) 3. Group change-log entries by `session_id`, identify: a. **Correction clusters**: 3+ edits to same file in one session (agent struggled) b. **Skill friction**: edits to `.claude/skills/*/SKILL.md` during a session (instructions unclear) c. **Missing test coverage**: 5+ files changed with no test file edits 4. Count diamond bypass entries from audit log 5. Cross-reference with existing scenarios in pass-history.json to avoid duplicates 6. For each pattern, output a proposed eval scenario as YAML template 7. Tag proposals with `source: trace-mining` and originating `session_id` 8. Do NOT auto-create files — present for human review See `.claude/evals/schema.md` §Trace Mining Heuristics for pattern-to-eval mappings. ## Result Format See `.claude/evals/schema.md` for YAML scenario and JSON result formats. ## Pass History After writing each result JSON (step 8 of `run`), also update `.claude/evals/pass-history.json`: - Increment `runs` and `passes` (if passed) for the eval - Append `true`/`false` to `last_5` (trim to keep only last 5) - Update `last_run` timestamp ## Creating Scenarios Place YAML files in `.claude/evals/scenarios/<category>/`. Define task_prompt, success_criteria, and budget. Set `split`, `status`, and `source` fields per schema.
© haabe · MIT · haabe/mycelium