Undercut for GitHub Copilot
Undercut is a free, MIT-licensed routing policy you drop into .github/copilot-instructions.md (or AGENTS.md, which Copilot's coding agent also reads) — cheap tier first, escalate only on evidence, never on a vibe. Copilot has no built-in cost dial of its own to compare against; this exists because the same overpay-by-default pattern we measured elsewhere in the agent ecosystem (see the Claude Code page) shows up anywhere an agent defaults every task to its strongest model.
How this maps onto Copilot
Copilot doesn't have a first-class "skills" directory the way Claude Code does — there's nothing that auto-discovers skills/firstpass/SKILL.md on its own. What GitHub Copilot does read automatically is repository custom instructions: a single .github/copilot-instructions.md file at the repo root, written in plain Markdown, that's applied in full to Copilot Chat, code review, and the Copilot coding agent for every request in that repository. As of August 2025, the Copilot coding agent also reads AGENTS.md (root or nested — the nearest one in the directory tree wins), alongside the GitHub-native format. That means Undercut's policy has to be delivered as instruction content Copilot reads whole, not as a skill it discovers — see Install below for the exact mechanics and what's still unverified.
The tier names — cheap, standard, frontier, apex — stay generic on purpose. models.md gives the rule of thumb rather than a fixed mapping for Copilot specifically: Copilot's own model picker exposes several vendors' models (varies by plan), so cheap resolves to the smallest/fastest model you have access to, standard to your default work model, frontier to the highest-reasoning model, and apex to a single tie-break call on the strongest model available. Nothing here sits between Copilot and its model backend — it's instruction text Copilot reads at request time, no proxy, no network hop.
Install for Copilot
.github/copilot-instructions.md is read in full by Copilot Chat, code review, and the coding agent on every request in the repo — so appending the policy text there is the most reliable way to get it in front of Copilot, since it doesn't depend on Copilot separately choosing to open another file.
Copilot also supports .github/instructions/*.instructions.md files with a YAML applyTo glob in frontmatter, so you can scope the policy (or exclude it from code review with excludeAgent: code-review) instead of applying it repo-wide:
You'll need to add an applyTo: "**" frontmatter block yourself — the raw SKILL.md doesn't ship with one, since it's written to be portable across agents that don't use this convention.
testing/README.md and the raw JSON in testing/results/node src/main.js --mockZero lock-in. It's instruction text Copilot reads — delete the block and you're back to status quo.
How it works
The Undercut Rubric · v1This is a named, versioned spec — not internal logic we could quietly change. When the rubric changes (a new flag, a different cap), the version number moves and the changelog says why.
Every unit of work gets scored against six flags, then assigned the cheapest tier that can plausibly handle it. It only moves up a tier when something objective proves it needs to — a failed check, a measured disagreement, an explicit uncertainty flag. It never moves up on a guess, and it never moves back down mid-task.
0 flags → cheap · 1–2 → standard · 3+ or any ownership/judgment call → frontier. Apex only when you can write one sentence stating why the marginal intelligence pays for the cost.
Cheap-to-verify ⇒ cheap-to-generate. If output can be checked mechanically, it starts at the lowest tier regardless of how hard it looks — verification catches failure. Only unverifiable work needs to start high.
The next tier up gets only the failed or uncertain items, plus verification notes. It resolves the residue — it never redoes the batch.
Never de-escalate mid-task. Max one retry per tier. Anything still unresolved goes to a single batched apex tie-break call. One hard file in a 700-file job doesn't drag the other 699 up a tier.
unit of work
|
6-flag rubric
|
+---+----+
| 0 flags|--> cheap
| 1-2 |--> standard
| 3+/own |--> frontier
+---+----+
| fail x2 / disagree / uncertain
v
escalate +1 tier
(residue only)
|
still unresolved?
v
single batched
apex tie-break
Why it holds up
Even when the rubric flags are scored imperfectly, the escalator still routes work to the right tier almost every time — because a wrong flag only ever costs one extra cheap attempt, never a wrong answer or a big bill.
A stock dispatcher model reproduces the rubric flags imperfectly — Haiku hits 90% agreement, Sonnet 93%. The weakest flag (format-strict) is only 60%. None of that matters: under the shipped policy, both dispatchers still route 100% of units to the correct tier. A wrong flag changes the ladder cap, never the base tier — worst case, one extra cheap attempt.
Every rule is a property of the unit of work — verifiable, ambiguous, blast-radius — never a specific model's known weakness. Vendor cards go stale as models change; work properties don't. It's also hard-won — a format-strict rule that worked on Anthropic backfired on Gemini, which is exactly why the rubric no longer encodes per-vendor behavior.
Honest limits
Not a proxy, not a gateway, doesn't auto-flag in production — and on Copilot specifically, it's not a "skill" Copilot discovers on its own: it only takes effect if you've put it in an instructions file Copilot reads (see Install above). Copilot's own reliability at scoring the flags hasn't been separately measured the way Claude Code's has (see above); treat that as unverified until tested. And it doesn't promise a dollar figure for your workload. Full list of general limits, with the finance/procurement note and the paid-tier disclosure, is on the main page.
Nothing about this page expires. What does keep happening is the token bill, one session at a time, on whatever Copilot is currently doing with mechanical work.