Last updated: 2026-09-24

Jev Setup: First Decision in 10 Minutes

Two routes in, three lines of code, and one gotcha worth knowing before production. If you are on the early-access waitlist and impatient, skip to the OpenRouter route — it needs no waitlist and answers the same questions.

Step 1 — Pick an access route

RouteHowNotes
TypeSafe early accessconsole.typesafe.ai — join the waitlist, then create an API keyThe first-party path; the official SDKs assume it
OpenRouterModel typesafe/jev-1.13, alias ~typesafe/jev-latestNo waitlist. Pay per input token; output free. Good for a first look and for comparing against other models you already route there
Cloudflare Workers AIAvailable in the Workers AI model catalogueUseful if your gateway already runs at the edge
Framework integrationslangchain-typesafe, Pydantic AIIf your harness is already built on one of these, start here

Jev uses a custom API shape rather than chat completions, so an OpenAI-compatible client will not "just work" — that is true on OpenRouter too, where it is exposed through a decisions endpoint rather than the usual chat path.

Step 2 — Install the SDK

# Python 3.10+
pip install typesafe-sdk
# or
uv add typesafe-sdk

# Node 20+
npm install @typesafe-ai/sdk

Then put your key in the environment. The client reads TYPESAFE_API_KEY and defaults to the jev-latest model:

export TYPESAFE_API_KEY="sk-..."

Step 3 — Your first call

One state, three kinds of question, answered in a single parallel pass:

from typesafe_sdk import Choice, Noul, Score, TypeSafeClient

client = TypeSafeClient()

response = client.system_one(
    state="The deploy failed twice and customers are seeing 500s on checkout.",
    questions={
        "team": Choice(
            instructions="Which team should own this?",
            criteria={
                "billing": "Payments, invoices, refunds",
                "platform": "Deploys, uptime, infrastructure",
                "other": "Anything that does not fit the options above",
            },
        ),
        "urgent": Noul(instructions="Does this need attention right now?"),
        "severity": Score(
            instructions="Rate customer impact",
            criteria=["Low", "Medium", "High"],
        ),
    },
)

print(response.nouls["urgent"].noul)          # probability it is urgent
print(response.choices["team"].choice)        # selected option
print(response.choices["team"].probabilities) # probability per option
print(response.choices["team"].confidence)    # 0-1

Field names follow the primitive: choice, score and noul carry the value, alongside confidence and a probabilities map. Note the deliberate other option — see the gotchas below.

The raw HTTP call

If you would rather not take an SDK dependency, or you are wiring this into a gateway:

curl -X POST https://api.typesafe.ai/v1/systemone \
  -H "Authorization: Bearer $TYPESAFE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "jev-latest",
    "state": "The deploy failed twice and customers are seeing 500s.",
    "questions": {
      "urgent": { "type": "noul", "instructions": "Does this need attention now?" }
    }
  }'

Shapes change during early access — check the quickstart against your SDK version before you build on the raw payload.

Inside Claude Code

TypeSafe publishes an agent skill as a Claude Code plugin:

claude plugin marketplace add typesafe-ai/skills
claude plugin install typesafe@typesafe-ai

As with any third-party plugin, read it before you enable it — a plugin runs with your session's permissions. Our skills guide has the review checklist, and claude plugin validate (v2.1.281) will now flag .mcp.json entries that would be dropped silently and insecure URLs.

Inside LangChain

pip install langchain-typesafe
from langchain_typesafe import Noul, TypeSafeClassifier

classifier = TypeSafeClassifier()
response = classifier.invoke({
    "state": "The deploy failed twice and customers are seeing 500s...",
    "questions": {
        "urgent": Noul(instructions="Does this need attention now?")
    },
})
urgency = response.nouls["urgent"].noul

The same package ships middleware that puts Jev in the harness loop rather than in your application code — ModelRouterMiddleware and AutoModeMiddleware. Those are covered with worked examples in use cases.

Gotchas worth knowing before production

1. jev-latest is an alias, and aliases move

In a tested run the alias resolved to Jev 1.13.0, and the response carried that version. Record the resolved version with any results you keep, and pin an explicit version in production so a silent upgrade cannot change your decisions overnight.

2. Always include an other or unknown option

Jev must answer within your schema. If none of your options fit, it will still choose one — observed at 0.31 confidence in testing. An escape hatch plus a confidence threshold that routes to a human is the difference between a safe classifier and a confidently wrong one.

3. Test your actual wording, especially negation

"I am not asking for a refund" correctly dropped the refund probability from 98% to 3% in testing — good, but the point is that asking for a refund, asking about the refund policy, and refusing one are three different things. Check yours before wiring the answer to an action.

4. Instruct it to treat the state as untrusted

In a prompt-injection test, a fake system override inside the message failed to flip the classification when the evaluation instructions said to treat content inside the message as untrusted text. One passing test is not immunity, but the instruction is free — write it.

5. 32K input context

Long documents need chunking or a retrieval step in front. Jev judges the state you give it; assembling that state is your job.

What it costs to try

Eight playground requests in one tested run used 4,148 input tokens in total. At $0.042 per million that is a fraction of a cent, and output is free. The real budget line in a production system is not Jev — it is whatever you use to assemble the state and to handle the cases Jev routes to a human or to a bigger model. Model both in the cost calculator.

Sources, checked 2026-09-24: TypeSafe AI's System One announcement and quickstart, OpenRouter's Jev guide, and LangChain's harness write-up. Measured figures come from the tested video breakdowns we link, not from us. Jev is in early access and changing weekly.

📬 Weekly Digest — In Your Inbox

One email a week: top news, releases, and our deepest new guide. No spam. Same content via RSS if you prefer.