Jevbridge
Allows OpenAI models, including Codex and generic OpenAI-compatible endpoints, to act as the System One decision backend for typed routing, gating, scoring, and computer-use action selection.
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., "@JevbridgeDecide if I should delete the production database."
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.
About The Project
TypeSafe Jev is a System One model: unstructured state in, typed probabilistic decisions out. It does not generate text. That makes it a poor chatbot and an excellent function call for routing, gating, scoring, and computer-use action selection.
Jevbridge is the adapter that sits alongside the LLM you already run.
Native Jev when
TYPESAFE_API_KEYis set.Any LLM as System One when it is not — Codex, Claude, Grok, OpenCode, or a generic OpenAI-compatible endpoint.
ACP over stdio so Zed, JetBrains, and other Agent Client Protocol hosts can treat Jev as the decision sidecar for a generating model.
Confidence gates so a peaked distribution executes, a middling one confirms, and a destructive click does not go unsupervised.
The LLM writes the plan and the explanation. Jevbridge returns noul, choice, and score answers that software can branch on.
Home: tacticocc/Jevbridge.
Core Capabilities
Evaluate one
stateagainst mixed Choice, Score, and Noul questions.Swap backends (
jev|llm|heuristic|auto) without changing question shapes.Confidence-gate tool calls and computer-use clicks (
execute,confirm,escalate,abort).Speak MCP (
jev_decide,jev_gate,jev_computer_use) and ACP over stdio.Ship recipes for support routing, destructive command gates, context keep/drop, and GUI next-action.
Run offline with the heuristic backend in tests and CI.
Built With
Related MCP server: jev-flash-router
Getting Started
Jevbridge is a zero-dependency Node 22 library plus MCP and ACP stdio binaries. You do not need a TypeSafe key to try it: the heuristic backend and any OpenAI-compatible LLM both speak the same protocol.
Prerequisites
Node.js 22 or newer
Git
Optional: a TypeSafe API key
Optional: an LLM key (
XAI_API_KEY,OPENAI_API_KEY,ANTHROPIC_API_KEY, orOPENCODE_API_KEY)
Installation
Clone the repo
git clone https://github.com/tacticocc/Jevbridge.git cd JevbridgeThe npm name is
@tactico/jevbridge. After a release is published:npm install -g @tactico/jevbridgeInstall (no runtime npm dependencies)
npm installExport keys you actually have. Native Jev is preferred; otherwise Jevbridge wraps your LLM.
export TYPESAFE_API_KEY=ts_... export JEVBRIDGE_LLM=xai export XAI_API_KEY=xai-...Run a recipe without any network
node --experimental-strip-types src/cli.ts eval support-route
Usage
Library
import { evaluate, gate, noul, choice, score } from "./src/index.ts";
const result = await evaluate({
state: "I was charged twice for order A-104. Refund the duplicate today.",
questions: {
refund: noul("Does this request a refund?"),
team: choice("Which team should handle this?", {
billing: "Payments, invoices, refunds.",
technical: "Bugs, outages, integrations.",
other: "None of the above.",
}),
urgency: score("How urgent is this?", [
"Can wait a week",
"Handle today",
"Blocking now",
]),
},
backend: "auto",
jev: process.env.TYPESAFE_API_KEY
? { apiKey: process.env.TYPESAFE_API_KEY }
: undefined,
});
const decision = gate(result.answers, { choiceId: "team" });
if (decision.action === "execute") {
// branch on result.answers.team.choice
}CLI
node --experimental-strip-types src/cli.ts recipes
node --experimental-strip-types src/cli.ts eval computer-use
node --experimental-strip-types src/cli.ts mcp
node --experimental-strip-types src/cli.ts acpOr use the wrapper:
node bin/jevbridge.mjs eval destructive-gateEnvironment
Variable | Purpose |
| Native Jev ( |
|
|
| Override model id |
| Override OpenAI-compatible base URL |
| Grok |
| OpenAI / Codex |
| Claude |
| OpenCode |
|
|
| Custom upstream ACP command (alternative to the presets) |
| Extra args for |
| Where ACP sessions are stored (default |
| Set to |
backend: "auto" uses Jev when a TypeSafe key is present, otherwise the LLM adapter, otherwise heuristic.
With no API key, auto falls back to the local keyword scorer. The payload reports "backend": "heuristic". That scorer includes question text in its evidence, so asking "would this spend money, delete data, or submit a form?" about "hello world" can still score high from word overlap. Treat heuristic numbers as a smoke test, not a safety signal.
For more examples, see src/recipes.ts and skills/jevbridge/SKILL.md.
MCP Server
Jevbridge speaks the Model Context Protocol over stdio (newline-delimited JSON-RPC 2.0). Point Claude Desktop, Cursor, Codex, OpenCode, or any MCP host at jevbridge mcp. The generating model keeps writing; Jevbridge is the typed decision tool.
Tool | What it does |
| Fan out |
| Confidence-gate already computed answers ( |
| Next GUI action from a closed set: click, type, scroll, wait, screenshot, done, abort. |
| Run a built-in recipe ( |
Also exposes jevbridge://recipe/{id} resources and two prompts.
Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"jevbridge": {
"command": "node",
"args": [
"--experimental-strip-types",
"/absolute/path/to/Jevbridge/src/cli.ts",
"mcp"
],
"env": {
"TYPESAFE_API_KEY": "ts_..."
}
}
}
}Codex (~/.codex/config.toml):
[mcp_servers.jevbridge]
command = "node"
args = ["--experimental-strip-types", "/absolute/path/to/Jevbridge/src/cli.ts", "mcp"]OpenCode (opencode.json) and Cursor (.cursor/mcp.json) live in examples/. Drop-in copies:
examples/claude-desktop.jsonexamples/cursor.mcp.jsonexamples/codex.config.tomlexamples/opencode.jsonexamples/zed.settings.jsonexamples/zed.claude-proxy.jsonexamples/zed.codex-proxy.json
Example tool call:
{
"name": "jev_decide",
"arguments": {
"state": "I was charged twice for order A-104. Refund the duplicate today.",
"questions": {
"refund": { "type": "noul", "instructions": "Does this request a refund?" },
"team": {
"type": "choice",
"instructions": "Which team should handle this?",
"criteria": {
"billing": "Payments, invoices, refunds.",
"technical": "Bugs, outages, integrations.",
"other": "None of the above."
}
}
}
}
}Call jev_gate before a destructive tool. Call jev_computer_use instead of asking the LLM which CSS selector to click.
ACP Adapter
Jevbridge implements the Agent Client Protocol over stdio with LSP-style Content-Length framing.
Add to Zed settings.json:
{
"agent_servers": {
"Jevbridge": {
"type": "custom",
"command": "node",
"args": [
"--experimental-strip-types",
"/absolute/path/to/Jevbridge/src/cli.ts",
"acp"
],
"env": {
"TYPESAFE_API_KEY": "ts_...",
"JEVBRIDGE_LLM": "anthropic",
"ANTHROPIC_API_KEY": "sk-ant-..."
}
}
}
}On session/prompt the sidecar:
Classifies the turn (question, code edit, computer use, terminal).
Calls Jev or the LLM System One adapter.
Confidence-gates the result.
Streams
session/updatetool calls and a short agent message.
Sessions persist under ~/.jevbridge/sessions. The adapter advertises loadSession plus sessionCapabilities.resume / list / close / delete, so Zed and other hosts can restore a thread with session/load (replay history) or session/resume (reconnect without replay).
Proxy an upstream agent
Point Jevbridge at Claude Code or Codex. It speaks ACP to the host, forwards the generating agent, and intercepts session/request_permission plus pending tool_call notifications. Jevbridge then allows, asks the user, or denies the call.
jevbridge acp --upstream claude
jevbridge acp --upstream codex
jevbridge acp -- /path/to/custom-acp-agentZed settings.json (Codex behind Jevbridge):
{
"agent_servers": {
"Jevbridge Codex": {
"type": "custom",
"command": "npx",
"args": ["-y", "@tactico/jevbridge", "acp", "--upstream", "codex"],
"env": {
"TYPESAFE_API_KEY": "ts_..."
}
}
}
}Presets spawn npx -y @agentclientprotocol/claude-agent-acp and npx -y @agentclientprotocol/codex-acp. Destructive execute/delete/edit/move calls that Jev aborts are failed in the client and cancelled upstream.
Codex, Claude Code, Grok Build, and OpenCode keep generating. Jevbridge decides.
Computer Use
Computer-use loops waste frontier tokens on “what should I click.” Jevbridge scores a GUI observation against a closed action set:
click · type · scroll · wait · screenshot · done · abort
plus target, safety, destructiveness, and goal progress. A refund button that spends money comes back confirm, not execute — destructiveness is an independent gate, so a peaked action distribution does not skip it.
import { computerUseQuestions, observationState, readAction } from "./src/index.ts";
const state = observationState({
goal: "Refund the duplicate charge on order A-104",
app: "Billing Console",
visible: ["Refund duplicate", "Email customer", "Close ticket"],
});
const result = await evaluate({
state,
questions: computerUseQuestions(["Refund duplicate", "Email customer", "Close ticket"]),
backend: "auto",
});
const action = readAction(result.answers);Roadmap
System One client (Jev, LLM adapter, heuristic)
Confidence gate
Computer-use recipes
ACP stdio adapter (
initialize,session/new,session/prompt)MCP stdio server (
jev_decide,jev_gate,jev_computer_use,jev_recipe)Proxy an upstream ACP agent (Claude Code, Codex) and intercept tool calls
Session load / resume
Published npm package
@tactico/jevbridgeTransfer this repository into the
tacticoccorganization
See the open issues for a full list of proposed features (and known issues).
Contributing
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again!
Fork the Project
Create your Feature Branch (
git checkout -b feature/AmazingFeature)Commit your Changes (
git commit -m 'Add some AmazingFeature')Push to the Branch (
git push origin feature/AmazingFeature)Open a Pull Request
Please add or update tests under src/*.test.ts for behavioral changes.
Top contributors:
License
Distributed under the MIT License. See LICENSE for more information.
Contact
Tactico — github.com/tacticocc
Project Link: https://github.com/tacticocc/Jevbridge
Acknowledgments
This server cannot be deployed
Maintenance
Related MCP Connectors
Context and control for any AI. Agent identity, scoped access, and proof across tools.
Source-checked CLI guides and model-aware planning for Claude Code, Codex, and Grok Build.
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
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.
Related MCP Servers
- 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
- AlicenseAqualityBmaintenanceEnables AI coding agents to make fast, zero-output-token decisions by evaluating context, diffs, logs, or options through the OpenRouter Decisions API using TypeSafe Jev, returning calibrated probabilities for binary, categorical, or scoring questions.132 npm3MIT
- AlicenseAqualityCmaintenanceEnables coding or reasoning agents to request structured judgments from TypeSafe's Jev model at decision points, including choices, scores, claim verification, and code reviews, with probabilities and confidence returned as data.59 npmMIT
- AlicenseBqualityCmaintenanceEnables AI agents to obtain typed judgments from TypeSafe's Jev System One models, including yes/no probabilities, multiple-choice selections with distributions, and rubric-based scores, directly usable in code.52AGPL 3.0