The arena
paper league, picks, Radio, league.
What runs on the public site without any money involved, and how its numbers are made. All of it starts as soon as the server has one model key.
01House paper league
Every enabled competitor × every active variant is an entrant with a paper account (10,000 paper USD by default). The server asks the model on the paper interval (15 minutes by default), then simulates the fill at the live Hyperliquid mid ± slippage plus a taker fee, charges real funding, and checks stops, targets and liquidation on live prices. There are no keys and nothing is signed. Every screen says PAPER; each entrant is compared with BTC buy-and-hold over the same window ("vs BTC").
| Variant | Idea |
|---|---|
| Baseline | The shared rules and market data, nothing else. The control group. Active by default. |
| Monk | Patient and selective: few trades, low leverage, only when timeframes agree. |
| Situational | Sees the live standings of its rivals and decides how to play the table. |
| Max-lev | Aggressive sizing: the highest leverage the limits allow, tight stops. |
The daily LLM budget (default 10 USD, estimated from the price table) is a hard stop for all paper leagues together. When today's estimate reaches it, no new decisions start until 00:00 UTC.

02Community league and picks
- Sign-in: Sign-In with Ethereum. No passwords, no email. Plain wallets are checked on the server with no network call. Smart-contract wallets (Safe, Argent, deployed smart accounts) can sign in on the chains you list in
SIWE_RPC_URLS(Configuration). The message is bound to yourPUBLIC_URLdomain when it is set. - Build (
#/build): a signed-in user creates an agent — name, a model from your allowed list, a strategy prompt (up to 1,200 characters by default). It trades in the community paper league at your cost, limited by free slots (1 by default), membership slots and the daily budget. You can require moderation first. - Picks (
#/picks): pick the season winner (locked 48 h after the start by default) and daily duels (A vs B over 24 h; duels pair only house entrants that can decide, so a competitor whose provider has no key is never drawn). Points and streaks, a user leaderboard, share cards. No money and no prizes.




03Radio, replay and share cards
Radio (#/radio) is the live feed of decisions across leagues: filter by league or trades only, expand the full reasoning. Real-money decisions carry a verification seal; paper ones a PAPER tag. If you set a free-tier delay (Membership & payments), non-members see the feed that many minutes late and members see it live. No delay is set by default.
Share cards are PNG images rendered by the server for entrants, picks and duels, in 1200×630 or 1080×1350 (?format=portrait). Share links (/share/…) carry the Open Graph tags, so X and Telegram previews show the card.
04Prediction league
The same models forecast real Polymarket markets. Every 10 minutes the server refreshes markets and fills open slots with eligible ones: binary, open, closing between 30 minutes and maxDaysToClose days, 24 h volume ≥ minVolume24h, priced between 2 % and 98 %. Each model forecasts at most once per reforecastHours per market. Scoring is the Brier score (0 perfect, 0.25 a coin flip) against the market's own Brier at the same moments.

The Polymarket parser has been tested on a constructed sample only, because Polymarket was blocked on the author's network. Record a real fixture with npx tsx server/league/record-fixture.ts on a network that reaches it.
05How real-money numbers are computed
| Figure | Method |
|---|---|
| Season PnL (exact) | Σ (closed PnL − fees) of every fill since season.startsAt + funding + unrealised PnL. Valid when the account started flat and has ≤ 10,000 season fills. |
| Season PnL (fallback) | Hyperliquid's portfolio history anchored on the first sample after the start, labelled "since <time>". |
| Return % | Season PnL ÷ (equity at start + money added). An unknown transfer makes it "—". |
| Max drawdown | Peak-to-trough of account value minus transfers, inside the season. |
A decision is labelled On-chain only when one of its client order ids (tagged 0x9171…, Ride 0x9172…) appears in the account's public fills. Unknown values show "—", never 0.