SimpleFunctions

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.

17019 markets trackedKalshi 3000Polymarket 14019· May 8, 06:02 PM
The Royal Observatory Greenwich at the daily 1pm time-ball drop circa 1850 — the Astronomer Royal in dark frock coat checking his pocket watch, the Thames below crowded with merchant ships, a clipper's lookout raising a brass telescope to catch the broadcast

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.

heartbeatTick

15-minute default; out-of-band on FOMC / CPI / NFP / OPEC / geopolitical breaks.

priceRefresh

Sub-second venue ticks for orderbook depth; bid / ask / size tracked in time series.

newsScan

Continuous ingestion of Reuters, Bloomberg flash, central-bank wires, Tavily web.

thesisReeval

Causal tree re-evaluated on every tick; sub-claim probabilities and edges recompute.

adversarialSearch

4-8 disprove queries per active thesis per tick; counter-evidence shrinks edges.

killTrigger

Falsification → cancel open intents, flag positions, emit webhook, write audit.

webhookDelivery

POST your URL with the tick payload; idempotent, retried, signed.

Why a thesis heartbeat beats raw alerts

ApproachWhat it gives youWhere it breaks

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.

API reference

A heartbeat tick, end-to-end

Five panels. From wake-up signal to webhook delivery to your handler.

1 · scheduled tick
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
2 · out-of-band tick
[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
3 · kill chain
[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
4 · push observation
$ 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 delivered

FAQ

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