Skip to content

Jev Tools & CLIs

Records at Rest: Documents, Inboxes, and Risk Queues

Jev labels a record that already exists. Code moves, flags, or holds it. How the document, mail, and transfer tools keep the action out of the model.
Published
Category
Jev Tools & CLIs
Resources cited
6
Reading time
4 min
Tags#classification#email#security

A support ticket, a PDF packet, and a withdrawal are the same shape of work: a record already exists, and something in code has to move, flag, or hold it. Jev's job in these tools is the label. The action stays in ordinary code, where it can be unit-tested and turned off.

Documents

DocJev takes a PDF, DOCX, or PPTX, extracts page text locally with LiteParse, and asks Jev either for one category or for the boundaries inside a packet. On its 40-document pilot both engines classified every original correctly, and Jev split 7 of 8 packets exactly. The measured packet keeps a ten-page statistical release together and separates two adjacent Treasury results that share a category. DOCX and PPTX need LibreOffice. Local OCR does not make the model call offline: TYPESAFE_API_KEY is still required.

The design detail worth copying is the rule file. Categories have stable ids and descriptions of purpose, and other is added if you leave it out. Splitting instructions say what counts as a new document rather than a continuation page. That text is the question. The page ranges come back for code to export.

Inboxes

jev-mail-classifier connects over IMAP and turns each category you configure into one Noul inside a single call per message, so a mail can match more than one label. Each category has its own threshold and its own actions: tag, move, flag, mark read, or call a webhook. Processed mail is marked with the IMAP keyword $JevProcessed, not the Seen flag, and a run defaults to 25 unprocessed messages, newest first. run --dry-run prints the actions without touching the mailbox.

Jevmail is the read-only cousin. It sorts Gmail into five trays with the AI SDK's evaluate API and stores trays in local SQLite. The Gmail scope cannot send, label, or archive. The README's figure is about 1,000 emails in a minute for around 3 cents. Classifying 1,500 real emails is a single person's screen recording of the same idea, useful as a field note and not as a method.

The shared rule is the threshold per label. Urgent at 0.7 and spam at 0.9 is a policy, and it belongs next to the action, not inside the question.

Risk queues

jev-guard screens a deposit or withdrawal. Blacklist, sanctioned counterparty, and amounts over $500k are hard rules and never reach the model. Jev then answers risk level, pattern, freeze probability, and a suggested route. The route is written to the audit log and never executed. Timeouts and server errors become manual review, not a pass. On 100 author-labeled synthetic events the rules-only baseline scored 68% and the Jev gate scored 50%, with zero missed freezes. Route and the composed action agreed 72% of the time. The README treats that 28% gap as the reason the matrix stays in Java.

jev-suite applies the same split to four checks: whether a sponsored video matched the brief, where a candidate misses the job, whether an edit preserved the source, and what a rental listing still needs confirmed. Missing evidence fails the check closed. A missing model escalates. Calibration runners refuse to score mock answers unless you pass a flag that watermarks the file.

What to copy

  • Put arithmetic, caps, and vetoes in code. Send the digested record as state.
  • Log the model's suggestion beside the action you actually took.
  • Degrade toward a person. A timeout that auto-passes is the failure mode these projects are written to avoid.
  • Dry-run before the first live mailbox or the first live transfer.

Where the checkpoint sits

Every tool above assumes the record can leave the machine for a model call. The open ecosystem makes the other version possible: run the same pipeline with a local decision model and the record never leaves. Drex DLM runs on an M5 Max through its llama.cpp and Ollama forks; Liquid d1-3B runs on a Jetson Orin Nano at 50 ms per decision; OpenDecider Nano fits in 4 GB of GPU memory or runs on CPU.

Two things to check before swapping one in. The license first: Drex's weights are CC BY-NC, so a commercial queue cannot use that one, where most of the family is Apache-2.0. The calibration second: a local model's confidence is not the hosted model's confidence, so any threshold you fitted against Jev has to be refitted on the replacement's own labels. The hosted side of that trade is documented in TypeSafe's legal hub, which commits to not training on user data and offers zero data retention on enterprise terms.

Fit the threshold to the model that answers

The queues above all set thresholds next to the action, and that placement is what makes a model swap survivable: the queue's policy stays fixed while the classifier behind it changes. Rizzo Flow's README is the caution in concrete form: its probabilities are uncalibrated unless you fit them, and its ECE of 0.112 is measured against Jev's dataset-card 0.727 accuracy rather than against a fitted Jev. Treat every local number as unfitted until the card shows a held-out fit, and re-tune the gate when the model changes, not just when the labels do.

The tools category has the CLIs. The thresholds worth trusting are the ones you fit on labels from your own queue, which is the subject of confidence gates.

From the Jev directory

The resources behind this article.

529GitHub stars
Classifies and splits PDFs, DOCX, and PPTX with local page text from LiteParse and category decisions from Jev.
Jev Tools & CLIs#community#python#document
20GitHub stars
An IMAP client that turns each inbox category into a Noul, then tags, moves, flags, or calls a webhook when the probability clears that category's threshold.
Jev Tools & CLIs#community#python#email
101GitHub stars
A local, read-only Gmail triage app that sorts mail into five trays with Jev: each message becomes one experimental_evaluate call answering tray, urgency, and human-written questions, and 1,000 emails sort in about a minute for around 3 cents.
Jev Cookbooks#community#typescript#privacy
vogel ran Jev over 1,500 of his own emails to test classification quality and posted the results as a video, calling it the most impressive model he has tried for the task.
Jev CookbooksVideo#community#x#video
Community
A Java gateway that asks Jev four questions about a deposit or withdrawal, then applies a direction-aware routing matrix in code.
Jev Tools & CLIs#community#java#security
15GitHub stars
Four Java checkers — sponsored video, hiring fit, edit fidelity, and rental listings — that keep thresholds and vetoes in unit-tested code.
Jev Tools & CLIs#community#java#verification
Back to all articles

Related Jev articles

A decision model can screen email and calls cheaply, but the operating point is a policy choice. How to measure precision, recall, and the cost of a miss.
Jev Practices & Patterns#security#phishing#email
Read article
Taxonomies are too large for one question. How to walk a hierarchy in code and ask the model only about the branch you are in.
Jev Cookbooks#classification#taxonomy#routing
Read article

From the Jev AI model community

Posts from builders shipping with Jev right now.

Follow @typesafeai