Jev makes the call. Sprites runs the agent.

Typed decisions from TypeSafe AI's Jev, inside a hardware-isolated computer.

TypeSafe AI launched Jev on September 15. Within three days, demand was so high that TypeSafe briefly lost the ability to serve users from its API. Jev is not your Auntie's LLM. It's an absurdly fast and cost efficient decision making model. You send it some state and a set of typed questions (yes or no, one of N, a score on a scale) and Jev works through them in parallel. At a pace that feels like cheating, you get a probability and a confidence for each one.

If your agent ever has to deal with decision-making workloads, there is no conceivable reason not to give it Jev powers. And with the TypeSafe AI Sprites Connector, it couldn't be easier. Configure it once and then turn on Jev access for any number of Sprites, without your TypeSafe key ever entering the Sprite. Let's get to it!

Three kinds of question

  • Yes or no

    “Does this message express urgency?”

    answer 0.95 confidence 0.91

  • One of N

    “Which team owns this ticket?”

    answer billing confidence 0.84

  • A score on a scale

    “How frustrated is the customer, 1 to 5?”

    answer 4 confidence 0.78

Setup

From API key to epic speed

Where the key lives

The SDK inside the Sprite calls the gateway. The gateway adds your real key on the way out.

  1. Your Sprite

    TypeSafe SDK

    TYPESAFE_API_KEY=sprites

    Any placeholder. The real key is never here.

  2. Fly.io

    Sprites gateway

    + your real key

    Checks which Sprite is calling, then attaches the key stored in your organization.

  3. TypeSafe AI

    Jev

    POST /v1/systemone

    Answers come back through the same path.

  1. 1

    Add the connector once.

    In the Fly.io dashboard, open your organization, go to Sprites, then Connectors, and click Add connector. Pick TypeSafeAI and paste your API key. It's checked against TypeSafe before it's saved, encrypted at rest, and never shown again.

  2. 2

    Choose which Sprites can use it.

    A new connector refuses every Sprite until you say otherwise. Grant access by name prefix, by labels, or to every Sprite in the organization, then hit Test on any matching Sprite to fire a real request through the gateway.

  3. 3

    Send the SDK through the connector.

    Out of the box, TypeSafe's SDKs call TypeSafe directly and expect your real API key. Set two variables in the Sprite and they call the connector instead: the base URL points them at it, and the key can be any placeholder, because the connector adds your real key on the way out. Nothing else in your code changes, and TypeSafe's agent skill picks up the same two variables.

    Shell
    export TYPESAFE_BASE_URL="https://api.sprites.dev/v1/gateway/typesafe/<connection_id>"
    export TYPESAFE_API_KEY="sprites"   # any placeholder; the gateway supplies the real key
    Python
    from typesafe_sdk import Noul, TypeSafeClient
    
    client = TypeSafeClient()
    
    response = client.system_one(
        state="Hi, my Stripe connection has failed for 3 days. Please help ASAP.",
        questions={"is_urgent": Noul(instructions="Does this message express urgency?")},
    )
    print(response.answers["is_urgent"].noul)  # e.g. 0.95

    The connector's page in the dashboard shows the same call with your connection ID already filled in.

In the loop

What your agent should ask Jev

  • one of N

    Route the task before paying for it.

    Have Jev make a choice question over the task description: run a script, hand it to a fast agent, hand it to a reasoning agent, or send it to a person. The expensive model only sees the work that needs it.

  • one of N

    Pick a skill, or don't use one.

    List the installed skills as choices, include a "none of these" option, and load only the winning skill's instructions into context. A low-confidence answer is the signal to load nothing.

  • yes or no one of N score

    Triage what comes in.

    A support ticket goes in as state. Three questions come back in one pass: is it urgent, which team owns it, how frustrated is the customer. The agent files it, pages someone, or drafts the reply.

  • yes or no

    Flag the diff for a human.

    Ask whether a change touches authentication or billing code, and above a threshold, stop and request review. Jev raises the flag. A person makes the call on anything destructive.

Why a Sprite

What happens after Jev answers

Jev returns a number. Your agent acts on it, and that action runs somewhere. Here's why that somewhere should be a Sprite.

  1. A webhook wakes it up.

    Every Sprite has its own HTTPS URL, and a request to that URL wakes a sleeping Sprite. Make the URL public, point your helpdesk's webhook at it, and the agent starts when a ticket arrives. Its code, dependencies and Jev questions are on disk where it left them. When it goes idle, it sleeps again. You don't keep a server running between tickets, and you don't tunnel into a machine on your desk.

  2. Whoever writes the ticket can steer the decision.

    Jev reads whatever you put in the state, and TypeSafe's docs say it doesn't treat that text as hostile. A ticket written to push the answer toward a particular branch can move it. So a stranger can influence which branch your agent takes, and that branch runs commands. On a laptop or an app server, those commands run next to your SSH keys, your cloud credentials and your internal network. A Sprite is a Firecracker microVM with its own kernel, so the agent's commands run on a machine holding the agent and the ticket, and nothing of yours you didn't put there.

  3. You decide what it can reach.

    Give the Sprite a network allowlist, for example your helpdesk's API and the Sprites gateway, and every other destination is dropped. That includes code that skips DNS and dials an IP directly. The policy is set from outside the Sprite. Code inside can read it but has no way to change it, so an agent talked into sending your data somewhere else has no route to get there.

  4. A clean machine for every ticket.

    Once the Sprite is set up, with the agent installed, its skills in place and your Jev questions written, checkpoint it. Restore that checkpoint after each ticket and the filesystem goes back to exactly how it was, whatever the last ticket talked the agent into. You can restore the same checkpoint as many times as you like.

Frequently asked questions

What is Jev? +

Jev is TypeSafe AI's System One model, a decision model rather than a chat model. It takes a piece of state and a set of typed questions, and returns a probability and a confidence for each answer instead of generated text. On Fly.io, Sprites reach Jev through the TypeSafeAI connector.

Can I use Jev from a Sprite on Fly.io? +

Yes. Add a TypeSafeAI connector with your TypeSafe API key in the Fly.io dashboard, grant it to the Sprites that need it, and call Jev through the Sprites gateway URL. The TypeSafe SDKs work once TYPESAFE_BASE_URL points at the connector.

Do I have to put my TypeSafe API key inside the Sprite? +

No. Fly.io stores the key encrypted in your organization, and the Sprites gateway attaches it to each request after checking the calling Sprite's identity. The Sprite only knows the connector URL, and TYPESAFE_API_KEY can be any placeholder.

Do the TypeSafe Python and JavaScript SDKs work through the Fly.io connector? +

Yes. Both SDKs read TYPESAFE_BASE_URL, so setting it to the connector URL (without a trailing /v1) is the only change. TypeSafe's agent skill works the same way inside a Sprite on Fly.io.

Which Jev endpoints can a Sprite reach through Fly.io? +

Two: POST /v1/systemone for typed decisions and GET /v1/models to list the model aliases your account can use, such as jev-latest. The Fly.io gateway rejects every other TypeSafe path and method with a 403.

Which Sprites can use my Jev connector? +

Only the ones you allow. A new connector on Fly.io refuses every Sprite until you set an access policy by name prefix, by Sprite labels, or for the whole organization. The dashboard lists matching Sprites live and can send a test request from each one.

How does a Sprite handle Jev rate limits on Fly.io? +

The Fly.io gateway passes 429 and 529 responses and the retry-after header straight back to the Sprite, along with TypeSafe's rate-limit headers. The TypeSafe SDKs read them and retry on their own schedule.

Is the TypeSafeAI connector available to every Fly.io organization? +

Yes. The TypeSafeAI connector is not behind a rollout flag, so every organization on Fly.io can add one from the Connectors tab today.

Can Jev replace the LLM my agent uses on Fly.io? +

No. Jev answers typed questions and does not generate text or stream, so an agent still needs a language model for writing code and prose. On Fly.io, a Sprite can hold an Anthropic or OpenAI connector alongside the TypeSafeAI one and use each for what it does.