Jev Studio
One-stop kit for playing with TypeSafe's Jev: MCP tools for Choice/Noul/Score, ready-made prompt libraries, and slash commands for every cookbook.
Install
pip install jev-studio
Two commands are installed:
jev— the CLI for TypeSafe's Jev decisions (verify, screen, classify, extract, match, route, ask, find, rerank, compact, batch).jev-studio— the MCP server that serves the Jev ruleset over stdio.
The CLI: jev
Jev turns natural-language state and a set of typed questions into typed answers (yes/no, choice, or score) with probabilities. The CLI wraps it in one-command judgments over text you pipe in.
Authenticate
Any one of these is enough (first found wins):
jev auth login # store TYPESAFE_API_KEY in the OS keychain (or 0600 file)
export TYPESAFE_API_KEY=... # from https://console.typesafe.ai/settings/keys
export OPENROUTER_API_KEY=sk-or-...
export CLOUDFLARE_API_TOKEN=... CLOUDFLARE_ACCOUNT_ID=...
Inspect what's live: jev auth status.
Commands
Every command speaks JSON (--json), Markdown (--md), JSONL, CSV, TSV, or a colored text table. Use --pluck to lift one field. Use --fail-on <list> to make the process exit 2 when a judgment condition trips (great for CI gates).
Judgments
jev verify— check claims against evidence. Verdict + probabilities per claim, with asupporting_evidenceback-reference when there is more than one evidence item.jev screen— flag prompt injection, empty/boilerplate content, and irrelevance before an agent reads text. Recommendspass/review/block/skip.jev classify— one label (single), several (--multi), or a hierarchy (--taxonomy). Confidence-gatedautovsreview.jev extract— pull typed values out of text. Regex proposes candidates, Jev picks, code normalizes. Builtins:email,phone,url,amount,date,percent,number. Custom regexes vianame=/regex/:description.jev match— decide if record pairs are thesame,different, orunclear. Feed pairs, one list, or two lists (cross product).jev route— pick a handler for a request and fill its closed-set arguments in one call.jev ask— raw System One passthrough for any state and any questions (repeated--noul,--choice,--score, or--questions-json).
Ranking
jev find— rank up to 250 candidates against a plain-language query. Returns top-K and a document-levelanswered/partial/absentverdict.jev rerank— score each candidate independently and sort. Several can be relevant, or none.
Pipelines
jev compact— shrink an agent transcript by dropping stale tool calls verbatim; recent turns are always kept.jev batch— run a per-row command (classify,screen,verify) over JSONL or newline-delimited input with a bounded worker pool. Emits JSONL, one line per row.
Account
jev models— list the models available to your account.jev auth—login,logout,status. Keychain-first, file fallback.jev config—show,path,keys,set,unset. Defaults< file < env < flags.jev update— check PyPI for a newer release.
Examples
# Verify a claim against a file
jev verify "Helmets are optional for adults" --evidence @ordinance.txt
# Screen scraped HTML for prompt injection before letting an agent see it
curl -s https://example.com | jev screen --purpose "extract pricing" --fail-on block,review
# Classify a ticket in three labels, JSON output
jev classify "The invoice total is wrong" --labels billing,bug,feature --json
# Extract an email and a date from an invoice
jev extract @invoice.txt --want email --want date --context "an invoice"
# Rank documentation files for a question
jev find "how do I rotate API keys" --files 'docs/*.md' -k 3
# Batch-classify tickets with concurrency 8
jev batch -i @tickets.txt --concurrency 8 -- classify --labels billing,technical,sales
# Route a support request to a handler
echo "cancel my subscription" | jev route --handlers "cancel:cancel plan,upgrade,help"
# Inspect and edit configuration
jev config set verify.autoAccept 0.9
Exit codes
| Code | Meaning |
|---|---|
| 0 | Command completed and no --fail-on condition matched. |
| 1 | Usage, configuration, input, or transport error. |
| 2 | Judgment condition matched (e.g. a contradicted claim, injection blocked). |
Input references
Anywhere the CLI takes a value it accepts text, @path/to/file, or - (stdin). Escape a literal leading @ as @@.
Global flags
-m, --model NAME Jev model, e.g. jev-latest or jev-1.13.0
-P, --provider NAME auto | typesafe | openrouter | cloudflare
--timeout MS per-request timeout
--dry-run print the request that would be sent; don't call the API
--json, --md, --format text|json|jsonl|csv|tsv|md
--pluck PATH print one field (e.g. label, results[].verdict)
-q, --quiet omit the usage/model footer in text output
--no-color disable ANSI colors
Configuration
Config file: $XDG_CONFIG_HOME/jev/config.json (or ~/.config/jev/config.json). Env overrides file, flags override env. See jev config keys for every settable path.
Environment overrides:
JEV_PROVIDER JEV_MODEL JEV_TIMEOUT_MS JEV_FORMAT
JEV_CONFIG JEV_CREDENTIALS JEV_CREDENTIAL_STORE JEV_NO_STORED_CREDENTIALS
JEV_DEBUG=1 # include stack traces on error
The MCP server: jev-studio
jev-studio # speaks MCP over stdio
Point an MCP host at it:
{
"mcpServers": {
"jev": { "command": "jev-studio" }
}
}
Exposes:
- Prompt
jev— the Jev ruleset as a user message. Optionalmode:lite,full,ultra. Omit forfull. - Tool
jev_instructions— same text plus structured output ({mode, instructions}) for hosts that pull context via tools. Read-only.
Develop
pip install -e ".[dev]"
pytest
Ship to PyPI:
python -m build
twine upload dist/*
Claude Code
/plugin marketplace add utk2103/jev-Studio
/plugin install prompt-studio@jev-studio
Two separate prompts. Start a new session; the ruleset lands in system context on SessionStart.
Local clone:
/plugin marketplace add /path/to/jev-Studio
/plugin install prompt-studio@jev-studio
Codex
codex plugin marketplace add utk2103/jev-Studio
codex plugin add prompt-studio@jev-studio
Try something fun
A curated collection of 726 Jev use cases plus 50 runnable evals — every build linked to its project and source post. Search it, copy a brief, hand it to your agent.
Browse: jev-directory.netlify.app
Credits
The CLI is a Python port of the TypeScript jev-cli, rebuilt on the standard library with the same command surface and question shapes.
Contributing
See CONTRIBUTING.md.
License
MIT License — see LICENSE.
Release files for jev-studio 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| jev_studio-0.1.0.tar.gz | 42.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| jev_studio-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 89.5 kB
Release files / jev_studio-0.1.0.tar.gz
| Download URL | jev_studio-0.1.0.tar.gz |
|---|---|
| Size | 42.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e0a750e01de0250d4d6606d20b1f06f173f386134efb620db9a35d9b5822b8e0
|
|
BLAKE2b-256 checksum How to use checksums |
2752a48a184350182ebe4d5f492c436c073f21422898c3c2c2f3b9e3478c228d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.15
|
Release files / jev_studio-0.1.0-py3-none-any.whl
| Download URL | jev_studio-0.1.0-py3-none-any.whl |
|---|---|
| Size | 46.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
73f7584d4f79c22e73e07090083ab66c31621e77e10650d33cb19df16e371a9a
|
|
BLAKE2b-256 checksum How to use checksums |
2eb45928dc254ee70c1b8684ddcf32baea9dd1a6cdf7d750cc33f6a471ed9ccd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.15
|