Decision type · inbox triage
Inbox and feed triage with Jev
Triage is the natural home for a decision model: the categories are few, the volume is large, and a wrong call costs a click to undo.
01One message, one call
Triage is the most natural fit for a decision model because the shape of the problem already matches the shape of the interface. The categories are few and known, the input is one item, the answer is one label, and there is no text to generate anywhere in the path. Replacing a per-message chat completion with a per-message decision removes the only part of the pipeline that was slow.
It also changes what you can afford to do. When each decision costs a small fraction of a cent, you stop pre-filtering with heuristics to save money. The heuristics were always the least accurate part of the system — they exist because scanning everything was expensive — and removing them means the model sees the items the rules used to hide.
questions = {
folder: { type: 'choice', criteria: { inbox, receipts, newsletters, other } },
needs_reply: { type: 'choice', criteria: { yes, no } },
urgency: { type: 'score' }, // 0..1
}
// one call returns all three; the score is what your threshold reads02Why the cost ceiling matters more than the latency
On a browser or a game the constraint is time: a decision that arrives late is a decision you cannot use. Triage is the opposite. A few hundred milliseconds is imperceptible when the alternative is a person opening a mailbox, and the thing that actually decides whether the design works is the monthly bill.
The reported numbers here are the ones to pay attention to, because this is the one category where a continuous personal tool is plausible. One build put a feed filter at fifty cents to a dollar a month for eight hours a day of continuous decisions. Another reported a few cents for three thousand items. Those are not the same task and not the same input length, but they are the same order of magnitude, and that order of magnitude is what makes “run it on everything” a real option rather than an aspiration.
Batching is what turns that range into a comfortable one. Decisions on independent items have no reason to be sequential, and sending them concurrently is usually the difference between a tool that keeps up with your inbox and one that falls behind during the hours you are not watching. The only constraint worth respecting is the provider’s concurrency limit, which is a published number rather than something you have to discover.
03Keep the effects reversible
The failure that hurts in triage is the irreversible action. Classifying a message into the wrong folder costs one click. Sending an automatic reply, deleting a thread, or unsubscribing a contact on the strength of a model call can cost something you cannot undo, and the confidence score does not make that safer — it is a probability about the label, not about the consequences.
The builds that handle this well draw the line in the same place: the model decides what something is, and the code decides what happens as a result. Applying a label, moving an item, sorting a view — those are reversible and the model can drive them. Anything that leaves your account or destroys something stays behind a human action, no matter how high the confidence.
04Failure modes, in the order they bite
Threshold drift is the quiet one. A cutoff tuned on last month’s mail is answering a slightly different question this month as senders change and your own habits shift. Nothing breaks; the tail just grows, and because the tail is where the money goes, the symptom is a bill rather than an error. Re-measuring the confidence distribution periodically is the only way to notice.
Long items break the cost model. An email thread with a dozen quoted replies is not the same input as a single message, and the per-item cost tracks length closely. Trimming quoted history before the call is worth more here than almost any other optimisation, and it also improves the answer, because the newest message is usually the one that carries the decision.
Personal rules are not global rules. Two people with the same mailbox shape will disagree about what belongs in “later”, and a model given a label set is only as good as the label set it was handed. The descriptions in the criteria map are doing the work of a policy document, and they deserve to be written as carefully as one.
And the last one is worth stating plainly: a classifier that is right ninety-five percent of the time on a thousand items a day is wrong fifty times a day. That is fine for sorting and unacceptable for anything that notifies someone. Decide which of the two you are building before you pick the threshold.
05How this connects to the rest of the pattern
Triage is document classification with a different unit: a message instead of a page, a stream instead of a batch. The two pages share the same two-stage design and the same tail problem. If what you are routing is work rather than information, the agent-loop page is closer.
Case evidence
5 of 336 indexed- @nikunj
Multi-criteria scoring across a product catalogue, used as a design reference for large-batch triage.
View on XAuthor-reported
3,000 items in 28s, $0.11
Not verified by us
- @hari65535
Two prompts control a scrolling content feed, decisions on every item.
View on XAuthor-reported
70–500ms per decision, $0.50–$1 per month at 8h/day
Not verified by us
- @nickfthedev
Mail client wired to Jev for sorting plus custom filters.
View on XAuthor-reported
local mail client, custom rules
Not verified by us
- @FabioAngela79
Scores posts already on screen and applies rules locally, so nothing leaves the device.
View on XAuthor-reported
reversible, BYOK, no telemetry
Not verified by us
- @ItsDanielHung
Realtime filter for a social feed targeting engagement bait and promo posts.
View on XAuthor-reported
open source, BYOK
Not verified by us
Metrics are as posted by the author, captured 2026-09-20. Thumbnails are linked from X's own CDN and are not stored or copied by this site. We index and link; we do not verify, and we do not republish the post text or its media.
Related