Guard an agent's web fetch
The page only reaches the agent when injection is low. && does the rest.
❯ page=$(curl -s "$url") && jev screen "$page" -q && my-agent <<<"$page"Ask a question with a fixed answer. Get a probability and an exit code back.
❯ npm i -g jevctl❯ jev auth login❯ git diff main | jev verify "Only tests changed" -e -❯ claude plugin marketplace add Nasrallah-AL/jev-cli❯ claude plugin install jev@jev-cliCuts stale tool output from a session log and keeps the rest word for word. Also runs as a Claude Code compaction hook.
❯ jev compact @session.jsonl --out compacted.jsonScores injection, substance, and relevance. On block it exits 2, so the next command in the pipe never runs.
❯ curl -s $URL | jev screenEach claim comes back verified, contradicted, or unsupported, with the source it rests on.
❯ jev verify "Refunds take 3 days" -e @policy.mdRegexes find the candidates, Jev picks the one that fits, code normalizes it.
❯ jev extract @invoice.txt --want amount,dateOne call returns the handler and typed arguments. A built-in none lets it decline.
❯ jev route "$msg" --handlers-json @handlers.jsonSingle label, several labels, or a path through a taxonomy. Add other so it can decline.
❯ jev classify @issue.txt -l bug,feature,question --otherDo these two records describe the same thing?
❯ jev match --dedupe @contacts.json --kind "customer contacts"Is each search hit actually relevant?
❯ jev rerank "how do refunds work" -f help/*.md --min 0.6Which file answers this? Does any?
❯ jev find "retry logic" -f src/**/*.tsAny yes/no, pick-one, or rated question.
❯ jev ask @ticket.txt --choice team="Who?|billing,tech"The same verb over a whole file.
❯ jev batch classify -i @tickets.jsonl -o labeled.jsonl -- -l billing,technical,sales --otherWatch jev compact shrink a Claude Code session by judging every tool call and keeping or cutting it as is.
Hundreds of tool calls, most of them stale. The usual fix is a summary, and summaries lose file paths, exact errors, and constraints.
Two yes/no questions per tool call: does the call still matter, and does its output still need to be there in full.
Dropped calls are removed. Stale results keep a short head plus a note. User and assistant text is never touched.
Run it offline on any session log, or let the Claude Code plugin hook do it in-session instead of the built-in summary.
528 messages, 209 tool calls, context at 61%
Start from an example, edit it, copy the command.
What you ask
❯ jev ask "I was charged twice for order 4411 and nobody has replied in three days." \--noul urgent="Does the customer need a reply today?" \--choice team="Which team should handle this?|billing:refunds and invoices,technical:bugs and outages,sales" \--score mood="How frustrated is the customer?|calm,frustrated,very angry"Paste this into a shell with a key set. Each question comes back as a number.
Copy it, swap the paths, run it in your shell.