Skip to main content

evaluate-matrix

Cross-model skill evals with real execution and grading — the executability gate. Use when checking whether a weak model can actually do a skill, not just comprehend it.

معلومات المصدر

المستودع
laurigates/claude-plugins
آخر نشاط في المصدر
٢٤ سبتمبر ٢٠٢٦ في ٠٩:٤١
لغة SKILL.md المكتشفة
الإنجليزية
النجوم
٦٠
التفرعات
٦

خيارات التثبيت

يُحدَّد Prompt الذي يراجع المصدر أولًا بشكل افتراضي. يمكنك التبديل إلى أمر مباشر أو تنزيل نسخة محلية.

مراجعة ملفات المصدر

اقرأ SKILL.md وأي ملفات مرافقة يعرضها SkillsMP قبل أن تقرر التثبيت.

عرض SKILL.md

SKILL.md
تعليمات المصدر · معاينة للقراءة فقط
name
evaluate-matrix
description
Cross-model skill evals with real execution and grading — the executability gate. Use when checking whether a weak model can actually do a skill, not just comprehend it.
args
<plugin/skill-name> [--models opus,haiku] [--with-skill-only] [--runs N]
allowed-tools
Task, Read, Write, Edit, Glob, Bash(bash *), Bash(python3 *), TodoWrite
argument-hint
git-plugin/git-commit --models opus,haiku --with-skill-only
model
opus
agent
general-purpose
created
2026-06-13T00:00:00.000Z
modified
2026-09-23T00:00:00.000Z
compatibility
claude-code
reviewed
2026-09-02T00:00:00.000Z
# /evaluate:matrix The **executability** gate. Where `/evaluate:legibility` asks "can a fresh agent *comprehend* this skill," this skill asks "can a *weak model* actually *do* it" — run the skill's evals on haiku (and opus/sonnet) with real tool execution, grade the produced artifact, and surface the per-skill verdict `executable_on_haiku`. A skill that opus passes and haiku fails leans on reasoning the cheap model lacks. This builds the orchestration the cross-model design ([`docs/cross-model-evaluation.md`](../../docs/cross-model-evaluation.md)) calls a follow-up. It reuses, without duplicating: `prepare_run.sh`, `grade_deterministic.py` (zero-token first pass), the `eval-grader` agent (deferred fuzzy checks only), `model-matrix.json`, and `render_matrix_report.py`. ## When to Use This Skill | Use this skill when... | Use alternative when... | |------------------------|------------------------| | Checking whether a weak model can *execute* a skill | Checking whether the SKILL.md *reads* clearly -> `/evaluate:legibility` | | Running the Tier-2 cross-model sweep on a golden-set skill | Single-skill, single-model effectiveness -> `/evaluate:skill` | | Diagnosing a skill that opus passes but haiku fails | Structural/lint validation -> `scripts/plugin-compliance-check.sh` | | Re-checking canaries after a new model ships | Improving a skill from results -> `/evaluate:improve` | ## Context - Available plugins: !`find . -maxdepth 2 -type d -name '*-plugin' -not -name '.claude-plugin'` ## Parameters | Parameter | Default | Description | |-----------|---------|-------------| | `<plugin/skill-name>` | required | Target skill as `plugin-name/skill-name` | | `--models <list>` | `opus,haiku` | Comma-separated pinned aliases to run | | `--with-skill-only` | false | Skip the cached baseline side (with-skill runs only) | | `--runs N` | 1 | Runs per (model × eval × config) | Aliases float across model generations, so `--models` accepts either an alias or a full id; pass the **full id** when the run must be reproducible (the `model` field on the dispatch accepts one) and record the id that actually ran — never the alias — in `model-matrix.json metadata.models[].model_id` (`.claude/rules/skill-evaluation.md`). ## Execution Execute this cross-model matrix: ### Step 1: Resolve skill and evals Read `<plugin-name>/skills/<skill-name>/evals.json`. If absent, report that the matrix needs eval cases (point at `/evaluate:skill --create-evals`) and stop. Validate it against the evals.json schema ([`references/schemas.md`](../../references/schemas.md)). ### Step 2: Run the matrix (serialized) Loop over (model ∈ `--models`) × eval × config ∈ {`with_skill`, `cached_baseline`} — skip `cached_baseline` if `--with-skill-only`, and reuse a baseline cached for the same model-version rather than re-running it. For each combination: 1. Scaffold the run dir: ``` bash ${CLAUDE_PLUGIN_ROOT}/scripts/prepare_run.sh \ --skill-dir <plugin-name>/skills/<skill-name> \ --eval-id <eval-id> --run <N> ``` If the eval carries a `fixture` block, apply it for an honest execution context — without one a context-needing skill fails on haiku purely for lack of fixtures, a false negative that poisons this gate: ``` bash ${CLAUDE_PLUGIN_ROOT}/scripts/apply_fixture.sh \ --fixture '<eval.fixture JSON>' --repo-root "$(pwd)" ``` Parse `WORKDIR=`; the subagent operates there. Tear it down after the transcript is copied out (`--teardown "$WORKDIR"`). 2. Dispatch **one `Task` subagent with the `model` field set to the loop model** (full `Bash`/`Edit` — it does real tool execution, not just reading): ``` Task subagent_type: general-purpose model: <loop model alias> prompt: <eval prompt; with_skill runs also receive the SKILL.md content> ``` **Serialize** the dispatches — one at a time, never a parallel batch. `[1m]` models hit cascading rate limits with concurrent subagents (`.claude/rules/skill-fork-context.md`). Spawns run in the background by default (Claude Code ≥ 2.1.232), so dispatch order alone no longer serializes them: pass `run_in_background: false` on each dispatch, or wait for that agent's result to arrive before issuing the next one — serialization is the wait, not the dispatch order. **Keep the subagent off `…/skills/…` paths.** Paste the SKILL.md body into the prompt instead of naming its path, and have the subagent return its artifact in the reply. Path-scoped rules load whole into any agent that touches a matching file, and a repo can scope many of them to `**/skills/**` (the claude-plugins marketplace scopes over a dozen); there a haiku subagent handed a skill path failed with HTTP 400 `Prompt is too long` before running anything (#2667). A 400 on the haiku arm is the context surface, not the skill — `prepare_run.sh` stages run dirs outside `skills/` for the same reason, and `check-context-engineering.py` caps each rule's size so the surface cannot regrow unseen. 3. Write the subagent's produced artifact to `$RUN_DIR/transcript.md`. ### Step 3: Grade — deterministic first, judge only on deferral For each run, grade the produced output: 1. Run the zero-token deterministic grader first: ``` python3 ${CLAUDE_PLUGIN_ROOT}/scripts/grade_deterministic.py \ --evals <evals.json> --eval-id <eval-id> --output $RUN_DIR/transcript.md --json ``` 2. Only if it reports `JUDGE_PENDING > 0`, dispatch the `eval-grader` agent for the deferred fuzzy expectations: ``` Task subagent_type: evaluate-plugin:eval-grader Prompt: Grade ONLY the deferred (judge) expectations for <eval-id> ... ``` Most expectations grade deterministically — the judge fires on a fraction. ### Step 4: Aggregate to model-matrix.json Combine per-run pass rates into `<skill-dir>/eval-results/model-matrix.json` following the schema. Compute, per model alias, the mean `with_skill` and `baseline`, the `delta`, and `prev_delta` from any stored prior run. ### Step 5: Render the report ``` python3 ${CLAUDE_PLUGIN_ROOT}/scripts/render_matrix_report.py \ <skill-dir>/eval-results/model-matrix.json ``` The renderer emits the delta table, per-model verdicts, the **portability flag** (opus−haiku spread ≥20 pts), and the **executability flag** (`executable_on_haiku=false` when haiku's absolute with-skill rate is below the 0.5 floor while opus clears it). Print the report and call out whether the executability flag fired. ## Minimal Provable Increment Run the matrix for **`git-plugin/git-commit` only** (it already has typed-check evals), `--models opus,haiku --with-skill-only`: grade deterministically, render, and confirm the executability callout lights up or stays dark correctly. This exercises every reused piece end-to-end before scaling to the golden set. ## Agentic Optimizations | Context | Command | |---------|---------| | Inspect eval setup | `bash evaluate-plugin/scripts/inspect_eval.sh --plugin-dir <plugin>/skills/<skill>` | | Prepare a run dir | `bash evaluate-plugin/scripts/prepare_run.sh --skill-dir <dir> --eval-id <id> --run <N>` | | Deterministic grade | `python3 evaluate-plugin/scripts/grade_deterministic.py --evals <f> --eval-id <id> --output <out> --json` | | Render the matrix | `python3 evaluate-plugin/scripts/render_matrix_report.py <dir>/eval-results/model-matrix.json` | ## Quick Reference | Flag | Meaning | |------|---------| | `--models opus,haiku` | Which pinned aliases to run (default opus,haiku) | | `--with-skill-only` | Skip the cached baseline side | | `--runs N` | Runs per (model × eval × config) | ## Related - `/evaluate:legibility` — the comprehension gate (cold-read, no execution) - `/evaluate:skill` — single-model effectiveness with a baseline - [`docs/cross-model-evaluation.md`](../../docs/cross-model-evaluation.md) — the design this implements - `.claude/rules/skill-evaluation.md` — tiered methodology, golden set, cadence - `.claude/rules/skill-fork-context.md` — why subagent dispatch is serialized
عرض على GitHub