jev-agent-tools
Node library providing multi-provider Jev transport with fail-closed validation, used by Jev Browser and Jev MCP.
Overview
Jev Agent Tools is a Node.js 22+ library, published as @jkudish/jev-agent-tools, that underpins the author's Jev Browser and Jev MCP projects. Its single ask() function picks a provider from the environment, sends typed questions, and validates the answers before returning them. It never throws a verdict: callers get either the answer with usage and the effective model, or a typed rejection.
The TypeSafe transport retries 408, 409, 429 and 5xx responses up to three attempts, honouring Retry-After within the caller's abort signal. Failures map to codes such as request_failed, rate_limited and unavailable; invalid responses produce specific codes including answer_id_mismatch, invalid_distribution, invalid_noul, invalid_usage and invalid_model; and configuration problems return configuration_error. Error messages never include response bodies or credentials. Providers are auto-selected in order, starting with TypeSafe direct and then OpenRouter, which maps jev-latest to its own model id. It has CI and an MIT licence.
What the decision model decides
| Type | Question | Answers |
|---|---|---|
| Yes / no | Is a refund requested? | yes · no |
How it works
- Call ask() with state, questions, model and abort signal
- Transport selects TypeSafe or OpenRouter from environment
- Retries transient errors within the signal
- Validates answers; returns ok with answer or a typed rejection
Strengths
- Fail-closed validation of every response
- Never leaks bodies or credentials in errors
- Provider fallback via environment
Caveats
- Library only; no UI
- Node 22+ required
Getting started
`npm install @jkudish/jev-agent-tools`, then `await ask({ state, questions, model: "jev-latest", signal })`.At a glance
- Type
- MCP server
- Status
- beta
- Language
- TypeScript
- Runtime
- Node.js 22+
- Has code
- yes
- Has tests
- yes
- License
- MIT
Use cases and integrations
How curated lists describe it
Jev transport/provider layer: multi-provider transport layer that supports fail-closed validation. Used by jkudish/jev-browser and jkudish/jev-mcp.
logicrw/awesome-jev-projectsJev transport/provider layer: multi-provider transport layer that supports…
wh000wh000/awesome-jev-liveJev transport/provider layer: multi-provider transport layer that supports fail-closed validation. Used by jkudish/jev-browser and jkudish/jev-mcp.
hellogumbo/awesome-jev
Frequently asked questions
What does ask() return?
Either the validated answer with usage and effective model, or a typed rejection code; it never throws a verdict.
Which providers are supported?
TypeSafe direct and OpenRouter, auto-selected from environment variables.
Who uses it?
The author's Jev Browser and Jev MCP projects.
Related projects
Hack Club's lightweight LLM proxy, listed for adding a Jev forwarding endpoint behind its auth, limits and usage logging.
MCP serverproductionTypeScriptAx, a DSPy-style multi-language LLM framework, listed with a native TypeSafe provider for Boolean, Choice, Score and raw Jev questions.
PluginproductionTypeScriptEffect TypeScript library whose @effect/ai-typesafe package maps classify, probability and rating operations to Jev questions.
ProjectproductionTypeScriptPHP monorepo whose Polyglot module adds a TypeSafe driver for typed Noul, Choice and Score decisions alongside LLM inference.
ProjectproductionPHPGo MCP server giving any client typed Jev decisions via OpenRouter or TypeSafe, with validated answers and no paid retries.
MCP serverproductionGoSimon Willison's LLM plugin that adds Jev as a model for yes/no, choice and score questions from the command line.
PluginproductionPython