Private beta · Q3 2026

Algorithmic trading signals,
delivered to your phone.

T BOT scans four markets in parallel — Kalshi prediction markets, OANDA forex, IBKR equities — runs a multi-model AI prediction pipeline, and pushes high-edge signals to a desktop and mobile app you control. Your broker, your funds, your call. We never touch your money.

4
Surfaces live
600s
Signal TTL
15%
On realized profit only
$0
Custody of subscriber funds
T BOT · LIVE FEED
polling every 30s · 3 active surfaces
FX12s ago
EUR_USD
BUY edge +1.4% conf 72%
routed to OANDA✓ FILLED $24
ST2m ago
NYC High Temp 78-83°F
YES edge +9.1% conf 68%
routed to Kalshi✓ FILLED 38¢
STK14m ago
NVDA
LONG edge +2.1% conf 61%
sector: tech (2/2)SKIPPED · cluster cap
FX28m ago
USD_JPY
SELL edge +1.1% conf 55%
routed to OANDA✓ FILLED $18
ST42m ago
CHI High Temp 76-81°F
NO edge +11.2% conf 71%
RESOLVED · win+$8.40
tbot.trade — operator console
Today's P&L
+$127.40
▲ 2.4% bankroll
Open positions
11
across 4 surfaces
Resolved (7d)
62
61% win rate
Signals issued
147
8 stale, 12 capped
Per-surface · last 7 days
Kalshi ST · weather + crypto+$58.20
Kalshi LT · political & macro+$31.10
OANDA Forex · 8 pairs+$42.60
IBKR Equities · S&P 500−$4.50
Risk monitor
Daily loss circuit breaker● Armed · −1.3% / −10% threshold
Concentration caps (FX / STK)● 3/3 USD · 2/2 tech
Signal staleness● All surfaces < 7d audit

How it works 3 steps

No funds custody. No regulated advice. Just signals + your own broker.

+--------------------------+ +--------------------------+ +--------------------------+ | 1. T BOT finds it | ----> | 2. Signal hits app | ----> | 3. Your broker fills | +--------------------------+ +--------------------------+ +--------------------------+ | Scans 4 markets, runs | | Your app receives the | | Kalshi . OANDA . IBKR | | multi-model AI predict | | signal in < 30s, shows | | Order placed on YOUR | | pipeline, publishes a | | edge/confidence/size, | | account with YOUR keys | | signal with edge >= 8%, | | routes to your broker | | T BOT never sees them | | confidence >= 55% | | adapter (you opt-in) | | | +--------------------------+ +--------------------------+ +--------------------------+ ~60 seconds 30s polling cycle Broker fill time
🛰

Multi-market coverage

4 surfaces running in parallel: Kalshi short-term (weather/crypto/sports), Kalshi long-term (political/macro), OANDA forex (8 pairs), IBKR US equities.

🧠

AI prediction pipeline

Each candidate goes through scan → research → predict. The predict layer uses Claude Sonnet for probability estimation, validated against an ensemble of GPT-4o and Gemini for non-Kalshi markets.

🔒

Your keys, your funds

T BOT operator never holds subscriber broker credentials and never executes against subscriber accounts. The client runs on your machine, signs orders with your own broker API keys.

Surface-isolated risk

Each surface has its own bankroll, position cap, and circuit breaker. A losing streak on FX can't drain your STK allocation.

📊

Calibrated sizing

Verbatim Kelly fraction per signal (capped at 5% per trade). Your client multiplies that against your bankroll to compute dollar size. Two subscribers with different account sizes take the same signal at proportionally different amounts.

💰

Pay only on realized profit

15% commission, crystallized at withdrawal, with high-water mark and loss carryover. No monthly mark-to-market. Beta period (first 90 days) is free.


● Production · v6.5.8

Backend deep-dive

The architecture that runs every signal. Public on purpose — opacity in a trading system is a red flag, not a feature.

System topology

One DigitalOcean droplet runs 6 PM2-managed processes. Each surface has its own loop, its own env file, its own bankroll state. The dashboard is a separate FastAPI service on the same box.

DigitalOcean droplet (Ubuntu) +-----------------------------------------------------------------+ | PM2 process supervisor | | | | st-bot-loop --> Kalshi ST (scan->predict->execute) | | st-lt-loop --> Kalshi LT (scan->predict->execute) | | st-forex-loop --> OANDA FX (scan->predict->execute) | | st-stocks-loop --> IBKR STK (scan->predict->execute) | | st-forex-resolver --> Closes FX positions when SL/TP hit | | st-dashboard --> FastAPI . subscriber feed . UI | | | | Surface env isolation: st.env lt.env fx.env stk.env | | Shared: shared.env (API keys only) | +-----------------------------------------------------------------+ | | publishes to v +-----------------------------------------------------------------+ | /api/signals/feed (long-poll, cursor-paginated) | | /api/signals/{id}/ack <--+ | | /api/signals/{id}/executed <--+ subscriber callbacks | | /api/signals/{id}/resolved <--+ | +-----------------------------------------------------------------+ | v N subscriber clients (your phone, laptop, or VPS)

The four surfaces

Kalshi ST live

Short-term prediction markets. Weather (NWS-verified), crypto daily settlements, sports parlays. Cash-settled at market close.
Min edge8% Min confidence55% Max positions8 concurrent Hold timehours → days

Kalshi LT live

Long-term political and macro events. Fed decisions, election cycles, monetary policy. Lower velocity, higher conviction.
Min edge4% Min confidence55% Max positions30 concurrent Hold timeweeks → months

OANDA Forex live

8 major currency pairs. ATR-based bracket orders (TP/SL set at entry). Concentration-capped per correlation cluster (USD / EUR / safe-haven / commodity).
Min edge15% Min confidence50% Max positions6 concurrent Cluster cap3 per group

IBKR Equities funding

US equities via Interactive Brokers (ibeam gateway). Bracket orders. Sector-capped (GICS, 11 sectors).
Min edge8% Min confidence55% Max positions4 concurrent Sector cap2 per GICS

Risk gate chain (Kalshi ST shown)

Every candidate signal traverses a chain of gates before reaching the broker. Failure at any gate logs the rejection reason and skips. Most candidates are skipped. That's the design — the gates are tuned for selectivity, not volume.

1
STOP file checkManual kill switch in the surface's working directory. Operator hits a UI button → file appears → loop reads it on next tick and halts.
2
DeduplicationIf a position on the same market in the same direction is already open (or already dry-filled this session), skip. Prevents loop-tick re-firing.
3
Per-market position capNo more than N contracts on a single Kalshi market regardless of how many signals fire for it.
4
Direction filterAudit-validated; some surfaces have one-sided edges (e.g. ST currently favors NO).
5
Suspended categoriesCategories with degraded recent performance get auto-suspended by the audit tooling.
6
Risk validationKelly sizing, exposure limits, daily loss cap (10% bankroll / 24h), drawdown cap.
7
Slippage checkReject if market has moved more than 3% from the signal price during the predict cycle.
8
Minimum edgeHard floor: 8% on Kalshi, 4% on LT, 15% on FX, 8% on STK. Tuned per surface from historical calibration.
9
Minimum confidenceHard floor on model confidence. Low-confidence predictions never execute, regardless of edge.
10
API cost capDaily limit on Claude/Anthropic spend ($50/day). Stops the bot before research costs eat the day's gains.

Signal pipeline (weather example)

SCAN --> Kalshi events API . filter to KXHIGH{NYC,CHI,MIA,...} Apply: vol >= 200, spread <= 5c, 4h <= hours_to_expiry <= 48h Output: ~80 candidate markets | v RESEARCH --> NOAA NWS API: gridpoint forecast + Area Forecast Discussion Compute baseline probability via normal CDF (sigma scaled by horizon: 1.5F at 12h --> 4F at 72h) Output: forecast_high + baseline_p + AFD excerpt | v PREDICT --> Claude Sonnet 4.6 Input: market context + NWS forecast + AFD text + baseline Output: refined p_model + confidence + reasoning | v DECIDE --> edge = p_model - market_price If edge >= 8% AND confidence >= 55%: actionable = True --> fall through gate chain Else: actionable = False --> shadow log only (for calibration) | v EXECUTE --> Pass risk gates (1-10 above) Place Kalshi limit order (operator-side) OR Publish signal to feed (subscriber-side) Write trade record with: edge, confidence, eta_hours, atr, resolution_source tag for forward-only audit clarity | v PUBLISH --> Signal feed entry: { signal_id, surface, market_id, direction, edge, confidence, p_model, kelly_size_pct, ttl_sec: 600, expires_at, metadata: {city, bracket, forecast, ...} } Cursor-paginated, long-poll, 401 on revoked token | v RESOLVE --> 4h after market close (weather): query NWS station observations For Kalshi resolution: poll Kalshi /markets/{id}/result Compute outcome + PnL (Kalshi cash-settlement math) Write resolved=true, resolution_source="nws_observation"

Subscriber feed architecture

The hardest part of multi-tenant signal delivery is making it both fast and idempotent. T BOT uses cursor-paginated long-polling against an append-only JSONL log. Each subscriber tracks the last signal_id they processed; the server replays everything after that cursor (modulo TTL).

Operator side Subscriber side (your client) --------------------- ------------------------------ signal_publisher.py feed.py | | | appends one JSONL row | every 30s: v with TTL=600s | GET /api/signals/feed signal_feed.jsonl | ?since=<last_cursor> | | &token=<subscriber_token> | | | served by v v router.py /api/signals/feed | (cursor-paginated, drops | for each new signal: expired signals server-side) | 1. dedup check (state.json) | 2. surface enabled? sized? | 3. POST ack (accepted/filtered) | v adapters/{kalshi,oanda,ibkr}.py | | place_order(signal, size_usd) | --> returns fill_price + order_id | | POST executed (fill, size, broker_id) | POST resolved (outcome, pnl) on close | v subscriber_callbacks.jsonl <---------- append-only audit trail (operator) | | aggregated by v /api/subscribers/aggregate --> win rate, total PnL, per-surface breakdown (no per-name attribution -- operator sees pool only)

Audit & calibration

Every surface has its own audit tool that compares model predictions against realized outcomes. The audit can scope to a date range (--since 2026-05-01) so post-cutover metrics aren't polluted by historical dry-run noise.

📐

Calibration audit

Bins predictions by confidence band, checks if 70%-confident predictions actually resolved 70% of the time. Detects systematic over/under-confidence.

ETA calibration

Compares predicted time-to-resolution (computed from ATR × distance-to-stop) against actual resolved_at - timestamp. Detects volatility-implied ETAs that are systematically too short or too long.

🧾

Audit-frequency reminder

Dashboard surfaces an amber chip when any surface hasn't been audited in 7+ days. Operator click → opens audit drawer for that surface.


Trust & safety non-negotiable

The structural choices that make this an honest signal service rather than a fund.

Your keys, your funds

Subscriber broker credentials never leave the subscriber's machine. T BOT operator runs the signal generator; the subscriber's client places the orders. There is no surface where operator-side compromise can drain subscriber accounts.

Open-source client

The subscriber client is a small Python program you can audit yourself. Polling logic, sizing, routing, callbacks — all visible. No obfuscated trade execution.

High-water mark commission

15% commission only on profits above your previous high-water mark. Crystallized at withdrawal, not monthly mark-to-market. Loss carryover means a losing period doesn't reset your HWM downward.

Not investment advice

T BOT is not a registered investment advisor (no RIA, no CIRO, no FCA). Signals are the output of an automated quantitative system. The decision to act on them and all consequences of those actions are yours.

Audit transparency

The operator publishes aggregate performance — total subscribers, aggregate win rate, per-surface PnL — but never per-name attribution. Your individual performance is yours to see, no one else's.

Cancel any time

Revoke your token from the operator panel or email request. Signal feed stops on your client's next poll (typically 30s). Open positions stay in your broker — T BOT has no exit obligation.


FAQ

What does the actual app look like today?
The desktop/mobile app shown in mockups above is the Q3 2026 target. Today, in private beta, the client is a Python CLI that runs on your laptop, VPS, or (with effort) phone via Termux. It works end-to-end against live operator infrastructure — polling, sizing, routing, callbacks all functional. The polished native app comes after the beta cohort proves the signal stream is worth packaging.
How does T BOT make money if there's no commission for 90 days?
Operator runs the same signals on their own broker accounts. The bot has been profitable for the operator before any subscriber existed. The 15% commission on subscriber realized profits is upside, not the operating funding source. Beta period is genuinely free to lower the friction of finding people willing to put real money on what's still an experimental product.
What if T BOT goes down or stops generating signals?
Your open positions stay with your broker. Kalshi positions cash-settle at market close automatically. FX/STK positions have hard TP/SL brackets attached to the entry order — the broker manages exits whether T BOT is online or not. T BOT going dark means no new signals; it does not leave existing positions unmanaged.
What if a signal is wrong and I lose money?
Some signals will lose. Kalshi short-term win rate sits around 55-60%; FX around 60%; long-term political around 65%. Drawdowns are normal. The sizing methodology (Kelly fraction with a 5% per-trade cap) is calibrated to survive realistic loss streaks. Your worst-case on any individual trade is 5% of that surface's bankroll. The system is designed for sustained edge over hundreds of trades, not certainty on any single one.
How many surfaces should I subscribe to?
Start with one. Forex is the most active (5-20 signals/day) so feedback is fast. Kalshi LT is the slowest (1-3/week) and easiest to monitor casually. Add surfaces once you've gotten comfortable with one. The allocation guide (sent with your welcome email) covers funding suggestions per appetite tier.
Can I tweak the sizing?
Yes — your client supports a size_multiplier per surface (default 1.0 = verbatim). Set it to 0.5 to take half the recommended position. You cannot loosen the operator's caps (per-trade Kelly ceiling, concurrent position limit, daily loss circuit breaker), only tighten them.
What happens to my data if I cancel?
Operator retains your ack/executed/resolved callbacks indefinitely for aggregate reporting, but with no per-name attribution after cancellation. Your token is revoked, your name leaves the active subscriber list. Any withdrawal within 30 days of cancellation is billed under the existing terms; after 30 days the commercial relationship is closed.
Where can I see the source code?
The subscriber client is open-source (will be linked here at beta start). The operator-side bot is private — that's where the strategy IP lives. The public-facing API (/api/signals/feed, callback endpoints) is fully documented; you can audit exactly what your client sends and receives.

Private beta · invite only

Want in on the beta?

First 10 subscribers, hand-onboarded. No commission for 90 days. You bring your own broker accounts; we bring the signals. We talk before you fund anything — make sure this is a fit for you.

Email the operator →

No subscription form. Just a real conversation.