Heartbeat.
Your thesis runs while you sleep.
A 24/7 monitoring loop. Every 15 minutes — prices, news, depth, edges, kills — re-checked across Kalshi and Polymarket. Out-of-band ticks on FOMC, CPI, NFP, OPEC, geopolitics. Push observations any time. Pull the curated state with one call. Webhooks fire when a decision changes, not when a price wiggles.

Royal Observatory Greenwich · 1850 — the 1pm time-ball drop, the original 24/7 broadcast pulse to every ship on the Thames.
What rides on every tick
Seven fields. 96 ticks per day. Plus out-of-band when it matters.
Continuous monitoring is not a clock; it is a signal-driven loop. The 15-minute cadence is the floor. News breaks, OPEC announces, FOMC releases — each fires its own out-of-band tick within seconds.
heartbeatTick15-minute default; out-of-band on FOMC / CPI / NFP / OPEC / geopolitical breaks.
priceRefreshSub-second venue ticks for orderbook depth; bid / ask / size tracked in time series.
newsScanContinuous ingestion of Reuters, Bloomberg flash, central-bank wires, Tavily web.
thesisReevalCausal tree re-evaluated on every tick; sub-claim probabilities and edges recompute.
adversarialSearch4-8 disprove queries per active thesis per tick; counter-evidence shrinks edges.
killTriggerFalsification → cancel open intents, flag positions, emit webhook, write audit.
webhookDeliveryPOST your URL with the tick payload; idempotent, retried, signed.
Why a thesis heartbeat beats raw alerts
Cron + a Python script
Familiar, full control
Triggers on time not signal; no thesis loop, no kill chain, no audit
Trading-view alerts
Easy to set up
Price-only; no orderbook depth, no thesis context, no agent path
Bloomberg news terminal
Best newswire money buys
No probability decomposition, no contract math, no execution path
SimpleFunctions Heartbeat
Continuous loop with thesis tree + adversarial
Surfaces only when a tick changes a decision, not just a price
Who runs a heartbeat
Six recurring patterns. Same tick payload, different reaction cadence.
Overnight macro desks
Sleep through Asia / Europe sessions; the briefing is waiting in your inbox at 7am.
Discretionary PMs
IC pack updates itself; only changed sub-claims and edges show up in the morning.
Agent-managed books
Agent reads context every 15 min, fires kill triggers immediately on news pattern hits.
Compliance + ops
Webhook on every kill / fill / regime change; goes straight to the trade-blotter.
News-reactive desks
CPI / NFP / FOMC out-of-band ticks within 30s; intents fire before the venue book reprices.
Sports MM ops
Goal / lineup / red-card events trigger circuit breaker + requote; real-time depth.
Heartbeat endpoints
Same payload across pull, push, and MCP. Configure once; the engine handles delivery, retries, and signing.
Latest tick (pull)
GET /api/public/contextopenConfigure webhook
POST /api/webhooks { url, events:["heartbeat","kill","fill"] }openPush observation
POST /api/thesis/{id}/signal { evidence, weight }openHeartbeat history
GET /api/public/heartbeat?from=2026-04-01openMCP — sf.context (agent)
mcp call simplefunctions.context { topics, fresh: true }openA heartbeat tick, end-to-end
Five panels. From wake-up signal to webhook delivery to your handler.
heartbeat #851 · 11:14:00 UTC
prices refreshed (Kalshi 412ms · PM 1.1s)
news scanned (47 new items)
edges recomputed (19 surviving)
regimes trending oil ↑ · ranging btc · ...
kills 0 fired
webhooks 3 subscribers · queueing payload[11:30:02] news flash:
Reuters: "OPEC+ surprise production cut 1Mb/d"
[11:30:15] heartbeat OUT-OF-BAND tick fired
thesis: iran-oil-26 · confidence 81→89 (+8)
edges: WTI T150 +18¢ → +26¢
regime: oil up · trending → strong-trend
webhook: POST sent · 200 OK[11:42:33] news pattern hit:
"iran ceasefire negotiations breakthrough"
KILL · thesis iran-oil-26 sub-claim n2
open intents: 3 cancelled (i_8a2f4c, ...)
open positions: flagged for review
webhook delivered · audit row written
regime: oil up · trending → reversing$ curl -X POST /api/thesis/iran-oil-26/signal \
-d '{ "evidence": "satellite shows 3 tankers
diverted from Hormuz, NASA imagery
timestamp 11:48",
"weight": 0.7 }'
✓ ingested · re-evaluated thesis tree
n1 (Hormuz disruption): 78% → 86% (+8)
edge WTI T150: +24¢ → +30¢
webhook deliveredFAQ
What is the heartbeat engine?
A continuously-running monitoring loop that, every 15 minutes, ingests venue prices, scans news, refreshes orderbook depth, runs adversarial search on every active thesis, re-evaluates the causal tree, computes new edges, and emits webhooks for any change that crosses a configured threshold. Out-of-band ticks fire on FOMC / CPI / NFP / OPEC / geopolitical events.
How is it different from cron + a script?
Cron triggers things on a clock; the heartbeat triggers on signal — venue tick, news pattern, regime change, thesis falsification. The 15-minute cadence is the floor, not the ceiling. A goal of an event ladder, an OPEC announcement, an SEC filing — each fires an immediate out-of-band tick within ~30 seconds.
What does one heartbeat tick contain?
Per active thesis: confidence delta, sub-claim probabilities, matched-contract edges (with depth), kill-condition status, news evidence (with citations), regime label per topic group. Aggregated context: top movers across both venues, fresh edges, market stats. Plus an LLM-curated briefing summarizing the deltas in plain English.
Pull vs push?
Both. Pull: GET /api/public/context returns the latest tick (cached ~30s). Push: configure a webhook URL and the engine POSTs the tick to you on every refresh. MCP agents call mcp.context whenever they want a fresh state.
Latency profile?
Default 15-min for the curated briefing. Orderbook tick refresh: sub-second on Kalshi, ~1s on Polymarket. News ingestion is continuous (Reuters, Bloomberg flash, central-bank wires, Tavily). Critical-event out-of-band ticks within 30 seconds. WebSocket /v1/ws streams tick-level depth for sub-second pulls.
How does adversarial search fit in?
Each tick generates 4-8 disprove-the-thesis queries per active thesis ("iran ceasefire 2026", "fed pivots dovish", "spr release march"). Credible counter-evidence adjusts node probabilities and shrinks edges. A surviving edge has been attacked once per tick before it surfaces.
What does a kill trigger actually do?
Cancels open intents tied to the falsified thesis claim, flags any open positions for review, emits a webhook with the kill reason + evidence, and writes the kill chain to the audit log. The agent or PM gets the notification immediately.
Can I push observations into the engine?
Yes. POST /api/thesis/{id}/signal with your own evidence (e.g., "satellite imagery shows 3 tankers diverted from Hormuz"). The engine ingests it as a new fact in the thesis tree, re-evaluates, and emits a webhook on any meaningful delta.
How long is the heartbeat history kept?
Last 90 days online via /api/public/heartbeat?from=...; full archive in the daily R2 + Hugging Face dump (CC-BY-4.0). Per-thesis state time series is queryable directly.
Cost?
Public context endpoint is free CC-BY-4.0. Per-thesis monitoring (LLM evaluation, news scan, adversarial search) is metered per active thesis per day. Webhook delivery is free. WebSocket depth streams free for read.
Related surfaces
Global market context
Single API call returning the latest curated context.
Edge discovery
How the heartbeat surfaces and ranks mispricings.
Macro loop
Heartbeat applied to oil, Fed, CPI, recession, geopolitics.
Policy watch
Heartbeat applied to legislation, executive actions, regulatory.
OpenClaw skill
Add the MCP skill, agent ticks on the same heartbeat.
Portfolio Autopilot
LLM agent that reads every heartbeat and arms intents accordingly.
Prediction market API
CLI, REST/Data API, real-time WebSocket streams, MCP adapter.