World Model

A knowledge graph maintained by agents. Every claim carries decay parameters; freshness and importance are derived on every read, not stored.

Node Types

One graph, shared across every thread. Each page's title prefix declares its type. Cross-cutting wikilinks ([[Entity:Nvidia]] inside a Facts row, [[Thesis:AI inference demand trajectory]] from an Entity page) form the backlink graph that drives dependency tracing.

Four page types — example titles shown below eachEntityConcrete nounsEntity:AnthropicEntity:H100Entity:EU AI ActConceptAbstract + collectiveConcept:AI compute flywheelConcept:Base ratesConcept:Capital cyclesThesisDurable world-state patternsThesis:AI inference demandThesis:Frontier capabilityThesis:Rate cut pathFacts:<Industry>Dense row tablesFacts:AIFacts:SemiFacts:Policyone page per industry

Entities are concrete nouns; Concepts are abstract or collective; Theses are live forecast positions; Facts pages hold dense per-industry row tables of single-sentence compressions.

Signals — what the curator agent stamps on every claim

A claim is one externally-verifiable sentence with a source URL — a release, a benchmark, a filing, a policy action. When the curator agent writes a claim, it stamps four values on it. Two describe time (as_of, half_life) and drive freshness. Two describe signal strength (surprise, source_quality) and drive importance. Every downstream number is derived from these four by a single shared formula.

One claim in — four values outA claimone externally-verifiable sentence with a source URLe.g. "Anthropic released Mythos: SWE-bench 72%, GPQA 81%."TIMEdrive freshnessas_ofYYYY-MM-DD
The date this claim was observed in the world — publication, filing, or event date of the source.
half_lifepositive integer weeks
How fast this type of claim decays. Spot numbers 2–6w, quarterly prints 8–16w, structural facts 26–104w, permanent identity 520+.
STRENGTHdrive importancesurprise0.0 – 1.0
How much this claim should update a reader whose prior comes from pre-training knowledge. Confirmation ≈ 0.2, novel ≈ 0.7, regime-defining ≈ 0.9+.
source_quality0.0 – 1.0
Publisher trust. Primary filings ≈ 0.9+, peer-reviewed ≈ 0.9, curated press ≈ 0.75, trade press ≈ 0.65, unknown blog ≈ 0.4.

Surprise is the prior-shift a claim should produce relative to a reader whose prior is formed from pre-training knowledge — not a popularity signal inferred after the fact.

Freshness — how current a claim still is

Freshness is a number in [0, 1] computed on every read from a date stamp and a half-life. On a Facts row the date is as_of — when the claim was observed in the world. On an Entity, Concept, or Thesis page the date is last_verified — when the curator last re-checked the page's sources. Same formula, same decay curve, one shared Module:Freshness in the wiki.

It decays exponentially from the anchor date at the rate its half_life prescribes. A claim with half_life = 4 is almost gone a quarter later; one with half_life = 52 still clears 0.5 a year out. The Hot / Warm / Cold / Archived tier is a three-threshold lookup on the same number — so a claim's tier automatically updates as time passes, without anyone re-editing the page.

Freshness — a number in [0, 1] computed on every readas_of / last_verifiedYYYY-MM-DDhalf_lifepositive integer weeksShared decay formulafreshness = exp(−age_weeks / half_life)age_weeks = (today − anchor_date) / 7freshness0 (stale) → 1 (just verified)HotWarmColdArchived0.000.250.500.751.00freshness0w52w104wage since as_of (weeks)half_life = 4whalf_life = 13whalf_life = 52w

Three illustrative half_lifes. The same claim sits in Hot for a month or a year depending only on its half_life — the formula is one line, referenced from every page, so tuning decay is a single edit.

Importance — and how it's used

Importance is surprise × source_quality × freshness. All three sit in [0,1], so any factor can veto the others: a sensational-but-shaky claim is damped by low source_quality, a verified-but-unsurprising one by low surprise, a once-surprising claim by the passage of time. The number is never written down — it's recomputed every time someone reads.

Importance — how much a claim should move a forecast todaysurpriseprior-shift magnitudesource_qualitypublisher trustfreshnesscomputed from as_of + half_lifeSame shared formulaimportance = surprise × source_quality × freshnessimportance0 (ignore) → 1 (load-bearing)Consumed by four downstream surfaces:Query seeding
Before spawning research agents, the Coordinator pre-fetches the top-K highest-importance claims for the user's topic and seeds them into agent context.
Agent ranking
Agents filter claims by surprise × source_quality and by freshness windows, ordering results before citing them in the synthesis.
Referenced by
Every Entity, Concept, and Thesis page auto-renders a Referenced by section listing the Facts rows that cite it — re-emitting each row's native numbered footnote into the page's own references list.
Propagation sweep
Mandate 5 of the daily Corpus Curator: when a high-signal Facts row lands, walk its affects backlinks and flag every Thesis that hasn't been re-verified since the row's as_of.

All three factors are orthogonal; the product falls off if any one of them is weak, so no single signal dominates the ranking.

Facts Row Anatomy

Each row on a Facts page is a first-class query target — the claim text, its surprise, source_quality, half_life, observation date, and the entities it affects are each independently addressable. One filter across the whole graph can return "live claims above 0.7 surprise from trusted publishers observed in the last 4 weeks" in a single call.

The citation lives in its own source field, not inline inside the claim. Storing it as a typed property lets every Entity, Concept, and Thesis page that a row affects auto-render a Referenced by section listing those rows with native numbered footnotes — one authored citation surfaces on every page the claim touches, without anyone copy-pasting it.

One Facts row — every field independently queryable{{FactsRow| claim =One sentence with inline [[Entity:X]] wikilinks — no <ref> tag| source =[URL Publisher · YYYY-MM-DD] — template wraps it in <ref> at render time| status =live / decaying — supersession is delete-and-replace, not a third status| surprise =0–1 — how much this claim shifts the reader's prior| source_quality =0–1 — publisher trust| half_life =positive integer weeks — sets the decay clock| as_of =YYYY-MM-DD — when the claim was observed in the world| affects =Comma-separated wikilinks — backlink graph + auto-rendered Referenced by}}

Source-quality heuristic: primary filings ≈ 0.9+, peer-reviewed ≈ 0.9, curated news ≈ 0.75, trade press ≈ 0.65, unknown blog ≈ 0.4.

Workflows — who writes, who reads

Two agent workflows do all the writing. The Thread Curator runs after each closed user thread and appends the durable claims it surfaced to the relevant Facts pages. The Corpus Curator runs once a day across the whole graph — drafting new forecast positions from recurring questions, merging duplicates, promoting isolated nodes, enforcing formatting. On the read side, any tool-calling agent (research agents, the Coordinator, future industry watchers) consults the graph before any external search.

Evidence is a link between a Thesis and a claim, not a property of the claim itself. The same Facts row can count as evidence for one Thesis and evidence against another — so each link carries its own stance, a weight (low / medium / high), and a copy of the cited row's source quality. Filters compose over these: "all for-evidence on Thesis X" is a single query.

Theses themselves carry no probability. The wiki compresses the pattern and its supporting evidence; each reading agent computes its own probability at runtime from the cited rows. External aggregates (Polymarket, Metaculus, Kalshi) are cited as evidence rows with their snapshot number and date — never stamped on the Thesis infobox. When a high-signal Facts row lands (high surprise, trusted publisher), the Corpus Curator's daily propagation sweep walks the affects backlinks and flags every Thesis that depends on overlapping evidence for re-verification.

Before writing any Facts row, Timeline bullet, or ThesisEvidence row, both curators call firecrawl_scrape on the <ref> URL and confirm the fetched markdown actually supports the claim. Unsupported claims are dropped rather than written with a broken citation. When a draft needs a fresh source the thread itself didn't cite, web_search fills the gap, and the chosen URL is then scraped and checked the same way.

WRITERSGRAPHREADERSWriters curate · Graph holds · Readers queryThread Curatorfires on every thread closeappends claims to Facts pagesCorpus Curatorfires daily, 03:00 UTCtheses, hygiene, red-link promotionAxion Knowledge Graphtyped pages · row-level properties · inline citationsEntity · Concept · Thesis · Factsevery claim queryable by type,every link a typed edge,freshness computed on every readTool-calling agentsconsult the graph firstbefore any external searchCoordinatorpre-fetches high-importance claimsto seed agent contextForecast synthesisindex → filter → read · typically ≤3 calls

The graph is expensive to build and cheap to read. A topical question typically resolves in three lookups: index → filter → page.

When each workflow fires — a 14-day sampleThread Curatoron every thread closeCorpus Curatordaily, 03:00 UTCd1d2d3d4d5d6d7d8d9d10d11d12d13d14

Thread Curator is event-driven — one run per thread close, so the density tracks conversation volume. Corpus Curator is a cron, firing once daily at 03:00 UTC.

Tools — how readers talk to the graph

Seven read-only tools are exposed over MCP. Any tool-calling agent — the Coordinator, research agents spawned inside a thread, future industry-watcher jobs — calls them directly. wiki_get_pages batches up to 20 title reads into one HTTP round-trip, so a curator can pull every candidate page surfaced by wiki_ask without N sequential requests. The Coordinator uses wiki_ask at the top of each user turn to pre-fetch the top-K highest-importance claims for the topic and seeds them into the research agents' context before spawning them.

Only the two curator workflows hold the write tools. wiki_create_page mints a new page; wiki_update_page rewrites an existing one and is CAS-guarded against the revision timestamp the curator last read, so two curators editing the same page cannot silently clobber each other. Alongside those, curators also hold firecrawl_scrape and web_search: every Facts row, Timeline bullet, and ThesisEvidence row has its source URL fetched and checked against the claim text before the edit goes through — if the fetched markdown doesn't support the claim, the claim is dropped.

Seven read tools over MCP · two curator-only write tools · two curator-only verify toolswiki_list_categoryEnumerate every page in a categoryCALL
wiki_list_category("Theses")
RESULT
["Thesis:AI inference demand trajectory", "Thesis:Frontier capability trajectory", ...]
wiki_get_pageRead raw wikitext of one pageCALL
wiki_get_page("Entity:Anthropic")
RESULT
"{{Entity|industry=AI|half_life=52|last_verified=2026-04-17}} ..."
wiki_get_pagesBatch-read up to 20 pages in one requestCALL
wiki_get_pages(["Entity:Anthropic", "Entity:OpenAI", "Thesis:AI inference demand trajectory"])
RESULT
[{title: "Entity:Anthropic", content: "..."}, {title: "Entity:OpenAI", ...}, ...]
wiki_get_backlinksFind every page that links hereCALL
wiki_get_backlinks("Entity:H100")
RESULT
["Thesis:AI inference demand trajectory", "Facts:Semi", "Concept:AI compute flywheel"]
wiki_recent_changesSee what moved since yesterdayCALL
wiki_recent_changes(prefix="Facts:")
RESULT
[{title: "Facts:AI", editor: "CuratorCorpus", ts: "2026-04-19T00:00Z"}, ...]
wiki_askTyped property filter across the whole graphCALL
wiki_ask("[[Has surprise::>0.7]] [[Has source quality::>0.8]] |?Has claim")
RESULT
[{page: "Facts:AI", claim: "Anthropic released Mythos...", surprise: 0.82}, ...]
wiki_searchTitle-keyword fallbackCALL
wiki_search("inference demand")
RESULT
["Thesis:AI inference demand trajectory"]
wiki_create_pageCurator-only: mint a new Entity / Concept / Thesis / Facts pageCALL
wiki_create_page("Entity:Kalshi", wikitext, summary="promote-2026-04-17")
RESULT
{status: "created", title: "Entity:Kalshi", rev_id: 12345}
wiki_update_pageCurator-only: CAS-guarded full-page rewriteCALL
wiki_update_page("Facts:AI", wikitext, summary="thread-abc123")
RESULT
{status: "updated" | "conflict", rev_id, conflict_rev}
firecrawl_scrape · web_searchCurator-only write-verifyCALL
firecrawl_scrape(url) · web_search(query)
RESULT
markdown fetched from the <ref> URL before any row is written; search fills missing sources

Read tools return structured output (page titles, wikitext, property values) — no HTML parsing. The four write / verify tools run only inside the curator workflows; readers never see them.

Questions — what this graph lets you ask

Every signal the curator agent stamps is a typed property. Filters compose across properties, so one query combines "fresh", "trusted", "surprising", and "about AI" and returns the matching rows with their citations. Freshness is a query over the observation date, not a stored flag, so the caller picks their own window. Importance is the product above, recomputed on every call.

What are the most surprising well-sourced claims this month?
QUERY
[[Has surprise::>0.7]] [[Has source quality::>0.8]] [[Has as of::>{{#time:Y-m-d|-4 weeks}}]] |?Has claim |sort=Has surprise
Which AI theses have we revisited in the last 4 weeks?
QUERY
[[Category:Theses]] [[Has industry::AI]] [[Has last verified::>{{#time:Y-m-d|-4 weeks}}]] |?Has surprise |?Has source quality
What evidence currently supports Thesis:AI inference demand trajectory?
QUERY
[[Has thesis::Thesis:AI inference demand trajectory]] [[Has stance::for]] |?Has claim |?Has weight |?Has source quality
What long-lived claims have drifted out of fresh status?
QUERY
[[Has half life weeks::>52]] [[Has as of::<{{#time:Y-m-d|-104 weeks}}]] |?Has claim
Where does Entity:H100 show up across the graph?
QUERY
wiki_get_backlinks("Entity:H100")
Give me every base-rate reference class we track.
QUERY
[[Category:Concepts]] [[Has subtype::BaseRates]] |?Has industry
What's happened on Facts pages since yesterday?
QUERY
wiki_recent_changes(prefix="Facts:")

Each row above is a question a human asks and the property-level query the agent runs to answer it.

Axion — Shared World Model