by adewale
Agent Skill evaluation harness for paired variants, trace artifacts, and runner adapters
# Add to your Claude Code skills
git clone https://github.com/adewale/skill-eval-harnessGuides for using ai agents skills like skill-eval-harness.
Last scanned: 6/26/2026
{
"issues": [],
"status": "PASSED",
"scannedAt": "2026-06-26T07:53:59.373Z",
"npmAuditRan": true,
"pipAuditRan": true,
"promptInjectionRan": true
}skill-eval-harness is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by adewale. Agent Skill evaluation harness for paired variants, trace artifacts, and runner adapters. It has 54 GitHub stars.
Yes. skill-eval-harness passed SkillsLLM's automated security scan — a dependency vulnerability audit plus prompt-injection heuristics — with no high-severity issues. You can read the full report in the Security Report section on this page.
Clone the repository with "git clone https://github.com/adewale/skill-eval-harness" and add it to your Claude Code skills directory (see the Installation section above).
skill-eval-harness is primarily written in Python. It is open-source under adewale on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh skill-eval-harness against similar tools.
No comments yet. Be the first to share your thoughts!
Skill Eval Harness is a Python CLI that measures the causal lift of an Agent Skill: it runs the same case with and without the skill, then reports what changed, what passed, and whether the eval leaked its own answer. It reads evals/shared-benchmark.json, emits answer-key-safe task rows, grades files under eval-runs/ locally and deterministically — no model call in the grade path — and writes benchmark reports you can diff across variants.
General eval frameworks (openai/evals, vitest-evals, viteval) score one output against a rubric. This one measures the difference the skill makes, and spends its surface area on keeping that difference honest: paired with/without comparison, tune/holdout/holdback split discipline, leakage lint, materialized ablations with provenance gates, and per-model lift. None of those frameworks have them, and they are what make a reported number trustworthy rather than merely green.
| Question | Command/report to use |
|---|---|
| Does this skill improve outputs compared with no skill at all? | prepare paired with_skill / without_skill rows, then benchmark paired lift and significance. |
| Which prompts improved, regressed, saturated, or showed no lift? | benchmark case_flags, render-viewer, and error-analysis. |
| Is the skill worth its extra tokens or dollars? | profile-skill, token-overhead, cost-summary, and lift-per-dollar summaries. |
| Did my latest skill edit introduce a regression? | Re-run the same manifest, inspect ablation_regressions, trend, and render-viewer --previous-workspace. |
| Which instruction, checklist, reference, script, or asset is load-bearing? | Materialized ablation:<id> arms plus declared expected_regressions. |
| Does the agent discover/load the skill when it should, and stay quiet when it should not? | skill-trigger-matrix or skill-pi-trigger-eval, split by should-fire / should-not-fire cases. |
| Which model tier should this skill target? | prepare --models, then benchmark by_model and model_analysis. |
| Is this eval safe to spend model budget on? | validate --strict-leakage --leakage-min-chars 1 --check-ablations and audit-manifest --fail-on-blockers. |
| Can I trust this LLM judge or rubric result? | judge, compare-judges, judge-robustness, and judge-alignment. |
| Could the eval be contaminated by leaked answer keys or memorized canaries? | Prompt leakage lint plus contamination over generated outputs. |
| Can this become a CI gate? | suite-run, `report --format junit |
evals/shared-benchmark.json: prompt, split, fixture files, variants, assertions, and ablations.skill-benchmark prepare; generation rows omit expected_behavior and judge rubrics unless you explicitly request them.script oracles.with_skill vs without_skill (plus optional old_skill and ablation:<id>), with paired significance and per-model lift.tune, holdout, and holdback stay separate, so you can't tune on your test set.skill-trigger-matrix reports autonomous trigger rates per (agent × model), split by should-fire / should-not-fire.cost-summary, token-overhead).judge/rubric assertions can be exported or run through native Claude/Codex backends (--judge-backend) or a user-supplied --judge-cmd; the harness does not choose a model for you.docs/commands.md)Requires Python 3.10+ and uv. Install from PyPI:
uv tool install skill-eval-harnessFor exact reproducibility, pin the current release:
uv tool install skill-eval-harness==0.5.1.
Run these from a skill repo that has evals/shared-benchmark.json:
# 1. Check manifest shape and fixture paths.
skill-benchmark validate evals/shared-benchmark.json
# 2. Emit answer-key-safe task rows for a runner.
skill-benchmark prepare evals/shared-benchmark.json \
--split tune \
--runs-per-variant 3 \
--out /tmp/tasks.jsonl
# 3. Run each task with your agent runner and save:
# eval-runs/latest/<case_id>/<variant>/run-<n>/output.md
# eval-runs/latest/<case_id>/<variant>/run-<n>/metadata.json
# 4. Grade saved outputs. Add --allow-scripts only if you trust repo-owned oracles.
skill-benchmark benchmark evals/shared-benchmark.json \
--runs eval-runs/latest \
--split tune \
--allow-scripts \
--out benchmark.json
# 5. Open a static review page.
skill-benchmark render-viewer \
--benchmark benchmark.json \
--runs eval-runs/latest \
--out review.html
Expected landmarks:
validate -> OK: <skill-name> — <case-count> cases, <ablation-count> ablations
prepare -> /tmp/tasks.jsonl, one JSON object per case/variant/run
benchmark -> benchmark.json with summary, results, and case_flags
viewer -> review.html with assertion evidence and output previews
benchmark.json records one row per case/variant/run, plus aggregate pass rates, timing/token summaries, and flags for saturated, no-lift, flaky, or with-skill-failed cases. It also carries a reliability block — unbiased pass@k and pass^k per (case, variant) from the repeated runs — beside the paired lift's sign-flip significance.
uv tool install skill-eval-harness
skill-benchmark --help
skill-pi-trigger-eval --help
# Pin a release exactly:
uv tool install skill-eval-harness==0.5.1
# One-shot without installing globally:
uvx --from skill-eval-harness skill-benchmark --help
Use this for development snapshots before the next PyPI release:
uv tool install git+https://github.com/adewale/skill-eval-harness.git@main
uvx --from git+https://github.com/adewale/skill-eval-harness.git@main skill-benchmark --help
The installed commands are:
| Command | What it does |
|---|---|
skill-benchmark |
Validate manifests, prepare tasks, grade outputs, compare variants, run judges, and import/export runner formats. |
skill-pi-trigger-eval |
Runs Pi without forced --skill and checks whether the model loads the skill from stream events. |
skill-trigger-matrix |
Measures autonomous skill activation per (agent, model) cell — Claude Code subagents on haiku/sonnet/opus by default, Pi and an offline stub included, other agents via an adapter subclass. |
git clone https://github.com/adewale/skill-eval-harness.git
cd skill-eval-harness
uv tool install --editable .
skill-benchmark --help
docs/README.md groups these by kind (user journeys, concepts, specs, audits) and holds the convention for adding a new user-journey walkthrough.
| File | Use it for |
|---|---|
README.md |
Manifest shape, run layout, and the command index. |
docs/commands.md |
Full per-command reference: flags, examples, and output shapes for every subcommand. |
CHANGELOG.md |
Release history and unreleased repo-surface changes. |
CONTRIBUTING.md |
Local setup, validation commands, and eval-safety rules. |
LESSONS_LEARNED.md |
Design lessons from the multi-skill saturation work and the roadmap/cost build-out. |
docs/architecture.md |
How the pipeline fits together: the stages, the runner boundary, the model/variant/run fan-out, and the invariants that keep grading honest. |
docs/abstractions.md |
What each core object is: manifest, prepared task, run-output contract, assertion result, ResultSet. |
docs/authoring-evals.md |
Opinionated workflow/quickstart for writing a new eval suite, including severity and graded assertions. |
docs/tuning-skill-activation.md |
The activation-tuning loop: trigger cases in both polarities, the (agent, model) trigger-rate matrix, how to read under/over-trigger, and the adapter seam for adding agents. |
docs/is-my-skill-worth-its-tokens.md |
Keep/trim/cut walkthrough: static footprint (profile-skill) vs. runtime lift-per-token and lift-per-dollar (token-overhead, cost-summary). |
docs/gating-ci-on-evals.md |
The CI recipe: `report --format junit |
docs/did-my-skill-edit-regress.md |
The edit → re-run → diff loop: the within-run ablation_regressions block (asse |