Agentic Hat
Agent
Showcase
Pricing
Buddy
Docs
Sign In
Sign Up
Agentic Hat
Autonomous AI Agent Platform · A FewBox product
Navigation
Agent
Showcase
Pricing
Buddy
Docs
Sign Up
Follow
Contact Us
[email protected]
Agentic Hat
Autonomous AI Agent Platform · A FewBox product
Navigation
Agent
Showcase
Pricing
Buddy
Docs
Sign Up
Follow
Contact Us
[email protected]
Privacy Policy
Extension Privacy
© 2026 FewBox
Docs › Decision models

Why a Heartbeat's quiet checks are nearly free

A Heartbeat asks the same question every hour, and most hours the honest answer is "nothing new". Since September 2026 that answer comes from a decision model instead of a chat model — a few seconds, a fraction of a credit — and the main model is only woken up when something actually matches. Here is what changed and what we measured.

Monitoring is mostly saying no

When we first shipped Heartbeats, every run was an ordinary agent run: the model fetched the feed, compared it with what it had seen, decided nothing matched, and wrote a one-word reply. Across 33 scheduled runs, 25 found nothing — and each of those quiet runs still cost about 15–20 credits and took about three minutes, because the main model was called three times just to say "no".

That is the wrong tool for the job. "Does this post match what I asked to watch?" is a yes-or-no question, asked over and over, and the answer is almost always no. Paying a chat model — priced for writing paragraphs — to answer it is paying generation prices for something closer to a lookup.

What a decision model is

A decision model takes text in and gives a typed answer out — not a sentence. On 15 September 2026 TypeSafe AI released Jev, the first of what they call System One models (after Daniel Kahneman's fast, intuitive System 1). You hand it a piece of state — a post, a record, a page of text — and one or more questions of three shapes:

It never writes prose, so it cannot invent a citation or drift off the schema; it answers in well under a second; and it is priced only on input, at a small fraction of what a chat model charges. Simon Willison's summary is the one we find most useful: it fits anything you can express as a classification — spam, labels, priority, ranking. Watching a feed for matches is exactly that.

  • Yes or no: "Does this post complain about AI staging changing the architecture?" → a probability between 0 and 1.
  • Pick one: "Which of these five categories fits?" → a choice, with a probability for each option.
  • Score: "How frustrated is this customer, 0–2?" → a number on the scale you defined.

The other property that matters for automation is that every answer carries a confidence. A model that is right most of the time but cannot tell you which calls it is unsure about cannot be trusted to run unattended; one that reports its uncertainty can, because your code decides what to do with the uncertain ones.

How a Heartbeat uses it

Give a Heartbeat an RSS/Atom feed and the runtime does the first two steps itself; the decision model does the third; the main model is only reached in the last.

Fetch
The runtime fetches the feed — no model involved
→
Compare
Entries already seen are dropped by id; only genuinely new ones continue
→
Judge
Each new entry goes to the decision model with one question: does it match what you asked to watch?
→
Only then, the model
Matches, and the entries it was unsure about, go to the main model to read and report
Nothing new, or nothing that matches, means the run ends at step 2 or 3 without the main model ever being called.

The confidence is used, not just recorded. Above the match threshold the entry is reported; below the miss threshold it is dropped; the band in between is handed to the main model to double-check — that is the "unsure" bucket in the figure. And if the decision model is unavailable for a run, all the new entries go to the main model as before: a few credits more, never a missed run. We saw exactly that on 21 September when the provider returned an error for twenty minutes; three new posts were judged by the main model and nothing was lost.

What it did in production

Measured on two hourly Heartbeats watching Reddit feeds, scheduled runs only. "Before" is 17–19 September; "after" is 20–22 September, after the change went live.

Where the time went. Each bar is one run, drawn to scale; the segments are what the run was doing, taken from the per-run timeline in our console.

Before — a quiet run
≈180 s · 3 model calls · 2 tool calls
After — a run with a match
67 s · 1 model call · no tools
After — a quiet run
≈5 s · no model
main modeltool callruntime (fetch · compare · judge)
Before: the model fetched the feed, re-typed every entry into the comparison tool, then wrote "nothing" — three model calls to say no. After: a quiet run never reaches the model; a run with a match is one call with the matching entries already in hand.
A run where…BeforeAfter
nothing new appeared≈15–20 credits · ≈3 min · 3 model calls0 credits · ≈5 s · 0 model calls
new entries appeared but none matched≈15–20 credits · ≈3 mina few hundredths of a credit · ≈5 s · 0 model calls
something matched, or was unsure≈30 credits · ≈3 min≈4–7 credits · ≈30–70 s · 1 model call, no tools
share of runs that reached the main model100% (33 of 33)11% (7 of 63)
After: 69 scheduled runs in 47 hours — 54 ended without the main model, 7 reached it (4 double-checks that found nothing, 3 reports), 6 failed on a bug unrelated to judging, 1 first run, 1 skipped.

The judging itself is small: the first run of a Heartbeat scored 25 entries in one request — about 7,000 tokens, 2.2 seconds, roughly a third of a credit. Two posts complaining about AI staging changing rooms scored 0.90 and 0.80; everything else scored 0.12 or below. A normal run has only a couple of new entries, so its judging costs a few hundredths of a credit. Everything the decision model has judged since it went live — every run, both Heartbeats — adds up to 22 requests, 41,000 tokens and 1.73 credits.

One thing we learned the hard way: give it the body, not just the title. On a post whose title said nothing about AI, the title alone scored 0.50 — a shrug — while title plus the first 300 words scored 0.79–0.90. The runtime now feeds it both.

Where it stops

  • Text only. It cannot look at an image or a screenshot. It reads the feed entry's title and text; anything that needs seeing goes to the main model.
  • It gives a number, not a reason. You cannot ask it why a post scored 0.12. We store every score with the run, and the main model — which can explain — still writes what you read.
  • Only Heartbeats with a feed. A Heartbeat that needs the browser, or the model's judgement on every run, is still an ordinary agent run each time. The line at the top of a Heartbeat's conversation tells you which kind it is — see the Heartbeat page.
  • Unsure still means the main model. The vendor's calibration claims have not yet been independently tested, so we keep the double-check band rather than trusting every number outright.
  • It decides what is worth reading; it never writes to you. Everything you see in a Heartbeat's conversation still comes from the main model.

Why browser tasks and memory did not get cheaper too

A decision model only helps where the expensive step is a repeated yes-or-no. Browser tasks are not that: their cost is in open-ended decisions — what to click next, what a screenshot shows — which a yes/no model cannot make, and in images, which it cannot read. Memory is the right shape (is this sentence worth remembering?), but that step already costs about 0.06 credits, so there is nothing to save, and a wrong "no" about one of your preferences would cost more than that.

The rule of thumb: a decision model pays off when the input is text, the answer is yes/no or a score, the same question is asked many times, and each answer currently costs a whole model call. Watching a feed meets all four; that is why it is the first place you see the difference.

Further reading

  • TypeSafe AI — System One (concepts): what the model returns and the three question types.
  • Simon Willison — Jev introduces a new shape of LLM: where a decision model fits (classification, ranking) and the black-box caveat.
  • TrueFoundry — TypeSafe AI's Jev: what actually shipped: which launch claims are verifiable and which are still the vendor's.