Skip to content

Releases: AqueGen/model-routing

v0.15.0

Choose a tag to compare

@github-actions github-actions released this 20 Aug 23:58
827c356

0.15.0 (2026-08-20)

Features

  • route breadth work to a haiku surveyor, measured against a control arm (#33) (07e5e2c)
  • stamp the plugin version on every report (#31) (7812703)

Bug Fixes

  • correct the Fable caveats in routing guidance against primary sources (#23) (537999d)

v0.14.0

Choose a tag to compare

@github-actions github-actions released this 11 Aug 09:20
551062c

0.14.0 (2026-08-11)

Features

  • call out dispatches that went below their agent's pin (#27) (2b9b433)
  • notify on session start when a newer plugin version is available (d6affc2)
  • price the token volume at API list rates (#26) (c00d736)
  • report reasoning effort, and stop losing big sessions from the math (#25) (634a32a)

Bug Fixes

  • show the update notice to the user, not to Claude (#28) (4ab07f5)
  • stop scoring what the report cannot judge, and count agents not models (#29) (6565dfe)

v0.13.2

Choose a tag to compare

@github-actions github-actions released this 02 Aug 11:17

Says what the token charts can and cannot be credited with. Docs only - no pin, config, hook, or stats changes.

  • The "without routing" bar is labelled an upper bound rather than a measurement. It assumes every subagent would otherwise inherit the session model, which is the documented default only for an UNPINNED agent. Other installed plugins ship their own pinned agents and Claude Code's built-in Explore picks its own tier, so some of that volume would have run cheaply with this plugin uninstalled. How much was never measured, and the README now says so instead of implying the whole bar is the saving.
  • Added an attribution table over the same week. Of 199 routed-down dispatches: 68 came from agent frontmatter pins this plugin ships, which fire automatically whether or not any rule is followed; 127 came from an explicit model= on the dispatch, which is the routing rules being applied and is enforced by nothing; 4 came from the built-in Explore agent and are not this plugin at all. The automatic half is fully attributable, the behavioural half is not, and the difference is now visible.
  • Stated the obvious limit plainly: this is the author's own workload, measured with the author's own tool, with no before-install baseline and no control group.
  • Recorded that CLAUDE_CODE_SUBAGENT_MODEL was unset in the window - a global subagent override would have produced routed-down volume with no routing decision behind it, and the report annotates rows with env= when it is set, so its absence is evidence rather than an assumption.

v0.13.1

Choose a tag to compare

@github-actions github-actions released this 02 Aug 11:06

Re-measures the README token section on 0.13.0 so every figure in it comes from one run, and corrects a claim the new measurement made false. Docs only - no pin, config, hook, or stats changes.

  • Every number in the token section now comes from a single measurement. The previous draft quoted 1.79B of subagent volume in one paragraph and 283.7M two lines later. Both were true - the first across all sessions, the second scoped to fable-default ones - and a reader had no way to reconcile them. The section now opens with a two-column table, all sessions against fable-default sessions, with main-session and subagent volume on separate rows, and every later figure states which column it belongs to.
  • Corrected a claim the re-measurement falsified. The fable slice grew from 0.7M to 2.1M, and the growth is a model=fable reviewer dispatched deliberately above the session tier - to review 0.13.0 itself. The old text called that slice "the honest remainder" of accidental inheritance, which is now wrong about most of it. It says so instead, and points at the above-tier reporting added in 0.8.0 as the reason a deliberate top-tier dispatch shows up as a decision rather than hiding among at-tier work.
  • The scoped headline is 99%, not the 100% quoted before: a fable subagent in a fable session is at tier, not below it, so the deliberate review moved the figure. Left as measured rather than re-scoped to keep the round number.
  • Snapshot attribution corrected to v0.13.0; the previous line still credited v0.12.0, which could not have produced the main-session figures beside it.

v0.13.0

Choose a tag to compare

@github-actions github-actions released this 02 Aug 10:56

tokens now prints the denominator its percentage is measured against. The routed-down share was true and easy to over-read, including by the author, which is the failure this release exists to close.

  • Main-session volume is reported next to the routed-down share. tokens walked agent-*.jsonl only, so it described subagent work exclusively. That is the right subject - the main session model is fixed for the turn and no routing decision can move it - but printing "283.1M of 283.7M (100%) processed on a cheaper model" with nothing beside it reads as "almost everything was optimized". In the author's own window main sessions were 6.82B against 1.79B of subagent volume, so routing governed 21% of what was actually spent. The report now says so, with a per-model split of the main-session side.
  • A --session filter no longer shows its share alone. Scoping to fable-default sessions reported 100% routed down; unfiltered across the same week it was 33%, because opus-default sessions have little room to route down at all. Both are honest, and the filtered figure was the one on the README. The unfiltered share is now printed directly beneath the scoped one, with the reason they differ.
  • Populations are separated by an explicit test rather than a negative one: a bare <session-id>.jsonl at a project root is a main session, a transcript whose name begins with agent- is subagent work, and a non-agent file under subagents/ is neither. A stray sidecar there would otherwise inflate the denominator it is being measured against.
  • The empty case improved too: with main-session volume present but no dispatches, the report says how much the session spent undelegated instead of only "no subagent transcripts found".
  • Per-file usage summation was extracted into one helper now that both populations need it, so per-line model attribution and timestamp-vs-mtime windowing cannot drift between them.
  • The main-session test is positive, not negative - exactly depth 1, projects/<proj>/<session-id>.jsonl. The first cut asked "not an agent transcript and not under subagents/", which the walk applies down to depth 6, so any sidecar the harness writes beside a transcript would have enrolled as a whole session. Since that sidecar's volume lands in the denominator, the error would have pushed the routed-down share UP - the same direction of flattery this release removes.
  • An unreadable transcript is reported, not swallowed. tokens previously read only agent transcripts, which are small; main-session transcripts run to hundreds of MB, and readFileSync as a string throws past V8's ~512MB limit. That now fails the single file instead of the whole command, and the count is printed, because a silently dropped session understates the denominator and again biases the share upward.
  • The empty-window note says "no subagent volume counted against them" rather than "none of it delegated": agent transcripts can exist and still contribute nothing to a window, e.g. a resumed transcript whose lines predate an --ago range.
  • Tests 27 -> 32: the denominator line, the unfiltered-beside-scoped line, a non-agent file under subagents/, a sidecar beside subagents/ (the depth case above), and --session scoping the denominator as well as the headline. Measured at ~2s over 83 sessions and 8.63B tokens, so the extra read stays comfortable for an on-demand command.
  • README: the token section now opens with its own scope - subagent volume only, main session excluded and why - and states the unfiltered share next to the scoped one.
  • The first three findings above came from an adversarial review of this diff run on Fable; the arithmetic of the new accumulators was checked and confirmed correct in the same pass.

v0.12.1

Choose a tag to compare

@github-actions github-actions released this 02 Aug 10:34

Refreshed token snapshot, a fix to how release notes are extracted, and a readability pass over every past changelog entry. Docs and CI only - no pin, config, hook, or stats changes.

  • README token snapshot refreshed to 2026-08-02 / v0.12.0, replacing the 2026-07-20 / v0.8.1 figures. 98% of dispatches (82 of 84) and 283.1M of 283.7M tokens ran below the session tier, over a window roughly 1.7x larger than the previous one.
  • The refresh has a story worth reading, not just newer numbers: the inherited-session-tier slice fell from 21.4M of 166.8M to 0.7M of 283.7M. That slice was the accidental-inheritance case the previous snapshot flagged, 0.7.2 added the Workflow routing rule in response to that exact measurement, and this window is the evidence it worked. Tier leaks now sit at 1 of 11 unpinned dispatches (9%), under the 20% rework threshold the report warns at.
  • Release-notes extraction anchored on the exact version header. The workflow matched the version as a substring of any ## line, which is fragile - a short version can match inside an unrelated header - and it relied on the next header resetting a flag rather than stopping. It now matches ^## <version> with a delimiter and exits at the following ## , so one release's notes can never bleed into another's.
  • Every past changelog entry rewritten for readability. Two problems: entries were hard-wrapped at ~72 columns for no reason (Markdown reflows anyway, and the wrapping only made diffs and edits noisy), and many entries opened straight into a bullet with no summary line, so the rendered GitHub release read as though it had been cut off. Every version now leads with one sentence saying what the release is, and no line is wrapped by hand. Substance is unchanged - nothing was padded to look longer, and the genuinely small releases stayed small.
  • All 35 published release bodies were re-pushed from the rewritten entries, so the GitHub releases and the file agree.

v0.12.0

Choose a tag to compare

@github-actions github-actions released this 02 Aug 10:24

Adds the advisor pattern: a plan check before implementation, for the case where no plan exists yet. Docs only - no pin, config, hook, or stats changes.

  • Plan check before implementation, when no plan exists yet. Every escalation rule in the skill was reactive - a stuck agent hands back, a weak result retries one step up. This adds the proactive counterpart: when implementation work is dispatched with no approved plan behind it, the cheap-tier agent returns its PLAN first and the main session checks it before any code is written.
  • Source and measurement: Anthropic's model-selection guidance names this the advisor strategy - "faster, lower-cost worker models to call more intelligent models to check their plan and evaluate their work" - and reports Sonnet 5 with a Fable 5 advisor within 10% of Fable 5's SWE-bench Pro score at 63% of the price of using Fable 5 for the whole task.
  • Costs one short turn and adds no new agent. In this plugin's shape the main session already IS the advisor, so the pattern reuses the loop that is already there instead of introducing a seventh bundled agent.
  • Written as a condition, not a rule-plus-exemption: it fires when there is no approved plan and is silent when there is one. That form holds for a setup where this plugin is the only thing installed as well as one with a planning workflow in front of it, and it leaves no exemption clause for a model to negotiate with under pressure.
  • Skill: new bullet placed ahead of the escalation rules, which are now named reactive so the two read as a pair rather than as competing advice.
  • Routing anchor: one line, so the pattern is present in every session rather than only when the skill is explicitly invoked. The anchor is the surface that actually changes behaviour here; the skill entry documents it for anyone reading the plugin.
  • Audited the rest of the plugin for assumptions about an external planning workflow and found none: planning is already routed to the main session, the verifier and reviewer agents ship with the plugin, and the SendMessage-unavailable path was already handled.

v0.11.1

Choose a tag to compare

@github-actions github-actions released this 01 Aug 13:07

Scopes the verifier gate so the routing cannot be read as contradicting Opus 5's guidance on self-verification. Docs only - no pin, config, hook, or stats changes.

  • Scoped the verifier gate explicitly: the verifier gates ANOTHER agent's cheap-tier diff, never the main session's own work.
  • Rationale: a current-generation model self-verifies, so spawning a subagent to re-check what the main session just wrote burns tokens for no quality gain - which is exactly what Opus 5's prompting guide means by "do not use subagents to verify or double-check your own work".
  • Skill: the batched-output verifier bullet now carries that scope and the citation, alongside the existing "skip it when the main session reads the full diff anyway" exemption, so both ways of double-paying are named in one place.
  • Routing anchor: the one-line verifier rule gained the same scope, so the distinction is present in every session rather than only on skill invoke.
  • The cheap-tier gate itself is unchanged - gating another agent's diff was always the intent and stays recommended.

v0.11.0

Choose a tag to compare

@github-actions github-actions released this 30 Jul 20:46
e656a70

Effort accuracy fix plus a Workflows chapter. Docs only - no pin, config, hook, or stats changes.

  • Corrected a stale claim: the skill and README stated that Anthropic's quality-first guidance for Opus-class models starts coding and agentic work at xhigh. That is the Opus 4.7/4.8 recommendation. Opus 5 is told to start at high, step up to xhigh for demanding coding and agentic work, and use low/medium liberally as the primary cost control - the generation this plugin has targeted since 0.9.0. The text now names which generation each recommendation belongs to and says to re-sweep effort after a model change.
  • Effort is documented as shaping all response tokens, tool calls included: at lower effort the model makes fewer tool calls, so a cheap pin saves twice. low's own documented use case is subagents.
  • Sonnet 5 at medium is comparable to Sonnet 4.6 at high - stated next to the sonnet/medium pins, which that comparison justifies.
  • Prompt-cache caveat: changing effort between requests invalidates the cached prefix, so effort should vary across workloads (per-agent pins, per-agent() opts) rather than inside one conversation.
  • New ## Workflows chapter in the skill: the breadth-vs-chain boundary, per-stage routing with CLAUDE_CODE_SUBAGENT_MODEL precedence, granularity as saved progress on resume, the /config size guideline (default medium since Claude Code 2.1.219), the 25-agent / 1.5M-token warning and the 16-concurrent / 1000-total runtime caps, and the acceptEdits permission note for workflow subagents. The ## Rules bullet that restated part of this is now a pointer at the chapter.
  • README: workflow cost settings and the ultracode stance in Recommended settings; the 0.10.0 report caps now cite the 1,000-2,000 token subagent-summary shape; the old "Workflow use" section is renamed "Superpowers flow" so the word "workflow" means one thing.
  • SKILL.md grew 2377 -> 2973 words. Deliberate: the skill is charged per invoke, and the routing anchor - charged every session - was not touched.

v0.10.0

Choose a tag to compare

@github-actions github-actions released this 24 Jul 23:13
1b87631

Token diet: the plugin's own overhead cut with zero rule loss, plus success-path report caps. Budgets were soft and meaning won every conflict - the numbers below are what non-debatable cuts yielded.

Surface Words before after Paid when
routing anchor 501 428 every session start + every compact
agent descriptions (6) 278 173 every session (agent list)
agent files (6, incl. bodies) 1870 1674 per dispatch
SKILL.md 2445 2377 on skill invoke
  • Report caps, success-path only (failures always full): test-runner PASS <= 5 lines, verifier terse one-line reasons (a FAIL lists every real one), scout <= 15 lines, e2e-runner step log <= 20 lines.
  • implementer's stale SWE-bench point-gap claim removed from its body (the 0.9.0 dated-framing pass missed it).
  • All 15 anchor directives, every agent boundary and anti-misuse clause, and every skill rule survived - the PR carries the rule-survival matrix. No pin, config, or stats changes.