Jev
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@JevShould I delegate this to a subagent or do it locally: fix typo in README?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
cursor-jev
Route Cursor subagents with TypeSafe Jev, and ask typed Choice / Score / Noul questions from any agent.
Jev is not a chat model. It cannot write code, call tools, or be used as a Cursor model ID (jev, jev-latest, and typesafe-ai/jev are invalid there). Jev classifies and scores; Cursor LLMs execute.
The value is not “another AI”. Expensive Cursor hops become cheaper and rarer. Jev answers yes / no / which option in about 100ms. It does not write the patch.
Parent agent
→ Task / Write / shell
→ hook
→ TypeSafe Jev (~100ms)
→ allow / deny / ask / rewrite
→ MCP jev_judge / jev_ask / jev_route / jev_authWhy this helps
It saves three things.
Extra subagents.
Taskis a costly hop: new context, a second search, sometimes nesting. The plugin cuts that itself. A local edit stays on the current agent. A secondTaskin the same turn is blocked. A nested subagent is denied. That matters when the model likes to spawnexplore/generalPurpose“just in case”.Extra repo reads. After
Grep/Glob, Jev keeps about three relevant files and deniesReadof README, sibling modules, and other noise. On a large monorepo that is where an agent burns a turn on fifteen files instead of two.Scope creep. “Fix the bug” should not become a neighbor refactor plus extra tests. The scope gate denies writes the user did not ask for. Destructive shell (
reset --hard,push --force) asks you instead of running silently.
The agent can also call Jev instead of a long thinking pass: which of four files, done or not, one job or three. That is faster than another reasoning loop.
Almost useless on a one-file tweak, with no TypeSafe key (hooks fail open), or when a hook blocks a Read / Write you actually needed — then it is friction, not speed.
Cursor still writes the code. Jev only decides whether that hop is worth taking.
Related MCP server: Jev MCP
Install
Requires Node.js 22.13+ (node:sqlite is unflagged there). Zero runtime npm dependencies.
git clone https://github.com/mywwave/cursor-jev.git
cd cursor-jev
node bin/cli.mjs installOn Windows you can use cursor-jev.cmd install instead.
Then fully restart Cursor (or Developer: Reload Window).
install merges into existing Cursor config and copies a local plugin (logo + Configure form):
Path | What it is |
| Cursor plugin Jev (avatar, MCP, hooks, Configure) |
| User stdio server |
| Task / Write / Read / prompt / shell / ready hooks |
| WAL store for sanitized user asks, Task fan-out, and rerank allowlists |
| Always-on routing reminder ( |
| Agent skill ( |
node bin/cli.mjs uninstallUninstall keeps ~/.cursor/cursor-jev.env and the SQLite file. Enable local plugins in Cursor if the Jev plugin does not appear under Customize → Plugins.
Connect (pick one)
Cursor UI (recommended): Customize → Plugins → Jev → Configure → paste a TypeSafe API key from console.typesafe.ai.
CLI:
node bin/cli.mjs set-key(saves~/.cursor/cursor-jev.env, never git).In chat: ask the agent to call MCP
jev_auth.
Do not put the key in git, mcp.json, hooks.json, or a committed .env.
CLI
cursor-jev set-key Save the TypeSafe key to ~/.cursor/cursor-jev.env
cursor-jev key Show whether a key is saved (does not print the secret)
cursor-jev install [--no-rule] [--no-skill]
cursor-jev uninstall
cursor-jev mcp Stdio MCP server (Cursor launches this)
cursor-jev hook Cursor hooks (Cursor launches this)MCP tools
After Cursor reconnects, the server is named Jev. Tools:
Tool | Purpose |
| Prompt to connect a TypeSafe API key |
|
|
|
|
|
|
Resources: jev://status. Prompts: connect-typesafe, route-task.
Do not send secrets, .env files, credentials, or full transcripts as state.
install registers both a user MCP server (jev) and the plugin server (plugin-cursor-jev-jev). They are the same process; keep whichever you prefer.
Speed
Jev is ~100ms per judgment. A Cursor Task subagent is seconds to minutes. The plugin speeds agents by cutting hops, not by replacing the coding model. Missing key, HTTP error, or timeout fail open.
Waste | What Jev does |
| Deny the hop; parent continues inline |
Nested | Blocked |
Second | Blocked unless Jev says the extra hop is worth it |
Extra investigation after a good result |
|
Write outside the user ask |
|
Compound prompt |
|
Destructive shell | User is asked unless the command clearly matches the ask |
Grep / search dump | Rerank: Read only the top-k paths Jev scores as relevant |
Long yes/no / classification |
|
Hook stall | TypeSafe timeout on the hook path is 1.8s, one attempt, fail-open |
The Task prompt also gets a one-pass contract (Jev speed: fast|standard|thorough).
This is the same pattern as TypeSafe's cookbooks: Choice/Noul is ~7–100× faster than asking a chat model the same closed question. Wall-clock for a whole coding session still depends on the Cursor LLM; Jev removes the extra loops around it.
Gates
Hooks call the same questions as MCP jev_judge. Thresholds live in src/roles.mjs. Missing key, HTTP error, or timeout fail open.
Kind | When | Action |
|
| Deny if |
| MCP only | Return one of 2–8 named options |
| After the agent replies | Stop if ship score |
| User prompt submit | Sequence jobs if |
| Before shell (internal) | Ask the user if destructive |
rerank | After | Score 0–2 per hit plus a focus Choice; keep up to 3 files with score |
Routine shells (git status, git diff, node --test, …) skip the model.
Rerank is additive. Existing Task / scope / split / ready / shell gates stay. SQLite adds a reads table next to asks and fanout; those tables are not dropped. No allowlist yet (or a TypeSafe miss) fail-opens and every Read is allowed. File bodies are never sent to TypeSafe — only path + short snippet.
Prefers jev_judge over inventing jev_ask questions. jev_ask stays for custom Choice / Score / Noul.
Session state is a SQLite file at ~/.cursor/cursor-jev.sqlite (node:sqlite, WAL, 2s busy timeout). Concurrent hook processes share it without an extra npm dependency. Secrets are stripped before write.
Routing
On every Task call the hook sends the task text to POST https://api.typesafe.ai/v1/systemone (jev-latest) with:
Choice
role— Cursorsubagent_type(explore,generalPurpose,cursor-guide,docs-researcher,ci-investigator,ai-architect,deployment-expert,performance-optimizer, plusbugbot/security-reviewonly when the parent already requested them)Noul
needs_specialist— whether a specialist beatsgeneralPurpose
Code decides:
Result | Action |
Missing key, HTTP error, or timeout | Fail open; keep the original type |
Choice confidence | Keep the original type |
Specialist noul | Keep |
Otherwise | Set |
The subagent model is never changed. Questions and thresholds live in src/roles.mjs.
Plugin layout
This repo is a Cursor plugin as well as a CLI:
.cursor-plugin/plugin.json— name Jev, logo, optionalTYPESAFE_API_KEYmcp.json— plugin stdio MCP (${CURSOR_PLUGIN_ROOT}, no secrets)hooks/hooks.json— Task, Write, prompt, shell, and ready hooksassets/logo.svg— plugin and MCP avatar
For building TypeSafe features in your own apps, install the official skill separately:
npx skills add typesafe-ai/skills --skill typesafe-aiDocs: TypeSafe introduction, API, intent routing.
Outside Cursor
The plugin is Cursor-only. The same TypeSafe call (POST /v1/systemone, then branch in your code) is how you use Jev in tickets, moderation, matching, or dates. This repo does not ship a second service.
Job | What to ask Jev | Then in code | Write-up |
Tickets / intent | Choice: deterministic vs specialist LLM vs human; Noul: is this in-scope? | Route the ticket; do not let the LLM invent the queue | |
Moderation | Choice with an uncertain outcome; Noul for each hazard | Auto-act only above a confidence floor; otherwise human review | |
Entity matching | Score whose levels are the actions (merge / leave unlinked / curator) | No extra threshold to invent — the score is the action | |
Dates | Ask for the named parts (absolute vs relative); keep numbers in code | Resolve and validate in code; review low-confidence spans |
Keep questions atomic. Combine answers in code. Never send secrets or full transcripts as state.
Develop
Zero runtime dependencies.
node --test
node scripts/mcp-smoke.mjsnpm test runs the same unit suite. The smoke script talks to TypeSafe if TYPESAFE_API_KEY or ~/.cursor/cursor-jev.env is set.
If Cursor shows Jev as loading, reload the window after install. Stdio uses newline-delimited JSON (MCP spec), not LSP Content-Length.
License
MIT
This server cannot be deployed
Maintenance
Related MCP Connectors
Deterministic contextual decision arbitration and action routing for autonomous software. Takes current state, context, or intent plus caller-supplied candidate actions, state transitions, routes, refusals, escalations, tools, or models and returns a deterministic ordered candidate field. Also provides persistent machine representations for memory, retrieval, indexing, and downstream coherence measurement.
Pre-execution governance for AI agents. Deterministic PASS/FAIL/REVIEW verdicts, replayable proof.
Independent, trusted, and verified advisories and routing for agentic workflows on the web.
Runtime permission, approval, and audit layer for AI agent tool execution.
Related MCP Servers
- AlicenseAqualityBmaintenanceProvides coding agents and CI with a typed decision layer that sends bounded state and questions to Jev, then returns deterministic actions for review, risk assessment, requirement checks, and verification.9MIT
- AlicenseAqualityBmaintenanceEnables frontier coding agents to delegate routine probabilistic judgments to TypeSafe Jev, providing calibrated triage signals for failures, attempts, completion, context ranking, findings, risk, and generic evidence-grounded questions.7MIT
- AlicenseCqualityBmaintenanceEnables browser agents to make typed, calibrated decisions via Jev's System One model within Aside workflows, supporting choice, score, and noul questions with safe action validation.64MIT
- AlicenseNot gradedqualityBmaintenanceEnables typed decisions, confidence-gated tool calls, and computer-use action selection for any LLM via Model Context Protocol, bridging TypeSafe Jev with Codex, Claude, Grok, and OpenCode.30MIT