Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "model-routing",
"description": "Tiered model routing for token economy: the strongest model thinks, cheaper models grind. Ready-made subagents (sonnet scout, implementer and E2E runner, haiku test-runner and verifier, opus reviewer) plus a routing skill and dispatch stats.",
"version": "0.13.2",
"version": "0.14.0",
"author": {
"name": "Artem Frolov"
}
Expand Down
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "0.13.2"
".": "0.14.0"
}
16 changes: 16 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,21 @@
# Changelog

## [0.14.0](https://github.com/AqueGen/model-routing/compare/v0.13.2...v0.14.0) (2026-08-11)

Makes the report answer three things it could not answer before - what effort ran, what the volume would have cost in dollars, and which dispatches went below their own agent's pin - then stops it scoring the cases it cannot judge. No pin or routing-rule changes: what the plugin asks a session to do is unchanged, what it can tell you about the result is not.

### Features

* **Effort is reported**, the second knob a tier-only report cannot show ([#25](https://github.com/AqueGen/model-routing/issues/25), [634a32a](https://github.com/AqueGen/model-routing/commit/634a32aab27cec07810193e8c7e64c2a26a46739)). Reconstructed from the documented precedence - `CLAUDE_CODE_EFFORT_LEVEL`, then the `effortLevel` settings cascade, then the model default - clamped to what the session model actually supports, and tagged with which of the three sources it came from. The four states it cannot see are printed beside it rather than left implied: a mid-session `/effort`, ultracode, an organization cap, and the model-default hold some models apply on first run. The same change stopped losing large sessions from the routed-down math: the session model was read from a 256KB head window, so a multi-megabyte transcript naming its model past that point counted as unknown. 123.1M tokens came back, with the headline share unchanged.
* **The volume is priced in dollars** ([#26](https://github.com/AqueGen/model-routing/issues/26), [c00d736](https://github.com/AqueGen/model-routing/commit/c00d73656ac1fba40006a221e15d152228b634f3)). What ran, what it would have cost had every subagent inherited the session model, and the difference - computed per token type, because cache reads bill at a tenth of input and a flat multiply overstates the total several times over. It is a counterfactual, not a bill, and says so: on a subscription you pay none of it, both documented biases point downward, and the price table carries the date it was transcribed.
* **Below-pin dispatches get their own section** ([#27](https://github.com/AqueGen/model-routing/issues/27), [2b9b433](https://github.com/AqueGen/model-routing/commit/2b9b433baa3bdeb66d618555d8315c0d5ddafdc3)). A pin is a ceiling, but it is also a floor: pushing an agent below the tier its own file names - a reviewer onto sonnet, an implementer onto haiku - was counted as a routing win, since it did run cheaper than the session. The report now names it, judging against the lower of the pin and the session so a cheap session is never blamed for a cap it required.
* **A version notice on session start** ([d6affc2](https://github.com/AqueGen/model-routing/commit/d6affc2e5949c2de5a49a61bc5a91569d660df1c)). Marketplace installs never update themselves, so the plugin checks at most once a day and says when you are behind.

### Bug Fixes

* **The version notice reaches the user**, not Claude ([#28](https://github.com/AqueGen/model-routing/issues/28), [4ab07f5](https://github.com/AqueGen/model-routing/commit/4ab07f5ba748671d5bc46c621051da027f5ff7ad)). It was written to plain stdout, which `SessionStart` adds to the model's context rather than showing anyone - and the model can neither run the update nor be relied on to pass the message along, so the notice shipped in this same release was reaching nobody. It now goes through `systemMessage`, the only output field documented as user-visible. The advice was incomplete too: nothing refreshes the marketplace catalog on its own, so `claude plugin update` alone can reinstall the version already sitting in a stale catalog. Both commands are named in the order they have to run, plus a link to the release notes.
* **Unknown is no longer scored as fine** ([#29](https://github.com/AqueGen/model-routing/issues/29), [6565dfe](https://github.com/AqueGen/model-routing/commit/6565dfe455565d31d73b5ec8a37b6f3fefadc591)). Four measurements flattered themselves the same way. Tier leaks ranked an unrecognized session family as the cheapest tier there is, so a bare dispatch on a future top-tier model came out clean, and session-less entries padded the denominator where they could never be anything else - three such dispatches printed "0 of 3 (0%)", a clean bill of health over a population nothing can judge. The by-session row counted models instead of agents, so one agent that fell back mid-run reported as two, more agents than transcripts on disk. A mixed row counted out of the raw total while the headline above it counted out of the judged entries. Unpriced volume blamed the agent's model when the session's was the unpriceable one, contradicting the line directly above it. Also `mythos-5` had a price and a tier but no effort row, and two pieces of dead code went: an unreachable tier comparison and a counter nobody read.

## 0.13.2 - 2026-08-02

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