1. −0.20%
  2. 5 LIVE
  3. FEE+FEE
  4. ≥0.05%
  5. SIMULATED

OPEN SOURCE · LOCAL-FIRST

Watch the spread.Keep the keys.

OpenSpread reads five exchanges from your own computer and shows the real spread after both fees, even when it is negative. Bullroom turns it into a pixel-art trading floor that rings when the math finally works.

Sample read on Oct 26, 2026 · alert level shown as an example · not a recommendation

Bullroom building seen from above: reception, kitchen, lounge and trading rooms, with the exchanges as characters
Bullroom reading OpenSpread, live and read-only. No API keys, no orders, no server of ours.
−0.20%

Every exchange is a trader. Every pair is a room.

The bubble over each exchange shows its price against the room average, in basis points. The sign over each room shows the best spread between any two exchanges, after both taker fees.

Live and read-only. No API keys, no orders, no server of ours.
≥ 0.05%

The room rings once.

Pick a level per pair. The room rings once when the spread reaches it, and re-arms below it.

Level shown as an example.
LATENCY · LIMITS

One rack per source.

The machine room shows each API’s latency and limit, measured on your computer. Nothing is sent to us.

1.09% → 1.01%

The purple room is simulated.

Robots on the real order book, with no keys and no real orders. The simulated result never adds to the real spread.

Quoted versus realized. Example from Nov 4, 2026.

Today the fees eat it all.

The gap between exchanges is real. After the buy fee and the sell fee, nothing is left. The room shows it that way anyway, and rings once the day the math works.

USDC/USDT, sample read on Oct 26, 2026. Not a recommendation.

40 seconds, one honest number.

Five exchanges in one room, read live. Why the classic stablecoin arbitrage does not close today, and how the room tells you the day it does.

Spoken in Portuguese, captioned in English. Tap a moment to jump to it.

SIMULATED

Simulate. The math stays honest.

Arbitrage robots on the real order book, with a risk gate and pretend balances. No keys, no real orders, nothing to install beyond the core.

Bullroom simulation room, purple, with the SIMULATED sign, the wall screen with the result and three robots at their desks
All robots sit in a single purple room with the SIMULATED badge. The simulated result never adds to the real spread.
1.09% → 1.01%Quoted versus realized: how much of the spread was left after walking the book.
0 of 178BTC/USDT readings above the minimum. A quiet robot there is a result, not a bug.
16 of 1,227USDT pair combinations with a positive net in a scan of 5 exchanges. A large spread can mean suspended withdrawals.

Examples from Nov 4, 2026. Paper trading does not guarantee real results. No arbitrage backtest, and a failure of just one leg is not simulated.

Also in Bullroom

On-chain wallets

Solana, Ethereum, Base and Bitcoin, with a 7-day ranking. Public data only.

Agenda and radar

FOMC, CPI and headlines from your feeds; a room alarm before the event.

Machine room

One rack per source, with each API’s latency and limit.

Bubbles

Robots and wallets: size is capital, color is result.

The engine and the window.

Bullroom machine room: one server rack per data source, with latency and limits on the wall screen

OpenSpread

The engine, on your computer.

  • Reads public prices from Binance, OKX, Bybit, Kraken and Coinbase.
  • Shows the net spread after both taker fees. Negative stays negative.
  • Your exchanges and pairs in one local file, ~/.openspread/config.json.
  • Spread alerts that ring once and re-arm, so they do not flicker.
  • NEWBuilt-in paper trading, with a risk gate before every simulated order.
  • NEWMCP for your Claude or Codex: read data, record analyses and test simulated robots. Real orders do not exist there.
  • Serves it on 127.0.0.1, with no server of ours: the only requests out are public ones to exchanges, chains and the feeds you pick.
Bullroom simulated trading floor with bots at desks, PnL over their heads and a trade feed

Bullroom

The window: your bots as an office.

  • Seated means in a position; walking around means flat.
  • PnL floats over each head; the room sign sums the room.
  • Markets panel: choose exchanges and pairs, and set alerts, from the room.
  • A bot that hits its daily loss limit is ejected from the room.
  • NEWSimulation room and Robots panel: start, stop and see why each robot stopped.
  • NEWAnalyses panel: hit rate only with a sample, calibration, and results already after fees.
  • Simulated in the browser, or live with OpenSpread.

Two repositories. Node 22.12 or newer.

1. OpenSpread (live prices)

git clone https://github.com/JVMarks/OpenSpread.git
cd OpenSpread/core
npm install
npm start
# OpenSpread core on 127.0.0.1:4848 (read-only)

2. Bullroom (the window)

git clone https://github.com/JVMarks/bullroom.git
cd bullroom
npm install
npm run dev:client
# open http://localhost:5173/?source=core

Choose exchanges, pairs and alerts in Bullroom (click the LIVE badge, or Settings › Markets), or edit ~/.openspread/config.json. Simulated robots: Settings › Robots. Only Bullroom? Open ?mock=trading for simulated bots, no exchange needed.

What does not change.

  • Local-first

    No server of ours, no cookies, no tracking. It runs on your computer.

  • Your keys stay home

    When keys arrive, they stay on your machine, never with withdrawal permission.

  • The AI proposes

    The engine executes, inside a risk policy you set. The AI never sends an order.

  • Honest numbers

    Losses are shown. Simulated is always labeled. Negative stays negative.

Built in stages, in the open.

  1. DONEBullroom: simulated bots, PnL over heads, room signs, bot card with 5m/1h/24h.
  2. DONEOpenSpread core: live, read-only net spreads from five exchanges.
  3. DONEConfigurable exchanges and pairs, with the Markets panel in Bullroom.
  4. DONESpread alerts that ring once and re-arm.
  5. DONEEconomic calendar and radar in the room; machine room (API limits, latency).
  6. DONEBuilt-in paper trading: robots simulated on the real order book, with a risk gate and their own room. No keys, no real orders.
  7. DONEMCP: your own Claude or Codex reads the data, records analyses and tests simulated robots, with a methodically scored track record. No tool can place a real order.
  8. NEXTReal orders with a risk policy and approval per order, using Hummingbot.
  9. LATERNostr: identity, signed analyses, threads and zaps.

Support the project

Free and open source, funded only by donations. A star on GitHub helps too.

Donations are voluntary gifts to keep the project going. They buy no product, service or advice, and give no return.