@qmahyar/pi-9router
Connect pi to 9Router — multi-provider chat models plus image, speech, search, and fetch tools
Package details
Install @qmahyar/pi-9router from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:@qmahyar/pi-9router- Package
@qmahyar/pi-9router- Version
1.2.8- Published
- Aug 22, 2026
- Downloads
- 964/mo · 83/wk
- Author
- qmahyar
- License
- MIT
- Types
- extension
- Size
- 148.7 KB
- Dependencies
- 0 dependencies · 3 peers
Pi manifest JSON
{
"extensions": [
"./extensions/9router.ts",
"./extensions/9router-tools.ts"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
Install
pi install npm:@qmahyar/pi-9router
Or from git:
pi install git:github.com/QMahyar/pi-9router
Requires a running 9Router instance (npm i -g 9router → default http://localhost:20128).
What you get
| Command | Role |
|---|---|
/9router |
Connect · full/quick sync · diagnose · register chat models as provider 9router |
/9router-tools |
Enable tools · set default models · output folder |
| Tool | On by default | Does |
|---|---|---|
nr_image_generate |
Yes | Text (or reference images) → image file |
nr_tts |
Yes | Text → speech file |
nr_video_generate |
Yes | Text/image → MP4 (Grok Imagine, async) |
nr_web_search |
Yes | Live web search |
nr_web_fetch |
Yes | URL → markdown |
nr_embed |
No | Text → embeddings |
nr_stt |
No | Audio file → transcript |
Off tools leave the model context. Only enabled tools expose schema + usage guidelines to the agent.
Model names
Sync uses smart enrich: when a list row already has name + capabilities (common
for chat), it skips /v1/models/info. Thin rows still get a lookup so display names
are real — openrouter/openai/tts-1-hd shows as TTS-1 HD, not "Openai/Tts 1 Hd".
- Full sync — all tool catalogs + voice TTS probes
- Quick sync — chat only (keeps previous image/tts/web catalog)
- Diagnose — health, per-kind latency, sample info, voice probes
Tool descriptions stay compact: they name the configured default model, not the
whole catalog. A model argument is resolved locally first — nano-banana maps
to a real id or fails with candidates listed, instead of No credentials for provider: nano. Browse the full catalog via /9router-tools.
edge-tts / google-tts are free and absent from /v1/models/tts. Full sync
probes them and only adds live ones.
60-second start
1. 9router # start the gateway
2. /9router → Sync models (full catalog)
3. /model → provider 9router
4. /9router-tools → pick defaults
Optional: Quick sync when you only need chat models refreshed; Diagnose when something is slow or voice TTS is missing.
Pair with Exa (optional)
For dedicated Exa neural search with multi-key rotation (separate from 9Router’s web tools):
pi install npm:@qmahyar/pi-exa-search
→ @qmahyar/pi-exa-search · npm
Use one search stack at a time if you want to avoid overlapping tools.
Docs
| Doc | |
|---|---|
| Setup | Install, first run, env vars |
| Usage | Menus, tools, on/off behavior |
| Dev | Layout for contributors |
| Changelog | Unreleased WIP + version history |
Links
License
MIT