Skip to content
Back to skills

Route

ASecurity

Model routing: performance grid, route cache, triage, clusters. The single home for which model serves which work.

  • 2 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added October 19, 2026
ai-agentsgobashperformance

Works with

  • claude code
  • cli

Security analysis

A100/100

Pro scans all 9 files and shows the line behind each finding

Scanned October 19, 2026

npx -y skills add MinhHaDuong/ImperialDragonHarness --skill route --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Route?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Route
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/minhhaduong-route/badge)](https://www.skillsdirectory.com/skills/minhhaduong-route)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: route
description: "Model routing: performance grid, route cache, triage, clusters. The single home for which model serves which work."
disable-model-invocation: false
user-invocable: false
---

# Route — routage des modèles

`[Grid → Triage → Choice]`

This skill owns three things, and they live nowhere else: the performance
grid (which model is worth what, at explicit effort levels), the route-state
cache (`routes.json` beside this file — which doors are alive, at what caps
and prices, plus how each runtime launches a worker), and the guidance an
orchestrator uses to choose a worker before any expensive model touches the
work.

## Update discipline

- The grid changes ONLY from cycle data from the independent arena repository or an explicit
  author-run test — never from vibes, provider marketing, or bench claims.
- Mid-cycle: the grid may show a cycle's provisional numbers marked
  `provisional`; they are not routing-grade until the cycle closes.
- After each cycle: refresh the grid AND `routes.json` (status, prices, caps,
  `last_verified`), in the same pass as the cycle verdict.

Arena protocol, runner, analysis and reports live in the independent repository.
See [the integration contract](../../docs/arena-integration.md) for locations,
transferred tickets and the explicit grid refresh command.

## Performance grid

The grid lives in `grid.json` beside this file (data, not portable
instructions; model names live in data and in the per-runtime
recommendation files). Read it for quality/speed/cost per identity and the
provisional marks; per-arm coverage counts and evidence notes live in
`grid-coverage.json` (keyed by arm, not needed to choose); update both ONLY
from arena cycle data.

Effort labels are model-relative, NOT transportable across generations
(Sol 6.1 @medium does more work than Sol 6.0 @medium at the same label).
Therefore the EFFORT LEVEL IS A TRAIT OF THE MODEL'S IDENTITY: the routable
unit is the pair (model @effort), measured as one atomic identity — the
grid rows are identities, not knobs. Consequences:

- Never route to an unbenched (model, effort) pair. Changing the effort
  creates a NEW identity that needs at least a smoke + spot check before
  it enters the grid.
- Always name the effort explicitly; resolve defaults from session evidence.
- The identity's verified level comes from session evidence
  (`thinking_level_change` events), never from the label it was launched
  with.

## Difficulty triage (before routing)

Difficulty is an intrinsic, SEMANTIC property of the ticket: strong models
agree on which tickets are hard, while mechanical metadata (size, files,
stratum) predicts nothing. Judgment and consistency tickets are the killers;
concrete fixes and trivial swaps are not.

- Triage is an LLM read of title + body + exit criteria, priced in the value
  class (~0.01 $). Mechanical features (stratum, size, files) do NOT
  separate difficulty — do not use them alone.
- The 256K monster guard is a hard floor and stays: oversize context is a
  split-the-work ticket, never a bigger-window ticket.

## Choosing a worker

The orchestrating model chooses, from the task and its context. No script
maps a level to a model. Inputs:

1. The task, after triage above: what it costs to be wrong, how cheap it is
   to verify, how much context it needs.
2. The grid (`grid.json`): quality, time and cost per (model @effort)
   identity, the `clusters` key as a starting shortlist, and the `family`
   label of each row.
3. The route cache (`routes.json`): which doors are alive, their caps, and
   how each runtime launches a worker (`launch_doors`).
4. The general recommendations below, then your runtime's file.

General recommendations:

- Spend the least that the task tolerates. Smoke, routine, bulk and
  cheap-to-verify work goes to the ÉCONOMIQUES cluster; Luna is the default
  absent a reason, and Haiku 5.5 is its peer inside Claude Code. Keep a
  Haiku worker under 100K prompt tokens (price x5 above).
- Concrete implementation goes to MILIEU SOLIDE; judgment, consistency or
  monster work to ASSURANCE. Uncleared content forces LOCAL/PRIVÉ. Ambiguous
  tasks wait for a human before any spend; when `rules/workflow.md` batches
  decisions, the batched list wins: collect, ask once, with a recommended default. The 256K guard outranks all of
  it: oversize context is a split-the-work ticket.
- Choose the lineage on purpose. A reviewer that shares the producer's
  `family` adds replication, not independence. When the risk calls for an
  independent view, take a worker of another family, and say in the report
  when none was reachable. The doctrine (sections "Three axes", "Scale the review to
  the risk", "Independent means another family") is `references/decorrelation.md`.
- Never route to a (model, effort) pair that is not in the grid.
- **Say the choice out loud, with the reason.** Before launching a worker,
  write the launch line (`references/decorrelation.md`, "The launch line"):
  worker, family, effort, risk row, reason. Writing the reason forces the
  proportionality: a trivial task gets a cheap same-family worker, a
  high-risk one the stronger or other-family worker.

Launch doors. A worker is reached in one of two ways: a subagent inside the
current CLI, or a headless CLI started from bash with a given model. The
exact forms, and which were verified, are in `routes.json` under
`launch_doors`. Pin the model on every launch.

Runtime recommendations. Read the file for the runtime you are running in:

- If you are Claude Code, read `routes-recommendations-claude-code.md`.
- If you are Codex, read `routes-recommendations-codex.md`.
- If you are Pi, read `routes-recommendations-pi.md`.
- If you are Vibe, read `routes-recommendations-vibe.md`.

Within-cluster selection keys: cost per leg (grid above), latency, and
environment: privacy/clearance (forces LOCAL/PRIVÉ), offline, GPU idle vs
the local lane busy, provider rate limits. Within LOCAL/PRIVÉ, IQ3_S for
quality, Q2_0 for speed on non-judgment tickets, 27B for vision.

## routes.json

Cache of the doors: provider, endpoint, key name (names only, never values),
status (live / dead / capped), price notes, caps, last_verified. Update
routes.json whenever a door changes state.

Files in this skill

  • SKILL.md6.1 KB
  • grid-coverage.json11.2 KB
  • grid.json7.7 KB
  • references/decorrelation.md2.9 KB
  • routes-recommendations-claude-code.md3.7 KB
  • routes-recommendations-codex.md1.4 KB
  • routes-recommendations-pi.md1.2 KB
  • routes-recommendations-vibe.md909 B
  • routes.json10 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.