
bmad-eval-runner
Run a skill's evals and report results. Use when the user wants to evaluate a skill, run evals, benchmark a skill, validate triggers, optimize a description, or grade skill outputs.
- Installs
- 82
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/bmad-code-org/bmad-builder --skill bmad-eval-runner- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads bmad-eval-runner automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
Skill Eval Runner
You run a skill's evals and report what they say. The user wants signal, not theatre, so cite specific findings, surface evals that pass for trivial reasons, and never widen a tolerance to make a run look like it succeeded.
The runner is platform-agnostic. Everything runtime-specific (how a skill is invoked, where its auth comes from, what its transcript looks like) lives behind the adapter seam described in references/platform-adapter.md. No model name is hardcoded anywhere in this skill.
The four modes
Each mode answers a different question about a skill. Pick the one that matches what the user is asking, or run several.
| Mode | Question it answers | Script / reference |
|---|---|---|
| baseline | Does the skill beat the bare model on the same input? | references/eval-format.md, scripts/run_evals.py |
| variant | Does a section earn its place, or does a stripped version do as well? | references/eval-format.md, scripts/run_evals.py |
| quality | Does the output meet the named rubric? | references/grader.md, references/eval-format.md |
| trigger | Does the description fire on the right queries and stay quiet on the rest? | references/platform-adapter.md, scripts/run_triggers.py |
Baseline runs every case twice — once with the skill staged into the clean working directory and once with nothing staged — so the bare model is measured as the long-term floor under identical conditions. Variant runs the full skill against a stripped smallest-version of itself to settle whether a section is doing real work. Quality grades one config's output against a rubric with the read-only grader. Trigger measures real firing through the adapter and can optimize the description across rounds; the optimization loop lives in references/description-optimization.md.
A case is input + rubric + optional state_prefix + optional fixture files. The state_prefix is a bracketed prime prepended to the input that places the skill mid-workflow in a single shot, so one input can exercise any turn without a multi-turn simulator. The full case format and the strong-versus-weak expectation taxonomy are in references/eval-format.md.
Args
- Positional: a path to the skill being evaluated (directory containing
SKILL.md). --evals <path>: explicit path to the cases file. If omitted, discover.--mode baseline|variant|quality|trigger: which mode to run. May be repeated.--variant-path <path>: for variant mode, the stripped or prior-version skill to compare against.--project-root <path>: root of the project the skill belongs to. Default: walk up from the skill path looking for_bmad/or.git/.--output-dir <path>: where run folders are written. Default:{bmad_builder_reports}/eval-runs/if configured, else~/bmad-evals/.--runs <n>: repeats per case for the variance benchmark. Default: 1 for a single check, higher when the user wants a stable mean.--headless/-H: non-interactive; emit final JSON only.
These map directly onto the script CLIs below; anything not listed there (case subsets, timeouts, workers) is in the script docstrings.
On activation
-
Resolve config the way
bmad-workflow-builderdoes ({project-root}/_bmad/config.yamlthenconfig.user.yaml, falling back tobmb/config.yaml). Resolve{user_name},{communication_language},{bmad_builder_reports}and apply them through the session. -
If
--headlesswas passed, set{headless_mode}=true, skip every confirmation below, pick the safest defaults, and proceed. -
Resume check: glob the output dir for an in-progress run's
.memlog.md. If one exists and matches this skill, read it once to rebuild state, then continue append-only. Capture decisions and direction changes into the run's memlog throughscripts/memlog.pyas they land. -
Locate the skill and verify
<skill-path>/SKILL.mdexists. Halt with a clear error if it does not. -
Resolve the adapter config per the discovery rules in
references/platform-adapter.md(explicit--adapter,BMAD_EVAL_ADAPTER,adapter.jsonbeside the cases file). When nothing is configured and the current runtime is Claude Code, use{skill-root}/assets/adapter-claude-code.json. -
Discover the cases file. Look at
--evalsfirst, then<skill-path>/evals/, then<skill-path>/../../evals/<skill-name>/, then<project-root>/evals/<skill-name>/, then anywhere under<project-root>/evals/. Take the first match. If nothing is found, halt and say so; the runner does not invent cases. -
Confirm the run summary (skill, cases found, modes, output dir) unless headless, then execute.
Run execution
Each case runs in a clean working directory with the skill under test staged into it and an environment built from scratch, so the host shell config, prior runs, and ancestor instruction files do not bias the result. The isolation contract lives in references/platform-adapter.md; there is no container, no terminal emulation, and no credential staging.
For baseline, variant, and quality modes:
uv run {skill-root}/scripts/run_evals.py \
--cases <cases-file> --skill-path <skill> --output-dir <dir> \
--mode quality|baseline|variant [--variant-path <skill>] \
[--adapter <adapter.json>] [--runs N]
The script stages the skill and any case fixtures, applies any state_prefix to the input, runs each config (baseline = skill staged AND bare; variant = skill AND --variant-path), and writes <run-dir>/<config>/<case-id>/. It captures timing and token counts the moment each invocation completes and writes them to timing.json immediately, so a later crash never loses the measurement.
For trigger mode:
uv run {skill-root}/scripts/run_triggers.py \
--skill-path <skill> --queries <queries-file> --output-dir <dir> \
[--adapter <adapter.json>] [--runs-per-query N]
It stages a synthetic skill where the runtime discovers skills, sends each query through the adapter, and detects the skill-load tool call. Each query runs several times for stability. When the user wants to optimize the description rather than just measure it, follow references/description-optimization.md.
For quality mode, spawn the grader described in references/grader.md per case, passing the case's rubric, transcript path, artifacts dir (the case's cwd/), and a grading_path of <case-folder>/grading.json. The grader writes that file, gives no partial credit, and flags weak or non-discriminating assertions; relay that feedback. If a grader subagent errors, mark that case grading_error — never substitute a default verdict.
When --runs is greater than one, call uv run {skill-root}/scripts/aggregate_benchmark.py --baseline <run-dir>/<config-a> --variant <run-dir>/<config-b> to produce the mean, sample standard deviation, min, max, and the delta between configs (--runs <run-dir>/<config> for a single config's spread).
When a run fails or comes back weak and the user wants the skill improved from the results, follow references/self-improvement.md.
Artifacts
Every run writes a dated run folder under the output dir, and those artifacts are permanent. Each case folder holds its prompt, transcript, the cwd/ with any files the skill wrote, timing.json, and grading.json when quality mode ran. Never delete, overwrite, or rotate a run folder; disk usage is the user's call. The run's .memlog.md records the decisions and deltas so a resumed or audited run reads back cleanly.
Tell the user where the run folder is when you finish.
Outcomes
- The run reflects the skill's behavior in a clean working directory, not the behavior of the host shell with its memories and configs.
- Timing and token counts land on disk the moment they are measured.
- Failures cite specific expectations with evidence, and a pass that looks superficial is flagged rather than papered over.
- A baseline run that the skill no longer wins points to retiring the skill, not patching it.
FAQ
What does the bmad-eval-runner skill do?
Run a skill's evals and report results. Use when the user wants to evaluate a skill, run evals, benchmark a skill, validate triggers, optimize a description, or grade skill outputs.
How do I install bmad-eval-runner?
Run npx skills add https://github.com/bmad-code-org/bmad-builder --skill bmad-eval-runner in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/bmad-eval-runner/ (personal) or .claude/skills/bmad-eval-runner/ (project).
Which AI agents can use bmad-eval-runner?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is bmad-eval-runner safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains bmad-eval-runner?
It is published by bmad-code-org in bmad-code-org/bmad-builder. It has 82 recorded installs.
More from bmad-code-org/bmad-builder
bmad-agent-builder
bmad-code-org/bmad-builder
Open the skill to read its SKILL.md instructions.
bmad-workflow-builder
bmad-code-org/bmad-builder
Open the skill to read its SKILL.md instructions.
bmad-module-builder
bmad-code-org/bmad-builder
Plans, creates, and validates BMad modules. Use when the user requests to 'ideate module', 'plan a module', 'create module', 'build a module', or 'validate module'.
bmad-bmb-setup
bmad-code-org/bmad-builder
Open the skill to read its SKILL.md instructions.
bmad-excalidraw
bmad-code-org/bmad-builder
Open the skill to read its SKILL.md instructions.
bmad-agent-dream-weaver
bmad-code-org/bmad-builder
Open the skill to read its SKILL.md instructions.
Popular ai & agents skills
google-agents-cli-publish
google/agents-cli
This skill should be used when the user wants to "publish an agent", "publish my ADK agent", "register an agent with Gemini", "publish to Gemini" (formerly Gemini Enterprise), or needs guidance on the agents-cli publish gemini command. Also use when the user wants to "manage agents in Agent Registry", "list/update/delete registered agents", or "register an MCP server". Covers ADK vs A2A registration modes, programmatic and interactive usage, flag reference, auto-detection from deployment metadata, Agent Registry fleet management, and troubleshooting. Part of the agents-cli skills suite. Do NOT use for deployment (use google-agents-cli-deploy).
google-agents-cli-eval
google/agents-cli
This skill should be used when the user wants to "run an evaluation", "evaluate my agent", "evaluate my ADK agent", "write an eval dataset", "analyze eval failures", "compare eval results", "optimize agent", or needs guidance on the Gemini platform eval methodology and the Quality Flywheel. Covers eval metrics, dataset schema, LLM-as-judge scoring, and common failure causes. Applies to any agents-cli project, whatever framework the agent is written in. Do NOT use for agent API code patterns (ADK: use google-agents-cli-adk-code), deployment (use google-agents-cli-deploy), or project scaffolding (use google-agents-cli-scaffold).
skill-creator
anthropics/skills
Create new skills, modify and improve existing skills, and measure skill performance. Use when users want to create a skill from scratch, edit, or optimize an existing skill, run evals to test a skill, benchmark skill performance with variance analysis, or optimize a skill's description for better triggering accuracy.
codex-pet
prime-skills/runcomfy-agent-skills
Codex Pet generator on RunComfy. Build a Codex-compatible Codex Pet spritesheet.webp + pet.json from a single reference image, drop it into ${CODEXHOME:-$HOME/.codex}/pets/ / and Codex picks it up as a custom Codex Pet next to the 8 built-ins. This skill produces the exact Codex Pet atlas Codex expects (1536x1872 PNG/WebP, 8 cols x 9 rows, 192x208 cells, 9 animation states — idle, running-right, running-left, waving, jumping, failed, waiting, running, review). Calls OpenAI GPT Image 2 edit ONCE via the local RunComfy CLI as runcomfy run openai/gpt-image-2/edit to produce a canonical Codex Pet pose, then assembles all 9 animation rows programmatically with ImageMagick micro-transforms — no Codex Pro, no $imagegen, no OPENAIAPIKEY required, only RUNCOMFYTOKEN. Triggers on "codex pet", "create codex pet", "make codex pet", "hatch codex pet", "/hatch image", "desktop pet codex", "codex pets", "spritesheet.webp", or any explicit ask to build a custom pet for OpenAI Codex.
full-output-enforcement
leonxlnx/taste-skill
Overrides default LLM truncation behavior. Enforces complete code generation, bans placeholder patterns, and handles token-limit splits cleanly. Apply to any task requiring exhaustive, unabridged output.
executing-plans
obra/superpowers
Use when executing an implementation plan in the current session as the implementer yourself — your human partner chose inline execution, or no subagent tool is available