You're signed out
Log in to see your decisions, thresholds, and API key.
Log in →Couldn't load your dashboard
Your thresholds — you own these
Applied to every new callConfidence histogram
Server-side · all timeLeft = the gate is unsure. Those calls are where human review pays off.
Review queue
Muddy middle first · conf 0.4–0.6Nothing in the muddy middle. Good news.
Decision log
Latest 50 · export CSV · JSONNo decisions yet. Point your agent at POST /v1/gate.
API key
Machines onlyAgents authenticate with Authorization: Bearer. You never paste it here — humans use this dashboard instead.
…Billing
Flat monthlyChecking your plan…
Call it from your agent
All client files →Anything that can send an HTTPS request can ask the gate. Post the trace; branch on action: approve continues, hold queues a human, escalate stops the run.
curl -s https://jev-gate.fly.dev/v1/gate -H "Authorization: Bearer $JEV_GATE_KEY" -H 'content-type: application/json' -d '{"transcript":"agent is about to drop the orders table"}'curl -sO https://jev-gate.fly.dev/client/jev_gate_mcp.py # one file, stdlib only
from jev_gate_mcp import GateBlocked, guarded
call_tool = guarded(dispatch) # dispatch(name, args) is your code
call_tool("delete_rows", {"table": "orders"}) # raises GateBlocked before it runs{"mcpServers": {"jev-gate": {"command": "python",
"args": ["/path/to/jev_gate_mcp.py"],
"env": {"JEV_GATE_KEY": "<your key>"}}}}curl -sO https://jev-gate.fly.dev/client/claude_code_hook.py
// .claude/settings.json
{"hooks": {"PreToolUse": [{"matcher": "*", "hooks": [
{"type": "command", "command": "JEV_GATE_KEY=jgate_… python /path/to/claude_code_hook.py"}]}]}}curl -sO https://jev-gate.fly.dev/client/langchain_callback.py
from langchain_callback import GateCallback
agent = create_react_agent(..., callbacks=[GateCallback()]) # raises before the tool runscurl -sO https://jev-gate.fly.dev/client/guard_tool_calls.py
call_tool = guarded(dispatch) # the smallest useful integrationEvery file is served by this service and runs on a bare python — nothing to install, no repo to clone. Errors fail closed: 401 rotate the key, 402 reopen billing, 429 back off — never proceed on your own judgement.
Notifications
hold & escalate onlyPoint a webhook at your alerting and every hold or escalate lands there with its reasons. approve stays quiet. Leave it empty to stop.
API: POST /v1/gate · GET /v1/decisions · GET /v1/confidence · GET /v1/review-queue · PATCH /v1/settings