pool-anything
One global command opens an assistant shell that manages pools in plain language — or start the web UI, API, and proxy on http://localhost:3000 with pool-anything serve. Node 22+; the server core is dependency-free (the shell adds Ink + React).
Works from any directory. Data lives in ~/.pool-anything/ and survives upgrades.
npm i -g pool-anything # one-time install pool-anything # → assistant shell (list pools, add keys…) pool-anything serve --open # → http://localhost:3000
Hack on it with file watching. Data stays in ./data/.
git clone https://github.com/Parithosh-Varma/pool-anything.git cd pool-anything && npm install && npm run dev
No subcommands to memorize — say what you want in a rich terminal UI (colors, live watch view, ↑/↓ history). One-shots work too: pool-anything "list pools". Keys always print masked.
| Say | It does |
|---|---|
| list pools | All pools with key counts + usage. |
| list providers | Known providers in the registry. |
| list keys [for <pool>] | Masked keys in a pool. |
| show usage for <pool> | Token usage, quota, per-key breakdown. |
| add [N] keys to <pool> | Paste keys, one per line (blank line finishes). |
| create pool <name> for <provider> | Make a new pool. |
| delete pool <name> | Remove a pool (asks to confirm). |
| watch <pool> | Live usage, 2s refresh (q exits). |
| next [for <pool>] | Rotate: show the next key (masked). |
| consume <n> [on <pool>] | Record token usage. |
| serve | Start the web UI + API from inside the shell. |
pool-anything --help prints the same list. Every flag has an env-var twin.
| Flag | What it does |
|---|---|
| serve, --serve | Start the web UI + API server (default :3000). Bare pool-anything opens the shell instead. |
| -e, --exec <cmd> | Run one assistant command and exit. Pipe keys on stdin for imports. |
| -p, --port <n> | Port for the web UI + API. Default 3000 (or PORT). |
| -H, --host <addr> | Interface to bind. Default 127.0.0.1 loopback (or HOST). Bind elsewhere only behind your own auth. |
| --db <path> | Exact SQLite file (or LOCAL_DB_PATH). |
| --data-dir <dir> | Data directory holding the SQLite file (or POOL_DATA_DIR). |
| --open | Open the web UI in your browser on startup. |
| -h, --help | Show help. |
| -V, --version | Show version. |
All optional. Flags win over env vars where both set the same thing.
| Variable | What it does |
|---|---|
| PORT | Main server port, default 3000. |
| HOST | Interface to bind, default 127.0.0.1. |
| POOL_API_TOKEN | Bearer token gate for raw-key reads, writes, rotation, and proxy. Unset = open (keep it loopback). |
| LOCAL_DB_PATH | SQLite file — default ~/.pool-anything/pool-anything.db globally, data/pool-anything.db in a checkout. |
| POOL_DATA_DIR | Directory alternative: <dir>/pool-anything.db. |
| PROXY_TIMEOUT_MS | Per-attempt upstream timeout, default 30000. |
| ALLOW_PRIVATE_UPSTREAM | 1 disables SSRF protections — tests/loopback only, never in prod. |
From the shell — no browser needed — or serve the UI and health-check it.
pool-anything # → assistant shell pool-anything > create pool Prod for groq pool-anything > add keys to groq # paste, one per line pool-anything > serve # → http://localhost:3000