LLM Eval Harness
Measure any OpenAI- or Anthropic-compatible LLM endpoint across six dimensions: availability, request fidelity, speed, concurrency, protocol compliance, and quality regression.
What it does
Give it a base_url, a model ID, and an API key held in an environment variable, and it produces measured numbers instead of vendor marketing claims.
- Availability — which model IDs actually route, with three-state failure classification (
no-channel,upstream-error,empty-content), keeping max_tokens at 8192 so reasoning models don't read as dead. - Request fidelity — canary codes verify whether your system prompt, tools, and multi-turn history actually reach the model, or get silently dropped by a gateway that still returns a fluent 200.
- Speed — TTFT plus sustained decode tok/s, capturing
reasoning_contentso thinking tokens don't inflate throughput (a real 750 tok/s model once measured as 4700). - Concurrency — ramps 10/20/40/60 to find where success rate or p50/p90 latency breaks, disabling ambient proxies and keep-alive so you measure the model, not the proxy.
- Protocol compliance — separately checks Anthropic
thinkinggeneration and history-replay acceptance, the latter being the cause of "session dies with 400 invalid part type: thinking" in agentic clients. - Quality regression — runs your own use-case library, then has three independent blind judges score each answer, passing only on majority agreement and reporting precision per tag category.
Keys are always passed by env-var name (--key-env), never as a command-line value, so they stay out of ps, shell history, and saved reports.
Who it's for
- Developers and platform engineers vetting a new LLM provider, reseller, or gateway before adoption
- Owners of supported-model lists, deployment gates, or resident canary monitors
- Anyone debugging vague symptoms like "the model ignores the system prompt" or "it 400s after a few turns"
- Teams that need to know how much concurrency an endpoint survives before a workshop or demo
Example uses
- Onboarding a new channel: run the availability probe to find which IDs route, then the fidelity probe with
--repeat 10to see how reliably the system prompt is delivered. - Verifying a tok/s claim:
speed_probe.py --mode bothreports real-task throughput and the sustained decode ceiling separately, so you compare apples to apples. - Tracking down broken sessions:
protocol_probe.py --check history-replayreproduces a vendor rejecting replayed thinking blocks, then the bundled evidence protocol turns it into a filable bug report.
· · · Install guide · · ·
Try it now, no install
Paste this into Claude to use the skill without installing anything.
Read the instructions in this file and follow them to help me: https://raw.githubusercontent.com/daymade/claude-code-skills/HEAD/llm-eval-harness/SKILL.md What I want: (describe your task here)
If Claude can't open the link, open it yourself and paste the contents instead.
↓ If it works for you, download the ZIP below and install it. Then it runs on its own — no pasting each time.
Install in the Claude app (no terminal)
- Download the ZIP with the button below.
- In Claude, open Settings → Capabilities and turn on 'Code execution and file creation'. (one time)
- Go to Customize → Skills → + → 'Upload a skill' and upload the ZIP.
Install in Claude Code
Let Claude do it — paste this into Claude Code
Install the skill I found on Claude Skill Mart. Copy the llm-eval-harness folder from the GitHub repo daymade/claude-code-skills into my ~/.claude/skills/llm-eval-harness/. When it's done, tell me in one line what this skill can do.
Install with a command instead
git clone https://github.com/daymade/claude-code-skills.git && mkdir -p ~/.claude/skills && cp -r claude-code-skills/llm-eval-harness ~/.claude/skills/⚠ This is a third-party skill. Check the source repository before installing.
- Open a terminal and clone the repo:
git clone https://github.com/daymade/claude-code-skills.git - Create the skills directory:
mkdir -p ~/.claude/skills - Copy just this skill:
cp -r claude-code-skills/llm-eval-harness ~/.claude/skills/ - Install
uvif you don't have it, since the probes run viauv run:curl -LsSf https://astral.sh/uv/install.sh | sh - Export the API key you want to test as an environment variable:
export MY_KEY=sk-...(never pass the key value on the command line) - Restart Claude Code and ask something like "benchmark this endpoint's speed and stability", including the base URL and model name.
- (Optional) Keep your private test cases in
~/.llm-eval/usecases.json; copyassets/example_usecases.jsonas a starting point.