# Sentinel: a multi-agent market intelligence system on MXF, live at simulacria.ai

> Sentinel is Brad Anderson's multi-agent system on his MXF framework: AI agents read news, official data and market data, weigh competing hypotheses about events, and make simulated trades against a simulated broker priced with real market data. simulacria.ai shows the agents working live, with 30 days of replay. No real money is involved.

Sentinel is a team of AI agents running on MXF, my multi-agent framework. They read the news, official data and market data, decide which events matter to markets, build and test hypotheses about them, and trade on their conclusions. The trading is simulated. Sentinel trades US stocks and ETFs, long and short, against its own simulated broker, which prices orders with real market data, and the code refuses to send an order to a live brokerage account. No real money is involved.

It exists to answer two questions. Can MXF run for months, around the clock, without someone tending it? And can a system of agents make market calls that hold up when every one of them is scored? Sentinel is MXF's long-running test, and when it turns up a framework bug, the fix goes into MXF rather than into a local patch.

## What you see at simulacria.ai

simulacria.ai is Sentinel's live view. In the middle is a globe, with the countries, straits, companies and leaders the agents are tracking pinned to their places, and around it a ring of data sources that light up when an agent reads from one. Seven agent seats show what each agent is doing. A reading pane shows the active agent's reasoning as it works, a ledger lists what it did (signals, alerts, theses, trades opened and closed), and a timeline replays the last 30 days at 1x, 10x or 60x. Most of the agents' reasoning is public on purpose (the Steward's is not), and their briefs, notes and tool results stay private.

## How it works

- **Sources.** News feeds and GDELT, the Federal Register, energy and economic data from EIA and FRED, volatility and options flow, real market data, weather, and drug and clinical-trial data from OpenFDA and ClinicalTrials.gov. The agents keep what they learn in a knowledge graph.
- **Competing hypotheses.** For big events the agents fill in Analysis of Competing Hypotheses matrices: models judge the evidence and code computes the scores. A separate contrarian model supplies the outlier hypothesis, because one model with one set of priors only looks like a diversity of views.
- **One decider.** Of the seven agents in the live view, only the Strategist opens or closes trades, and there's no mechanical fallback: no stop-loss or timer closes a position on its own.
- **Everything is scored.** Every directional alert is priced, traded or not, so the calls Sentinel took can be compared with the ones it skipped, and the results are tested against baselines that flip a coin or trade everything.
- **A careful reviewer.** Since October 2026 a nightly agent, the Steward, reviews the results and can propose changes to Sentinel's settings. Each proposal comes with a check, set in advance, that decides whether the change worked. Nothing it changes on its own takes effect during market hours, by default every proposal waits for me, and the Steward can never open or close a trade.

## How it's built

It's TypeScript on Bun with Express and MongoDB, plus Meilisearch, a Memgraph knowledge graph, and small TensorFlow.js models that give advisory signals only. The live view is Vue 3 with d3 on a canvas. One Docker image on Railway runs the MXF server, the site, the simulated broker and Sentinel. The agents' models come through OpenRouter, mostly GLM.

- **Polling, not push.** The page asks for new events every 2.5 seconds instead of holding a connection open. That needs no connection caps or reconnect logic, a server restart loses nothing, and live and replay share one read path.
- **One record, two uses.** Every agent action goes into one append-only activity record, and the page is a pure function of it, so the live view and the replay are the same code.
- **The server decides what's public.** The split between the public view and my operator view is one allowlist on the server, and the browser never chooses its own scope.

simulacria.ai began in February 2026 as part of my Simulacria fiction, with three fictional characters posting from inside MXF. That was an MXF stress test, and I retired it in August 2026, when Sentinel took over long-term testing. The live view became the home page in September. As with my other recent work, I made the design calls, and Claude Code wrote much of the code.

## Details

- **Category:** Projects
- **Tags:** Sentinel, simulacria.ai, MXF, Model Exchange Framework, multi-agent system, AI agents, agents, markets, geopolitics, news analysis, simulated trading, paper trading, Analysis of Competing Hypotheses, knowledge graph, live view, OpenRouter, GLM, TypeScript

**Also read:** [All writing](https://bradanderson.org/writing?format=md) · [About Brad](https://bradanderson.org/about?format=md)

---

**Navigate:** [Home](https://bradanderson.org/?format=md) · [About](https://bradanderson.org/about?format=md) · [Work](https://bradanderson.org/work?format=md) · [Projects](https://bradanderson.org/projects?format=md) · [Breeds](https://bradanderson.org/breeds?format=md) · [Writing](https://bradanderson.org/writing?format=md) · [LLM guide](https://bradanderson.org/llms.txt)

_Ask BradBot directly: POST https://bradanderson.org/api/agent/ask with {"question": "..."} (details in https://bradanderson.org/llms.txt)._
