Recommend which LLM model to use for a task. Use when asked "which model / best LLM for X", "pick a model for this task", or for a model shortlist ranked by live leaderboard evidence (coding, reasoning, agentic, tool-use, price, speed). Live-fetches public leaderboards and ranks models with per-axis rationale and citations.
71
88%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Low
Low-risk findings worth noting
Task-driven LLM recommender. Input: a free-form task description. Output: a ranked shortlist of models, each with per-axis rationale, a source citation, and the fetch timestamp — plus an explicit list of data gaps.
Data is fetched live at invocation time through two CLI tools with
subcommands (no bundled snapshot): scripts/benchmarks.ts (capability
benchmarks) and scripts/openrouter.ts (deployment price, per-provider
breakdown, speed). The agent queries them targeted — by category, benchmark,
model, or provider — never a firehose. Standings move continuously, so every
answer states when it fetched.
curl is the fail-fast signal — never route around
it. If a curl <url> fetch errors, returns nothing, or reports command not found, record that source as a Gap and move on. NEVER retry it via an
absolute path (/usr/bin/curl, /opt/.../curl), an alternate binary
(wget, httpie, a language one-liner), a proxy, or a -o /tmp/… download.
Working around an unavailable fetch tool to reach the network anyway defeats
the purpose and yields fabricated-looking results. If EVERY source's fetch
fails this way, STOP — do not produce a ranking.The tools run as curl <url> | deno run … --stdin. Probe the runtime and the
key — but do NOT probe curl:
deno is available (e.g. deno --version). If deno is
unavailable, every source becomes a Gap (fail-fast) — do NOT fall back to
scraping raw HTML from memory.AA_API_KEY (free key at
https://artificialanalysis.ai/api). If unset, AA is a Gap — do NOT scrape
its JS-rendered leaderboard page.curl with command -v / which / type / --version.
The fetch itself is the availability test: the first curl <url> | … pipe in
Phase 2 either returns bytes or it fails. A curl that errors or reports
command not found means the fetch tool is unavailable — apply the fail-fast
rule above (that source is a Gap; if every source fails, STOP with "No
working shell fetch tool — cannot retrieve live data; not fabricating a
recommendation"). Probing first only leaks a binary path you must not use.benchmarks.ts is queried by category (the closed set below). Assign a 0–3
weight to each category from the task description (adjust cues to intent):
| Category | Benchmarks (in the tool) | Cues in the task |
|---|---|---|
| general | intelligence, mmlu-pro, gpqa, hle | "general", "hard problem", "reasoning", "PhD", "knowledge", unspecified |
| coding | coding-index, livecodebench, scicode | "code", "implement", "bug", "leetcode", language names |
| math | math-index, aime, aime-25, math-500 | "math", "prove", "olympiad", "arithmetic" |
| agentic | terminal-bench-hard, tau2 | "agent", "autonomous", "terminal", "call tools", "function calling" |
| instruction | ifbench | "follow instructions", "format", "constraints" |
| long-context | lcr | "long context", "large document", "many files" |
| diff-edit | aider-polyglot | "edit existing code", "apply a patch", "diff", "in-place" |
| web | webarena | "browse", "web navigation", "fill forms", "browser agent" |
| computer-use | osworld | "control the desktop", "GUI automation", "computer use" |
| swe | swe-bench-verified | "resolve GitHub issues", "real-world SE", "repo-level fix" |
Rules:
general
highest and the rest evenly, and DISCLOSE: "Task under-specified — ranked on a
balanced general-purpose profile."openrouter.ts (price/speed). When the task says
nothing about cost or latency, they do not enter the capability score. (For an
explicit value/$ ask, price is the primary ranking lens — see Phase 3.)Call the two CLI tools (paths relative to this skill dir) ONLY for the
categories you weighted non-zero. Always fetch with curl and pipe into the
tool with --stdin — this is the ONE supported invocation form (below). Do
NOT run the tool without the curl … | … --stdin pipe. A non-zero exit means
that source is a Gap. Add --format table for readable output, --top N to cap
rows.
benchmarks.ts — one call per weighted category (a category maps to one
fetch URL):
# general/coding/math/agentic/instruction/long-context → Artificial Analysis (key):
curl -fsSL -H "x-api-key: $AA_API_KEY" https://artificialanalysis.ai/api/v2/data/llms/models \
| deno run -A scripts/benchmarks.ts scores --category coding --top 10 --stdin
# diff-edit → Aider:
curl -fsSL https://raw.githubusercontent.com/Aider-AI/aider/main/aider/website/_data/polyglot_leaderboard.yml \
| deno run -A scripts/benchmarks.ts scores --category diff-edit --stdin
# web → Steel.dev (swap board per category: webarena | osworld | swe-bench-verified):
curl -fsSL https://leaderboard.steel.dev/leaderboards/webarena/ \
| deno run -A scripts/benchmarks.ts scores --category web --stdinscores --category <c> (required) [--benchmark <b>] [--model <substr>] [--top N].{category, benchmark, source, model, score, higherIsBetter}.--benchmark is optional — omit to get all benchmarks of the category.openrouter.ts — deployment price / provider detail / speed:
curl -fsSL https://openrouter.ai/api/v1/models \
| deno run -A scripts/openrouter.ts price --sort blended --top 10 --stdin
curl -fsSL https://openrouter.ai/api/v1/models/openai/gpt-4o/endpoints \
| deno run -A scripts/openrouter.ts providers --model openai/gpt-4o --stdinprice [--match <substr>] [--sort blended|input|output] [--top N] → {id,name,input,output,blended,context} ($/Mtok).models [--match <substr>] [--top N] → {id,name,context} — resolve the exact author/slug for providers.providers --model <author/slug> (required) [--sort price|uptime] → per provider {provider,input,output,cacheRead?,uptime30m,uptime1d,context,quantization,status}.speed [--match <substr>] [--top N] → {model,speed} (median tok/s, from the AA URL — needs AA_API_KEY).Source notes. Artificial Analysis absorbs ~15 benchmarks in one keyed call.
OpenRouter is the real deployment price/value source. Steel.dev adds agent + SE
benchmarks AA lacks; its web/computer-use boards are
system/submission-attributed (agent scaffold + model, e.g. "Claude Code +
GBOX MCP") — cite those as agent-system scores, not bare-model; swe lists bare
models. latency/throughput are not available (null in the OpenRouter API) —
speed (AA median tok/s) is the only throughput proxy.
Known Gaps (no stable keyless endpoint — report as Gaps, do NOT scrape):
_next/data buildId at probe time.Parser scores are on incomparable native scales (intelligence index, 0–1 bench fractions, $/Mtok). Merge rows across sources by model name/slug (best-effort; an unmatched model is "no data" on that axis, never zero), then:
higherIsBetter: false (price), invert so cheaper ranks
higher — never let a low price sink a model.
1a. Collapse a category's benchmarks. A category groups correlated benchmarks
(general = intelligence/mmlu-pro/gpqa/hle; math = the four math benchmarks).
Average a category's benchmark percentiles into ONE contribution before the
weighted sum, so a model is not multi-counted for being broadly smart.For the top 1–2 ranked models, optionally enrich with where to deploy them
(same curl … | … --stdin form as Phase 2): resolve the slug via
openrouter.ts models --match <name>, then openrouter.ts providers --model <slug> --sort price (or --sort uptime) for the cheapest / most-reliable
provider. Disclose that latency/throughput are unavailable (use speed for the
AA throughput proxy).
Report, in this order:
openrouter.ts providers.If every source ended up a Gap, do NOT produce a ranking — report the gaps and stop. Partial data is fine: rank on what you have and disclose the rest.
Recommender only. It does not benchmark models itself, does not bundle a
dataset, and does not promise freshness beyond the fetch it just performed. The
parser fixtures inlined in scripts/parse-*_test.ts are test data, not a live
snapshot, and need periodic re-capture as source schemas drift.
b4ba256
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.