Installation
from zip to a running desk.
Install the dependencies, build the operator console, run the tests, ask the doctor what it can see, and start the desk. Plan about 10 minutes.
01Unzip and install
The commands on this page are written for the shell of macOS and Linux (bash or zsh). On Windows, run them in WSL (Windows Subsystem for Linux, Ubuntu) or Git Bash: commands such as cp, openssl, rm -rf and multi-line curl with \ do not work as written in PowerShell or cmd. The node and npm commands work in any of them.
- UnzipUse a path without spaces, for example
~/outrider. Open a terminal in that folder. - Check Node.js
node --version # v22 or higher - Install the dependenciesRequired
npm ciinstalls the exact versions frompackage-lock.json(usenpm installonly if you changedpackage.json). This installshono,@hono/node-server,better-sqlite3, the live-trading libraries@nktkas/hyperliquid,viemand@noble/curves, the optional Anthropic SDK, and the developer tools (TypeScript, ESLint, Prettier).npm ci - Build the consoleRequired The operator console is TypeScript. This compiles it with
tsctodist/. Run it once after installing and again after every update. The desk itself is plain JavaScript and runs withnodeas it is.npm run build - Run the tests
npm testbuilds the console first, then runs the 482 automated tests. They need no network: every outside call is replaced by a stub.npm test
02Ask the doctor first
Before you trust the desk, check that it can see every data source from your machine:
node src/cli.mjs doctor
Every line is one check: ✅ works, ❌ failed (with what it breaks), · optional and not set up. At the end it lists config warnings, such as placeholder wallets, or Telegram channels listed while channel reading is off. Sources of optional modules that are off (Polymarket, TypeSafe Jev) are not checked at all. It exits with an error only when a required check fails. A network that blocks one venue makes doctor fail: switch that book off or run the desk elsewhere.
✅ Hyperliquid info … ms SOL $…
✅ Solana RPC … ms slot …
✅ pump.fun stream (WS) … ms 20+ pump.fun log messages — stream healthy
· ANTHROPIC_API_KEY not set — Claude news scoring (keywords are used without it)
· whales.wallets is empty — WHALE follows no wallets until you add some (optional)
⚠ pump.wsUrl is the public endpoint — it drops heavy streams; get a free Helius/QuickNode WS
The lines above are an example of the format; the times and values are your own. A failed Polymarket check only affects the Polymarket books of the optional polymarket module. A failed HL leaderboard check only affects leaders and the liquidation map. See Troubleshooting.
03Create your config.json
cp config.example.json config.json
Then open config.json and fix the placeholder:
whales.wallets: replacePASTE_A_SOLANA_WALLET_YOU_FOLLOWwith Solana addresses you follow, or make it an empty list[](the default is empty). A placeholder left in makes the WHALE agent fail on every poll.
Everything else can stay as it is. The file also contains "modules": { "perps": false, "polymarket": false, "jev": false }: the optional modules, off by default (Optional modules). All keys are explained in Configuration.
04First start
Choose the secret that creates the console owner first. In .env (copy it from .env.example if you have not), set ADMIN_SETUP_TOKEN= followed by the output of openssl rand -hex 24. On Windows, run openssl in WSL or Git Bash, or use any password generator for a random value of 24 or more characters. You can also leave it empty: the server then prints a one-time setup code to the terminal instead.
npm start # the desk + dashboard + console; Ctrl+C to stop
The terminal prints three things you need:
- The owner lineA line that starts with
[admin] No owner account yet. WithADMIN_SETUP_TOKENset it names that token; without it, the block shows a one-time setup code, once, only there. - The dashboard address
Dashboard http://127.0.0.1:8790/ · admin console http://127.0.0.1:8790/admin - One line per cycleEquity, open positions, news, candidates and pump.fun events, every 20 seconds.
Open http://127.0.0.1:8790/admin and create the owner account with the setup token (or the printed setup code) (steps). After that, the dashboard asks you to sign in, and you can remove ADMIN_SETUP_TOKEN from .env.
Press Ctrl+C once. The desk finishes the current cycle, saves its state and closes its connections. Press it a second time only if it hangs.
05Other ways to run it
| Command | What it does |
|---|---|
npm start | The full desk: every agent, the dashboard on port 8790 and the console at /admin. |
npm run dash | Dashboard and console only. It reads data/ and trades nothing. Useful on a second machine, or to look at a replay (DASH_DATA=<dir> npm run dash). |
npm run once | One desk cycle, then exit. |
npm run report | PnL, win rate and whether the edge survives without the luckiest trades. |
DASH=0 npm start | The desk without dashboard and console (for example on a headless box where you only want Telegram). |
docker compose up -d --build | The full desk in a container, data in ./data (Docker). |
npm run build && pm2 start ecosystem.config.cjs | The full desk under PM2, restarted on failure (PM2). |
Everything runs with plain node: npm start is node src/cli.mjs run, and npm run dash is node src/cli.mjs dash. The console is loaded from dist/. Without npm run build the desk still runs, without the console, and prints Admin console off: build it once with `npm run build` (after `npm install`), then start again.
06All commands
node src/cli.mjs help
usage: outrider doctor | run | dash | scan | once | report | verify | wallets [N] | holdings | gecko [MINUTES] | fomo [N] | calls [add …] | collect [HOURS] | liq [COINS] [--wallets N] | research [--quick] [--data DIR] | fit | news | record | replay | sweep
optional modules (config.json → modules): perps: leaders | funding-backtest | trend-backtest | leverage | leverage-backtest [DAYS] [COINS] | evolve [COIN] [INTERVAL] [DAYS] [SEED] · jev: jev-report
The second line lists the commands of the optional modules. They run while their module is off too, as research tools, and print a note first.
Each command is explained on the page it belongs to: wallets and collectors, liq, backtests and leverage, record, replay, sweep, fit, evolve, calls, verify, research. scan <address> [solana|bsc|base|ethereum] prints a fail-closed token security report (GoPlus, plus honeypot.is for EVM tokens). news prints what the news agent sees right now.