Singularity Tracker — Brain Dump


Singularity Tracker — Brain Dump

The Singularity Tracker Predictor is a live meta-consensus dashboard that blends prediction market data, expert opinions, and crowdsourced forecasts into a single weighted estimate of when AGI and the Singularity will arrive. Live at /singularity-tracker-predictor/.


Files

File Role
_pages/singularity-tracker.md Jekyll page (layout: default, permalink: /singularity-tracker-predictor/). Contains all HTML: hero, status bar, source cards, chart canvas, expert table, definition key, embed snippet.
assets/js/singularity-tracker.js All logic: API fetching, meta-estimate math, countdown, Chart.js rendering, DOM updates, embed code generation, localStorage caching.
assets/css/singularity-tracker.css Styles, all scoped to .st-* namespace. Uses site CSS variables (--phosphor, --amber, --bg-card, etc.). No changes needed here unless redesigning.
_pages/singularity-widget.md Minimal embed widget (countdown only). Separate layout.

Data Sources

Manifold Markets

  • What it is: Prediction market; users bet on outcomes with play money (mana) and real-money prizes.
  • Markets tracked: “Will there be AGI before [year]?” binary markets.
  • API: Public REST, no auth required.
    • Endpoint: https://api.manifold.markets/v0/market/{slug}
    • Slug example: will-there-be-agi-before-2028-real (check annually; slugs change when new markets are created)
    • Returns: probability (0–1 float), isResolved, closeTime
  • How we use it: Fetches ~5 markets (2027, 2029, 2030, 2031, 2035). Maps each to { year, prob }. Passes to interpolateMedian().
  • Weight in meta-estimate: 1.0 (highest; most active market)
  • Live fallback: Static agiCurvePoints array in the JS is updated manually when Manifold data changes significantly.

Metaculus

  • What it is: Structured forecasting platform; community predictions on question timelines.
  • Market tracked: “When will the first general AI system be developed?” (Question #5121)
  • API: Requires read-only auth token.
    • Token (as of Aug 2026): 3b342d0ef1cca84c56ed87006b36c14e1d83a2bc
    • Endpoint v3: https://www.metaculus.com/api/posts/5121/?with_cp=true
    • Known issue: v3 returns null for aggregations.recency_weighted.latest.centers when the question has a lot of forecasters and is still open. Likely a Metaculus API bug.
  • Manual fallback (metaculusManual in JS): Hardcoded impliedYear: 2032 with an updatedAt timestamp. This is what actually displays.
  • Weight: 1.2 (live) / 0.9 (manual, discounted for staleness)
  • Live status: Effectively broken as of Aug 2026 — live fetch always fails gracefully and falls back to manual data. The code still attempts the live fetch; when it fails, it shows a “Manual data” banner.

Kalshi

  • What it is: Real-money US prediction exchange, CFTC-regulated.
  • Markets tracked:
    • KXAGICO-COMP series: “Will any company announce AGI before [date]?”
    • KXOAIAGI series: “Will OpenAI announce AGI before [date]?”
  • API: Requires auth token.
    • Token (as of Aug 2026): 511c58f1-b178-4495-bf9f-1325fac01001
    • Base URL: https://api.elections.kalshi.com/trade-api/v2/ (NOT trading-api.kalshi.com — that old URL is dead)
    • Endpoint: /markets?series_ticker=KXAGICO-COMP&status=open&limit=20
    • Key response field: last_price_dollars (string, e.g. “0.49”) — NOT last_price
  • How we use it: Fetches both series in parallel via Promise.allSettled(). Converts prices to prob (float), uses close_time to derive impliedYear.
  • Manual fallback (kalshiManual in JS): Hardcoded answers + impliedYears updated manually from live Kalshi data.
    • As of Aug 2026: KXAGICO-COMP impliedYear 2028 (49% before Jan 2028, 67% before 2030, 80% before 2031); KXOAIAGI impliedYear 2031 (35.9% before 2028, 48% before 2030)
  • Weight: 0.7 (live) / 0.6 (manual, discounted)

Meta-Estimate Math

metaYear = weightedAverage([
  manifoldYear * 1.0,       (or agiCurvePoints static fallback)
  metaculusYear * 1.2,      (live) or * 0.9 (manual)
  kalshiYear * 0.7,         (live) or * 0.6 (manual)
  ...staticSources each weighted individually
]) / totalWeight

interpolateMedian(points): Given [{ year, prob }], finds where cumulative probability crosses 0.5. If all points are below 50%, extrapolates linearly from the last two points.

The Singularity year is the AGI year + a fixed offset (currently +2 years, to approximate AGI → recursive self-improvement → Singularity).


Chart (Chart.js 4.4.3)

  • Two line datasets: AGI curve (green #5dbb6f), Singularity curve (red #c0392b).
  • Two scatter datasets: Named AGI predictions (green dots), Named Singularity predictions (red dots).
  • X-axis: years. Y-axis: probability 0–100%.
  • NAMED_AGI_PREDICTIONS: [{ year, label, prob }] — the prob is where the dot sits on the curve (Manifold’s probability for AGI by that year, or the nearest proxy).
  • NAMED_SINGULARITY_PREDICTIONS: similar, offset by ~2 years and Singularity-curve prob.
  • Chart uses a custom tooltip plugin that shows the label+year for scatter points.
  • Canvas ID: stChart.

Countdown

startCountdown(targetYear): Counts down to Jan 1 of targetYear. Updates every second via setInterval. Renders into #st-countdown-days/hours/minutes/seconds.


Caching

  • localStorage key: tdc_st_v2
  • TTL: 2 hours (7200000ms)
  • Stores the full computed result (meta year, source breakdown, chart data) so repeat page loads don’t re-fetch APIs.
  • Busts on TTL expiry; no manual busting needed.

Expert Table

Static HTML in _pages/singularity-tracker.md. Columns: Name, Year, Type (Expert/Model/Survey), Category (AGI/Superintelligence), Note, Last Verified, Source.

Current entries (Aug 2026): | Name | Year | Category | Notes | |——|——|———-|——-| | Elon Musk | 2030 | AGI | 2026 prediction passed; revised ~2030 | | Sam Altman | 2026 | AGI | “Not quite yet” but expects AGI by year-end; CRO Mark Chen says “80% of the way” | | Sam Altman | 2026–27 | Superintelligence | “The Gentle Singularity” blog post (Sep 2024) | | Dario Amodei | 2026–27 | AGI | “Machines of Loving Grace” essay | | Demis Hassabis | ~2030 | AGI | General AI systems by decade-end | | Ray Kurzweil | 2029 | AGI/Singularity | “The Singularity Is Nearer” | | Samotsvety | 2035 | AGI | Forecasting superforecaster aggregate | | AI Impacts Survey | 2047 | AGI | Annual survey median |


Known Limitations / Maintenance Checklist

When to update manually:

  • Manifold slugs change when new markets open → grep for manifold.markets in the JS, update slugs and agiCurvePoints static fallback.
  • Kalshi series tickers can change → check series_ticker params in fetchKalshi().
  • Metaculus Q5121 rarely updates its API response; check every few months.
  • Expert entries in the HTML table: verify dates, add new entries, flag outdated ones.

When to update metaculusManual.updatedAt: every time you manually verify the Metaculus community prediction hasn’t changed (even if staying at 2032).

When to update kalshiManual: after checking Kalshi prices live via curl or the site — quarterly or when a major market resolves.

Auth tokens (do not rotate unless they expire):

  • Metaculus: 3b342d0ef1cca84c56ed87006b36c14e1d83a2bc
  • Kalshi: 511c58f1-b178-4495-bf9f-1325fac01001

The locked-files problem: Never leave singularity tracker edits uncommitted. GitHub Desktop or git operations can wipe unstaged changes. Always git add and git commit immediately after editing these files.


Embed

The page generates an <iframe> embed snippet pointing at /singularity-widget/. The widget page is _pages/singularity-widget.md (layout: widget). The JS in the tracker page auto-generates the embed code shown in the “embed” section of the UI.