agentleFS
SpiderIQSpiderIQ/skills/skills/SpiderGate/model-catalog/SKILL.md

model-catalog

Skill1 starsChanged 3 months agoMITView on GitHub

Read the enriched SpiderGate model catalog to PICK a concrete model for a task under a budget — the rich, cited profile behind each model plus a public leaderboard and the per-model eval prior. Trigger on: "which model is best for <task>", "best model for coding under $X", "cheapest model that can do vision / function calling", "compare model benchmarks", "model leaderboard", "rank models for planning", "read the evals for <model>", "what's the eval score for gpt-4o on coding", "pick a concrete model", "enriched model catalog", "per-provider pricing for a model", "how much does <model> cost across providers", "provenance / source for a benchmark", "best model for coding / vision / reasoning", "which capability categories are there", "rank models by category score", "per-category quality score". This skill teaches the READ surface — choosing a model. It does NOT send completions (that's use-the-gateway) and does NOT author catalog copy or edit the category taxonomy (that's admin-only). Read it before you call a model you picked from the catalog: the string to send is the row's `call_as`.

2 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

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

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈0

    Distinctive · estimate

    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. Very specific:

    All reads are LIST-ONLY — not metered, not billable (same class as listModels).

    line 45
  2. Very specific:

    Call the winner: send its call_as: Every catalog row carries call_as, the exact model string to pass to use-the-gateway's chat for that …

    line 66
  3. Very specific:

    Leaderboard rows carry id and no call_as: Before you call a ranked model, read it with getModel(id) and send that record's call_as.

    line 98

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “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

Model Catalog (pick a model for a task, under a budget)

SpiderGate's catalog turns bare model specs into a rich, cited profile: spec + authored editorial + benchmarks + a live per-provider price/latency snapshot + reference links + an evals aggregate, every sourced field carrying provenance. On top of it sits a public model×task leaderboard and a per-model #7 evals aggregate — the shared prior a planner blends against its own experience.

    ┌── GET /catalog/leaderboard?task_type=coding   (PUBLIC — no PAT)
    │       models ranked by auto-eval score, each row: headline benchmark
    │       + cheapest live blended $ across providers
    │
your ──Bearer PAT──▶ GET /catalog/models?fields=capabilities,pricing,per_provider,evals
agent               │       enriched rows, narrowed to the sections you need
    │               ├── GET /catalog/models/{id}          full record for one
    │               └── GET /catalog/models/{id}/evals    the #7 prior (per task)
    │
    ▼  pick a row  ──▶  read its call_as  ──▶  use-the-gateway  chat(model: <call_as>)
          call_as is null  ──▶  the shared pool cannot serve that row now

All reads are LIST-ONLY — not metered, not billable (same class as listModels).

Approach

  • "Best model for <task> under $X" — the headline job. Rank on the leaderboard for the task, then filter the returned rows by the blended price. → references/best-model-under-budget.md.
  • Compare a shortlist in depth — pull the enriched catalog with fields= to narrow, or getModel one record: spec, capabilities, per-provider pricing, benchmarks, evals side by side. → references/enriched-catalog.md.
  • Trust the eval prior — read the per-model #7 aggregate (auto rollups + human ratings) for a task before you rely on a model for it; a null score means "no contribution yet", not zero. → references/evals-as-prior.md.
  • "Best model for a capability" (coding, vision, reasoning…) — a different axis from the eval prior: rank by the benchmark-derived per-category percentile. listCategories() to see the 9 categories + how many models each scores, then leaderboard(category=<key>, sort=score) to rank; read a specific model's own scores with listCatalog(fields=category_scores) / getModel(model_id) (it takes no fields and returns every section). Only ~19% of models are scored — an empty category_scores[] means "unscored", not "bad". → references/pick-by-category.md.
  • Call the winner: send its call_as. Every catalog row carries call_as, the exact model string to pass to use-the-gateway's chat for that row right now, or null. If it is null, the shared pool cannot serve that row now; it does not cover your brand's own unshared keys. Do not send the row's id or model_id instead. You do not have to route through a task alias. → references/enriched-catalog.md.

Decision tree

You want to…MethodAuth
Rank models for a task (+ budget)leaderboard(task_type=…)public
Rank models for a capability categoryleaderboard(category=…, sort=score)public
See the capability categories (+ scored counts)listCategories()brand PAT
Compare a set on spec/price/evals/category scoreslistCatalog(fields=…)brand PAT
Inspect one model fullygetModel(model_id)brand PAT
Read the eval prior for a model×taskmodelEvals(model_id, task_type=…)brand PAT
Call the model you pickedread the row's call_as (listCatalog row or getModel(id)), then chat(model: <call_as>) in use-the-gatewaybrand PAT

The rules that trip agents up

<HARD-GATE name="send-call-as-not-the-id"> To call a model from the catalog, send its **`call_as`**. If `call_as` is `null`, the shared pool cannot serve that row now.
  • A row's id is a lookup key. For a Codex row the id and the model_id are both refused as model; the row is called as codex/<model_id>, and that is what its call_as holds while the gateway holds a pooled Codex seat.
  • A filter does not make a row callable. configured_only=true selects on a stored is_configured flag, not on a live check, and it can return a row whose call_as is null. servable stays false for Codex. Decide on call_as.
  • Leaderboard rows carry id and no call_as. Before you call a ranked model, read it with getModel(id) and send that record's call_as.
  • call_as is read from one gateway process's key state on each request and can differ between two reads for a moment. Read it close to the call; do not cache it with the rest of the catalog.</HARD-GATE>
<HARD-GATE name="rank-then-filter-by-price"> The leaderboard ranks by **eval score** (or category percentile), NOT price. To answer a budget question ("best coding model under $2/1M"), rank first and then **filter the returned rows by the blended price yourself** — do not expect a `max_price` param. The cheapest live blended price is on every row for exactly this. (See [references/best-model-under-budget.md](references/best-model-under-budget.md).) </HARD-GATE><HARD-GATE name="task-type-vs-category-are-different-axes"> `leaderboard` has **two ranking axes** — pick the right one: - **`task_type=…`** ranks by the **#7 EVAL success rate** (needs an eval contribution; a model with no eval prior for that task ranks by missing data). - **`category=…, sort=score`** ranks by the **benchmark-derived within-category PERCENTILE** (needs published benchmarks). Use this for "best model for *coding / vision / reasoning*" — a capability question.

They are NOT interchangeable. A category score is a percentile (0–100), not a raw benchmark mean; read rank ÷ total for "rank/N", and a score's components[] is the WHY. Only ~19% of models are scored — treat an empty category_scores[] as "unscored", never "worst". Call listCategories() to get the valid category keys before ranking. </HARD-GATE>

Surfaces

  • HTTP (this skill wraps it): GET /api/gate/v1/catalog/{models,models/{id},models/{id}/evals,leaderboard,categories}. Per-category ranking = GET /catalog/leaderboard?category=<key>&sort=score; each model's own scores = category_scores in the fields= child section on /catalog/models[/{id}]. The skill methods (listCategories, leaderboard with category) call these directly through the OPVS proxy — no client tool needed.
  • CLI: spideriq gate catalog list|get|leaderboard|evals (client PAT; leaderboard public). ⚠ The CLI leaderboard is --task-type only — the per-category mode + /catalog/categories are NOT yet exposed as CLI commands (HTTP + this skill only, today).
  • MCP: gate_catalog_list, gate_catalog_get, gate_leaderboard (task_type only), gate_catalog_model_evals (the @spideriq/mcp-gate slice). ⚠ There is no client MCP tool for the category read or the per-category leaderboard yet — the category surface reaches agents via THIS skill (HTTP proxy). A follow-up may add gate_catalog_categories + a category arg on gate_leaderboard.
  • Admin (NOT this skill): editing the categories / scoring recipe is the @spideriq/admin-skills curate-categories skill (super_admin, X-Admin-Key).

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.