Troubleshooting
symptom, cause, fix.
Start every investigation with node src/cli.mjs doctor: it checks each data source, the pump.fun WebSocket, your keys and your config, and says what each failure breaks. The common problems are below.
01pump.fun: no events, or the stream keeps dropping
- Node 20 or older. The stream needs Node's built-in WebSocket.
doctorsays "no global WebSocket — use Node 22+" andrecordrefuses to start. Install Node 22. - Public RPC.
api.mainnet-beta.solana.comdrops heavylogsSubscribestreams.doctorwarns "pump.wsUrl is the public endpoint". Put a free Helius, QuickNode or Chainstack WebSocket inpump.wsUrl(how). - Where the RPC is set. The console field Integrations → Solana RPC / WebSocket URL wins over
config.jsonwhen it is filled in. Check both. - Check it. Telegram
/statusshows "pump.fun: N events" or "not connected"; the console health check "pump.fun stream is live" wants an event in the last 5 minutes.
02Nothing moves after the laptop slept
A sleeping computer leaves half-open sockets. The pump.fun stream pings every 20 seconds and forces a reconnect when the socket stalls, even if no close event arrives; the journal logs "ws stalled — forced reconnect". Nothing is watched while the machine sleeps, so the paper record has gaps. For a continuous record, run on a server (Deployment).
03Rate limits: 429 and timeouts
- Public Solana RPC.
fomo,collectand WHALE read transactions one by one; on the public RPC they are slow and get throttled. A private RPC insolanaRpcfixes most of it. - GeckoTerminal. The free API returned HTTP 429 quickly at about 27 calls a minute when measured; the default is one call every 6 seconds (
gecko.minIntervalMs). On a 429 the sweep backs off hard and stays slower; the progress line shows "(N× rate-limited)". Leave it running. - Hyperliquid. The liquidation map paces its reads; if many accounts fail, the summary shows "N failed". Reduce
--walletsor the console's accounts-per-refresh. - HL leaderboard timeout in
doctor: the leaderboard file is large; it only affectsleadersand the liquidation map. Try again later.
04doctor shows ❌ for a source
| Line | Effect | What to do |
|---|---|---|
| Polymarket Gamma / CLOB / data-api: fetch failed | The Polymarket books cannot find or settle markets. | Polymarket may not answer from your location or host. Turn polymarket and polymm off if you do not need them. |
| RSS feed: not JSON / 0 items / HTTP error | That feed adds nothing. | Remove or replace it in news.feeds. |
| Telegram channel failing | SHILL cannot read it. | Use the bare public channel name; private channels cannot be read. |
| TypeSafe Jev (·) | Optional. | Only set TYPESAFE_API_KEY if you have access. |
05The desk does not start
| Message | Fix |
|---|---|
config: …config.json: invalid JSON | A comma or quote is wrong. Check the file in a JSON validator. |
config: …: bankrollSol: expected number, got string | Write numbers without quotes; lists as […]; objects as {…}. |
mode "…" is not supported | Use paper or alert. |
Admin console off: run with the tsx loader (npm start / npm run dash) and `npm install`. | Start with the npm scripts, and run npm install. |
Admin console failed to start: … | Often better-sqlite3 did not install for your Node version. Use Node 22+, then rm -rf node_modules && npm install. |
Dashboard off: listen EADDRINUSE | Port 8790 is taken. Stop the other process or set DASH_PORT. |
06Dashboard and console
- 403 "host not allowed" behind a proxy: list your domain in
DASH_ALLOWED_HOSTS(Deployment). - 403 "create the owner at /admin first": the owner does not exist yet, and before that the dashboard answers only requests made on the server itself. Create the owner locally or through an SSH tunnel (how).
- 403 "the kill switch needs a manager or owner": viewers can watch but not stop or resume the desk.
- Sent to /admin all the time: once the owner exists, you must sign in. Sessions last 12 hours.
- Signed out right after signing in over HTTPS: make sure the proxy sends
X-Forwarded-Proto: httpsand serves the whole site over HTTPS. - "The setup code is wrong": use a code printed by this install; restart to print a new one.
- Too many failed sign-ins: wait 15 minutes.
- Lost two-factor device: sign in with one of your recovery codes instead of the authenticator code. With none left, another owner can remove your account in Team and add it again (you get a new one-time password).
- A secret "cannot be decrypted": the console secret key changed. Restore the old
ADMIN_SECRET_KEYordata/.admin-secret-key, or set the secret again. - Status chip says "Polling": Server-Sent Events are blocked on the way (often proxy buffering). The page still updates, less often.
07The desk runs but never buys
That is the most common outcome, and usually correct: the EV gate needs expected value of at least 3 % after costs, and the pump.fun filters are strict. Check, in order:
- What blocks entriesDashboard → Desk control, or
/status: kill switch, hard stop, daily loss limit, protections. - Mode
alertmode never trades. - RejectionsThe Pump.fun live panel and the Ledger's skip rows show why each candidate was refused.
- Warnings
doctorlists settings that make entries impossible, for example a minimum stake above the per-token cap.
08Still stuck
See Support. Include the output of node src/cli.mjs doctor with keys removed.