Jev decision tools
Calibrated yes/no, choice and score judgements from TypeSafe Jev through OpenRouter — probabilities instead of prose, about a second and $0.00002 a call.
TypeSafe Jev decisions for Elyra -- calibrated yes/no, choice, and score judgements through OpenRouter.
Jev is a decision model, not a chat model. It never generates text. You give it a piece of content
(state) and one or more typed questions, and it returns probabilities. A call takes about one second
and costs roughly $0.00002.
Install
elyra install npm:@elyracode/jev-tools
Requirements
An OpenRouter API key. Either log in with /login and pick OpenRouter, or set OPENROUTER_API_KEY.
The extension reuses whatever key Elyra already has for the openrouter provider.
Tools
| Tool | Description |
|---|---|
decide |
Ask Jev one or more questions about a state. Question types: noul (yes/no), choice (pick one), score (ordinal scale). Returns probabilities, confidence, and usage. |
Commands
/jev-- show model, endpoint, key status, and bash gate state/jev gate on|off-- toggle the bash gate for the current session
Bash gate (opt-in)
When enabled, every bash tool call is first sent to Jev with the question "would running this
command destroy data or make a change that is hard to reverse?". If the probability is at or above
the threshold, Elyra asks you to confirm before running it. In non-interactive mode (print, RPC)
the command is blocked instead.
Enable with elyra --jev-gate, JEV_BASH_GATE=1, or /jev gate on. Off by default because it adds
about one second of latency to each bash call.
If the key is missing or the API fails, the gate logs a warning and lets the command through rather than blocking all shell access. It is a second opinion, not a security boundary.
Usage
> Is this diff a breaking change? Ask Jev before you answer.
> Classify these 20 log lines by severity using decide, then only show me the ones rated high or critical.
> Before running that migration, use decide to check if the command is destructive.
Question types
noul -- yes/no with a calibrated probability:
{ "name": "refund", "type": "noul", "instructions": "Is the user asking for a refund?",
"criteria": { "true": "explicitly wants money back", "false": "anything else" } }
choice -- pick one option, get the full distribution:
{ "name": "route", "type": "choice", "instructions": "Who should handle this?",
"criteria": { "code": "write or change code", "research": "needs web lookup", "other": "none of the above" } }
score -- ordinal scale, 2-10 labels from low to high:
{ "name": "severity", "type": "score", "instructions": "How severe is this log line?",
"criteria": ["debug", "info", "warning", "error", "critical"] }
Writing good questions
Jev reads criteria literally and does not infer intent beyond what is stated.
- Describe observable conditions, not goals. Spell out both sides for
noulviacriteria. - Make
choiceoptions exhaustive, or add anotheroption. - Keep
stateto what the questions need. The context window is about 32K tokens. - Ask several questions in one call when they concern the same state; the cost is the same.
Configuration
| Variable | Default | Purpose |
|---|---|---|
OPENROUTER_API_KEY |
-- | API key, if not stored via /login |
JEV_MODEL |
~typesafe/jev-latest |
Model slug sent to the endpoint |
JEV_BASE_URL |
https://openrouter.ai/api/alpha/decisions |
Override if OpenRouter moves the endpoint out of alpha |
JEV_BASH_GATE |
off | Set to 1 to enable the bash gate at startup |
JEV_BASH_GATE_THRESHOLD |
0.7 |
Probability (0-1) at or above which the gate intervenes |
Notes
- The decisions endpoint is an OpenRouter alpha API. The request contract here is derived from public community clients, not from an official specification, and may change.
- Retries with backoff on 429/5xx, up to three attempts. Requests time out after 60 seconds.
- Unofficial community integration. Not affiliated with TypeSafe or OpenRouter.