pool-anything
Docs Start pooling
⌘

Install once, run anywhere

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).

Global install (recommended)

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

From source

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

Assistant shell

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.

SayIt does
list poolsAll pools with key counts + usage.
list providersKnown 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.
serveStart the web UI + API from inside the shell.

Flags

pool-anything --help prints the same list. Every flag has an env-var twin.

FlagWhat it does
serve, --serveStart 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).
--openOpen the web UI in your browser on startup.
-h, --helpShow help.
-V, --versionShow version.

Environment

All optional. Flags win over env vars where both set the same thing.

VariableWhat it does
PORTMain server port, default 3000.
HOSTInterface to bind, default 127.0.0.1.
POOL_API_TOKENBearer token gate for raw-key reads, writes, rotation, and proxy. Unset = open (keep it loopback).
LOCAL_DB_PATHSQLite file — default ~/.pool-anything/pool-anything.db globally, data/pool-anything.db in a checkout.
POOL_DATA_DIRDirectory alternative: <dir>/pool-anything.db.
PROXY_TIMEOUT_MSPer-attempt upstream timeout, default 30000.
ALLOW_PRIVATE_UPSTREAM1 disables SSRF protections — tests/loopback only, never in prod.

First pool in a minute

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
Browse providers Proxy reference