agentleFS
Evan-DaruwallaEvan-Daruwalla/claude-skill-suite/llm-eval-harness/SKILL.md

llm-eval-harness

Skill0 starsChanged 46 days agoMITView on GitHub

Measures how far a cheaper model falls from the Fable-5 bar: deterministic checks plus similarity to goldens, logged to a ratchet. No API key or LLM judge. Use when: "eval the model", "measure the Fable gap", or deciding whether to switch models.

3 other projects use a version of this.

Adopted by

Most recently taken up by

The file

We split this skill into the rules it gives an agent

6 rules. 0 are common, 3 are distinctive, and 3 are very specific to this project.

  • 0

    Common

    Most of the 3 edited versions we read keep these.

  • 3

    Distinctive

    This author's own choices. Worth a look.

  • 3

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    MUST be produced by the flagship model itself — don't let a weaker model stand in (that fabricates the bar).

    line 34
  2. Distinctive:

    Commit the goldens. They are the frozen quality bar.

    line 40
  3. Very specific:

    Read the trend: ratchet.jsonl accumulates every run — the flagship→cheaper gap (and whether prompt/skill changes close it) is the series …

    line 48
  4. Very specific:

    Every .md file this skill creates or writes to gets ASCII characters only (bytes 0x00-0x7F) in the text you add.

    line 71
  5. Very specific:

    Check before saving. In a git repo, git diff -U0 -- <file> | grep -v '^+++' | grep '^+' | grep -nP '[^\x00-\x7F]' must print nothing.

    line 79
  6. Distinctive:

    Leave non-ASCII in text you did not write.

    line 83

“Common” is measured: kept by at least 6 in 10 of the 3 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

llm-eval-harness — is the cheaper model good enough yet?

Deterministic only. No model is called by the harness (it assumes no in-session API key); the model produces outputs by being run on the task prompts, and score.js grades them against fixed criteria. A non-reproducible LLM-judge is deliberately excluded — it would be invented data.

Files

  • tasks.json — the eval task set (examples included; replace with your own). Two scoring methods:
    • checks — deterministic assertions on the output; needs NO golden, scores any model immediately (format conformance, no-fabrication, surgical scope…).
    • golden — line-similarity to a captured flagship reference; needs a capture.
  • score.js — node score.js <taskId> <candidateFile> --model <name>; prints the score and appends a line to ratchet.jsonl. --dry scores without appending (for testing checks/fixtures). node score.js --summary reads the ratchet and prints per-(model, task) n / median / min / max — judge from medians of ≥3 samples, not single runs.
  • goldens/ — reference outputs, named <taskId>.<model>.md.
  • candidates/ — a model's answers to score.
  • ratchet.jsonl — the tracked series {date, model, task, method, score}.

Capture the flagship goldens (do while the flagship model is available)

The golden tasks need the flagship model's own output as the reference. This MUST be produced by the flagship model itself — don't let a weaker model stand in (that fabricates the bar).

  1. Switch to your flagship model.
  2. For each golden task in tasks.json, answer its prompt and save the answer verbatim to goldens/<taskId>.<flagship>.md (matching the task's refModel).
  3. Commit the goldens. They are the frozen quality bar; if you later lose access to the flagship model, they are unrecoverable.

Score a candidate model

  1. Under the model being evaluated, answer each task's prompt; save each to candidates/<taskId>.<model>.md.
  2. node score.js <taskId> candidates/<taskId>.<model>.md --model <model> for each. checks tasks score with no golden; golden tasks need the capture.
  3. Read the trend: ratchet.jsonl accumulates every run — the flagship→cheaper gap (and whether prompt/skill changes close it) is the series over time.

Honest limits

  • checks measure conformance/discipline, not full quality — they catch common cheap-model failure modes (fabrication, scope creep, format drift, injection obedience, precedence errors), not everything. A perfect checks score means baseline discipline, NOT model parity (score.js says so on every 1.000).
  • golden similarity is word-level; it rewards matching the reference's structure, so keep golden tasks structural (summaries, formatted entries), not open-ended prose.
  • Scores are only as representative as the task set — grow tasks.json from real failures you observe, not hypotheticals.
  • Contamination rules: goldens and candidates must come from sessions that never saw each other's outputs; and never log a baseline for a model on checks that were AUTHORED in the same session (teaching-to-the-test) — capture in a fresh session. Use --dry for mechanics testing so fixtures never pollute the ratchet.
  • Single samples are anecdotes: capture ≥3 samples per (model, task) where feasible and read --summary medians.

ASCII-only markdown (rule added 2026-09-23)

Every .md file this skill creates or writes to gets ASCII characters only (bytes 0x00-0x7F) in the text you add. No exceptions for headings, tables, quotes, names or pasted tool output.

  • Dashes: - (never an en or em dash). Arrows: -> and <-. Quotes: straight " and '. Ellipsis: .... Math: x, +/-, <=, >=, ~. Separators: -, ; or |. No emoji, no check-mark glyphs (use [x] and [ ]), no accented letters: transliterate names and quoted text.
  • Check before saving. In a git repo, git diff -U0 -- <file> | grep -v '^+++' | grep '^+' | grep -nP '[^\x00-\x7F]' must print nothing. For a new or untracked file, grep -nP '[^\x00-\x7F]' <file> must print nothing.
  • Leave non-ASCII in text you did not write. Earlier entries of an append-only record stay byte for byte; converting an existing file is a separate, explicit job.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.