TypeSafe Jev as a judgment layer — a pre-tool gate (shadow by default, enforce escalates) on terminal, write_file and patch asking destructive / exfiltration / impact (a v2 signal set — reads_secrets × sends_outbound, blast_radius, self_advocating — is one setting away), plus a jev_ask tool for typed judgments. Thresholds in code, one JSONL line per decision with the fail-open reason, fail-open on every error path. Stdlib only, no Node; no redirects, proxy env ignored, payload capped; works with TYPESAFE_API_KEY, OPENROUTER_API_KEY, or AI_GATEWAY_API_KEY. Disclosure — each judged call sends the tool name and its redacted arguments (≤600 chars each, ≤12 args) to TypeSafe, OpenRouter, or your configured gateway, using your key; shadow mode only logs. With the default backend auto, OPENROUTER_API_KEY is used automatically whenever it is present and TYPESAFE_API_KEY is not, so tool names and redacted arguments go to openrouter.ai on your main-model OpenRouter key unless backend is set to typesafe or gateway.
ToolsNames the one skill from your live roster that fits the turn, before the model call — typed routing via TypeSafe Jev (one choice over the roster plus gate booleans, then a re-read of the shortlist with per-candidate fits), with both thresholds applied in code. Says nothing when nothing fits; opt-in, fail-open, stdlib only, no Node; no redirects, proxy env ignored, payload capped. Disclosure — on eligible turns it sends your message (up to 4,000 chars) plus skill names and short SKILL.md excerpts from your local roster to TypeSafe, OpenRouter, or your configured gateway, using your key. With backend auto an OpenRouter key is used automatically when no TypeSafe key is set, and the OpenRouter route also reads Hermes' OpenRouter credential pool (auth.json) when OPENROUTER_API_KEY is absent, rotating that pool's entries through the core pool API.
Automation