SimpleFunctions

Maker.

Don't pay spread. Collect it.

Thesis-informed two-sided limit orders on Kalshi and Polymarket. Same causal tree your taker uses, executed inside the spread instead of across it. Adverse-selection detection, regime-aware spread widening, inventory caps, fill-attribution. CLI engine, REST/API control, MCP adapter, BYOK on the venues. The bench at the front of the bourse, not the runner crossing to the other side.

A Quattrocento Florentine banchiere seated behind a long table covered in red velvet — gold florins on the left tray, silver ducats on the right, brass balance scale dead-center, ledger open between

Banchiere · Quattrocento Firenze — florins on one tray, ducats on the other, brass balance dead-center. The original two-sided quote.

What the maker tracks

Seven fields per quote. Re-evaluated on every tick.

A maker is a small bench at the front of the bourse: balance scale on the table, ledger open, two-sided quote up. The runtime computes the seven fields below for every market it quotes; the kill chain pulls quotes the moment any of them flips.

quoteSurface

bid + ask both at top-of-book; symmetric by default, skewed by thesis edge.

skewBias

Edge-driven size asymmetry — score near max, inventory leans toward conviction side.

adverseSelection

Book-imbalance + flow-toxicity + news-trigger detector; pulls quotes on any of the three.

regimeWiden

Spread auto-widens on dispersing regime, vol-of-mid spike, or pre-event window.

inventoryCap

Per-market, per-thesis, per-venue caps; most restrictive wins; favored-side size drops on breach.

fillAttribution

P&L decomposed into spread capture, skew P&L, rebate / reward income.

kallShortcut

Heartbeat news kill triggers any maker quote that conflicts with thesis falsification.

Why a thesis-skewed maker beats vanilla MM

ApproachWhat it gives youWhere it breaks

Manual quote on venue UI

You see every market with full context

Cannot react below human reaction time; no skew automation; no kill chain

Standard MM bot

Familiar, tight on equities/perps

Wrong objective for event contracts; no thesis tree, no rebate optimization

Polymarket reward bot only

Optimizes the quadratic reward pool

Single venue; no cross-venue match; no edge-aware skew; no kill chain

SimpleFunctions Maker

Thesis-skewed quotes + adverse selection + caps

Surfaces only when post-slippage spread + reward clears your floor

Who runs the maker

Six recurring shapes. The shape that repeats is two-sided depth where the kill chain catches the moment your quote turns into adverse selection.

Sports MM ops

Run sfmm on Polymarket sports — quadratic-score-optimal, edge-skewed, circuit-handled.

Cross-venue MMs

Quote both sides on a Kalshi event AND its Polymarket pair; cross-venue inventory net.

Thesis-driven liquidity

Quote inside the spread on contracts your thesis favors; accumulate on the favored side.

Quiet-market scalpers

Patient quoting in low-volatility regimes; spread + occasional toxic-flow alert handles the rest.

Event-window providers

Pre-event widen, fade pause, requote post-event at new mid; capture the regime transition.

Fund desks with rebates

Polymarket sports rebates + Kalshi liquidity rewards rolled into one P&L attribution.

Maker endpoints

Same intent surface as taker. Different "kind" — bid + ask + size + kill chain. CLI engine handles tick-cadence; REST/API exposes remote control; MCP adapter is available for compatible agents.

API reference

A maker tick, end-to-end

Five steps. Plain-English thesis to two-sided quote with a kill chain standing guard.

1 · thesis-skewed quote
$ sf quote create KXFEDDEC-25DEC31 \
    --thesis-id fed-dovish-q4 \
    --skew-from-edge --size 100

✓ Thesis edge: +6¢ on YES (strong)
✓ Quote: bid 38¢ × 130 / ask 40¢ × 70
  symmetric size would be 100 / 100
  thesis lean → +30 on bid, -30 on ask
  Score: 0.43/min · regime: trending
2 · adverse-selection guard
[11:14:32]  book ratio 1.78x bid-side · ok
[11:14:47]  book ratio 0.62x bid-side · WATCH
[11:14:48]  flow toxicity 0.41 · WATCH
[11:14:49]  ⚠ adverse-selection trigger
[11:14:49]  pulled bid 38¢ × 130
[11:14:59]  cooldown · recompute fair
[11:15:00]  ✓ requote bid 37¢ × 80 / ask 40¢ × 100
            spread widened, size capped
3 · regime widen
Heartbeat #851
  regime: trending → dispersing
  cross-venue divergence 6.4¢ (was 1.2¢)
  vol-of-mid +2.3σ above 24h baseline

✓ widening spread on KXFEDDEC + 4 others
  bid 37¢ → 36¢
  ask 40¢ → 41¢
  size unchanged · skew preserved
4 · attribute fills
$ sf fills --thesis fed-dovish-q4 --attribute

KXFEDDEC-25DEC31 (5h quoting window)
  spread captured:    +$340 · 100% fills both sides
  skew P&L:          +$180 · YES inventory + 60
  rebate / reward:    +$45 · venue rebate tier
  adverse selection: -$50  · 1 toxic-flow hit
  ──────────────────────────────────
  net:                +$515 · annualized 18%

Live edges to skew against

57¢Will Rand Paul vote for the next Fed Chair nominee?
72¢kalshi
57¢CPI year-over-year in Jul 2026?
9¢kalshi
55¢DOJ reopens Powell investigation by...?: June 30
6¢polymarket
55¢Will average **gas prices** be above or below $4.00 by Dec 3
8¢kalshi
55¢Will average **gas prices** be above $5.40 by Dec 31, 2026?
27¢kalshi
53¢What will Gold (XAUUSD) hit in May 2026?: ↓ $4,500
40¢polymarket
53¢Will the 7-day moving average of transit calls through the S
83¢kalshi
52¢Will average **gas prices** be above or below $5.60 by Dec 3
24¢kalshi
52¢Iran x Israel/US conflict ends by...?: June 30
87¢polymarket
52¢CPI year-over-year in Jul 2026?
9¢kalshi

Updated every 15 minutes · data from Kalshi and Polymarket

Maker or taker — when

Maker · here

When liquidity is thin and the move is patient.

Quote inside the spread, earn the spread, manage adverse selection with thesis-aware quoting and inventory caps. Best when the orderbook is shallow and time is on your side.

Taker →

When the edge is large and depth is real.

Cross the spread for immediacy. Best for news-driven moves where the orderbook has not yet caught up. Most desks run both.

FAQ

What is a maker strategy on prediction markets?

A maker posts limit orders inside the spread on both sides of a market and earns the spread when both sides fill, plus any liquidity rebates the venue pays (Polymarket sports rewards, for instance). The maker is the counterparty to takers — you provide immediacy, they pay spread for it. Risk is adverse selection: the price runs against your quote before the other side fills.

How is "thesis-informed" different from a standard MM bot?

A standard MM bot sets symmetric quotes around mid. A thesis-informed maker takes the same causal tree your taker workflow uses and skews quotes toward the side your thesis favors. If your thesis says +5¢ on the YES side, you size more on the bid (where you accumulate YES) than on the ask. Score stays near max, inventory leans the right way.

How does adverse-selection detection work?

Three signals: (1) book imbalance flipping against your quote (depth ratio drops below 0.6x your side), (2) trade-flow toxicity proxy (VPIN-style) crossing a threshold, (3) news triggers from the heartbeat. Any of the three pulls quotes for a configurable cool-off; the engine recomputes fair from the new mid before requoting.

How are inventory caps managed?

Per-market: max contracts on either side; the engine drops the favored-side size when you breach. Per-thesis: aggregated YES/NO exposure across all matched contracts; flat trades are allowed but accumulating is gated. Per-venue: USDC / margin caps on Polymarket and Kalshi separately. All three stack; the most restrictive wins.

When does the runtime widen the spread?

Three triggers: heartbeat-emitted regime label flipping to "dispersing" (cross-venue divergence > 5¢), volatility-of-mid jumping > 2σ, or upcoming high-impact event (FOMC, CPI, lineup announcement) within the configured pre-event window. Default widen is +1¢ each side; configurable per market.

Polymarket sports liquidity rewards — does this engine collect them?

Yes — sfmm (the sports-specific bot) is purpose-built for the Polymarket quadratic scoring function. QuoteEngine v2 in @spfunctions/cli is the general-purpose engine; both share the same intent surface. See /sports for the sports-specific economics.

Maker vs taker — when do I run which?

Taker when the edge is large, depth is real, and the news is fresh — pay spread for immediacy. Maker when liquidity is thin, the move is patient, and you can afford to wait for the other side to fill. Most desks run both side by side, with the taker workflow consuming the same thesis tree the maker uses.

BYOK execution — what does that actually mean?

You hold the venue credentials. The runtime stores nothing custodial; orders are signed with your Kalshi RSA private key or your Polymarket Ethereum key, executed directly against the venues. Custody and KYC stay at the venue level.

How fast does the engine requote?

QuoteEngine v2 is event-driven over WebSocket: sub-100ms requoting on a venue tick, sub-second on a heartbeat thesis update. Pre-event widening fires immediately; circuit breakers cool 10s by default before requoting at the new mid.

How is this audited / logged?

Every quote is logged: timestamp, mid, your bid/ask + size, regime label, trade-flow score, fill or cancel reason. Persisted in /api/intents and /api/fills. Per-thesis attribution rolls up: how much of P&L came from spread capture vs from skew vs from rewards. Same audit trail as the taker workflow.

Related surfaces