Skip to main content
The AI Forecasts panel (internal id forecast) surfaces forecasts produced by WorldMonitor’s forecasting pipeline. Each forecast is a structured prediction with a probability, a domain classification, a time horizon, and supporting signals; the panel exposes two axes of filtering (domain and macro-region) so you can home in on the slice that matters to you.

What the panel shows

A list of active forecasts, filtered by two pill rows:

Domain filter

All / Conflict / Market / Supply Chain / Political / Military / Cyber / Infra

Region filter

All Regions / MENA / East Asia / Europe / South Asia / Africa / LatAm / N. America Forecasts whose region does not classify (unknown or global) only appear under All Regions. The panel’s minimum-probability floor is 0.1 (10%) — predictions below that threshold are suppressed from the panel view. Each forecast row shows the prediction text, the event probability, the domain (color-coded), the time horizon, and a compact provenance trail. Deep-simulation path confidence is shown separately as confidence, not as event probability.

Calibration & Projection Notes

Forecast probabilities come from deterministic, rule-based signal detectors in scripts/seed-forecasts.mjs, with an optional prediction-market blend when a matching market anchor exists. LLM calls do not set the numeric probability. They generate the narrative scenario, case-file, branches, and perspective text around the already-scored forecast. The default source-backed LLM routes in the seeder are Groq llama-3.1-8b-instant and OpenRouter google/gemini-2.5-flash. Forecast probabilities are market-calibrated only when the seeder can match the forecast to a prediction-market anchor. In those cases the calibration object includes the market title, market price, drift, and source, and the displayed probability is blended with that market anchor. Forecasts with calibration: null are internal/legacy estimates derived from WorldMonitor signal rules rather than externally market-calibrated probabilities. The seeder also publishes horizon projections (24h, 7d, 30d) from domain-specific projection curves in scripts/seed-forecasts.mjs. Those projected probabilities are clamped to a 1% floor and 95% cap (0.01 / 0.95) as a presentation heuristic, so projection endpoints should be interpreted as bounded scenario paths rather than unconstrained calibrated probabilities. The GET /api/forecast/v1/get-forecasts response includes degraded, stale, and error fields so clients can distinguish a backend/cache outage from a healthy empty forecast set. Panel id is forecast; canonical component is src/components/ForecastPanel.ts.

How you reach it

  • Cmd+K: type forecast, ai forecast, or predictions ai. The command palette label is “AI Forecasts” even though the internal panel id is forecast.
  • Availability by variant: registered and enabled by default in the full/geopolitical variant only. Not present in the tech, finance, commodity, or happy variants. Source: FULL_PANELS in src/config/panels.ts.

Data sources

Primary RPC: GET /api/forecast/v1/get-forecasts. The panel also consumes adjacent RPCs for the richer deep-simulation surface:
  • GET /api/forecast/v1/get-simulation-package — the most recent simulation inputs bundle.
  • GET /api/forecast/v1/get-simulation-outcome — the most recent simulation result.
  • POST /api/forecast/v1/trigger-simulation — starts a fresh simulation run outside the cached cron output.
The forecasting pipeline runs as a Railway cron that pulls recent conflict, intelligence, markets, and supply-chain signals, runs them through the forecasting model, and writes the aggregated result at forecast:predictions:v2 in Redis. Macro-region classification comes from shared/forecast-macro-regions.js.

Scoring and calibration

Published forecasts are capped and deduplicated before they reach the panel:
RuleCap
Forecasts per situation3
Forecasts per situation/domain pair2
Forecasts per family4
Forecasts per family/domain pair2
Target published count10-14
Conflict base detector probability ceiling (before velocity spike)0.90
UCDP conflict-zone base probability ceiling (before velocity spike)0.85
Conflict velocity-spike override ceiling0.99
Market probability ceiling0.85
Supply-chain / maritime probability ceiling0.85
GPS supply-chain detector probability ceiling0.60
Political probability ceiling0.80
Military probability ceiling0.90
Infrastructure probability ceiling0.85
Cyber probability ceiling0.72
When a forecast can be matched to a geopolitical prediction market, the seeder records the market title, market price, drift from the internal probability, and market source. The final probability is then blended as 0.4 * market_probability + 0.6 * internal_probability. Market-bucket scenario calibration is an editorial calibration layer in scripts/seed-forecasts.mjs, not a learned market model. It biases how market-context simulation states contribute to forecast pressure and confidence so that direct energy/freight transmission receives more lift, broad macro buckets stay moderate, and defense repricing is damped unless the evidence is strong.
BucketSimulation bias: confirmation / pressure / edge / contradictionState calibration: edgeLift / macroLift / confidenceLift / dampenerRationale
Energy0.20 / 0.12 / 0.10 / 0.140.08 / 0.14 / 0.05 / -Strong direct route, commodity, and macro pass-through.
Freight0.18 / 0.12 / 0.10 / 0.140.09 / 0.12 / 0.04 / -Shipping-cost shocks are treated as high-signal supply-chain pressure.
Sovereign risk0.17 / 0.11 / 0.09 / 0.150.07 / 0.10 / 0.04 / -Macro stress matters, but confirmation still needs country/market evidence.
Rates / inflation0.16 / 0.10 / 0.08 / 0.160.06 / 0.12 / 0.05 / -Policy and inflation transmission is broad but less event-specific.
FX stress0.15 / 0.09 / 0.08 / 0.140.05 / 0.10 / 0.04 / -Currency pressure is allowed to lift risk, with moderate confidence.
Semis0.13 / 0.08 / 0.09 / 0.120.04 / 0.04 / 0.02 / -Semiconductor shocks need targeted infrastructure or shipping evidence.
Crypto / stablecoins0.11 / 0.07 / 0.08 / 0.120.03 / 0.05 / 0.02 / -Digital-asset stress is useful context but gets a lighter macro lift.
Defense0.08 / 0.04 / 0.05 / 0.10-0.03 / 0 / -0.03 / 0.12Defense signals are intentionally damped to avoid over-reacting to noisy security headlines.
The conflict and UCDP conflict-zone rows are base detector caps. When the matching EMA risk score has velocitySpike, the seeder adds a +0.08 probability override after the base cap and clamps the result to 0.99. Defense state calibration has additional direct-confirmation terms outside the table: each unit of direct defense_repricing confirmation adds +0.12 pressure and +0.08 confidence. When that direct defense confirmation is absent, pressure subtracts the table-driven dampener (0.12) and confidence subtracts a separate 0.04 absence penalty. Probability projections are anchored to the forecast’s own time horizon and then expanded to 24h, 7d, and 30d with domain curves:
Domain24h7d30d
Conflict0.911.000.78
Market1.000.580.42
Supply chain0.911.000.64
Political0.830.871.00
Military1.000.910.65
Cyber1.000.780.40
Infrastructure1.000.500.25
Trend is serialized as a string, not an enum. The current values are rising, falling, and stable, based on a +/- 0.05 probability delta versus the prior forecast snapshot.

Refresh cadence

The seeder runs approximately hourly. The key is allowed up to 90 minutes in api/health.js (maxStaleMin: 90) before the health surface escalates.

Tier & gating

On web, AI Forecasts is currently in trial — free to anyone, including unauthenticated readers. On desktop, the same panel ships with premium: 'locked' in src/config/panels.ts so it is gated there. This split reflects the product’s current trial positioning; expect the web gating to tighten over time.

API reference

  • Forecast service — covers get-forecasts, get-simulation-outcome, get-simulation-package, and trigger-simulation.
  • For programmatic prediction generation (fresh probabilities outside the cached cron output), see the MCP generate_forecasts tool.