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 ↗

Fig.A team of AI agents that does a company’s routine work on a schedule, remembers what it learns, and brings every decision to a person.

Architecture

  1. 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)
  2. 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)
  3. 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)
  4. 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)
  5. 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

  1. Decisions → Engine API · approve · reject
  2. Engine API → Governance
  3. Team templates → Heartbeat · seeds
  4. Signals → Heartbeat · what changed
  5. Heartbeat ⇢ Orchestrator · tick
  6. Heartbeat ⇢ Kernel · cheap lanes
  7. Heartbeat ⇢ Autoresearch · nightly
  8. Orchestrator → 14 sub-agents · delegates
  9. Orchestrator → Task loop · claims
  10. 14 sub-agents → Agent runner
  11. Agent runner → MCP registry · tools
  12. Agent runner ⇢ Event mesh · output
  13. Agent runner → Mnemos · write · recall
  14. Agent runner → Costs · checks
  15. Kernel → MCP registry · subset
  16. Slack → Kernel · chat
  17. 14 sub-agents → Governance · proposals
  18. Autoresearch ⇢ 14 sub-agents · prompts
  19. Self-healing ⇢ 14 sub-agents · revisions
  20. MCP registry → Dev tools · MCP
  21. MCP registry → Company systems · MCP
  22. Integration hub → MCP registry · compiled
  23. Any API → Integration hub · spec
  24. Mnemos → Neo4j
  25. Mnemos → PostgreSQL · vectors
  26. Event mesh ⇢ Redis · publish
  27. Redis ⇢ Live socket · pub/sub
  28. Live socket ⇢ Stage · live
  29. 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.

  1. 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)
  2. 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)
  3. 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)
  4. 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)
  5. 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

  1. Run output → Extract
  2. Documents → Extract
  3. From tools → Extract
  4. Experience → Knowledge graph · Experience node
  5. Scenarios → Knowledge graph · world model
  6. Extract → Deduplicate
  7. Deduplicate → Score
  8. Score → Store
  9. Store → Embed
  10. Embed → Connect
  11. Store → Knowledge graph · MERGE
  12. Embed → Embeddings
  13. Connect → Knowledge graph · edges
  14. Compression ⇢ Knowledge graph · L0 → L1
  15. Reflection ⇢ Knowledge graph · insights
  16. Summaries ⇢ Knowledge graph
  17. Decay ⇢ Embeddings · archive
  18. Past experience → Knowledge graph · experiences
  19. HyDE → Hybrid search
  20. Hybrid search → Embeddings · dense
  21. Hybrid search → Graph walk
  22. Graph walk → Filters
  23. 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

  1. 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.
  2. 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.
  3. 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.
  4. 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.

naram@hey.com·See the rest of my work

More systems