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-22

The 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