Skip to content

Releases

AutoMode 0.10.0

Choose a tag to compare

@github-actions github-actions released this 05 Nov 14:55
eadcb68

Added

  • Live savings on the bar. Once AutoMode runs a prompt on another model than the session's, the bar shows saved ~$0.38. Right after a switch, it shows ↺ $0.07 to pay back while the new model's cache rewrite is paid off. The estimate prices each main-session request's real tokens on the session's model, with that model's own warm cache, minus AutoMode's own judge calls (hooks/lib/savings.ts). /automode details shows the parts. Hide it by removing saved from Bar metrics. On the five benchmark sessions it estimated a 56% saving against Opus, where the measured runs showed 52% (bench/savings-replay.mts).

Install

claude plugin marketplace add mralexivy/AutoMode
claude plugin install automode@automode

To update, run claude plugin marketplace update automode and then claude plugin update automode@automode.

Tested with Claude Code 2.1.318.

Verify the bundle

sha256sum --check SHA256SUMS
gh attestation verify automode-0.10.0.zip --repo mralexivy/AutoMode

AutoMode 0.9.1

Choose a tag to compare

@github-actions github-actions released this 05 Nov 07:24
c745e51

Fixed

  • A floor lift stays inside the allowed set. With Sonnet out, a T2 lift takes the next allowed tier up. With no allowed model at the floor, the strongest allowed one runs, and the route records the unmet floor. A family is out while its circuit breaker is open, so the route used to go to a model that was failing (#95).

Install

claude plugin marketplace add mralexivy/AutoMode
claude plugin install automode@automode

To update, run claude plugin marketplace update automode and then claude plugin update automode@automode.

Tested with Claude Code 2.1.318.

Verify the bundle

sha256sum --check SHA256SUMS
gh attestation verify automode-0.9.1.zip --repo mralexivy/AutoMode

AutoMode 0.9.0

Choose a tag to compare

@github-actions github-actions released this 05 Nov 05:19
670448c

Added

  • Agent automode:builder: it takes one task from a brief and works until the checks pass or a real blocker stops it. The caller sets its model. The v6c rescue and builder mode use it. The plan implementer, which stops after two fix attempts, did not fit.
  • v6 execution switches, each off by default (hooks/lib/execution.ts, measured in bench/experiments/V6.md):
    • start: v6a | v6b keeps Haiku for T0 and bounded T1 work, and starts everything else on Sonnet: high under v6a, the judged effort under v6b.
    • recovery: hold | rescue never moves a large context to another model in the middle of a task. A switch stays allowed while the context is small or the cache is cold. rescue instead starts a fresh automode:builder on the same model, then one model up, priced against a switch. It runs once per model, in repair mode or in restart mode. A pin allows only a fresh builder on the pinned model.
    • review: observed asks for a review only on critical risk the diff shows.
    • A watchdog acts on an attempt that burns context without a pass, long before Haiku's limit.
    • strategy: v6a | v6b | v6c presets the three switches.
    • Each recovery records its prices. Haiku's price step and each same-model effort change are recorded.
  • Setting builder, off by default: when on, non-trivial work goes to one builder subagent at the routed model from the start. Experimental.
  • A task budget, taskBudgetUsd in config.json, off by default. It counts every paid request of a task: the main session, subagents, forks, consults and judges. Once it is spent, the ladder buys no more rungs, the model is told once to stop and report, and the task ends as budget_exhausted, never as done (hooks/lib/budget.ts).

Fixed

  • A rescue the model declined mid-turn comes back once at the stop, when the work is not verified. The model follows a stop block where it declines a note in a tool result. On held-out mathjs-nullish, Haiku declined the rescue at its context limit and stopped with the work partly verified ($0.56, failed), while plain Sonnet high passed it for $0.70.
  • The rescue note names AutoMode as its source and makes no claim about the work. On sqlglot, a note that called the edits "not progress" read as false to Haiku, which declined it as an injected instruction.
  • A rescue in restart mode asks for one builder call and no git steps. On sqlglot in the v6d pilot, the note asked for a worktree, a stash and a patch, and Haiku declined it as an injected instruction. A declined rescue is not forced: a switch after 10 unanswered requests was tried and never helped. qs, pyflakes and five sqlglot runs paid $0.57 to $2.50 each with it, and sqlglot failed every time.
  • Under the v6 recovery, Haiku past its 100k price step keeps the task unless its next request costs more than on Sonnet. Moving the task off Haiku there was tried and made things worse. Across the v6d runs, every task Haiku kept passed cheaply up to 130k, except sqlglot, which plain Sonnet high fails 2 times in 3. Every failure and every costly pass came after a rescue or a switch moved the task off Haiku mid-way.
  • Under the v6 recovery, a revert alone no longer climbs the ladder. In the v6d pilot, Haiku had solved marshmallow, then checked out its change to redo it cleanly, and "the task reverted its own work" moved it to Sonnet: $0.22 against $0.02 in v5. A real failure still shows in the checks and at the stop.
  • Under review: observed, a judge's predicted risk no longer asks for a reviewer. The S3 hard rules, the change and its checks still do: critical risk in the diff, a large change, or a failed or missing check. In W1, a judge's "public API change" rating bought a $0.29 Sonnet review on a task plain Sonnet high passed with none.
  • Under the v6 recovery, an effort step stops at high. In S1, five raises to Sonnet xhigh cost $0.84, and plain Sonnet high passed each of those tasks with no raise. A repeat failure now holds, and a failing stop goes to the priced recovery.
  • Under the v6 start rule, a first prompt whose AutoMode judge failed takes the need's model, not the model the session was launched on. In S1, the judge timed out in a session launched on Opus, and a task the need rated Sonnet high ran on Opus.
  • Under the v6 recovery, a task's first failed stop holds: the model fixes the check, or says why it does not apply. A rescue needs the check to fail again after new work. In S1, dnspython's network test fails on this machine whatever the code, and the first stop started a fresh builder at once ($0.85, against $0.69 for plain Opus).
  • A failed AutoMode judge no longer leaves a hard task on Haiku. When its reply does not parse and the other judge's need names a stronger model, that model is a floor: Sonnet, or Opus where a judge may start Opus. In W1, a question had moved the session to Haiku, and a hard migration both effortless calls rated Opus high then ran on Haiku, at Opus's cost.
  • A running model that a floor excludes is ruled out even when it is not a candidate. A fixed family used to leave it unpriced, and the vote gate held it below the floor. This closes the known Haiku-hold hole in tests/route-properties.test.mts.
  • AutoMode keeps session snapshots for the 40 newest sessions only. It kept one per session and never removed any, so after some 350 sessions the plugin store passed its 4 MiB limit. Every save was then refused, and no resumed session could restore its route or its cache.
  • The routing state is saved after the turn's last request too. A print-mode process (claude -p, --resume) can exit before the turn completes, so the next process routed from a stale cache. On the W1 smoke it took a warm Sonnet session for Haiku, moved a question there, and paid the move back.
  • The completion gate skips only a line made of file viewers alone. A line such as find . -name x; python3 check.py runs a program, and its output now counts as evidence.
  • A stop with no edit since the last stop rung no longer climbs the ladder. The model has checked again and contests the failure, so a pricier model would only read the same evidence. On dnspython, three stops in 29 seconds bought a fork, an Opus consult and an Opus switch, on a network test that failed before any change: $1.51, against $0.45 for Sonnet high.
  • A check run in a copy under /tmp is no check of the work. On tomlkit, the model copied its new tests next to the original code to show that they fail there, and that read as a regression, which moved Haiku to Sonnet. A test the task added or edited never joins the stash baseline, so it cannot excuse its own later failures.
  • The completion gate reads a stated example written as code whole. It split on : and , inside brackets and quotes, so qs's qs.parse({ a: arr, 'a[]': 'y' }) became the input y' }). A trailing ", and arr must stay ..." clause also became part of the expected value. Every check that named the input then read as a contradiction, and the gate climbed to an Opus consult: $1.99, against $0.16 for Sonnet high.
  • A test that fails on the stashed original code is the repository's own failure. A later run that fails only on such tests no longer fails the completion gate or climbs the ladder, unless the task names the test or asks to fix failing tests. On pyjwt, a TLS test failed on the untouched code, and AutoMode climbed to Opus on it: $1.55, against $0.32 for Sonnet high.
  • A test regression needs evidence in the output: a failing test, a runner's failure line or a compile error. An exit code alone is often a probe script run beside the check. All three regressions the 2026-11-03 run escalated on were that, on xmltodict, cachetools and marked.
  • A test run whose only errors are a program the machine lacks, such as python where only python3 exists, is no verdict on the work. It no longer fails the completion gate or climbs the ladder. On sqlglot, test_lazy_load failed this way before and after every edit, and AutoMode climbed four rungs to Opus on it: $2.71 of a $4.93 run that still failed.
  • Under opusStart: evidence, a review the model asks for on its own also runs on Sonnet, unless a critical failure was observed. The reviewer agent's own default is Opus, and on cachetools such a review cost $0.46 of a $1.21 run.
  • A failing line whose test runner printed a clean pass is filed under the whole line, not as a failure of the suite. On xmltodict, pytest | tail; python3 -m doctest x.py printed 100 passed, and old doctests failing read as a test regression, which moved Haiku to Sonnet.
  • A check that never started, such as command not found: python, is no longer a passed check. A trailing ; echo "exit=$?" now counts as a masked exit code. In the benchmark, such a run counted as a pass on marshmallow and started a re-route.
  • A file named schema is a database schema only as db/schema*, schema.prisma or schema.rb. Editing marshmallow's schema.py had made the task critical and moved it from Haiku to Sonnet after its fix was done.
  • The completion gate no longer reads a described result as a printable example. "x must be a separate list equal to ['foo']" had made every check that named x a contradiction, and the gate blocked a finished jinja task, which then bought a fork and an Opus consult.
  • A revert command counts as escalation evidence only when an edited file has lost its change. A model that checks out the old file to prove its new tests fail, then copies its fix back, keeps its work. In the benchmark, findmyway moved from Haiku to Sonnet on exactly that, for $0.27 of its $0.30.

Changed

  • The default execution strategy is now v6c (strategy in config.json). Haiku takes questions and bounded small work, and Sonnet does the rest at the judged effort. A failure brings a fresh builder instead of moving a large context to a pricier model, and a review runs on observed evidence. legacy stays available. The release run is in bench/experiments/V6.md.
  • Under `opus...
Read more

AutoMode 0.8.0

Choose a tag to compare

@github-actions github-actions released this 03 Nov 13:25
c13d44f

Changed

  • T3 work now starts on Sonnet high, not Opus (opusStart: evidence). Opus comes from the escalation ladder, on a failing check, a regression or a reviewer blocker. T4 and a Fable verdict still start on Opus, and Haiku routing is unchanged. In the 30-task proof run, the old rule sent 15 tasks to Opus for $12.49, and Sonnet high passed all 15 for $4.51. opusStart: judge restores the old rule.

Fixed

  • A Bash line that runs the full test suite beside other checks is now keyed on the full suite. A --version call in parentheses no longer counts as a check run. Before, one sqlglot suite got 3 keys across its runs, so its repeats went unseen.

Changed

  • The rescue ladder ships on: strongStep: effort-first, consult: priced, packet: fork-gated and forkRung: on. With these settings and opusStart: evidence, AutoMode passed 29 of 30 tasks at 32% lower cost than Opus medium (report). The ladder's effect alone, against the old defaults, is not settled: the 30-task run judged it inconclusive. Each setting keeps its old value as an option.

Fixed

  • The escalation ladder now sees edits made through Bash (sed -i, a heredoc that writes a file, a redirect, git apply). It keys a check on its check commands alone, not the whole Bash line. Before, a session that edited and tested in one call got a new failure each time and never escalated.
  • The same check failing 3 times after edits, each time with other tests, now counts as a repeat of the check.
  • A test run that reports failed tests now counts as a defect even when a later line looks like a missing module. Before, a stray No module named after FAILED (failures=3) filed sqlglot's real failures as environment noise, so the escalation ladder never acted on them. Python unittest's FAIL: and ERROR: lines now name the failing tests, and its FAILED (failures=…) summary marks a masked check as failed.

Added

  • Escalation records carry the cache state: prefix size, time since the last refresh, and what is left of its lifetime. Each architect consult writes a consult-run record with its measured duration and cost. A baseline bench arm pins every rescue setting at its old value.
  • strongStep: effort-first raises effort on the running model once per failure episode, on strong evidence, before the Opus consult and the switch. Critical-risk work and a floor that needs the model skip it. The value model keeps the old order. Arm: rescue-effort-first.
  • consult: priced asks the Opus architect only when that costs less than moving the session. The price counts what is left of the cache lifetime against how long a consult runs, one verify request, and the chance the failure comes back and still needs the switch. Quality rules come first. Unmeasured inputs are labeled priors, and each escalation record carries the estimate. The value always keeps the old behavior. Arm: rescue-consult-priced.
  • Each ladder consult gets an outcome record: verified_resolved, recurred, escalated, unverified or abandoned. A passing check alone is not a fix. It also needs the reviewer's approval or a verified completion gate. The record also says whether the edits after the consult followed the architect's plan. The bar shows an open consult. Under a rescue setting, a consult or a strong-evidence raise also requires the independent review.
  • packet: rich gives the Opus consult a packet where each fact names its source. It holds the person's later messages, the diff from git, every failing check with a 40-line tail, and what was tried. packet: fork-gated adds a same-model $.model.fork only for a gap the conversation could fill, and only while the fork costs under a quarter of the consult. Its record keeps the measured cache read. The value basic keeps the old packet. Arms: rescue-packet-rich, rescue-packet-fork.
  • The guardian's lifecycle record carries expected: a fuller compaction model, recorded in shadow. It adds context regrowth, the chance the cache expires before the next request, and the cost of re-reading a detail the summary drops. It changes no offer.
  • forkRung: on adds a rung before the Opus consult. The main model starts a fork agent, which shares the conversation and its warm cache, to diagnose the failure without editing. A fork-run record measures its cost and how much of its first request the cache served. Arm: rescue-fork.
  • Under a rescue setting with completionGate: block, a stop on a failing check is strong evidence for the ladder. Each such stop, up to four (effort, fork, consult, switch), is sent back with the next rung in the block message.

Install

claude plugin marketplace add mralexivy/AutoMode
claude plugin install automode@automode

To update, run claude plugin marketplace update automode and then claude plugin update automode@automode.

Tested with Claude Code 2.1.317.

Verify the bundle

sha256sum --check SHA256SUMS
gh attestation verify automode-0.8.0.zip --repo mralexivy/AutoMode

AutoMode 0.7.0

Choose a tag to compare

@github-actions github-actions released this 02 Nov 12:52
a7826fa

Added

  • Policy-auto decision records carry the route input and its outcome in auto.replay. bench/route-replay.mts replays them at no cost: exactly, or under another policy. Records still hold no prompt text.

Install

claude plugin marketplace add mralexivy/AutoMode
claude plugin install automode@automode

To update, run claude plugin marketplace update automode and then claude plugin update automode@automode.

Tested with Claude Code 2.1.316.

Verify the bundle

sha256sum --check SHA256SUMS
gh attestation verify automode-0.7.0.zip --repo mralexivy/AutoMode

AutoMode 0.6.1

Choose a tag to compare

@github-actions github-actions released this 02 Nov 07:08
b2222eb

Fixed

  • A task on Haiku no longer leaves it at 80k tokens of context. The limit is now 150k. Fixed Haiku passed 9 of 10 screen runs past 80k, while one forced move to Sonnet raised a task from $0.12 to $0.98.

Install

claude plugin marketplace add mralexivy/AutoMode
claude plugin install automode@automode

To update, run claude plugin marketplace update automode and then claude plugin update automode@automode.

Tested with Claude Code 2.1.316.

Verify the bundle

sha256sum --check SHA256SUMS
gh attestation verify automode-0.6.1.zip --repo mralexivy/AutoMode

AutoMode 0.6.0

Choose a tag to compare

@github-actions github-actions released this 02 Nov 06:14
3ae315a

Changed

  • Classification now sends T0 to T2 work without critical risk to Haiku, and T2 work whose need names Opus to Opus. reachHaiku: false restores the old rules.

Removed

  • sonnetFirst, added in 0.5.0. Prompt classification picks the model, so a T3 task whose need names Opus runs on Opus again.

Fixed

  • A .sql method in prompt text, such as scope.expression.sql, no longer rates a task as critical. A .sql file still does.

Install

claude plugin marketplace add mralexivy/AutoMode
claude plugin install automode@automode

To update, run claude plugin marketplace update automode and then claude plugin update automode@automode.

Tested with Claude Code 2.1.316.

Verify the bundle

sha256sum --check SHA256SUMS
gh attestation verify automode-0.6.0.zip --repo mralexivy/AutoMode

AutoMode 0.5.0

Choose a tag to compare

@github-actions github-actions released this 01 Nov 23:13
d70aaaf

Added

  • Route learning. AutoMode remembers, per project, which kinds of task needed rescue. After two rescues or corrections in a kind of task, with at least 40% of its recent tasks going wrong, that kind starts on Opus. Learning only raises a route, never overrides a pin, and evidence ages out after 30 days. learning: false turns it off.

Changed

  • A T3 task whose need names Opus now starts on Sonnet at high effort. Only T4, a Fable verdict, T3 on critical work or an escalation requires Opus. A failed attempt still moves to Opus through the ladder. sonnetFirst: false restores the old rule.

Added

  • Delegated reads, off by default. With delegation: on, a full read of a large text file stops once and returns an outline with line numbers. The model can then read a range, read the whole file again, or call extract. extract asks Haiku one question, respects the person's Read permissions, and keeps a finding only if its quote is in the file at the cited lines. shadow records what the gate would do and changes nothing.

Install

claude plugin marketplace add mralexivy/AutoMode
claude plugin install automode@automode

To update, run claude plugin marketplace update automode and then claude plugin update automode@automode.

Tested with Claude Code 2.1.316.

Verify the bundle

sha256sum --check SHA256SUMS
gh attestation verify automode-0.5.0.zip --repo mralexivy/AutoMode

AutoMode 0.4.0

Choose a tag to compare

@github-actions github-actions released this 01 Nov 13:56
6db05c1

Added

  • A completion gate reads the results a request states and compares them with real command output. It reports one state: unverified, partially verified, failed or verified. completionGate is report by default, and block sends the model back once per task when the evidence is missing. A contradicted result counts as a failure on the escalation ladder.
  • executor: sonnet makes Sonnet the task's model, at medium effort unless the effort judge or a floor asks for more. A pin, a floor or the escalation ladder can still move it, and effort never drops while the task's cache is warm. The judges' pick is logged as shadowRoute. The default stays judge.

Install

claude plugin marketplace add mralexivy/AutoMode
claude plugin install automode@automode

To update, run claude plugin marketplace update automode and then claude plugin update automode@automode.

Tested with Claude Code 2.1.316.

Verify the bundle

sha256sum --check SHA256SUMS
gh attestation verify automode-0.4.0.zip --repo mralexivy/AutoMode

AutoMode 0.3.0

Choose a tag to compare

@github-actions github-actions released this 01 Nov 07:03
1d36f88

Fixed

  • The route now follows the task, not the model the session started on. One effortless answer with a fixed anchor (Current: sonnet) decides the model, and the running model is asked only for its own effort.
  • Opus now needs T4, a Fable verdict, an escalation floor, T3 with critical work, or T3 with the need naming Opus. Otherwise the route is Sonnet, or Haiku when both judges name it. Price is only a tie-break.
  • An upgrade that only the judges ask for now waits for the switch gate. Floors, escalation, T4, real work on Haiku and provider limits still move at once.
  • Decision records now hold the need and its anchor, and outcome records hold the route and the AutoMode tier.
  • Native /model and /effort now stand for the session, until am:reset. Before, routing overwrote them without notice.
  • routeModels: false keeps the model you picked from the first prompt. A first-prompt judge failure does too.
  • A failed judge raises task risk only until a judge answers again.
  • A short message, or one the judge rates as no risk, still goes through the text and path risk checks.
  • A return to a warm model is priced for the turns its cache lacks, and a compaction clears that warm state.
  • The effort judge is asked as upstream asks it, and gets the closing line only when it gave no verdict. The line pushed some verdicts too low.
  • A return to a warm model is priced for turns added after a thinking drop, and the legacy policy reads what that cache holds.
  • A model switch that loses the running model's thinking holds inside a task. A mandatory switch still goes and logs it. A compaction clears the flag.
  • A cold cache inside a task no longer skips the risk, confidence and dwell gates. A low point is priced as the difference between the two cache writes.
  • An upgrade compares capability, not tier, and needs a model that is not weaker. Sonnet max to Opus low is not an upgrade, and neither is Opus low to Sonnet high.
  • A shrink with no compaction noted since the last request is priced as a warm switch, and step pricing uses the cache lifetime's write rate.
  • A calibrated effortOutput is read, a hold records the tier of its effort, and underRouting records only real corrections.
  • A plain grep, rg or diff that must find nothing no longer fails the workflow on exit 1. Verifier reports carry expected_exit, and it counts for no other command.
  • The workflow's stages win over mode, so the conditional stages run on the router path.
  • The workflow band counts planned and changed files and blocking unknowns, not files that explorers cited, and the router sends the real tier.
  • The workflow fixes major correctness and security defects as well as blockers, sends evidence gaps to the verifier, and skips the fix pass when there is no defect.
  • Subagents take the task's risk: on critical work a general-purpose agent keeps the parent's model unless it only reads, and a diagnoser runs on Sonnet when the task carries risk. Effort is the stronger of the helper's pick and the policy.
  • Removed the unsupported "73%" figure from the subagent reason.
  • An am: command beats a /model or /effort pin for its turn.
  • /model and /effort register when they name the value the route already runs, or the app's own value. A pin record shows each detection.
  • A model outside Haiku, Sonnet and Opus, such as Fable, passes through unrewritten and turns routing off.
  • A model change in plan mode is no longer read as a pin, and an effort pin applies to helpers.
  • An escalation that a pin undoes no longer claims a move.
  • The Bash guard fails closed: a guard that throws before the call denies it, as every other tool guard does.
  • Check detection reads through wrappers, env prefixes, virtual environments, python3 -m and npx, and it counts subagent checks and edits.
  • am:reset also clears pins under policy legacy.

Changed

  • Automatic workflow entry is off by default (autoWorkflow: false). am:run still works. Decision records show what entry would have done, and workflow-entry records show whether a chosen workflow was called.
  • The workflow result carries next_action, and its trace carries effort. planModel and reviewModel args set those models below S3. The defaults stay Opus.
  • The escalation ladder takes more evidence. A first repeat, three tool errors in a row or scope growth raises the effort one step. A repeat after that raise, a test or compile regression, a revert or a reviewer blocker moves the model, with an Opus consult first.
  • Sonnet xhigh is a rung of its own, below Opus high, so the ladder tries it before it moves the model.
  • Critical review needs hard evidence: an edited path, an operation such as a force push or terraform apply, or a production target. Text or the judge alone caps at elevated, unless both agree. A judge-only critical task gets a Sonnet reviewer, and routing still reads the judge.
  • A surface word such as "add a test" now covers only its own clause.

Added

  • Each decision records the shadow rent rule's verdict beside the live one. It changes no route.
  • A model-switch record notes the continuity flag and the tokens the prompt dropped on arrival.

Install

claude plugin marketplace add mralexivy/AutoMode
claude plugin install automode@automode

To update, run claude plugin marketplace update automode and then claude plugin update automode@automode.

Tested with Claude Code 2.1.316.

Verify the bundle

sha256sum --check SHA256SUMS
gh attestation verify automode-0.3.0.zip --repo mralexivy/AutoMode