Skip to content
System One

Hermes Jev Skills

Agent skills for Hermes, Claude Code and Codex that hand Jev the routing decisions: which model tier to use, which search results to open, which memory passages to read and which hide injected instructions. Ships a dashboard with an on, shadow and off switch and publishes measured latencies per skill.

The model routing dashboard: the Jev on/shadow/off switch, the routing pools grid, and live decisions as they happen
Image from github.com

kerpopule/hermes-jev-skills on GitHub

Stars
721
Forks
65
Language
Python
License
MIT
Last push
23 Sep 2026

Post on X

Views
100,055
Likes
558
Reposts
56

Read from GitHub and X on . Counts change daily.

hermes-jev-skills hands an agent’s small in-the-loop decisions to Jev instead of burning a frontier model’s tokens on them: which model is good enough to answer this turn, which of hundreds of loaded skills to use, which retrieved passages are worth reading, and which conversation turns survive a context summary. None of these need prose, so the project treats them as typed questions, choice, score or yes/no, that Jev answers with a calibrated confidence in roughly 0.4 seconds per turn for model routing, based on the author’s own measurements.

Search runs a slower round, about 1.9 seconds median across five live runs, since it covers ranking fetched results, judging whether the evidence answers the question, and picking the next query to try, with Jev never writing the query itself. Memory decisions run over up to 480 passages per call, screening for both relevance and hidden injected instructions, with the injection screen still running locally even if the Jev API is unreachable. The one skill the author explicitly does not ship as default is compaction by summary: they measured a Jev-summarized handoff recalling less than one built from the plain transcript, so the default handoff carries the full dialogue instead.

A dashboard shows Jev’s routing switch, on, shadow or off, and every decision as it happens with its tier, confidence and latency.

How it uses Jev

from . import keystore

ENDPOINT = "https://api.typesafe.ai/v1/systemone"
DEFAULT_MODEL = "jev-latest"
# Jev, reached through OpenRouter's Decisions API instead of TypeSafe directly: one key
# instead of two for anyone already on OpenRouter. Same request, same answers, same model -
# only the URL and the model id differ. Contributed as PR #1 by Lorenzo DZ (@Barba2k2),
# whose version prompted a chat model for JSON instead; that returns an LLM's guess with a
# made-up confidence, which is the one thing a decision model exists not to do.
OPENROUTER_ENDPOINT = "https://openrouter.ai/api/alpha/decisions"
OPENROUTER_MODEL = "~typesafe/jev-latest"
MAX_RESPONSE_BYTES = 1_000_000
MAX_STATE_CHARS = 60_000
USER_AGENT = "hermes-jev-skills/0.1"

View in jevkit/client.py

Open on GitHub

More like this

Use cases this is tagged with