Jev-classified model routing for pi.
Writing tasks get STE and Humanizer rules. Code tasks run unit tests. Planning tasks get a structure check.
/router show status
/router shadow recommend only (default)
/router auto switch models per task
/router off stop routing
/router profile pareto_code | empirical_cost
/router budget <usd>
node --experimental-strip-types eval/index.tsResults: writing 89% cheaper. Code 88% cheaper with empirical_cost.
Planning 100% pass on claude-sonnet-5.
npm installSet OPENROUTER_API_KEY, or reuse the key stored in ~/.pi/agent/auth.json.
Copy config/models.openrouter.json into ~/.pi/agent/models.json.
Auto-load globally:
mkdir -p ~/.pi/agent/extensions
ln -sf ~/Documents/GitHub/pi-jev-router ~/.pi/agent/extensions/pi-jev-routerThen start pi normally (no -e required).
Workers dispatched via dispatch_task execute in isolated Git worktrees:
- Worker edits code on a separate task branch (task/<id>).
- If verifierCommandpasses (exit 0), changes merge cleanly into the repository.
- If verification fails or aborts, the worktree is cleaned up without leaving dirty changes.
- src/classifier.ts— Jev call. One request, five questions.
- src/selector.ts— policy. No model calls.
- src/board.ts— SQLite task state.
- src/dispatch.ts— worker spawn and handshake.
- extensions/router.ts— pi hooks and commands.
- eval/— benchmark tasks, verifiers, runner.