Agent Academy

Agent Academy is a free, source-linked library of skills, prompts, MCP servers and bot templates, organised into courses by profession, for people who hand real work to AI agents: 1,467 live resources, each with its original link, license and safety tags.

Skill

evaluation-methodology

PluginEval quality methodology, covering dimensions, rubrics, and scoring formulas. Use this skill when understanding how plugin quality is measured, when interpreting a low score on a specific dimension, when deciding how to improve a skill's triggering accuracy or orchestration fitness, when setting score thresholds for your marketplace, or when explaining quality badges to external partners like Neon.

No credentialsDoes not send

https://github.com/wshobson/agents/blob/main/plugins/plugin-eval/skills/evaluation-methodology/SKILL.md

Install
npx skills add wshobson/agents --skill evaluation-methodology

Original content

Full originalMITSource

Republished in full under its license, with attribution. The source is authoritative.

name: evaluation-methodology
description: "PluginEval quality methodology, covering dimensions, rubrics, and scoring formulas. Use this skill when understanding how plugin quality is measured, when interpreting a low score on a specific dimension, when deciding how to improve a skill's triggering accuracy or orchestration fitness, when setting score thresholds for your marketplace, or when explaining quality badges to external partners like Neon."

Evaluation methodology

PluginEval scores a skill or a plugin from 0 to 100 by combining up to three layers. The static

layer is a lint. It's fast and deterministic, and it's useful for checking structure. The LLM

judge and Monte Carlo layers are experimental, not validated against human labels, so treat their

numbers as rough signals. For the trace-based eval program, see evals/README.md at the

repository root.

The judge rubric anchors are in [references/rubrics.md](references/rubrics.md). Fixes for each

anti-pattern and tips for each dimension are in

[references/improving-scores.md](references/improving-scores.md).

Evaluation depths

DepthLayersConfidence label
quickstaticEstimated
standard (default for score)static and judgeAssessed
deep (used by certify)static, judge, and Monte Carlo with 50 runsCertified
thoroughstatic, judge, and Monte Carlo with 100 runsCertified+

The label names the depth that ran, not a check against human judgment. A plugin directory gets

the static layer only, whatever depth you ask for.

Static layer (lint)

The static layer reads SKILL.md and makes no model calls. It computes seven sub-scores, and the

first six feed composite dimensions:

  • frontmatter_quality (feeds triggering_accuracy)
  • orchestration_wiring (feeds orchestration_fitness)
  • progressive_disclosure, structural_completeness, token_efficiency, ecosystem_coherence
  • harness_portability

harness_portability maps to no dimension, so it doesn't change a skill's composite score. It

does carry 6% of the static layer's own score. A plugin's score is built from that layer score,

so portability findings can lower a plugin's score a little. Its findings are not counted as

anti-patterns.

The static layer flags six anti-patterns: OVER_CONSTRAINED, EMPTY_DESCRIPTION,

MISSING_TRIGGER, BLOATED_SKILL, ORPHAN_REFERENCE, and DEAD_CROSS_REF. Each flag cuts the

score by 5%, down to a floor of 50%:

penalty = max(0.5, 1.0 - 0.05 * anti_pattern_count)

The report prints a severity for each flag, but the penalty counts flags and ignores severity.

LLM judge layer (experimental)

The judge layer makes four model calls and returns four holistic scores from 0 to 1:

  • triggering_accuracy: Haiku reads the description and writes 10 test prompts, 5 that should

trigger and 5 that should not. It predicts the outcome for each prompt and reports its own F1.

Nothing checks those predictions against real triggering.

  • orchestration_fitness and scope_calibration: Sonnet rates the skill on a five-point rubric.
  • output_quality: Sonnet imagines three tasks and rates the output it expects.

The three Sonnet calls see only the first 3,000 characters of SKILL.md. Only one judge runs,

because nothing reads the judges setting.

Monte Carlo layer (experimental)

Haiku writes 15 prompts that should trigger the skill, and the layer repeats them to reach 50

runs (100 at thorough). Each run sends the SKILL.md text and one prompt to the model, and the

layer records four measures:

  • Activation rate is the share of runs with any non-empty reply, so it shows whether the model

answered, not whether the skill should have fired.

  • Output quality is reply length divided by 500, capped at 1.0.
  • Failure rate is the share of runs that errored.
  • Token efficiency is 1 - median_tokens / 8000.

Every prompt is one that should trigger, so the layer never checks that the skill stays out of

unrelated requests. The layer's JSON includes Wilson, bootstrap, and Clopper-Pearson intervals

for its own measures. The composite ci_lower and ci_upper fields are always null.

Composite score

First, for each dimension, the engine blends the layer scores that exist, and it renormalizes

the blend weights over those layers. Second, it sums the weighted dimension scores, and it

renormalizes the dimension weights over the dimensions that have a score. Third, it multiplies

the sum by 100 and by the anti-pattern penalty.

DimensionWeightStaticJudgeMonte Carlo
triggering_accuracy0.250.150.250.60
orchestration_fitness0.200.100.70none
output_quality0.15none0.400.60
scope_calibration0.12none0.55none
progressive_disclosure0.100.80nonenone
token_efficiency0.060.40none0.50
robustness0.05nonenone0.80
structural_completeness0.030.90nonenone
code_template_quality0.02nonenonenone
ecosystem_coherence0.020.85nonenone

A cell reads "none" when its layer produces no score for the dimension, even where

LAYER_BLENDS lists a weight. No layer produces code_template_quality, so it's always

unmeasured. For a plugin directory, the composite is the static layer's mean score across the

plugin's skills and agents, times 100, times the penalty for the plugin's anti-pattern count.

Badges and grades

Badges come from the composite score alone. Platinum needs at least 90, Gold at least 80, Silver

at least 70, and Bronze at least 60. Badge.from_scores accepts an Elo rating, but no command

computes one. Plugin-level badges, including the ones in the weekly CI report, come from the

static layer alone. Skill-level badges at standard depth or deeper also include the

experimental layers.

Each measured dimension gets a letter grade on the 0 to 100 scale, from A+ at 97 down to D- at

60, and F below 60.

Usage

plugin-eval score ./path/to/skill --depth quick     # static lint only
plugin-eval score ./path/to/skill                   # static and judge
plugin-eval certify ./path/to/skill                 # deep depth
plugin-eval compare ./skill-a ./skill-b             # quick depth by default
plugin-eval score ./path/to/skill --depth quick --output json --threshold 70

At standard depth or deeper, score, certify, and compare print a note on stderr that the

judge and Monte Carlo layers are experimental. For a plugin directory, the CLI prints a warning

that only the static layer runs instead. With --threshold, the command exits with code 1 when the

composite is below the value. plugin-eval init writes a corpus index, but no other command

reads it.

Examples

An abridged example of the JSON output follows. Scripts can read composite.score from it:

{
  "layers": [{"layer": "static", "score": 0.75, "sub_scores": {}, "anti_patterns": []}],
  "composite": {"score": 76.9, "ci_lower": null, "ci_upper": null, "badge": "silver",
                "confidence_label": "Estimated", "dimensions": []},
  "elo": null
}

Troubleshooting

  • When a score drops after you add content, check layers[0].anti_patterns in the JSON.
  • If triggering_accuracy is low at quick depth, add a trigger phrase such as "Use this skill

when" to the description, followed by several comma-separated contexts.

  • Judge scores change between runs, because the model writes new test prompts and tasks each

time. Use the static layer for comparisons you want to repeat.

  • If stderr says the judge could not measure some dimensions, install the LLM extra with

uv sync --extra llm.

Related

The eval-judge agent scores the four judge dimensions inside Claude Code, and the

eval-orchestrator agent runs the CLI and merges the results.

Related

SkillSoftware engineering

claude-api

Reference for the Claude API / Anthropic SDK — model ids, pricing, params, streaming, tool use, MCP, agents, caching, token counting, model migration. TRIGGER — read BEFORE opening the target file; don't skip because it "looks like a one-liner" — whenever: the prompt names Claude/Anthropic in any form (Claude, Anthropic, Fable, Opus, Sonnet, Haiku, `anthropic`, `@anthropic-ai`, `claude-*`, `us.anthropic.*`,…

Sourcegithub.com/anthropics/skills/blob/main/skills/claude-api/SKILL.md

No credentialsDoes not sendApache-2.0
SkillSoftware engineering

doc-coauthoring

Guide users through a structured workflow for co-authoring documentation. Use when user wants to write documentation, proposals, technical specs, decision docs, or similar structured content. This workflow helps users efficiently transfer context, refine content through iteration, and verify the doc works for readers. Trigger when user mentions writing docs, creating proposals, drafting specs, or similar…

Sourcegithub.com/anthropics/skills/blob/main/skills/doc-coauthoring/SKILL.md

No credentialsDoes not sendnot stated
SkillSoftware engineering

mcp-builder

Guide for creating high-quality MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. Use when building MCP servers to integrate external APIs or services, whether in Python (FastMCP) or Node/TypeScript (MCP SDK).

Sourcegithub.com/anthropics/skills/blob/main/skills/mcp-builder/SKILL.md

No credentialsDoes not sendApache-2.0
SkillSoftware engineering

skill-creator

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.

Sourcegithub.com/anthropics/skills/blob/main/skills/skill-creator/SKILL.md

No credentialsDoes not sendApache-2.0
SkillSoftware engineering

webapp-testing

Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs.

Sourcegithub.com/anthropics/skills/blob/main/skills/webapp-testing/SKILL.md

No credentialsDoes not sendApache-2.0
SkillSoftware engineering

ai-debt-detector

Use after generating code, after accepting AI suggestions, or when reviewing AI-written modules. Also use when code works but feels brittle, when error handling seems thin, when orphaned resources or missing cleanup are suspected, or when the agent claims done but hidden debt may exist. Catches the specific failure patterns AI agents produce that humans would not.

Sourcegithub.com/wshobson/agents/blob/main/plugins/skill-forge-essentials/skills/ai-debt-detector/SKILL.md

No credentialsDoes not sendMIT