Configuration

September 20, 2026 ยท View on GitHub

Settings resolve in this order, later wins: built-in defaults, config file, environment variables, command-line flags.

jev config

SubcommandDoes
jev config or jev config showEffective settings, masked credentials, key sources, resolved provider. Exit 1 if no provider can be resolved.
jev config pathPrint the config file location
jev config initWrite a file with the defaults
jev config set <key> <value>Set one value, e.g. jev config set screen.blockAt 0.6. Unknown keys and out-of-range values are rejected.
jev config unset <key>Remove a top-level key
jev config resetDelete the file

Config file

$JEV_CONFIG if set, else $XDG_CONFIG_HOME/jev/config.json, else ~/.config/jev/config.json. It never holds API keys.

{
  "provider": "auto",
  "model": "jev-latest",
  "timeoutMs": 30000,
  "format": "text",
  "verify":   { "autoAccept": 0.8 },
  "screen":   { "blockAt": 0.75, "reviewAt": 0.25 },
  "find":     { "topK": 5, "found": 0.7, "absent": 0.35 },
  "classify": { "minConfidence": 0.6, "threshold": 0.5 },
  "extract":  { "minConfidence": 0.6 },
  "rerank":   { "topK": 10, "min": 0.5 },
  "route":    { "minConfidence": 0.6 },
  "compact":  { "keepThreshold": 0.5, "preserveRecent": 6, "maxStateTokens": 25000, "maxRequestTokens": 30000, "truncateHead": 300, "minReduction": 0.25, "concurrency": 4 },
  "batch":    { "concurrency": 4 }
}

Environment variables

VariablePurpose
TYPESAFE_API_KEYTypeSafe key. Optional when stored with jev auth login; takes precedence when set.
TYPESAFE_BASE_URLAlternate TypeSafe endpoint, for proxies or testing
OPENROUTER_API_KEYOpenRouter key (sk-or-...), used when no TypeSafe key is present
CLOUDFLARE_API_TOKEN + CLOUDFLARE_ACCOUNT_IDCloudflare Workers AI, used when no other key is present. JEV_CLOUDFLARE_API_TOKEN takes precedence over CLOUDFLARE_API_TOKEN.
JEV_PROVIDERForce typesafe, openrouter, or cloudflare
JEV_MODELDefault model
JEV_TIMEOUT_MSDefault per-request timeout
JEV_FORMATDefault output format: text, json, jsonl, md, csv, tsv
JEV_CONFIGConfig file path
JEV_CREDENTIALSCredentials file path (file store)
JEV_CREDENTIAL_STOREauto, keychain, or file
JEV_NO_STORED_CREDENTIALS=1Ignore stored keys; environment only
JEV_NO_UPDATE_CHECK=1Skip the "update available" check
JEV_DEBUG=1Print stack traces on errors

Providers

ProviderNotes
TypeSafe (direct)Recommended. Lowest latency, jev-latest alias, pinned versions, automatic retries with backoff.
OpenRouterAlpha endpoint. Pinned versions only, so jev-latest maps to typesafe/jev-1.13. Adds a hop.
Cloudflare Workers AISingle typesafe/jev alias, no version pinning. Adds a hop.

With the default auto and no TypeSafe key, an OPENROUTER_API_KEY or Cloudflare pair already in your environment is enough to route your text through that provider. When that happens jev prints one line on stderr naming the host it passes through. Choosing the provider yourself, with -P or the config file, silences it.

Global flags

Work before or after the subcommand.

FlagMeaning
--json, --md, --format <name>text, json, jsonl, md, csv, tsv; see Output formats
--pluck <path>Print one value from the JSON result
-m, --model <name>jev-latest or a pinned version such as jev-1.13.0
-P, --provider <name>auto, typesafe, openrouter, cloudflare
--timeout <ms>Per-request timeout, default 30000. It is per attempt: the TypeSafe transport retries twice with backoff, so one failing request can take up to three attempts.
--dry-runPrint the exact request, exit 0, no API call. Every command that calls the API honors it, models included; auth, config and update never reach the API, so it does nothing there.
-q, --quietOmit the token usage footer
--no-colorDisable colors; NO_COLOR and FORCE_COLOR are honored too

Models

jev models lists the models your account can use, with release dates. TypeSafe provider only. Pin a version with -m jev-1.13.0 once you have tuned thresholds, so an alias update does not shift results.