Skip to content

Technology & AI

Jev

Jev is TypeSafe AI's System One model. Public launch was around September 2026. It does not chat. It does not write prose.

You send program state plus typed questions. It returns typed answers with calibrated probabilities, usually in 70 to 500ms. That is a different job than Grok or Claude. Those generate text. Jev decides.

This site does not call Jev yet. There is no @typesafe-ai/sdk in package.json, and no live production hook. Notes and snippets only.

What it is

Chat LLMs produce words for people. Jev evaluates a state against questions your code already understands. No JSON scraped out of a paragraph. No "return only valid JSON" prompt theater.

Mix them in one request. Questions run in parallel against the same state. Adding more barely changes latency.

Package: @typesafe-ai/sdk (TypeSafeClient, choice, noul, score). Or Vercel AI Gateway model id typesafe-ai/jev with AI SDK experimental_evaluate.

Pricing as of public docs: about $0.042 per 1M input tokens. Output is free. Pin jev-1.13.0 if you have tuned thresholds. jev-latest moves when they ship. Use it carefully.

Why type-safe matters

The answer can only be an option you listed. TypeScript infers the union from those keys. You branch on answers.route.choice without parsing a sentence.

Add a new bucket later and the type breaks until you handle it. That is the point. Constrained answers, not a model that might invent "maybe-sales-ish."

Confidence is separate from the picked option's probability. High confidence: act. Low confidence: send it to me.

How to call it

The TypeSafe client reads TYPESAFE_API_KEY from the environment. Do not put a key in the repo. This page is docs only. The site does not call Jev yet, and @typesafe-ai/sdk is not in package.json.

import { TypeSafeClient, choice, noul, score } from "@typesafe-ai/sdk";

const client = new TypeSafeClient({ defaultModel: "jev-1.13.0" });

const { answers } = await client.systemOne({
  state: { subject, body },
  questions: {
    route: choice("Where should this inbound message go?", {
      consulting: "Consulting, Cafe Cursor, or general work with Mason",
      takeoff: "Construction Takeoff, Simple Takeoff, or 3D takeoff",
      hardhat: "Hardhat for macOS or Hardhat MCP",
      spam: "Cold pitch, scrape, or junk",
    }),
    urgent: noul("Does this need a same-day reply?"),
  },
});

// answers.route.choice is "consulting" | "takeoff" | "hardhat" | "spam"

This site already ships on Vercel with /api serverless functions. Current production routes talk to Anthropic or OpenAI directly. They do not call Jev.

If you later use AI Gateway (the couples therapy bot notes already talk about provider/model strings), Jev is just typesafe-ai/jev:

import { experimental_evaluate as evaluate } from "ai";

const result = await evaluate({
  model: "typesafe-ai/jev",
  state: { subject, body },
  questions: {
    route: {
      type: "choice",
      instructions: "Where should this inbound message go?",
      criteria: {
        consulting: "Consulting, Cafe Cursor, or general work with Mason",
        takeoff: "Construction Takeoff, Simple Takeoff, or 3D takeoff",
        hardhat: "Hardhat for macOS or Hardhat MCP",
        spam: "Cold pitch, scrape, or junk",
      },
    },
  },
});

Examples on this site

Generic support-ticket demos are everywhere. These are the actual inboxes and pages I would point Jev at.

Route inbound contact

hi@masonearl.com and the site contact panel mix consulting asks, Takeoff questions, Hardhat support, and spam. A choice keeps the buckets closed.

route: choice("Route this masonearl.com inbound message", {
  consulting: "Consulting, speaking, Cafe Cursor, or working together",
  takeoff: "Construction Takeoff, Simple Takeoff, or 3D takeoffs",
  hardhat: "Hardhat macOS estimating app, sandbox, or Hardhat MCP",
  spam: "Recruiting blast, SEO pitch, or scrape",
})

Score wiki search intent

Site search already walks wiki pages. A score can rank whether a hit is the page someone meant, or just a neighbor.

relevance: score("How well does this wiki page answer the query?", [
  "Unrelated",
  "Same neighborhood, wrong page",
  "Useful related note",
  "This is the page they want",
])

Query cpu vs gpu against CPU and GPU should land high. The same query against M5 Max is related, not the answer.

Publish guardrail for /ff

The Freedom Fund page is public. Before a weekly audit or wiki note goes live there, ask whether it is scrubbed. Public marks only. No account numbers. No live P&L that should stay private.

safeToPublish: noul(
  "Is this /ff draft safe to publish scrubbed: public marks only, no account numbers, no private P&L?"
)

Threshold in code. High yes, publish. Middling, I read it. That is a guardrail, not a trader.

Pocket note destination

House and work notes land in Pocket. A choice can sort the destination before I file it.

destination: choice("Which Pocket folder should this note go in?", {
  work: "Edgevanta, Cursor, construction, Hardhat, or site work",
  writing: "Wiki, blog, Earl Pod, or public writing",
  personal: "House, Emma, or personal life",
})

When not to use it

Resources

Find something.

Search the wiki, writing, apps, and more.

Esc to close · ⌘K / Ctrl K to search

Say hello.

Have a question, an idea, or just want to connect?

hi@masonearl.com
Gmail ↗Outlook ↗

Choose your email service, or try your default email app ↗.

X / @masonearl ↗LinkedIn ↗