agent-skills-eval
- title
- agent-skills-eval
- type
- toolbox
- summary
- Test runner that measures a skill's lift by grading with-skill and without-skill runs side by side
- tags
- typescript, ai, testing, skill-bundle, watchlist
- language
- TypeScript
- license
- MIT
- created
- 2026-05-10
- updated
- 2026-05-10
A test runner for Agent Skills β the open standard from Anthropic for giving agents domain knowledge. The premise: writing a SKILL.md is easy; proving it actually makes the model better at the task is the hard part. agent-skills-eval runs each eval twice β once with_skill loaded into context, once without_skill (baseline) β has a judge model grade both outputs against the same assertions, and emits a side-by-side report.
This is the missing measurement piece for the skills ecosystem covered in mcp-vs-skills, library-skills, cli-anything, impeccable, agent-skill-linter. The other tools in that cluster handle authoring, distribution, validation, and bundling. agent-skills-eval handles the empirical question: did this skill change behavior measurably?
Listed on the watchlist β single author, four days old at ingest, 257 stars. Solid spec compliance and clean separation from any specific runtime suggest this lasts, but the agentskills.io ecosystem is itself young and the right pattern for skill evaluation hasn't been proven by reps yet.
How it works
βββββββββββββββββββββββββββββββ
β same prompt β
βββββββββββββββββ¬ββββββββββββββ
β
βββββββββββββββββ΄ββββββββββββββ
βΌ βΌ
ββββββββββββββββ ββββββββββββββββ
β with_skill β βwithout_skill β
β SKILL.md in β β baseline, β
β context β β no skill β
ββββββββ¬ββββββββ ββββββββ¬ββββββββ
β β
βΌ βΌ
target model target model
β β
βΌ βΌ
output output
β β
ββββββββββββ¬βββββββββββββββββββ
βΌ
βββββββββββββββ
β judge β scores both against
β model β the same assertions
ββββββββ¬βββββββ
βΌ
pass / fail per side
The --baseline flag is what enables the comparison. Without it, you only get the with_skill run.
Quickstart
npx agent-skills-eval ./skills \
--target gpt-4o-mini \
--judge gpt-4o-mini \
--baseline \
--strict
Output workspace:
agent-skills-workspace/
βββ iteration-1/
βββ meta.json # run metadata
βββ benchmark.json # rolled-up pass/fail per skill
βββ eval-basic/
β βββ with_skill/ # output, timing, judge grading
β βββ without_skill/ # β same, with the skill stripped
βββ report/
βββ index.html # the visual report
Skill layout
Standard agentskills.io shape. The minimum is SKILL.md plus evals/evals.json:
{
"skill_name": "my-skill",
"evals": [
{
"id": "basic",
"prompt": "Use the attached data to summarize revenue.",
"files": ["evals/files/input.csv"],
"expected_output": "The response identifies the highest revenue month.",
"assertions": ["The output identifies the highest revenue month."]
}
]
}
If you skip assertions but provide expected_output, the SDK auto-promotes the expected output into a judge assertion β a minimal eval still produces meaningful pass/fail grading.
Provider model
OpenAI-compatible by default β works with OpenAI, Together, Groq, Anthropic via OpenAI-compat layers, local Llama servers. Bring any backend by implementing the Provider interface (five fields, one method) β useful for Ollama / vLLM / llama.cpp, internal APIs, mock providers in unit tests, routing layers.
SDK
For CI pipelines and custom dashboards:
import { OpenAICompatibleProvider, evaluateSkills } from "agent-skills-eval";
const provider = new OpenAICompatibleProvider({
baseUrl: "https://api.openai.com/v1",
apiKey: process.env.OPENAI_API_KEY!,
model: "gpt-4o-mini",
providerName: "openai",
});
await evaluateSkills({
root: "./skills",
workspace: "./agent-skills-workspace",
baseline: true,
concurrency: 4,
workspaceLayout: "iteration",
strict: true,
target: { model: provider.model, provider },
judge: { model: provider.model, provider },
onEvent: consoleReporter(),
});
JSONL streaming via jsonlReporter({ file: "./events.jsonl" }).
Spec compliance
Implements the agentskills.io spec end to end:
SKILL.mdYAML frontmatter β requirednameanddescription, optionallicense,compatibility,metadata,allowed-tools- Strict validation: name length, lowercase-hyphenated format, parent-directory match, description length
- Optional
scripts/,references/,assets/directories evals/evals.jsonschema:skill_name,evals[].id,prompt,expected_output,files,assertions- Official artifact layout:
iteration-N/<eval>/<mode>/outputs,timing.json,grading.json,benchmark.json with_skillvswithout_skillbaseline comparison
Beyond the spec it adds per-eval defaults, model params, tool definitions, deterministic tool_assertions, and a flat workspaceLayout for multi-skill dashboards.
What sets it apart
The with_skill / without_skill split is the load-bearing methodology choice. Most skill / prompt-eval frameworks measure absolute pass rate; this one measures lift attributable to the skill. That makes the framework usable as a regression check during skill iteration: did this rewrite of SKILL.md change anything, or am I imagining the improvement?
The judge-model approach is conventional but the framework is honest about it β the static HTML report shows the judge's reasoning per assertion, not just the score, so debugging a flaky judge is a finite problem.
Limitations
- Judge-model approach inherits the usual flakiness; deterministic
tool_assertionsare the escape valve when behavior is verifiable. - TypeScript / Node only; Python skill projects need a Node sidecar to run evals.
- Costs scale at 2Γ (with + without each iteration); for a 50-eval skill suite, every run is 100 model calls plus 100 judge calls.
- Judge selection is a knob with real consequences; the framework doesn't guide choice β that's left to you.
Watchlist criteria
Filed under watchlist β single author, 4 days old at ingest. Re-check 2026-08-10 for: contributor count, judge-flakiness mitigation patterns, integration with the rest of the agentskills.io ecosystem, whether the agentskills.io spec stays stable enough for tools at this layer.
Cross-references
- mcp-vs-skills (skills as knowledge, MCP as capability)
- library-skills (distributed-registry distribution model)
- cli-anything (skills generated alongside CLIs)
- impeccable, agent-skill-linter (skill validation, sibling layer)
- flue (agent harness framework that consumes skills)
- features-to-steal-from-npmx (registry-design context)