Undercut for Aider

Aider already loads read-only context files. Give it one that stops overpaying.

Undercut is a free, MIT-licensed policy file delivered through Aider's own conventions mechanism — --read, /read, or a read: entry in .aider.conf.yml — cheap tier first, escalate only on evidence, never on a vibe. Unlike most clients on this site, Aider has no automatic rules-file discovery of its own; you point it at the policy once and it sticks. See below for exactly how.

Install for Aider See the benchmarks
Works anywhere a routing policy can be read
Claude Code Codex Cursor Copilot OpenCode Aider

How this maps onto Aider

No auto-discovery here — you load the file, once, and it sticks.

Aider's own docs are explicit that it has no built-in rules-file or Agent Skills directory it scans on its own — per Aider's conventions docs, the documented pattern is a conventionally-named CONVENTIONS.md you load explicitly, either with aider --read CONVENTIONS.md on the command line or /read CONVENTIONS.md inside a running chat. Either way marks the file read-only and, per that same page, caches it if prompt caching is enabled — cheaper on every subsequent turn, not just the first.

To avoid typing --read every session, Aider's config docs describe a persistent alternative: a read: entry in .aider.conf.yml, which accepts one file or a list. Aider looks for that config file in your home directory, your git repo root, and your current directory, loading all three if present — later ones override earlier ones — or you can point it at a specific file with --config/-c. Once read: names the policy file, every session in that repo loads it automatically, no flag required.

Separately, the agents.md project's own compatibility page lists Aider as reading AGENTS.md when you add read: AGENTS.md to .aider.conf.yml — functionally the same read: mechanism above, just pointed at the cross-tool convention instead of a bespoke file. That claim comes from the AGENTS.md spec's own site, not from Aider's documentation directly, so treat it as one config line to try rather than a separately-confirmed Aider feature — see Honest limits below.

Aider already has its own cost-tiering primitive worth knowing about: --model, --weak-model, and --editor-model assign different models to fixed roles — main chat, commit messages/history summarization, and editing, respectively (per Aider's options reference). That's a static, role-based split decided once at launch. Undercut's tiers — cheap, standard, frontier, apex — are dynamic instead: assigned per unit of work based on verifiability and risk, escalating only on measured evidence. The two aren't in conflict — --weak-model picks who writes your commit message; Undercut's rubric picks who does the actual edit — but they answer different questions, and nothing here overrides your --model flags or touches Aider's network calls to your LLM provider.

Install for Aider

Free. MIT. Nothing installs, nothing proxies your traffic.

Option 1 — persist it in .aider.conf.yml (recommended, confirmed path)

Run this from your git repo root. It downloads the policy as CONVENTIONS.md — Aider's own documented convention name — and adds a read: line so every future session picks it up with no flag needed.

$ curl -fsSL https://raw.githubusercontent.com/undercutsh/firstpass/main/skills/firstpass/SKILL.md -o CONVENTIONS.md && printf 'read: CONVENTIONS.md\n' >> .aider.conf.yml

Option 2 — load it for one session, no config change

Skip the config file and pass --read directly, or run /read CONVENTIONS.md inside a chat you've already started. Either way Aider marks it read-only and caches it if prompt caching is enabled, per Aider's own docs.

$ aider --read CONVENTIONS.md

Already have it in AGENTS.md? The agents.md project's own site says adding read: AGENTS.md to .aider.conf.yml gets Aider reading it — same mechanism as Option 1, just a different filename. That claim isn't in Aider's own documentation, though, so we haven't independently confirmed it end-to-end; if you already maintain an AGENTS.md, it costs one line to try before adding a second file.

No npx skills add path yet. skills.sh doesn't list Aider as a supported install target as of this writing — the manual options above are the confirmed way in for now.

Validate it yourself

  1. 1Read the published results — testing/README.md and the raw JSON in testing/results/
  2. 2Reproduce for free, no API key, no spend: node src/main.js --mock
  3. 3Run aider --read CONVENTIONS.md on a small task and check whether it references the routing policy before starting mechanical work

Zero lock-in. It's a markdown file Aider reads — drop the read: line, or stop passing --read, and you're back to status quo.

How it works

The Undercut Rubric · v1

Six flags assign a tier. Three triggers are the only way up.

This 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.

unit of work
6-flag rubric
0 flags
cheap~90% of units land here ✓
1–2
standard
3+/own
frontier
↑ escalate +1 tier only on: fail ×2 · two runs disagree · tagged "uncertain" residue only — never redoes the batch
See the rubric

Step 1 — Base tier, six-flag rubric

Unverifiable — can output be checked mechanically? (tests, schema, diff, grep)
Ambiguous — one right answer, or several defensible ones?
Blast — reversible? touches money, auth, user data, production, deletes?
Cross-cutting — one file/source, or reasoning across many?
Novel — pattern-following, or genuinely new design?
Format-strict — must output match an exact schema?

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.

The override — single biggest lever

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.

Step 2 — Escalate exactly one tier, on evidence only

  • Verification fails twice at the current tier
  • Two cheap-tier runs disagree on ambiguous-flagged work
  • The worker tags an item "uncertain"

Residue-only handoff

The next tier up gets only the failed or uncertain items, plus verification notes. It resolves the residue — it never redoes the batch.

Hysteresis — guardrails

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

Flags steer. Verification and escalation decide.

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.

See the data

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.

Haiku dispatcher
90% flag agreement
100% tier-match
Sonnet dispatcher
93% flag agreement
100% tier-match

The rules are about the work, not the model.

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

What this doesn't do.

Not a proxy, not a gateway, doesn't auto-flag in production — Aider scores the flags itself (measured robust to getting them wrong, see above). Unlike most clients on this site, Aider won't pick the policy up on its own: forget the read: line or the --read flag and it's simply not loaded, silently. The AGENTS.md path above is a third-party claim from the agents.md project's own site, not Aider's documentation, so treat it as unverified until confirmed directly. Doesn't promise a dollar figure for your workload, and doesn't prove your number until you run it — every figure here is a reproducible observation from our tasks and graders, not a guarantee about yours. Full list of general limits, with the finance/procurement note and the paid-tier disclosure, is on the main page.

Undercut the top tier. Not the quality bar.

Nothing about this page expires. What does keep happening is the token bill, one session at a time, on whatever Aider is currently doing with mechanical work.

View on GitHub