Paper mode by default — simulates fills against live market data, moves no real funds, needs no wallet or key.
hood-traders depends on hoodchain,
the Robinhood Chain TypeScript SDK, as a normal published npm dependency — npm install
resolves it from the registry like any other package, no sibling checkout required.
git clone https://github.com/nirholas/robinhood-chain-trading-bot.git
cd robinhood-chain-trading-bot
npm install
npm run build
Clone robinhood-chain-sdk as a
sibling and point package.json's hoodchain dependency at
file:../robinhood-chain-sdk for local iteration — revert to the published semver
(^0.1.1) before shipping.
npm run fleet
Open http://localhost:4670 — the dashboard is live immediately: fleet equity, per-agent positions, and the decision journal streaming from real mainnet ticks.
cd robinhood-chain-trading-bot
docker compose up --build
Same result, paper mode, zero configuration. The build context is self-contained — hoodchain resolves from npm inside the image, same as the local install above.
Three independent triggers, all wired the same way — any one halts new orders across every agent immediately. It never force-sells; it only stops taking on new risk.
# 1. Ctrl-C the process (SIGINT), or `docker compose stop` (SIGTERM)
# 2. drop the kill file
touch KILL # local
touch data/KILL # docker (mounted volume)
# 3. HTTP
curl -X POST http://localhost:4670/api/kill
Live mode signs and broadcasts real transactions. Only do this with a wallet you can afford to lose, after reading the strategy failure modes.
cp .env.example .env
# edit .env:
# HOOD_TRADERS_LIVE=1
# ROBINHOOD_CHAIN_PRIVATE_KEY=0x...
npm run fleet
Both HOOD_TRADERS_LIVE=1 and a valid key are required — missing either keeps you in paper mode. Every risk cap in .env.example applies identically in live mode.
Stock Token trading additionally requires HOOD_STOCK_TOKEN_ELIGIBLE=true
in .env — an explicit affirmation that you are not a US/Canada/UK/Switzerland person,
per the legal restriction on these tokenized debt securities (issuer: Robinhood Assets (Jersey)
Ltd). Without it, premium-watch stays alerts-only and any Stock Token swap attempt
throws StockTokenEligibilityError. Memecoin trading (launch-sniper,
momentum) is never gated.
Edit src/main.ts — every strategy takes a params object:
import { LaunchSniper } from './strategies/launch-sniper.js'
fleet.addAgents([
{
id: 'sniper-conservative',
strategy: new LaunchSniper({
entryWeth: 0.005,
takeProfitPct: 0.4,
stopLossPct: 0.2,
maxDeployerPct: 0.1,
}),
tickIntervalMs: 4000,
},
])
Read the architecture to understand the risk gate, or the strategy docs for every tunable and failure mode.