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
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.aiwith a TypeSafe key. - Through JevForAll:
https://jevforall.comwith ajfa_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 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: 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
stateshort, 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/modelsis free and does not count.
Errors
Errors are JSON: {"error":{"code":"...","message":"..."}}.
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.
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.