aside-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., "@aside-jevScore how risky it is to click the delete button"
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.
aside-jev
Let Aside agents decide with TypeSafe Jev — not with free-form LLM clicks.
Jev is TypeSafe’s System One model: it does not generate text. You send state + typed questions (Choice / Score / Noul) and get calibrated values your code can branch on (typically 70–500ms).
aside-jev wires that model into Aside workflows as an MCP server + skill:
Aside observes / executes the browser (
aside mcp).Your agent builds the decision (state + questions, or an app-owned action table).
Jev returns a typed answer (e.g. one candidate id).
Your agent executes only that answer via Aside, then verifies independently.
This is not a Cua integration. Cua’s jev-use demo is just one recipe that also calls Jev.
Here the runtime is Aside; the decision model is Jev.
Why Jev (not another chat model)
Chat / computer-use LLM | Jev (System One) | |
Output | Prose / invented tool calls | Typed |
Hallucinated selectors | Common | Impossible if options are app-owned |
Latency | Seconds | ~70–500ms |
Confidence | Soft / uncalibrated | Calibrated probabilities |
Docs: Introduction · Python SDK · API POST /v1/systemone
Related MCP server: Querytree MCP Server
Install
uv tool install "aside-jev @ git+https://github.com/himomohi/aside-jev"
# or
git clone https://github.com/himomohi/aside-jev.git
cd aside-jev && ./scripts/install.shexport TYPESAFE_API_KEY=… # also accepts TYPESAFEAI_API_KEYMock path needs no key (CI / demos).
MCP next to Aside
{
"mcpServers": {
"aside": { "command": "aside", "args": ["mcp"] },
"aside-jev": {
"command": "aside-jev",
"args": ["serve"],
"env": { "TYPESAFE_API_KEY": "${TYPESAFE_API_KEY}" }
}
}
}On this machine a wrapper ~/.local/bin/aside-jev-mcp can source ~/.config/typesafe/api.env then run aside-jev serve.
Skill: skills/aside-jev/ → copied to ~/.aside/skills/ by scripts/install.sh.
MCP tools
Tool | What Jev does |
| General System One call — mix Choice / Score / Noul on one state |
| Choice over an app-owned candidate action table ( |
| Fail closed if id ∉ table |
| choose + confidence gate + |
General decisions (jev_system_one)
{
"state": { "url": "…", "goal": "submit form", "snapshot": "…" },
"questions": {
"done": { "type": "noul", "instructions": "The form is already submitted" },
"risk": {
"type": "score",
"instructions": "How risky is the next click",
"criteria": ["safe", "reversible", "destructive"]
},
"next": {
"type": "choice",
"instructions": "Best next macro-step",
"criteria": {
"fill_fields": "Fill empty required fields",
"submit": "Submit the form",
"stop": "Stop and ask the user"
}
}
}
}Action IDs for Aside (jev_choose / jev_step)
Your agent enumerates complete actions (tool + args). Jev only returns one id. Aside runs that row. Unknown ids fail closed. Always include abstain.
aside-jev choose \
--goal "fill the verification field" \
--candidates examples/demo_candidates.json \
--observation examples/demo_observation.json \
--provider mock \
--prefer type-verification-valueSafety model
App owns options — Choice criteria / candidate rows are defined in code.
Jev returns values — never selectors, never free tool names.
Validate before execute — unknown id → error / abstain.
Threshold in your code — use
confidence/noulbands (auto / confirm / human).Verify independently — DOM / API /
/state, not model prose.Keys in env only — never argv, source, or logs.
Development
uv sync --extra dev
uv run pytest -qPython ≥ 3.11 · MIT · depends on typesafe-sdk (TypeSafeClient.system_one, model jev-latest).
Related
TypeSafe Jev docs: https://docs.typesafe.ai
Aside browser agent:
aside mcp/aside replCua jev-use is an unrelated demo that also calls Jev with a different executor — not required here.
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.
Human-in-the-loop for AI agents. Submit choices, get a human decision.
Human-input bridge for AI agents with voice-first answer links, MCP tools, and HTTP APIs.
Deterministic authorization for one proposed AI agent action, returned with a signed receipt.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to interact with web browsers using natural language, featuring automated browsing, form filling, vision-based element detection, and structured JSON responses for systematic browser control.62MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to add decision drafts, evidence, and counterarguments to a shared local decision state, while users confirm or reopen decisions in a web console. Prevents unverified agent answers from being silently turned into code.MIT
- AlicenseAqualityCmaintenanceProvides 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
- AlicenseAqualityCmaintenanceEnables 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