JT.0S1 · semantic coreutils

grep, sort, lint, tail. With judgment.

Unix tools that understand what you mean. Each one asks Jev a typed question, gets back a probability, and lets your shell decide. 150 ms a call. Cheap enough to run on every line.

npm i -g jevtool

Preview · tools in development. Commands and results are illustrative.

Terminal 1.1jevgrep
$ jevgrep "functions that swallow errors silently" src/
scanning 312 functions · 1 request · 0.19s
src/proxy/relay/upstream.ts:97   handleRetry()      0.94
src/server/billing/settle.ts:41  reconcileOrder()   0.88
src/workers/sync.ts:120          pullCatalog()      0.71
3 matches ≥ 0.70 · 9 below threshold (--all to show)

$ git diff | jevlint --rule "user-facing errors say cause + action"
apps/web/chat.tsx:212  "Request failed"   0.91 violates
exit 1
The toolbox

One key. Six tools. Same shape.

Every tool sends state plus one narrow question and reads a number back. Nothing is generated. The rule stays in your code.

jevgrepv0.1
jevgrep
Choice

Search code, logs or docs by meaning. Candidates are parsed by tree-sitter; Jev selects.

jevlintv0.1
jevlint
Noul

A CI gate for rules that aren't regexes. Commit message honest? Error copy actionable? PR matches diff?

jevtailv0.1
jevtail
Score

Pipe logs in. Severity and urgency out. Same-cause lines collapse. Alert only on what changed.

jevsortv0.1
jevsort
Score

Sort anything by a described dimension. jevsort --by urgency todo.md

jevdiffv0.1
jevdiff
Noul

Did the meaning change, or just the words? For prompts, copy, contracts, docs.

jev-mcpv0.1
jev-mcp
all

A judge tool for Claude Code and Cursor. Your agent asks a typed question instead of guessing.

Not a chatbot

No prose to parse, no JSON mode to coax. A Noul is a probability. A Choice is one of your options. A Score is a position on a scale you wrote.

Runs in CI

Deterministic enough to gate a merge, cheap enough to run on every push. Thresholds live in your repo, not in a prompt.

Numbers, not vibes

Every answer carries calibrated confidence. Act above your threshold, escalate below it, log everything in between.

jev.cost
150ms
per judgment
fast enough for a keystroke
$42
per billion input tokens
output is free
0
lines of output to parse
typed answers only
1
request per file
questions fan out in parallel
Playground

Ask one narrow question.

Playground 1.1jev-latest

      
answer
Config 1.1~/.jevtool.toml

Bring your own key, or route through Jevrouter.

Every tool reads one base URL. Point it at TypeSafe directly, or at api.jevrouter.io for metered credits, project budgets and Jev-assisted model routing on the same account.

base_url = "https://api.jevrouter.io/v1"
api_key  = "jr_…"
model    = "jev-latest"
threshold = 0.70