pi-runner
Pi Runner
Execute prompts through the Pi coding agent CLI (pi) in non-interactive print mode. Pi pins the provider and model per invocation — --provider openrouter --model vendor/model with credentials resolved from the provider's env var or Pi's own auth store — so there is no shared mutable provider state between runs, no lane isolation to manage, and no fallback chain to disable. It also serves the collection's named OpenRouter seats through --seat.
Named seats
--seat |
Pinned model | Envelope |
|---|---|---|
kimi |
moonshotai/kimi-k3 |
runner=kimi, effective_runner=pi, effective_provider=moonshotai |
glm |
z-ai/glm-5.3-flash |
runner=glm, effective_provider=z-ai |
qwen |
qwen/qwen3.8-max |
runner=qwen, effective_provider=qwen |
gemma |
google/gemma-4-31b-it |
runner=gemma, effective_provider=google |
--seat pins the seat's model and labels the envelope with the seat name; an explicit --model still wins, so a seat can be tried against a newer id without editing the table. The pins live in PI_SEATS in scripts/run_pi.py, mirrored by shared/references/model-roster.md and the seat table in shared/scripts/discover_runners.py — change all three together. A missing pi CLI or key reports status: seat_unavailable for the named seat; there is no fallback to another seat.
Default Provider
openrouter— credentials fromOPENROUTER_API_KEY(or Pi's auth store via an interactive/login). Override with--provider; Pi ships built-in catalogs for 15+ providers.- Model ids absent from Pi's bundled catalog are passed through to the provider unchanged — a newer OpenRouter id than Pi's release knows about still works.