1. Data source
  2. Decision schema
  3. Model inference
  4. Structured result
2 Decision schema 3 typed questions
  • deliverychoicesteerqueueinterrupt
  • relevancescorelowmediumhigh
  • targets_running_callnoulprobability 0–1

3 Model inference typesafe/jev-1.13

Waiting for a run.

4 Structured result

Run the demo to see the JSON answers, the highlighted pick and the final action.

Call Jev yourselfSame data and schema, straight to Flatkey. Set FLATKEY_API_KEY and run.
curl -sS https://router.flatkey.ai/api/alpha/decisions \
  -H "Authorization: Bearer $FLATKEY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "model": "typesafe/jev-1.13",
  "state": "Running tool call (2m 40s in):\n  tool: apply_patch\n  target: src/checkout/payment.ts\n  goal: migrate checkout to the new payment client\n  progress: 3 of 7 files patched\n\nNew user message:\n  \"Wait—use the v2 client from packages/pay-v2, not the legacy one. Keep the retry logic you already added.\"\n\nTask: delivery (steer / queue / interrupt), relevance, targets_running_call.",
  "questions": {
    "delivery": {
      "type": "choice",
      "instructions": "A tool call is running and the user just sent a new message. How should the harness deliver it? Prefer steer when the message corrects or adds context to the step in flight; queue when it is a separate follow-up; interrupt only when the user clearly asks to stop or the running work is now wrong.",
      "criteria": {
        "steer": "The message corrects, narrows, or adds context to the running tool call; inject it at the next step and keep the work in flight",
        "queue": "The message is a new or follow-up task that does not change the current step; deliver it after the run finishes",
        "interrupt": "The user asks to stop, cancel, or restart, or the running call is now clearly wasted or harmful"
      }
    },
    "relevance": {
      "type": "score",
      "instructions": "How strongly does the new message bear on the tool call that is running right now, based only on the running call and the message text provided.",
      "criteria": [
        "low",
        "medium",
        "high"
      ]
    },
    "targets_running_call": {
      "type": "noul",
      "instructions": "The message refers to the file, command, target, or goal of the running tool call—true only when there is a concrete link, not just the same project."
    }
  }
}'

No Flatkey key yet? Get one for Jev 1.13 →

Run with real Jev

Sign in and connect a key

  1. Sign in with Google.
  2. Connect your Flatkey or OpenRouter key on the next screen. Get a Flatkey key for Jev 1.13.
  3. Come straight back here and press Run again.

This site is for researching, sharing and cataloguing Jev use cases. Your key is only there to make trying Jev convenient: it is stored encrypted, used only for runs you trigger, never used for anything else, and you can delete it anytime.

About this use case

Use Jev to steer or queue: incoming state, Jev decision, routed outcome

Who / when

Audience

  • coding-agent builders whose users type while a tool call is still running
  • harness owners who want mid-run messages handled without an extra LLM turn
  • teams that run a small local decision model next to a big planner

Triggers

  • a new user message arrives while a shell, patch, or browser tool call is in flight
  • some messages correct the current step and others are the next task
  • interrupting loses in-flight work, but queuing a correction wastes the whole run
  • the decision must take milliseconds, not another round with the planner model

The workflow

  1. 01
    Running call + messageTool in flight, new user textInput
  2. 02
    Deliverysteer / queue / interruptJev
  3. 03
    RelevanceScore + targets_running_callJev
  4. 04
    Code gateInject, enqueue, or stopYour code

Question shape

{
  "delivery": {
    "type": "choice",
    "instructions": "A tool call is running and the user just sent a new message. How should the harness deliver it? Prefer steer when the message corrects or adds context to the step in flight; queue when it is a separate follow-up; interrupt only when the user clearly asks to stop or the running work is now wrong.",
    "criteria": {
      "steer": "The message corrects, narrows, or adds context to the running tool call; inject it at the next step and keep the work in flight",
      "queue": "The message is a new or follow-up task that does not change the current step; deliver it after the run finishes",
      "interrupt": "The user asks to stop, cancel, or restart, or the running call is now clearly wasted or harmful"
    }
  },
  "relevance": {
    "type": "score",
    "instructions": "How strongly does the new message bear on the tool call that is running right now, based only on the running call and the message text provided.",
    "criteria": [
      "low",
      "medium",
      "high"
    ]
  },
  "targets_running_call": {
    "type": "noul",
    "instructions": "The message refers to the file, command, target, or goal of the running tool call—true only when there is a concrete link, not just the same project."
  }
}

Gate policy

≥ 0.90

Honor delivery: steer into the running turn, queue as the next run, or interrupt only when targets_running_call is true or the user said stop.

0.65–0.90

Never interrupt in this band. Steer only when targets_running_call is true; otherwise queue and show a one-tap "steer instead" chip.

< 0.65

Queue by default (no work lost) and log the probabilities for review of the delivery policy.

Failure modes

Pre-launch checks before you trust auto-routing:

  • Queuing a correction, so the agent finishes seven files with the wrong client and the user waits for a redo;
  • Interrupting on every new message and throwing away work in flight that the user wanted kept;
  • Steering a brand-new task into an unrelated running call and corrupting its context;
  • Spending a full planner-model turn just to decide where one sentence goes;
  • Letting Jev cancel or approve tools itself—delivery only; stop and permission logic stay in the harness;
Keep exact work in code: the run state, the message queue, cancellation, explicit commands like /stop, and tool permissions stay deterministic. Use Jev only for the meaning-level call—steer, queue, or interrupt—then let your thresholds decide whether to inject, enqueue, or stop.

FAQ

What is the difference between steer, queue, and interrupt?

Steer injects the message into the running turn at its next step, so the agent corrects course and keeps its work in flight. Queue waits for the current run to finish and delivers the message as the next run. Interrupt stops the run now and starts over, losing in-flight work.

Why not just ask the planner model where the message goes?

It adds a full chat turn of latency and cost to every mid-run message, and the answer is free text you still have to parse. Jev returns a calibrated choice over the three options your harness already supports, fast enough to run on every keystroke-send, and small decision models can even run locally.

What does the Flatkey call look like?

POST https://router.flatkey.ai/api/alpha/decisions with Authorization: Bearer …, Content-Type: application/json, and a body of state, model (typesafe/jev-1.13), and questions (choice / score / noul). This is not an OpenAI-compatible /v1 chat endpoint.

Can I bring my own API key?

Yes. Try the free demo above without signing in. To run it live on your own text, sign in with Google and connect a Flatkey or OpenRouter key (a quick test call runs when you save it). Manage or delete it anytime under Dashboard → BYOK. Keys are stored encrypted on the server, used only for runs you trigger, and never sent back to the browser. Need a Flatkey key? Get one for Jev 1.13 on Flatkey.

Is this the official TypeSafe Jev product page?

No. jev-llm.com is an independent research and practice site. Verify pricing, models and terms at the original TypeSafe sources.

Sources

Seen on X
Independent-site note: jev-llm.com is an independent research and practice site. It is not the TypeSafe AI official site. Verify models, pricing and terms at the original source.