How it works
Thronos
Agent operations platform. A team of AI agents that works on a schedule. They read a company’s systems, draft the work and bring every decision to a person to approve.
Live · privateVisit the site ↗
Architecture
Hover a box to trace its connections; click it for what it does.
- request
- webhook, queue, schedule
- the heart
- outside service
AWeb· 5Stage · Decisions · Library · Live socket · Slack
StageThree.js roomUI
UI · Three.js room
The home screen: each agent a node with live presence, lines where one hands work to another, an artifact shelf and a chat dock.
Talks to
- ← Live socket (live)
Decisionsj · k · a · rUI
UI · j · k · a · r
One queue for every pending approval, gate and proposal, triaged from the keyboard, with a log of what was settled today.
Talks to
- → Engine API (approve · reject)
LibraryartifactsUI
UI · artifacts
Every typed artifact an agent has produced, addressable by key.
Live socketsocket.ioREALTIME
REALTIME · socket.io
One shared connection per app; the Stage, chat and live thought streams all listen on it.
Talks to
- ← Redis (pub/sub)
- → Stage (live)
Slackfast-path chatEXTERNAL
EXTERNAL · fast-path chat
Talk to the agents from Slack, answered by the cheaper runtime.
Talks to
- → Kernel (chat)
BEngine· 16Engine API · Signals · Heartbeat · Orchestrator · 14 sub-agents · Kernel · Team templates · Governance · Agent runner · Task loop · Event mesh · MCP registry · Autoresearch · Self-healing · Costs · Integration hub
Engine APInode:httpSERVICE
SERVICE · node:http
The engine’s HTTP API, on Node’s own http module rather than a framework.
Talks to
- ← Decisions (approve · reject)
- → Governance
SignalsGitHub · Linear · healthJOB
JOB · GitHub · Linear · health
Gatherers that collect what changed (code, tickets, business numbers, tool health, memory) before each tick.
Talks to
- → Heartbeat (what changed)
HeartbeatBullMQ · 12 lanesJOB
JOB · BullMQ · 12 lanes
Health hourly, the inbox every two hours, reviews each morning, weekly analysis, nightly research. Lanes that share resources never overlap, and a circuit breaker pauses an agent that keeps failing.
Talks to
- ← Team templates (seeds)
- ← Signals (what changed)
- → Orchestrator (tick)
- → Kernel (cheap lanes)
- → Autoresearch (nightly)
OrchestratorOpus · Agent SDKAI
AI · Opus · Agent SDK
The top-level agent. It reads the signals, opens and claims a task, and delegates to the specialists.
Talks to
- ← Heartbeat (tick)
- → 14 sub-agents (delegates)
- → Task loop (claims)
14 sub-agentsHaiku · Sonnet · OpusAI
AI · Haiku · Sonnet · Opus
Sentinel, Analyst, Scribe, Custodian, Oracle, Architect, Strategist and the rest, each with its own model, tools, budget and yes-or-no checks.
Talks to
- ← Orchestrator (delegates)
- → Agent runner
- → Governance (proposals)
- ← Autoresearch (prompts)
- ← Self-healing (revisions)
- → Anthropic · OpenRouter
KernelOpenRouter · cappedAI
AI · OpenRouter · capped
A second, cheaper runtime for the frequent lanes, with a hard budget per tick, a turn limit, and only the MCP servers that lane needs.
Talks to
- ← Heartbeat (cheap lanes)
- → MCP registry (subset)
- ← Slack (chat)
Team templatesfiveSERVICE
SERVICE · five
Seeds a team, its schedule and its autonomy defaults in one action.
Talks to
- → Heartbeat (seeds)
Governanceapprovals · autonomySERVICE
SERVICE · approvals · autonomy
Approval records and the autonomy mode (supervised, assisted or full) that decides what is approved automatically. New agents are capped at 20 per workspace and three a day.
Talks to
- ← Engine API
- ← 14 sub-agents (proposals)
Agent runnerone run, start to endSERVICE
SERVICE · one run, start to end
Checks the budget, loads the agent’s past experience, filters its tools, runs it with a live thought stream, retries on failure, then writes the run to memory.
Talks to
- ← 14 sub-agents
- → MCP registry (tools)
- → Event mesh (output)
- → Mnemos (write · recall)
- → Costs (checks)
Task loopclaim · settleSERVICE
SERVICE · claim · settle
The work record. The engine claims a task before delegating and settles whatever is still open when a run ends, so the record is right even if an agent forgets.
Talks to
- ← Orchestrator (claims)
Event meshagent → agentREALTIME
REALTIME · agent → agent
Each run’s output is classified and published, so a Sentinel alert lands in the Orchestrator’s triage and an Architect deploy sets off a Sentinel check.
Talks to
- ← Agent runner (output)
- → Redis (publish)
MCP registry~60 built-in toolsAI
AI · ~60 built-in tools
Assembles each agent’s tools from the healthy servers, minus the tools that agent is blocked from.
Talks to
- ← Agent runner (tools)
- ← Kernel (subset)
- → Dev tools (MCP)
- → Company systems (MCP)
- ← Integration hub (compiled)
Autoresearch03:00 nightlyJOB
JOB · 03:00 nightly
Simulates five outputs, grades them on yes-or-no checks, mutates the prompt, simulates five more, and promotes only at five percent better. Every experiment is logged.
Talks to
- ← Heartbeat (nightly)
- → 14 sub-agents (prompts)
Self-healingbinary evalsJOB
JOB · binary evals
Scores every run and drafts a prompt revision when quality drops. A revision may change at most a fifth of the prompt, and after three failed revisions in a row a person is asked.
Talks to
- → 14 sub-agents (revisions)
Coststick · day · monthSERVICE
SERVICE · tick · day · month
Token budgets per agent per tick, per day and per month, under a global cap.
Talks to
- ← Agent runner (checks)
Integration hubspec → MCPSERVICE
SERVICE · spec → MCP
Compiles a REST or GraphQL connector from its spec into an in-process MCP server at install time.
Talks to
- → MCP registry (compiled)
- ← Any API (spec)
CMemory· 1Mnemos
Mnemosmemory serviceSERVICE
SERVICE · memory service
The memory, as its own service: written after every run, consolidated on a schedule, searched before the next. Drawn in full below.
Talks to
- ← Agent runner (write · recall)
- → Neo4j
- → PostgreSQL (vectors)
DData· 3PostgreSQL · Neo4j · Redis
PostgreSQLPrisma · pgvectorSTORE
STORE · Prisma · pgvector
Agents, runs, tasks, approvals, budgets and experiments, plus the memory’s embeddings.
Talks to
- ← Mnemos (vectors)
Neo4jknowledge graphSTORE
STORE · knowledge graph
The graph of what the agents have learned.
Talks to
- ← Mnemos
RedisBullMQ · pub/subSTORE
STORE · BullMQ · pub/sub
The heartbeat’s queues and the event channels.
Talks to
- ← Event mesh (publish)
- → Live socket (pub/sub)
EReach· 4Anthropic · OpenRouter · Dev tools · Company systems · Any API
Anthropic · OpenRoutermodelsEXTERNAL
EXTERNAL · models
Claude through the Agent SDK; other models through OpenRouter.
Talks to
- ← 14 sub-agents
Dev toolsin-process MCPEXTERNAL
EXTERNAL · in-process MCP
GitHub, Linear and Railway: code, tickets and deploys.
Talks to
- ← MCP registry (MCP)
Company systemsHTTP MCPEXTERNAL
EXTERNAL · HTTP MCP
C0, ContentSphere and OutreachSphere, read through their own MCP servers.
Talks to
- ← MCP registry (MCP)
Any APIREST · GraphQLEXTERNAL
EXTERNAL · REST · GraphQL
Any API added through the hub.
Talks to
- → Integration hub (spec)
Connections · 29
→ request · ⇢ webhook, queue or schedule
- Decisions → Engine API · approve · reject
- Engine API → Governance
- Team templates → Heartbeat · seeds
- Signals → Heartbeat · what changed
- Heartbeat ⇢ Orchestrator · tick
- Heartbeat ⇢ Kernel · cheap lanes
- Heartbeat ⇢ Autoresearch · nightly
- Orchestrator → 14 sub-agents · delegates
- Orchestrator → Task loop · claims
- 14 sub-agents → Agent runner
- Agent runner → MCP registry · tools
- Agent runner ⇢ Event mesh · output
- Agent runner → Mnemos · write · recall
- Agent runner → Costs · checks
- Kernel → MCP registry · subset
- Slack → Kernel · chat
- 14 sub-agents → Governance · proposals
- Autoresearch ⇢ 14 sub-agents · prompts
- Self-healing ⇢ 14 sub-agents · revisions
- MCP registry → Dev tools · MCP
- MCP registry → Company systems · MCP
- Integration hub → MCP registry · compiled
- Any API → Integration hub · spec
- Mnemos → Neo4j
- Mnemos → PostgreSQL · vectors
- Event mesh ⇢ Redis · publish
- Redis ⇢ Live socket · pub/sub
- Live socket ⇢ Stage · live
- 14 sub-agents → Anthropic · OpenRouter
Inside: the memory
Memory isn’t a log. Everything an agent produces is read for what it’s about, merged with what is already known, consolidated every six hours, faded when unused, and searched by meaning, keyword and connection when it’s needed again.
Hover a box to trace its connections; click it for what it does.
AIn· 5Run output · Experience · Documents · From tools · Scenarios
Run outputsuccessful runsSERVICE
SERVICE · successful runs
What an agent produced, sent to memory after the run.
Talks to
- → Extract
Experienceevery runSERVICE
SERVICE · every run
A record of each run, failures included, so an agent can learn from what it has done.
Talks to
- → Knowledge graph (Experience node)
Documentsfiles · URLs · YouTubeSERVICE
SERVICE · files · URLs · YouTube
Outside material ingested on request.
Talks to
- → Extract
From toolsMCP ingestAI
AI · MCP ingest
Anything an agent chooses to remember through its memory tools.
Talks to
- → Extract
Scenariosworld modelsSERVICE
SERVICE · world models
A seed document becomes a model: actors with interests, tensions between them, dynamics and assumptions.
Talks to
- → Knowledge graph (world model)
BWrite· 6Extract · Deduplicate · Score · Store · Embed · Connect
Extractontology-awareAI
AI · ontology-aware
Pulls out entities and relationships using the known types and their properties. Runs on a local model when one is available, Haiku otherwise.
Talks to
- ← Run output
- ← Documents
- ← From tools
- → Deduplicate
Deduplicatespelling · meaningSERVICE
SERVICE · spelling · meaning
Matches each entity to one already known: by fuzzy name (bigram similarity of 0.75 or more), then by meaning.
Talks to
- ← Extract
- → Score
Scoreconfidence · half-lifeSERVICE
SERVICE · confidence · half-life
Confidence comes from the source; lifespan from the type: 7 days for a signal, 90 for a client, 365 for a principle. Use keeps a memory fresh.
Talks to
- ← Deduplicate
- → Store
Storemerge · never dropSERVICE
SERVICE · merge · never drop
Writes nodes idempotently with bounded concurrency. If extraction fails, the raw text is kept as an observation rather than lost.
Talks to
- ← Score
- → Embed
- → Knowledge graph (MERGE)
Embed1536 dimensionsAI
AI · 1536 dimensions
Embeds each node for search. In production a failed embedding is an error, never a placeholder that would quietly poison recall.
Talks to
- ← Store
- → Connect
- → Embeddings
Connectauto-linkSERVICE
SERVICE · auto-link
Links new nodes to related ones already in the graph.
Talks to
- ← Embed
- → Knowledge graph (edges)
CStores· 2Knowledge graph · Embeddings
Knowledge graphL0 raw · L1 distilledSTORE
STORE · L0 raw · L1 distilled
Nineteen core kinds of memory in Neo4j (new kinds can appear), from signals and bugs to decisions and principles, each fact able to say when it became true and when it stopped.
Talks to
- ← Experience (Experience node)
- ← Scenarios (world model)
- ← Store (MERGE)
- ← Connect (edges)
- ← Compression (L0 → L1)
- ← Reflection (insights)
- ← Summaries
- ← Past experience (experiences)
EmbeddingspgvectorSTORE
STORE · pgvector
The vectors behind semantic search, cleaned up when a node is archived so it can’t haunt results.
Talks to
- ← Embed
- ← Decay (archive)
- ← Hybrid search (dense)
DKeep· 4Compression · Reflection · Summaries · Decay
Compressionevery 6 hJOB
JOB · every 6 h
Clusters similar memories, checks the cluster really is similar (cosine 0.65 or more), and replaces it with one distilled L1 memory. High-value memories are never compressed.
Talks to
- → Knowledge graph (L0 → L1)
Reflectionafter compressionJOB
JOB · after compression
Reads 12 to 60 recent observations, decisions and experiences together and writes up to eight new insights or patterns.
Talks to
- → Knowledge graph (insights)
SummariesrollingJOB
JOB · rolling
Keeps a short summary on each node from its properties and its recent connections.
Talks to
- → Knowledge graph
DecaydailyJOB
JOB · daily
Recomputes each memory’s freshness from its half-life and last use; below 0.05 it is archived. A node with no timestamp is left alone, never archived on a guess.
Talks to
- → Embeddings (archive)
ERecall· 6Past experience · HyDE · Hybrid search · Graph walk · Filters · Rerank
Past experiencebefore each runSERVICE
SERVICE · before each run
The agent’s own past runs, ranked by overlap with the task at hand, added to its prompt so it builds a view from what it has actually done.
Talks to
- → Knowledge graph (experiences)
HyDEhypothetical answerAI
AI · hypothetical answer
For abstract questions, drafts a likely answer and searches with that instead. Direct lookups skip it.
Talks to
- → Hybrid search
Hybrid searchdense + keyword · RRFSERVICE
SERVICE · dense + keyword · RRF
Runs semantic and keyword search and fuses the two rankings.
Talks to
- ← HyDE
- → Embeddings (dense)
- → Graph walk
Graph walk2 hopsSERVICE
SERVICE · 2 hops
Expands each hit two steps through the graph, so related context comes along.
Talks to
- ← Hybrid search
- → Filters
Filterstime · type · truthSERVICE
SERVICE · time · type · truth
Drops archived and invalidated facts, and can answer as of a past date.
Talks to
- ← Graph walk
- → Rerank
Rerankagainst the questionAI
AI · against the question
A model reorders the shortlist against the original question, not the expanded one.
Talks to
- ← Filters
Connections · 23
→ request · ⇢ webhook, queue or schedule
- Run output → Extract
- Documents → Extract
- From tools → Extract
- Experience → Knowledge graph · Experience node
- Scenarios → Knowledge graph · world model
- Extract → Deduplicate
- Deduplicate → Score
- Score → Store
- Store → Embed
- Embed → Connect
- Store → Knowledge graph · MERGE
- Embed → Embeddings
- Connect → Knowledge graph · edges
- Compression ⇢ Knowledge graph · L0 → L1
- Reflection ⇢ Knowledge graph · insights
- Summaries ⇢ Knowledge graph
- Decay ⇢ Embeddings · archive
- Past experience → Knowledge graph · experiences
- HyDE → Hybrid search
- Hybrid search → Embeddings · dense
- Hybrid search → Graph walk
- Graph walk → Filters
- Filters → Rerank
Two flows
How an agent remembers
Walk through it and each step lights the parts it runs through in the drawings above.
By count
- agent roles
- 15
- heartbeat lanes
- 12
- built-in tools
- ~60
- kinds of memory, each with its own lifespan
- 19
- team templates
- 5
- autonomy modes
- 3
Notes
- N.1Every kind of memory has its own lifespan. A signal fades in a week, a client in three months, a principle in a year, and anything that keeps getting used stays fresh.
- N.2Memory can answer “what did we believe in March?” Facts carry when they became true and when they stopped, and recall can ask about a past date.
- N.3If a model can’t make sense of something, it is still kept as a raw note. Nothing an agent learns is silently dropped.
- N.4The agents react to each other. A Sentinel alert lands in the Orchestrator’s triage, and an Architect deploy sets off a Sentinel check.
Built by
I design, architect and build software products like this one.
More systems