PIT docs
v1.0.0
Get help
● Ship · Fixes

Troubleshooting
errors and their fixes.

Messages you may see, what they mean and what to do, grouped by where they appear. Tip: paste the exact error into the search box.

01Server and console

npm install fails on better-sqlite3 or @resvg/resvg-js

Both are native modules. npm downloads a prebuilt binary for common systems (macOS, Linux x64/arm64, Windows x64 on Node 22). If no prebuilt binary matches, better-sqlite3 compiles from source and needs build tools: on Debian/Ubuntu sudo apt install python3 make g++, on macOS xcode-select --install, on Windows the "Desktop development with C++" workload of Visual Studio Build Tools. Check node -v is 22.13 or newer, delete node_modules and run npm ci again.

"dist/ is missing"

Run npm run build before npm start.

ExperimentalWarning: SQLite is an experimental feature

Printed by Node itself. Harmless.

/admin answers 503 admin_disabled

Set ADMIN_SECRET_KEY (openssl rand -hex 32) and restart.

Server exits: "ADMIN_SECRET_KEY must be 32 bytes"

Use 64 hex characters or base64 of 32 bytes.

Lost the setup code

Restart the server: every start before the owner exists prints a new code.

Sign-in refused with HTTP 429

5 wrong passwords for that email lock it for 15 minutes.

Console secrets unreadable after a move or restore

ADMIN_SECRET_KEY differs from the one they were saved with. Restore the old key, or enter the secrets again in Integrations.

A console setting seems to have no effect

Status shows a failing check with the reason (for example a builder address that is not 0x…). PIT does not apply a value it cannot use.

Status: "Still read from the old store"

Keys from the pre-console admin are still used as a fallback. Enter them once in Integrations.

Status warning on "PUBLIC_URL is set (sign-in domain, share cards, Stripe return links)"

Set PUBLIC_URL to your public https:// address and restart (why).

A smart-contract wallet (Safe, Argent) cannot sign in

Add an RPC for that wallet's chain to SIWE_RPC_URLS (chainId=url) and restart. A wallet that is not yet deployed on that chain cannot sign in. Plain wallets need nothing.

Members cannot save an alert webhook ("the server has no encryption key")

Set PIT_SECRET and restart.

02Arena and leagues

Competitor shows "No model key"

No key for its provider. Add it in Integrations and press Test connection.

Paper league stops deciding for the day

Today's estimated LLM spend reached the daily budget. It resumes at 00:00 UTC, or raise the budget on the Paper league page.

"model returned invalid output (stop reason: max_tokens)"

A reasoning model ran out of output tokens. Raise Max output tokens for that provider on Model settings.

League empty, last error "Gamma unreachable … ERR_SSL_PACKET_LENGTH_TOO_LONG"

Your internet provider blocks Polymarket. Host the server elsewhere, or set POLYMARKET_GAMMA_URL to a mirror you trust.

Ride says "country unknown"

No trusted proxy. See Ride → Country gate. This is the safe default.

03Runner (real-money season)

"agent key … no longer approved (pruned, replaced or expired)"

The master has no funds, the key expired, or another approval replaced it. Put USDC back on the master and press Authorise agent again.

"not approved to trade sub-account 0x…"

Connect that sub-account's master wallet and authorise again.

"builder … has $x perps account value; Hyperliquid requires at least 100 USDC"

Fund the builder address with 100+ USDC in perps, or switch the builder fee off.

"the master has approved x% for the builder; orders carry y%"

Press Approve in Setup → Builder fee. If a sub-account's orders are still refused, approve from that account.

Competitor shows "Awaiting account"

Its address is empty. Add the sub-account on the Competitors page.

Competitor shows "Runner offline"

No heartbeat for two season intervals: the runner tab is closed, asleep or lost the server. Reopen it, paste the token and start.

HTTP 503 operator_token_unset

Set OPERATOR_TOKEN and restart, or generate one on Operator & runner.

HTTP 429 "too soon"

Decisions faster than half the interval are refused. Wait, or lower the interval.

"arena config changed — reload the runner and start again"

The arena config was saved after this tab loaded it (HTTP 409 config_changed). All loops stop on purpose. Reload the runner tab and start again.

"server has no model key for this competitor"

The server has no key for that competitor's provider. Add it in Integrations, then start the competitor again.

"The PIT server is not reachable"

Start the server and press Retry.