How the MSI is computed
The MSI — the Monitoring Situation Index — is one live number from 0.0 to 10.0 for how much is happening in the world right now. This page documents exactly what the computation does: its inputs, its weights, the scale, the cadence, the history it keeps, and — just as important — what the number does not claim. It is written against the live code, so it describes the endpoint as it actually runs.
The formula
The MSI is a weighted sum of three signals. Each signal is normalised to a 0–1 range, multiplied by a fixed weight, summed, and scaled to a 0–10 score. The weights are fixed in the code and sum to 1.0.
MSI = 10 × (
0.40 · market // avg |BTC, ETH 24h %| / 8 (CoinGecko)
+ 0.35 · seismic // M4.5+ quakes in 24h / 40 (USGS)
+ 0.25 · velocity // drift vs trailing baseline (own history)
) // formula v2.1 — 2026-08-22The result is rounded to one decimal place. Every component is clamped to 0–1 before it is weighted, so no single signal can push the score outside 0.0–10.0.
The three inputs
Market
weight 0.40
Input: CoinGecko — 24h % change of BTC and ETH
average(|BTC 24h %|, |ETH 24h %|) / 8, clamped to 0–1. An average absolute move of 8% or more reads 1.0.
Seismic
weight 0.35
Input: USGS — M4.5+ earthquakes in the last 24h
quake_count / 40, clamped to 0–1. Forty or more magnitude-4.5-or-greater events in 24 hours reads 1.0; an ordinary day (12–20) reads 0.3–0.5.
Velocity
weight 0.25
Input: Recent MSI history vs the current live base
The score the two live inputs alone imply (10 × (0.40·market + 0.35·seismic) / 0.75, so it sits on the same 0–10 scale as stored scores) is compared against the trailing average of the oldest ten stored samples; the drift is mapped to 0–1 with ±5 points saturating. Neutral (0.5) until at least three samples exist.
Changelog
v2.1 — 2026-08-22
Seismic calibration: the divisor moved from 10 to 40 events per 24 hours. USGS records roughly 12–20 M4.5+ events on an ordinary day, so the v2 transform saturated on a quiet planet (first live reading: 9.1 "intense" with 25 quakes). The fetch cap was raised from 50 to 200 events so the count cannot clip.
v2 — 2026-08-21
Formula v1 weighted a news feed (GDELT) at 0.70 of the score — headline volume, source spread and tone, plus a velocity derived from volume. That feed was retired for reliability: chronic rate limiting and timeouts left the index unmeasurable most of the time, and an index that cannot be measured is not an index. No replacement news source was added. v2 reads two feeds — CoinGecko and USGS — at 0.40 and 0.35, with velocity at 0.25 derived from the index's own stored history.
History recorded before 2026-08-21 was computed under v1 and is not like-for-like with v2 readings. The stored series was kept rather than wiped, so a chart spanning the change shows a real discontinuity, not a world event.
Cadence and history
Scale
0.0 – 10.0
Rounded to one decimal
Cadence
Hourly + on demand
At most 1 / 60s
History
Since 2026-09-22
Every measured sample
An hourly job takes one fresh reading, and requests add more whenever the 60-second server and CDN cache has lapsed. Only measured readings — every input answered — are recorded; a pass with a missing input leaves a gap, never a partial number. Every measured sample since 2026-09-22 is kept indefinitely — read any window with /api/msi/history?from= — and the newest 1,440 also sit in a ring that serves the default /api/msi/history fast.
0–2 · Calm
Nothing unusual happening.
2–4 · Background
Normal activity. Minor stories.
4–6 · Active
Meaningful events developing.
6–8 · Escalating
Multiple concurrent active situations.
8–10 · Intense
Major unfolding event(s) dominating signals.
The MSI is an observable index of public signals · information, not advice