JJEV·DIRECTORY GitHub agent pack connect your agent
The grown-up version

What is Jev?

Jev is a judge model. It doesn't talk to your customers — it grades the AI that does. You hand it a record of what happened plus the questions you care about, and it answers them in a shape your code can use: true/false, one label, or a score.

The 30-second version

1Input
Give it the stateA support transcript, a tool-call log, one agent output — any text that records what actually happened.
2Questions
Ask in plain EnglishEach question declares its type and the exact rule to apply. Nothing to train, no labelled examples to collect.
3Output
Get verdicts backOne answer per question, typed and machine-readable — ready to gate a deploy, page a human, or feed a dashboard.

Why not just ask a model?

Asking a chat model

You ask "did the agent state the refund amount?" and get prose back. Sometimes it starts with "Yes" — sometimes with "The agent did state $42.50, however…".

Now you need a parser, and a second model to grade the parser.

Asking Jev

You declare each question's type once. Jev returns the verdict in exactly that shape — true, one label from your list, or a number.

No prose to parse, no second opinion to reconcile.

The three question types

TypeReturnsExample rule
booleantrue / falseTrue only if the agent stated the exact refund amount before asking to proceed.
choiceone labelClassify the ticket: billing, shipping, or account.
scorea numberRate the apology 1–5 for empathy and ownership.

A whole judgement, end to end

The state is whatever happened. The questions are what you want to know. Both are just text and types — this is one complete, runnable request:

import { experimental_evaluate } from 'ai';

const result = await experimental_evaluate({
  model: 'typesafe-ai/jev',
  state: 'Customer: my order arrived damaged, I want a refund.\n' +
         'Agent: I can refund order #88121 in full: $42.50 back to your ' +
         'Visa ending 4412 within 3-5 business days. Shall I go ahead?',
  questions: {
    amount_disclosed: {
      type: 'boolean',
      instructions: 'True only if the agent stated the exact refund amount ' +
                    '($42.50) before the customer approved.'
    },
    intent: {
      type: 'choice',
      criteria: { billing: 'money or charges', shipping: 'delivery timing', account: 'login or profile' },
      instructions: 'Route this ticket.'
    },
    empathy: {
      type: 'score',
      criteria: ['1 - none', '3 - acknowledged the problem', '5 - owned it and fixed it'],
      instructions: 'Rate how the agent handled the complaint.'
    }
  }
});
// → { amount_disclosed: true, intent: 'billing', empathy: 3 }
one call → three typed verdicts

Calling it

Jev runs as typesafe-ai/jev through the Vercel AI Gateway, called with experimental_evaluate from the AI SDK. Set AI_GATEWAY_API_KEY in your environment — never paste the key into code.

What it costs, and what it isn't

Modeltypesafe-ai/jev, called through the Vercel AI Gateway.
PriceAbout $0.042 per million input tokens — cheap enough to judge every conversation, not just a sample of it.
AuthAI_GATEWAY_API_KEY in the environment. Nothing to train, nothing to host, no weights to babysit.
Not a chatbotJev never answers your customers. It only answers questions about what your agent did.
Not a classifierYou don't train it or collect labels. You write the rule in English and it applies that rule.
Ready to see it run? There are 50 runnable evals in this directory, each with the exact prompt — copy one and run it. Or connect your agent over MCP and let it search them itself.

Go deeper

Simplify
Explained like you're 10The same idea with no jargon — handy for sharing with people who don't live in this world yet.
Pack
Capability packEvery eval with its prompt and every community build by category, in one markdown file.
Agents
MCP endpointHand your agent the directory as tools so it can search builds and evals on its own.