← ClaudeAtlas

jev-skill-routerlisted

A Claude Code UserPromptSubmit hook that asks TypeSafe Jev which installed skill (user, plugin or project) fits the prompt — two typed requests, at most one skill name back — and either records the decision (shadow) or injects a one-line pointer (inject). Not invoked by the model: it runs as a hook (plugin install, or one line in settings.json) and this file is its operating manual.
shimo4228/claude-harness · ★ 3 · AI & Automation · score 82
Install: claude install-skill shimo4228/claude-harness
# jev-skill-router Claude Code lists every installed skill's description and leaves the choice to the model. With dozens of skills the model reads past the one that fits, or loads one when none does. This hook makes that choice a separate, typed judgment: the prompt and the skill roster go to TypeSafe's Jev model, which returns probabilities, and code decides from them. The roster in the model's context never changes — at most one line is added to the turn. Python 3.10+, standard library only. The runtime is `scripts/`; nothing else is needed. ## Install As a plugin (wires the hook for you): ``` /plugin marketplace add shimo4228/jev-skill-router /plugin install jev-skill-router@jev-skill-router ``` Claude Code asks for the options when it enables the plugin: a TypeSafe API key (https://console.typesafe.ai/keys — stored in the system keychain, optional if you pass the key another way), the mode (`shadow` by default; the picker needs Claude Code 2.1.271+), and an optional log path. By hand: put this directory anywhere and add one hook to `~/.claude/settings.json`: ```json { "env": { "JEV_ROUTER": "shadow" }, "hooks": { "UserPromptSubmit": [ { "hooks": [ { "type": "command", "command": "python3 /path/to/jev-skill-router/scripts/route.py", "timeout": 5 } ] } ] } } ``` Where each setting comes from, first match wins: | Setting | Sources | |---|---| | mode | env `JEV_ROUTER` → plugin option `mode` → `shadow`. T