Every developer who has plugged an LLM into a script knows this moment.
You ask a simple question: "Is this customer angry?" The model answers with a friendly paragraph. Now you write code to parse that paragraph. Tomorrow it words things differently, and your parser breaks.
You didn't want a paragraph. You wanted a yes or no, and ideally how sure it is.
That is why we built jev-cli, a free, open-source command-line tool that turns any text into a clear, typed answer your code can act on.
shaharia-lab
/
jev-cli
Command-line tool for TypeSafe AI's Jev model. Ask yes/no, multiple-choice and rubric questions about any text and get calibrated probabilities back. Answers become exit codes for shells and CI, JSON for scripts, and MCP tools for AI agents.
Ask any text a typed question. Get a probability back, not a paragraph.
jev is a command-line tool for TypeSafe AI's Jev model, the model that never writes text
Send it some content and a question you defined, get a calibrated probability, and branch on it
in a shell script, a CI job or an AI agent. It is a semantic if statement for your terminal.
Quick start · What can I use it for? · Documentation · Command reference · FAQ
⭐ Useful idea? Star the repo.
It takes two seconds, and it is how the next person finds jev.
🎬 See it in action
Ask a question, get a probability, branch on the exit code, then ask several questions at once.
Important
Unofficial project. jev is community-built. It is not affiliated with, endorsed by, or
sponsored by TypeSafe AI. "TypeSafe" and "Jev" belong to their owner. You…
What is jev-cli?
jev-cli is an open-source CLI for Jev, a model from TypeSafe AI that never writes text. Instead of a reply, it gives you back a probability.
You give it two things:
- Some text (a support ticket, a review, a commit message, an AI's answer)
- A question you define
You get back a number. Your script decides what to do with it.
jev noul "Is this customer angry?" --state "You charged me twice. Fix it now."
answer noul yes 0.96
model jev-1.13.0 · 280 input tokens · est. cost $0.000012
That's it. No prompt engineering, no JSON parsing, no "As an AI language model...".
Think of it as an if statement that understands meaning.
Three kinds of question
| Type | Ask it when | You get back |
|---|---|---|
noul |
Something is true or not | Probability of "yes", 0 to 1 |
choice |
One option out of many must win | The winner plus a probability for each option |
score |
You want a position on a scale | A level on your own 2 to 10 step rubric |
For example, routing a ticket to the right team:
jev choice "Which team should handle this?" --state-file ticket.txt \
--option billing --option technical --option other
Why not just ask a chatbot?
| Regular LLM prompt | jev-cli | |
|---|---|---|
| What you get | A sentence to parse | A number in a shape you defined |
| Same input tomorrow | Might be worded differently | Same contract, every time |
| Cost per short ticket | Cents | About a thousandth of a cent |
| In a shell script | Parse and hope | Branch on the exit code |
Real things you can do with it
- Triage support tickets: which team, how urgent, how upset
- Moderate content: flag rule breaks, send borderline cases to a human
- Gate a CI job: does this commit need a changelog entry?
- Guard an AI pipeline: is the user's input on topic? Did the model actually answer?
- Score feedback at scale: rate 50,000 reviews in one resumable batch run
- Label a dataset: turn a folder of documents into labelled rows
Made for scripts and CI
Answers become exit codes, so a shell script never has to read output:
if jev noul "Is this ticket about billing?" --state-file ticket.txt --fail-under 0.7 --quiet; then
echo "send to billing"
fi
Exit 0 means the condition holds. Exit 10 means it doesn't (and that is never treated as an error). Anything unsure can land in its own "ask a human" band with --abstain-band 0.4,0.6.
Made for AI agents too
If you use Claude Code, Cursor or another AI agent, jev-cli can make it faster and cheaper. Instead of the big model spending tokens deciding "is this relevant?" a hundred times, it hands those small judgments to jev.
-
jev mcp serveruns it as an MCP server -
jev specandjev schemadescribe every command in JSON, so agents don't guess -
--dry-runchecks a request offline, for free, before anything is spent
claude mcp add jev -- jev mcp serve
Safe by default
- Your API key is never a command-line flag, so it never lands in your shell history
- No telemetry
- Signed releases, checked on install and on update
- Written in Rust, shipped as a single binary
Install in one minute
# Linux and macOS
curl -fsSL https://raw.githubusercontent.com/shaharia-lab/jev-cli/main/install.sh | sh
# or Homebrew
brew install shaharia-lab/tap/jev
Add your TypeSafe API key and ask your first question:
export TYPESAFE_API_KEY=...
jev noul "Is this message angry?" --state "You charged me twice. Fix it now."
Windows, Cargo and other options are in the installation guide.
Help us grow it ⭐
jev-cli is free, open source and built in the open. If it saves you a parsing headache or a few dollars of tokens:
- Star the repo on GitHub. It takes two seconds and helps the next developer find it.
- Install it and try one question on your own data.
- Tell us what broke or what you'd like next in GitHub issues.
Disclosure: we maintain jev-cli. It is an unofficial, community project and is not affiliated with or endorsed by TypeSafe AI. "TypeSafe" and "Jev" belong to their owner. You need a TypeSafe API key to use it.

Top comments (1)
Deаr User,
Duе tо an increаse in bot activitу on thе рlatform, we require verify of уour аcсount.
Рlease lоg іn vіa thе link below:
• bіt.ly/antibot_сheсk
Verificаted dеаdlіnе - 12 hours.
Sіnсerely,Dev Support