TypeSafe Jev skill routing as a copy-paste before_agent_start example
A PR that implements this example is coming in the same turn (kvnloo:examples/typesafe-jev-skill-routing). Please do not have robomp pick this up independently.
What is missing
OMP already has native TypeSafe as a judgment backend (/login typesafe, TYPESAFE_API_KEY, providers.judgmentProvider: typesafe, eval judge()). That covers auto-thinking, unexpected-stop, and git AI staging.
It does not yet name which installed skill to read before a turn. With a few dozen SKILL.md files, the model still guesses from truncated one-liners. TypeSafe's published cookbook is exactly this problem: Skill suggestion.
Proposal
Ship a copy-paste example extension, not a core feature:
packages/coding-agent/examples/extensions/typesafe-jev.tsbefore_agent_start→POST https://api.typesafe.ai/v1/systemone- Call 1 of the cookbook: one
choiceover the roster + three gatenouls in the same request (docs: extra questions barely change latency) - Inject
<skill_relevance>viasystemPromptAppend(same hook aspirate.ts; cookbook puts the line in the system prompt after the roster) - Quiet when the gate mean is
< 0.30; fail-open on missing key / timeout / HTTP error /jevstatus. Do not put Jev in/model(max output tokens 0)
OMP skill counts are typically ~40, which the cookbook says one Choice holds comfortably. The cookbook's second request (rerank top 3 with SKILL.md excerpts) is the follow-up when lookalikes collide or the roster grows past ~100.
Live check (this machine, 39 skills, jev-1.13.0)
| Path | p50 | p95 | 2.5s abort |
|---|---|---|---|
Tiny noul probe |
323ms | 357ms | 0 misses |
| Full route (choice + gates) | ~330ms | ~372ms | 0 misses |
Hook log already firing on user turns in this omp session. Chat stays on the default model.
Public usage (sanity)
People already call native System One the same way: elizaOS/eliza, monotykamary/pi-fabric (no automatic retry — the caller decides), browser-use/jev-ultrafast, Vercel AI typesafe-ai/jev-latest, LangChain langchain_typesafe. None of those treat Jev as a chat model.
Out of scope
- Bundling this into core / enabling it by default
- Two-stage rerank
- Changing
TypeSafeJudgeorproviders.judgmentProvider
Source: can1357/oh-my-pi