MCPInstall

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.

Installs
7.3K
Last 24h
+30
Trending rank
#4368
Security
Pass

Install

Works with every agent the skills CLI supports.

npx skills add https://github.com/wshobson/agents --skill evaluation-methodology
  1. 01

    Install

    Run the command in your project. The CLI asks which agents to install for.

  2. 02

    Describe the task

    Ask your agent for something this skill covers. It loads evaluation-methodology automatically when relevant.

  3. 03

    Review the result

    The agent follows the SKILL.md steps, scripts and references bundled with the skill.

Security audits

Independent scans of the skill's instructions and bundled files.

Gen Agent Trust Hub PassSAFE ·The skill is a comprehensive technical reference for the PluginEval evaluation methodology, providing rubrics, scoring formulas, and documentation for measuring plugin quality. No security issues or malicious patterns were detected.
Socket PassNo alerts
Snyk PassLOW ·Risk: LOW · No issues
ZeroLeaks PassNONE ·Score: 93/100 · 2 sections analyzed

SKILL.md

The instructions your agent reads when the skill is triggered.

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. Fixes for each anti-pattern and tips for each dimension are in 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.

FAQ

What does the evaluation-methodology skill do?

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.

How do I install evaluation-methodology?

Run npx skills add https://github.com/wshobson/agents --skill evaluation-methodology 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/evaluation-methodology/ (personal) or .claude/skills/evaluation-methodology/ (project).

Which AI agents can use evaluation-methodology?

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 evaluation-methodology safe to install?

Security partners have reviewed it: Gen Agent Trust Hub passed; Socket passed; Snyk passed; ZeroLeaks passed. As with any skill, read the SKILL.md and bundled scripts before installing.

Who maintains evaluation-methodology?

It is published by wshobson in wshobson/agents. It has 7,308 recorded installs.

More from wshobson/agents

View all →

Master TypeScript's advanced type system including generics, conditional types, mapped types, template literals, and utility types for building type-safe applications. Use when implementing complex type logic, creating reusable type utilities, or ensuring compile-time type safety in TypeScript projects.

tailwind-design-system

wshobson/agents

Build scalable design systems with Tailwind CSS v4, design tokens, component libraries, and responsive patterns. Use when creating component libraries, implementing design systems, or standardizing UI patterns.

Frontend & Design70.6K installs

Build production-ready Node.js backend services with Express/Fastify, implementing middleware patterns, error handling, authentication, database integration, and API design best practices. Use when creating Node.js servers, REST APIs, GraphQL backends, or microservices architectures.

Backend & APIs48.8K installs

brand-landingpage

wshobson/agents

Brand-first landing page designer — runs a brand-identity interview (colors, typography, shape language), then generates and iterates on a polished landing page via Stitch with deployment-ready HTML. Use when the user asks to create, design, or build a landing page, homepage, or marketing page and has no established visual direction. Skip when they have a design mockup, need a dashboard or app UI, are working at component level, building a multi-page app, or restyling with known design tokens — use frontend-design instead.

Frontend & Design39.6K installs

Implement comprehensive testing strategies with pytest, fixtures, mocking, and test-driven development. Use when writing Python tests, setting up test suites, or implementing testing best practices.

Testing & QA37.3K installs

Profile and optimize Python code using cProfile, memory profilers, and performance best practices. Use when debugging slow Python code, optimizing bottlenecks, or improving application performance.

Popular other skills

View category →

hyperframes-cli

heygen-com/hyperframes

The HyperFrames CLI by job - scaffold, check, look at frames, edit the timeline, preview, render locally or in the cloud, publish, project history - plus reading its JSON and recovering from build or render failures.

1.3M installs

triage

mattpocock/skills

Move issues and external PRs through a state machine of triage roles, categorise, verify, grill if needed, and write agent-ready briefs.

1M installs

ask-matt

mattpocock/skills

Ask which skill or flow fits your situation. A router over the skills in this repo.

778.4K installs

to-questionnaire

mattpocock/skills

Turn a decision you can't fully answer into a questionnaire for someone else to fill in.

508.9K installs

wait-what

mattpocock/skills

Stop. That last message did not land: re-pitch it.

459.7K installs

loop-me

mattpocock/skills

Grill me about specs for the workflows I want to build, within this workspace.

447.9K installs