TOROSO
Launch: coming soon

01 · Overview

Two agents argue it.
History settles it.

Type a trade, like long NVDA 1w. A bull agent (TORO) and a bear agent (OSO) argue the asset using the same set of numbers. Every number they say is checked against that set. Then a referee that is not a language model looks up how similar days played out before, and shows the count, the share that closed higher and the median move.

  • Same numbersBoth agents get one data pack, with a source and a time on every item.
  • CheckedA number that does not match the pack is rewritten or cut.
  • RefereeDeterministic history of similar days. Not a prediction.
  • No signupNo wallet needed to argue a trade. Only "Trade it" asks for your wallet, and you sign every step. Toroso never holds funds and takes no fee.

Each bout gets a permalink (/d/<id>) and a 1200×630 card you can post. The feed on the first screen shows real bouts only; bouts run by the team are labelled "team".

02 · Assets

15 assets: 6 crypto, 9 tokenized stocks on Robinhood Chain

Each asset needs at least three years of daily history, so the referee has enough similar days to count.

AssetKindHistory sourceRobinhood Chain token
BTCcryptoCoinbase Exchange—
ETHcryptoCoinbase Exchange—
SOLcryptoCoinbase Exchange—
DOGEcryptoCoinbase Exchange—
LINKcryptoCoinbase Exchange—
AVAXcryptoCoinbase Exchange—
NVDAstockYahoo Finance0xd0601CE157Db5bdC3162BbaC2a2C8aF5320D9EEC
TSLAstockYahoo Finance0x322F0929c4625eD5bAd873c95208D54E1c003b2d
AAPLstockYahoo Finance0xaF3D76f1834A1d425780943C99Ea8A608f8a93f9
MSFTstockYahoo Finance0xe93237C50D904957Cf27E7B1133b510C669c2e74
GOOGLstockYahoo Finance0x2e0847E8910a9732eB3fb1bb4b70a580ADAD4FE3
AMZNstockYahoo Finance0x12f190a9F9d7D37a250758b26824B97CE941bF54
SPYETFYahoo Finance0x117cc2133c37B721F49dE2A7a74833232B3B4C0C
QQQETFYahoo Finance0xD5f3879160bc7c32ebb4dC785F8a4F505888de68
GMEstockYahoo Finance0x1b0E319c6A659F002271B69dB8A7df2F911c153E

SPCX: listed June 2026, not enough history yet. Anything outside the list returns the list and three examples.

03 · Data

Where the numbers come from

Crypto
Coinbase Exchange daily candles (3+ years, paginated) and the live ticker; OKX history as backup. Indicators use the last closed UTC day; the live price is a separate item.
Stocks
Yahoo Finance daily chart, up to 10 years, kept in a local cache so the referee keeps working if Yahoo is slow. Adjusted closes for indicators and history, the raw close for the last-close item.
RC tokens
Robinhood Chain token price from GeckoTerminal, shown as its own item labelled "DEX price, unofficial". It is never used by the referee.
Refresh
Crypto: latest bar and ticker every 60 s while people use the app, full bars daily at 01:10 UTC. Stocks: every 15 minutes during US market hours (13:30–21:00 UTC, Mon–Fri) and once at 22:30 UTC. Bars are never deleted.
As of
Every item carries its source and time. On weekends stock numbers read "as of Fri close". Data older than 7 days (crypto) or 5 trading days (stocks) gets a red "data as of" badge.

Live status: loading…

04 · Data pack

The same numbers, for both agents

The server builds one pack per bout from the cache. Each item has an id the agents must cite, like [d9].

idItemHow
d1Last closeLatest daily close and its date
d21-day returnclose ÷ previous close − 1
d37-day / 1-week returnvs 7 days ago (crypto) or 5 trading days ago (stocks), adjusted closes
d430-day / 1-month returnvs 30 days or 21 trading days ago
d590-day / 3-month returnvs 90 days or 63 trading days ago
d6MA20Simple average of the last 20 closes
d7MA50Simple average of the last 50 closes
d8MA200Simple average of the last 200 closes, plus price above or below it in %
d9RSI14Wilder's 14-day relative strength index
d1030-day volatility, annualizedStd. dev. of the last 30 daily log returns × √365 (crypto) or √252 (stocks)
d11Distance from 52-week highclose ÷ highest close of the last 365 days (252 trading days) − 1
d12Distance above 52-week lowclose ÷ lowest close of the same window − 1
d13Drawdown from all-time high in our dataclose ÷ highest close in the stored history − 1
d14Volume vs 30-day averageLast volume ÷ average of the previous 30 days
d15RC token priceStocks only: GeckoTerminal DEX price on Robinhood Chain, unofficial
d16Live priceCrypto only: Coinbase ticker with its time

05 · Agents

TORO and OSO

TORO argues for the asset, OSO argues against it, whatever side your trade takes; your side and horizon are passed as context. Who opens is random. Four turns: two openings (up to 90 words, at least two cited numbers) and two rebuttals (up to 60 words, at least one cited number, and each must answer a number the other side used).

Model
anthropic/claude-haiku-5.5 via OpenRouter; anthropic/claude-sonnet-5.5 as a backup for a turn that fails twice.
Cite rule
Agents may only use numbers from the pack, written exactly as the pack writes them, each tagged with its id.
Number check
Every number in a turn is matched to one pack item (exact text, or within 0.5% or half the last written digit). A tagged number must match that very item. Percent figures only match percent items.
Banned
Price targets, forward-looking promises, buy or sell calls, outside sources, emoji. A turn that uses them fails the check.
What gets cut
A failing turn is rewritten once with the error, then tried once on the backup model. If it still fails, sentences with bad numbers or banned words are removed. If nothing is left, the turn is replaced by plain data lines from the pack and marked "agent fell back to data lines".
Offline
If the agents are down, bouts still run with data lines and the referee; the feed marks them "verdict only".

06 · Referee

How similar days played out before

The referee is plain code on the server, no language model. For every past day with at least 200 earlier bars it computes three features:

  • Trend: close above MA50 = up, else down.
  • RSI14 bucket: below 30 · 30–50 · 50–70 · above 70.
  • 30-bar return bucket: crypto below −20% · −20 to 0 · 0 to 20 · above 20%; stocks and ETFs below −10% · −10 to 0 · 0 to 10 · above 10%.

Today's features come from the last closed bar. Similar days are past days of the same asset with all three buckets equal and a full horizon after them. The forward return is close[t+H] ÷ close[t] − 1, with H = 1 / 7 / 30 bars for crypto and 1 / 5 / 21 trading days for stocks (shown as 1 day / 1 week / 1 month).

Widening
Under 20 similar days: drop the 30-day return bucket ("widened: ignoring 30-day return"); still under 20: trend only ("widened: trend only"); still under 20: "Not enough history for this setup", no verdict.
Verdict
58% or more closed higher: "History sides with TORO". 42% or less: "History sides with OSO". In between: "Too close to call". The verdict is about the asset, not about you.
Shown
n similar days, % that closed higher, median, best, worst, the base rate (all days, same horizon) and the date range searched.
Caveat
Windows overlap, so n overstates independent cases. How similar days played out before. Not a prediction.

Anyone can check it without the agents: POST /api/verdict.

07 · Limits

Fair use

Bouts
10 free bouts per day per IP address, reset at 00:00 UTC. One bout at a time per IP address, 8 at a time overall.
Rate
6 requests per minute per IP address.
Budget
A daily cap on what the agents cost. When it is spent, agents rest until 00:00 UTC.
Verdict only
Always on: the referee without agents, with its own allowance of 60 a day. Used automatically when the agents are out.

08 · API

Try it with curl, no key

curl -s -X POST https://toroso.trade/api/debate -H 'content-type: application/json' -d '{"q":"long NVDA 1w","stream":false}'
EndpointWhat
POST /api/debate{q, stream?}. Server-sent events by default: meta, pack, turn ×4, verdict, done, or error. stream:false returns the saved bout as JSON.
POST /api/verdict{q}. The referee only, no agents.
GET /api/debate/<id>A saved bout.
GET /api/recent?limit=10Latest bouts.
GET /api/assetsThe 15 assets with last close and source.
GET /api/healthAgents on or off, budget, data as-of per asset class.
GET /d/<id>.pngThe 1200×630 card.

09 · Trade it

Act on it in your own wallet, if you want

Toroso discusses trades. If you want to act, you sign the swap in your own wallet; it goes straight to Uniswap on Robinhood Chain. Toroso never holds funds and takes no fee.

Where
Only for the 9 tokenized stocks on Robinhood Chain (chain id 4663). Crypto bouts have no trade button.
How
"Trade it" opens a swap panel: connect an injected wallet, switch to Robinhood Chain, see the quote and the minimum you receive (slippage 0.1%, 0.5% or 1%), sign. Quotes expire after 30 seconds and are refreshed before sending.
Short
A short trade shows "Sell what you hold": it sells tokens you already own. There is no shorting.
Approvals
Only to the Uniswap SwapRouter02 0xCaf681a66D020601342297493863E78C959E5cb2, and only for the exact amount of that swap. No approval to any Toroso contract; Toroso has none.
When not
No button when the pool is too thin (under $50k liquidity) or the price impact is over 2%.
Check it
Every swap links to Blockscout. DEX prices are unofficial and keep moving when the stock market is closed.

10 · Token

The token

The contract address appears here, on the first screen and on @torosotrade at launch. Until then the address shown is all zeros: anything else claiming to be TOROSO is not us.

Holding the token pays nothing.

11 · Risks

What can go wrong

  1. Read as advice. It is a debate and a count of past days. The verdict is about the asset, never about you. Not financial advice.
  2. Agents make up numbers. The number check, rewrites, cuts and data-line fallback exist for this, and fallbacks are visible.
  3. Small, overlapping samples. n, the date range and the base rate are always shown; under 20 days there is no verdict.
  4. Data late or wrong. Yahoo Finance is unofficial and can change or rate-limit; Coinbase can limit. Cache, backups and the stale badge help, they do not fix it.
  5. Weekends and holidays. Stock numbers are as of the last close; horizons count trading days.
  6. Swaps. Prices move, pools can be thin, a token issuer can pause transfers, a transaction can fail. You sign every step yourself.
  7. Costs. A daily budget caps agent spend; when it is out, agents rest and the referee keeps working.
  8. Clones. Copies are easy to make. The real address is only posted on toroso.trade and @torosotrade.

12 · Disclaimer

TOROSO is a small web app and a token, run by a small team. Two language-model agents argue a trade using the same set of numbers; every number they say is checked against that set, and the verdict comes from how similar days played out in the past, not from the agents. Past days are not a prediction, the sample is small and overlapping, and the data (Coinbase, Yahoo Finance, GeckoTerminal) can be late or wrong. Toroso never holds funds and takes no fee. Swaps are signed in your own wallet and executed by Uniswap on Robinhood Chain. Holding the token pays nothing. Not financial advice.