# JevForAll 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.

Web version: https://jevforall.com/docs

## 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 https://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.

## 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 https://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.

## 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.

## 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: https://docs.typesafe.ai/llms.txt. They are the source of truth for the API. This page only covers what JevForAll changes.

## 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.

## Errors

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

| Status and code | Meaning | Fix |
| --- | --- | --- |
| 401 bad_key | The key was not issued by JevForAll, or it was reset. | Copy the current key from https://jevforall.com. |
| 401 key_off | The wallet holds no $JFA right now. | Hold $JFA again. The same key comes back on within a minute. |
| 413 too_large | The body is over 16,000 bytes. | Shorten state or split the request. |
| 429 daily_allowance_used | Today's requests are used. | Wait for 00:00 UTC or hold more $JFA. |
| 429 relay_busy | The shared limit is full right now. | Retry after the Retry-After header. Not counted. |
| 503 chain_unavailable | Robinhood Chain could not be read to check the balance. | Retry shortly. Not counted. |
| 502 upstream_error / upstream_unreachable | Jev could not answer. | Retry shortly. Not counted. |

Live status of the relay, Jev and the chain: https://jevforall.com/status (as data: https://jevforall.com/api/health). Your key is tied to your wallet, so it stays the same even if anything behind the relay is replaced.

A 401 that comes from api.typesafe.ai (not from https://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.

## 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 https://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.
