jev-skill-router
OpenCode plugin that uses two gated Jev calls to inject at most one SKILL.md into the system prompt, or none.
Overview
This OpenCode V2 plugin follows TypeSafe's cookbook skill-suggestion pattern to pick at most one skill for the main model. It hooks session context directly, so there is no separate process and no tool the agent has to call. When nothing is relevant or anything fails, nothing is injected and the task continues untouched.
The pipeline is a local pre-check for greetings, then a first Jev call that ranks the whole roster with a Choice plus three Noul gates (does the request act on the user's systems, would an expert follow a documented procedure, would prose suffice). If the gate mean is under 0.30 it abstains. A second call reranks the top three using full descriptions and a body excerpt with per-skill fit Nouls, again abstaining under 0.30. Only metadata is sent, never skill content beyond the excerpt. The README includes real captured request and response payloads.
What the decision model decides
| Type | Question | Answers |
|---|---|---|
| Choice | Which of these skills, if any, is the right one to load to help with the user's latest request? | — |
| Yes / no | Is the assistant being asked to act on the user's files, accounts, devices, or online services, rather than only to explain or advise? | — |
| Yes / no | Could a knowledgeable generalist fully satisfy this request in prose, with no tools, no documentation, and no access to the user's files or accounts? | — |
| Yes / no | Does this candidate skill fit the request (per-candidate rerank)?(inferred) | — |
How it works
- Local pre-check filters greetings; roster is all indexed skills, BM25-trimmed only above 200
- Call 1: Choice over the roster plus three Noul gates; abstain if gate mean < 0.30
- Call 2: rerank top three with fit Nouls; abstain if all fits < 0.30
- Budget-checked load of the single winner into the system prompt
Strengths
- Fails closed: on errors or low confidence nothing is injected
- No extra process or agent tool call
- Two-stage gating limits unnecessary skill injection
Caveats
- Thresholds are fixed heuristics, not calibrated values per the README
- Two decision calls add latency per routed request
- Some documentation is in Indonesian
At a glance
- Type
- Agent skill
- Status
- beta
- Language
- TypeScript
- Runtime
- OpenCode plugin
- Has code
- yes
Use cases and integrations
How curated lists describe it
OpenCode plugin: Jev decision model picks at most one SKILL.md.
wh000wh000/awesome-jev-live
Frequently asked questions
How many skills can it inject?
At most one per request, and none when the gates or fit checks fall below 0.30.
Is it an MCP server?
No. It is an OpenCode plugin that hooks session context, so the agent never has to call a tool.
What does it send to the decision API?
Skill ids and descriptions in the first call, plus a 700-character body excerpt for the top three in the second.
Related projects
Orchestrator that probes which coding agents are installed and logged in, then has Jev pick the best one for a task.
Agent skillbetaPythonExperimental plugin wiring Jev into coding-agent harnesses to pick skills, tools, models and browser moves, starting with OpenCode.
Agent skillprototypeTypeScriptMIT plugin and local MCP server that hands an agent's closed questions to Jev or local Laya, with policy gates and receipts.
Agent skillproductionPythonClaude Code and Codex skill that routes a task to one of 27 specialist roles, with an optional Jev engine for catalog selection.
ProjectbetaPythonClaude Code hook that decides which agent or skill should handle a request using YAML rulebooks plus one Jev Choice with confidence bands.
HookbetaPythonHooks for Claude Code, Codex and pi that use Jev to suggest a skill each turn, plus a rule gate for subagent model routing.
HookbetaJavaScript