← AI Hacker Daily

Edition

06

picks

Switching models in the middle of a session costs you the prompt cache.

Switching models in the middle of a session costs you the prompt cache. Pi 1.0's virtual-models documentation says so in one line: "Switching models between turns is allowed but loses the prompt cache." The founder of Weave Router says in the Show HN post that most of the router's cost improvement came from deciding when a switch is worth that price. So the hard part of model routing is less "which model is smartest" than "when is it worth switching, and what makes that call." Today's five picks are sorted by what makes the call. Pi 1.0 ships a router where a decision model makes exactly one call per session and a plain rule makes the other. Weave trained its own router, and its founder says Jev, the decision model everyone is copying, routes worse than it does. IronBee Express lets Jev make every step of a browser run and calls an LLM only when it is stuck. Clef is Cloudflare's open-weight decision model, which beats Jev on most of Cloudflare's own table and loses on the one benchmark about whether to call a tool at all. Gutsy is a 0.8B decision model that runs on a CPU, with a README section titled "Where it is weak".

01

Pi 1.0 — the minimal coding agent adds virtual models, and its example router switches once

Pi (MIT, TypeScript, 111,562 stars, 6,688 commits, over 100 contributors, v1.0.0 on Thursday) is the terminal coding agent from Earendil that has spent a year being known for what it leaves out. The 1.0 release (1,382 points on HN) adds codemode (the model writes JavaScript that calls tools in parallel, in a QuickJS sandbox), native MCP support, image models, and virtual models. A virtual model is a model you select like any other, written as an extension, that picks a physical model and thinking level for every request. The footer shows both the selected and the routed model, /session breaks cost down by physical model, and Pi compacts first if the routed model's context window is too small. Install with curl -fsSL https://pi.dev/install.sh | sh.

The router that ships as an example, jev-router.ts, is more careful than the announcement makes it sound. The announcement's demo has Jev "spot the switch to implementation". In the shipped example, Jev makes one call: it rates the first message as standard or complex, which picks GPT-5.6 Sol or Terra for planning. The handoff to the cheap model, Luna, is a rule, not a classifier: after the first successful edit or write, the session moves to Luna and stays there. The comment says why: "A session therefore switches models once and accepts a single prompt-cache miss." The docs recommend the same thing for every router, keeping tool follow-ups and retries on the model that handled the turn. In the HN thread, a commenter asked why MCP waited nearly two years for support while Jev got it within a month. Armin Ronacher of Earendil answered that "we look at what the models are doing": models are trained on their own harnesses, Codex relies on codemode, and codemode is how Pi exposes non-LLM models such as Jev to the agent.

Reach for it if you already run more than one provider and want to write your own routing rule in a few dozen lines instead of adopting someone's router. Delete the shell alias that starts a second agent on the cheaper model. Tradeoffs: virtual models were added two days before 1.0 and are labeled experimental; the example router needs a TypeSafe API key and an OpenAI Codex login; the TUI is now fullscreen by default, which several commenters disliked (tuiMode: "regular" restores scrollback); and the recommended install pipes a script into sh.

→ github.com/earendil-works/pidiscussion ↗

02

Weave Router — a trained per-request router that prices in the cache, and whose best model you can't download

Weave Router (Apache-2.0, Go, 5,525 stars, 1,277 commits, 18 contributors, created April 27) is a proxy that speaks the Anthropic, OpenAI and Gemini APIs and picks a model for every upstream request, which its docs call an "action". npx @weave-os/router --claude (or --codex, --opencode, --pi) wires an agent to the hosted router; --local and make full-setup self-host it with Postgres, encrypted bring-your-own keys and a dashboard. Budgets are supported. The founder's Show HN post (105 points, 36 comments) describes 2.0: a hidden Markov model tracks how the session got where it is, a classifier picks a bucket of comparable models, and a separate subsystem estimates whether a switch is worth refilling another model's cache. The founder credits that last part with most of the cost improvement.

The benchmark page compares the router to GPT-6 Astra in the same Codex harness, two attempts per task, run by Weave. On Terminal-Bench 4.0 (66 tasks), the router solved 62.1% against Astra's 60.6%, one task apart, in 20.5 minutes per trial against 44.1, at $5.22 against $10.03. On SWE-Atlas (124 tasks), it solved 62.1% against Astra's 66.1%, five fewer tasks, at $2.31 against $5.04. The Show HN post calls both "equivalent pass rates". OpenRouter's auto-router, on the same page, solved 25.0% and 54.0%. Asked "what about jev", the founder said routing is the kind of decision Jev is meant for, but in Weave's testing it is "much worse at routing than our purpose-built model". No numbers were given for that. Asked whether the trained 2.0 model is open weights, the answer was "It is not sorry".

Reach for it if your agent bill is mostly a frontier model doing work a cheaper model could do, and you can measure the difference on your own tasks. Delete the /model switch you make by hand when a task turns out to be easy. Tradeoffs: the 2.0 model behind the benchmarks is not released, so self-hosting gets the default cluster scorer or a frozen HMM policy from July that requires Google's gemini-embedding-2 API; the one-command install routes your prompts through Weave's hosted service; local and LAN models are not supported yet; and on the larger benchmark the router solved fewer tasks than the model it is compared to.

→ github.com/weave-os/routerdiscussion ↗

03

IronBee Express — a browser agent where Jev makes every step and an LLM is only the fallback

IronBee Express (Elastic-2.0, TypeScript, 10 stars, 6 commits, 2 contributors, created September 24) takes a one-sentence goal ("log in, add the iPhone 15 Pro to the cart, then open the cart") and carries it out in Chrome. Each step is one Jev decision among the controls on the page, about 300 ms, with no text generated and no screenshot sent. Model output "never becomes a selector, a coordinate or a script": Jev can only choose a control, option or value the page offered, and the DevTools layer checks that the control is still the one chosen before acting. An LLM (Anthropic, OpenAI, OpenRouter, or the Claude Code or Codex CLI) is optional. It writes free text, takes over when the engine is stuck, and explains failures. For a login, CAPTCHA or SMS code, Jev can choose ASK_USER, and the run pauses for you.

The part that makes it a test tool rather than a demo is the review. DONE is a claim, accepted only when the page and the API responses show the goal done. After the run, failed requests, console errors and slow spans are collected mechanically, grouped, and Jev rates each one for this goal, so a page that says "Order placed successfully" while the API returns PAYMENT_FAILED fails the run. A passing run is recorded and replays with no model decisions at all: the README's checkout goes from 6.8 seconds explored to under 2 seconds replayed. The README's demo run, nine actions, costs $0.00054 in Jev calls including the review.

Reach for it if you want end-to-end checks on a web app written as goals, and you're willing to pay a hosted decision model per step. Delete the Playwright script that breaks every time a button gets renamed. Tradeoffs: Elastic-2.0 is source-available, not open source; it requires a TypeSafe API key, so the core loop runs on a closed hosted model; all timings are on IronBee's own demo shop; the repo is a week old, from two people, and the Show HN post had 7 points and no comments; and it is the front door to IronBee's paid verification platform.

→ github.com/ironbee-ai/ironbee-express

04

Clef — Cloudflare's open-weight decision models, ahead of Jev on most of its own table

Clef and Clef-flash (Apache-2.0 weights on Hugging Face, released Thursday) are Jev-compatible decision models: you send a state and typed questions (yes/no, choice, score) and get a probability for every option, from one prefill pass with no generated text. Clef is a frozen Qwen3.8-27B with low-rank adapters and a trained scoring head; Clef-flash does the same on Qwen3.5-9B. Unlike Jev, both read images as well as text, with a 64k context against Jev's 32k. On Workers AI they cost $0.24 and $0.09 per million input tokens, and the request body is the Jev format, so switching is a base URL and a model name. Cloudflare says it also offers fine-tuning, for now through its own engineers, with a self-serve product later.

Cloudflare's benchmark table puts Clef ahead of Jev on eight of ten tasks, and the median latency at 209 ms against Jev's 524 (Clef-flash: 39 ms). The two losses are worth reading. On When2Call, which tests whether a model should call a tool at all, Clef scored 72.4 to Jev's 81.0. On BRIGHT retrieval it was 45.9 to 47.5. On TypeSafe's own workflow evals, Clef led on three of four and trailed on agent-trace observability. Clef-flash fell to 66.8 against Jev's 89.3 on CLINC150 with out-of-scope queries. In the HN thread (534 points, 188 comments), a commenter worked out that Clef's price is about six times Jev's, and another noted that the speed-quality chart leaves cost out. A third said that most models claiming Jev-level results fail on non-trivial tasks, such as playing a game, and was testing Clef that night.

Reach for it if you already call Jev and want an option you can host yourself, or you need decisions over images. Delete the "classify this and answer in JSON" prompt you send to a chat model. Tradeoffs: every benchmark here was run by Cloudflare; at 27B, the full model is local only for people who already serve models that size, and Clef-flash gives up a lot on some tasks; the hosted version is priced above Jev; and the routing-shaped benchmark, When2Call, is the one Jev still wins.

→ huggingface.co/Cloudflare/clefdiscussion ↗

05

Gutsy — a 0.8B decision model for the CPU, with its weak spots listed before you find them

Gutsy (Apache-2.0 code and weights, Python, 16 stars, one commit, one author, created Thursday) is a fine-tune of Qwen3.5-0.8B served as a 775 MB GGUF through llama.cpp on an ordinary CPU. It speaks the Jev request format at /v1/systemone and the OpenRouter Decisions format, so existing clients need a new base URL. The state is encoded once, and follow-up questions about the same state cost only their own tokens. Choice answers add a reject probability for "none of these fits". The author posted it in the Pi 1.0 thread as something "even lighter than Jev" to compare against, which fits Pi's own feature: Pi can already use any llama.cpp model as a classifier.

The README's numbers are self-run and labeled that way. On JevBench's 231 public items, Gutsy scored 0.723, against 0.866 reported for Jev. On the same 700 items per task, run side by side through Jev's API, it trails Jev on BoolQ (0.850 to 0.906) and badly on CommonsenseQA (0.587 to 0.863), which it never trained on. The section "Where it is weak" lists date and number arithmetic, multi-step rulebooks (0.42), and deciding when ambiguity matters (0 of 7). Long states are slow on a CPU, with a median of 4.2 seconds and a 95th percentile of 23. It scored 1.00 on JevBench's hard routing items, a family of 5 to 19 questions, and 0.609 zero-shot on BANKING77's 77 intents. The disclosures say no closed-model output is in the training data and that two benchmarks it reports are in-domain.

Reach for it if you want a routing or gating decision that runs next to your agent, with no network call and no per-call cost, on questions that are classification rather than arithmetic. Delete the API key you would otherwise need for a three-way "which model?" question. Tradeoffs: one commit from one author, one day old, with an 8-point Show HN; it is well behind Jev on anything that needs world knowledge; English only; and the latency figures are for long states, so time it on your own prompts before you put it in front of every request.

→ github.com/kouhxp/gutsy

06

Verification notes: star, commit, contributor and creation data are from the GitHub API on 2026-10-02; commit totals use the per_page=1 Link-header last-page count, and Pi's contributor count is capped by the API at 100. Pi's 1.0 feature list is from its release notes for v1.0.0 and v0.99.0; the virtual-model behavior and the cache quote are from docs/virtual-models.md, and the router behavior is from examples/extensions/jev-router.ts at v1.0.0; the "spot the switch" wording is from the Pi 1.0 announcement; Armin Ronacher's reply is in HN item 49926069. Weave's architecture, cache claim, Jev comparison and open-weights answer are from HN item 49911500; benchmark figures are from weaveos.com/router; self-hosting details are from the repo README and sidecars/hmm/README.md. IronBee Express's step design, review logic and timings are from its README, measured by IronBee. Clef's architecture, benchmarks and latency are from Cloudflare's 2026-10-01 blog post; prices and context windows are from the Workers AI model pages; the price, chart and game-test comments are from HN item 49923692. Gutsy's results, weaknesses and disclosures are from its README, all run by the author; the Pi-thread post is in HN item 49926069. HN points are from the Algolia API (items 49926069, 49911500, 49922799, 49923692, 49923223). Pipeline health: today's pool held 80 rows, against the ~280 the compose prompt assumes. github:trending returned 8 rows, and Reddit returned zero again, 146 days since its last nonzero day on May 9.

→

One of these,
every weekday.

Free. One-click unsubscribe in every email. No tracking pixels in the email.