Claude Code plugin

Better Call Jev.

A judgement primitive for agents. Give Jev the evidence and a bounded question. Get back a calibrated probability, not a paragraph.

Install View on GitHub

What it does

Jev is TypeSafe AI's evaluation model. It does not generate or explain. It judges. Put everything the decision depends on into state, ask one or more typed questions, and act on the numbers.

$ echo "Card charged twice" | node jev.mjs --bool "Is the customer asking for a refund?"
{ "q1": { "type": "boolean", "probability": 0.31 } }
boolean

A yes/no with stated truth conditions. Returns a probability from 0 to 1.

choice

One of a small named set you describe. Returns the pick, the full distribution, and confidence.

score

A position on a rubric you label rung by rung. Returns the rung and how peaked the distribution is.

Why a plugin

With the plugin loaded, Claude Code stops deciding by intuition. A session hook installs a protocol: every judgement call that is not mechanically determined by the evidence goes through Jev. Which option to pick. Whether an action is safe. Whether the diff does what was asked and nothing more. Whether the task is actually done.

1
Isolate the evidence. The diff, the draft, the two candidates. Jev sees only what is in state.
2
Bound the answer. Rewrite the question as a boolean, a choice, or a score. If it cannot be bounded, it is not yet a judgement.
3
Act on the number. Above 0.8 or below 0.2 is decided. In between, split the question or add evidence.

Install

Inside Claude Code:

/plugin marketplace add jukkatupamaki/better-call-jev
/plugin install better-call-jev@better-call-jev

Then set JEV_API_KEY. Requests are served through Vercel AI Gateway, so the key is an AI Gateway key from your Vercel account. Put it in your shell profile or in the project's gitignored .claude/settings.local.json. Never commit it.

Node 18 or newer. No npm install, no dependencies. The skill is invoked as /jev.

Or call it directly

node skills/jev/scripts/jev.mjs <<'EOF'
{
  "state": { "spec": "<the request>", "artifact": "<the diff>" },
  "questions": {
    "satisfies":   { "type": "boolean", "instructions": "Does the artifact fully satisfy the spec?" },
    "overreaches": { "type": "boolean", "instructions": "Does it do things the spec did not ask for?" },
    "quality": {
      "type": "score",
      "instructions": "Overall quality against the spec",
      "criteria": ["unusable", "needs major rework", "needs minor fixes", "ready"]
    }
  }
}
EOF

Or from Node:

import { ask, choose, score } from './scripts/jev.mjs';

await ask(state, "Is it safe to run this command?");            // 0.93
await choose(state, "Which team?", { billing: "...", infra: "..." });
await score(state, "Severity", ["cosmetic", "low", "moderate", "high"]);

Patterns

ShapeAsk
GateOne boolean before a risky action. Act only above threshold.
Verifysatisfies, overreaches, omits over a spec and an artifact.
CompareA choice between a and b. The probabilities tell you how close the race is.
RankOne score with the same rubric per item, then sort.
ClassifyA choice with one option per category, plus other.
DetectSecrets in a diff, PII in a record, an unsupported claim in a summary.
Self-checkBefore delivering, ask whether the output answers the task and stays in scope.

The full reference, per-domain recipes, and the CLI flags live in the skill file in the repo.