Docs

How to set up TypeSafe's Jev through JevForAll. Written for AI coding agents (Claude Code, Codex and others) and for the people using them. The short version: install TypeSafe and Jev the normal way, then use a JevForAll key and the JevForAll address instead of a TypeSafe key and TypeSafe's address.

For AI agentsplain text: /docs.md

1. What this is

What this is

Jev is TypeSafe's small, fast model for judgment steps: classify, route, rank, verify. JevForAll is a relay in front of TypeSafe's API. Anyone holding $JFA on Robinhood Chain connects a wallet at jevforall.com, signs a free message, and gets a key that starts with jfa_.

The relay speaks the same API as TypeSafe: POST /v1/systemone and GET /v1/models, same request body, same response. Only two things change: the address and the key.

  • TypeSafe direct: https://api.typesafe.ai with a TypeSafe key.
  • Through JevForAll: https://jevforall.com with a jfa_ key.

A jfa_ key never works at api.typesafe.ai, and a TypeSafe key never works here. JevForAll is an independent project. It is not run by TypeSafe.

2. Set up in three steps

Set up in three steps

1. Install the official TypeSafe skill, so the agent knows how to write Jev questions.

# Claude Code
claude plugin marketplace add typesafe-ai/skills
claude plugin install typesafe@typesafe-ai

# Codex (no menu to answer)
npx skills add typesafe-ai/skills --skill typesafe-ai -a codex -g -y

# Any other agent: pick it from the menu
npx skills add typesafe-ai/skills --skill typesafe-ai -g

2. Save two environment variables so they persist. Replace YOUR_JEVFORALL_KEY with the key copied from jevforall.com. No trailing slash on the address.

TYPESAFE_API_KEY=YOUR_JEVFORALL_KEY
TYPESAFE_BASE_URL=https://jevforall.com
# Windows (PowerShell or cmd), then open a new terminal
setx TYPESAFE_API_KEY "YOUR_JEVFORALL_KEY"
setx TYPESAFE_BASE_URL "https://jevforall.com"

# macOS or Linux: add to ~/.zshrc or ~/.bashrc, then open a new terminal
export TYPESAFE_API_KEY="YOUR_JEVFORALL_KEY"
export TYPESAFE_BASE_URL="https://jevforall.com"

Saved variables only reach programs started afterwards. Restart the terminal, and restart the agent if it was already running. For one project, a .env file with the same two lines also works, as long as it is ignored by Git.

3. Send the test request below. If Jev answers, setup is done.

3. Test request

Test request

curl https://jevforall.com/v1/systemone \
  -H "Authorization: Bearer YOUR_JEVFORALL_KEY" \
  -H "Content-Type: application/json" \
  -d '{"state":"Help! My payouts have been failing for 3 days.","model":"jev-latest","questions":{"is_urgent":{"type":"noul","instructions":"Does this convey urgency?"}}}'

A working setup answers with HTTP 200 and JSON like this (other fields left out). noul is the probability of yes.

{"model":"jev-1.13.0","answers":{"is_urgent":{"noul":0.95}}}

On Windows, curl quoting is awkward. Agents should send the same request from a short Node or Python script instead.

4. Using it in code

Using it in code

The official SDKs read TYPESAFE_API_KEY and TYPESAFE_BASE_URL on their own, so code written from TypeSafe's docs works unchanged. Tested with @typesafe-ai/sdk 0.6.0 and Python typesafe-sdk 0.7.0.

// JavaScript: npm install @typesafe-ai/sdk
import { choice, TypeSafeClient } from "@typesafe-ai/sdk";

const client = new TypeSafeClient(); // reads both environment variables
const response = await client.systemOne({
  state: { document: "I was charged twice. Please fix this ASAP." },
  questions: { category: choice("What is this ticket about?", { billing: null, technical: null, other: null }) },
});
console.log(response.answers.category.choice, response.answers.category.confidence);

To set the address in code instead, pass baseURL to the JavaScript client or base_url to the Python client (pip install typesafe-sdk).

TypeSafe's docs show https://api.typesafe.ai in every plain HTTP example. When writing plain HTTP calls, replace that host with https://jevforall.com. Everything after the host stays the same.

For how to write good questions, read TypeSafe's own docs: docs.typesafe.ai/llms.txt. They are the source of truth for the API. This page only covers what JevForAll changes.

5. Limits

Limits

  • 1 $JFA held = 1 request a day. No minimum. The count resets at 00:00 UTC.
  • Only answered requests count. Errors, oversized requests and busy moments are free.
  • Each request body can be at most 16,000 bytes. Keep state short, or split the work into several requests.
  • The wallet's balance is re-read about once a minute. Sell or move the $JFA and the key turns off; buy back and the same key works again.
  • All holders share TypeSafe's limit for one account (1,200 requests a minute). Your daily number is a ceiling, not a reservation. At a busy moment you may get relay_busy: wait and retry.
  • GET /v1/models is free and does not count.
6. Errors

Errors

Errors are JSON: {"error":{"code":"...","message":"..."}}.

401 bad_keyThe key was not issued by JevForAll, or it was reset.Copy the current key from jevforall.com.
401 key_offThe wallet holds no $JFA right now.Hold $JFA again. The same key comes back on within a minute.
413 too_largeThe body is over 16,000 bytes.Shorten state or split the request.
429 daily_allowance_usedToday's requests are used.Wait for 00:00 UTC or hold more $JFA.
429 relay_busyThe shared limit is full right now.Retry after the Retry-After header. Not counted.
503 chain_unavailableRobinhood Chain could not be read to check the balance.Retry shortly. Not counted.
502 upstream_error / upstream_unreachableJev could not answer.Retry shortly. Not counted.

A 401 that comes from api.typesafe.ai (not from jevforall.com) means the address was not applied: the jfa_ key went to TypeSafe. Check TYPESAFE_BASE_URL, open a new terminal, and look for a hard-coded api.typesafe.ai in the code.

7. Key safety and privacy

Key safety and privacy

  • Treat the key like a password. Server-side only: never in browser code, never committed to Git.
  • Leaked it? Press Reset next to the key at jevforall.com. The old key stops working at once and a new one appears.
  • Getting a key is a free signature. The site never asks for a transaction or an approval.
  • Requests pass through JevForAll on their way to TypeSafe. The relay logs the wallet, the status and the size of each request, never its text.