System topology
The static architecture, with every binary, port, and connection. Open →
Agent Substrate is a Kubernetes-native runtime for workloads that spend most of their time idle (AI agents, sandboxed environments, stateful services, etc). We run a lot of these, and giving each one its own pod means paying for capacity that sits there waiting. Substrate decouples an actor’s lifecycle from the pod that runs it, so a small pool of pre-started gVisor or micro-VM workers can host far more actors than there are pods. It does that by packing many actors onto each worker, suspending the idle ones to snapshots, and restoring them when a request shows up.
Each actor lives in an atespace (Substrate’s tenancy
boundary), so its identity is the pair (atespace, name). You’ll see that pair
everywhere in this atlas, e.g. in the ate-target-actor routing header, in
storage keys, in credentials, and in every API call. The diagram below puts the
whole system on one whiteboard.
The whole system on one whiteboard. Click any box to drill in. For the wiring-diagram version with every port, see System topology.
System topology
The static architecture, with every binary, port, and connection. Open →
Resume actor
The most interesting flow, since it touches every component. Restoring an actor from a snapshot, end to end. Open →
ateapi internals
Control plane API: RPCs, workflows, PostgreSQL leases, scheduling. Open →
Concepts glossary
Quick definitions for the domain terms, e.g. actor, atespace, worker, actor identity, snapshot, WorkerPool, ActorTemplate. Open Actor →
Source on GitHub
Browse the full source, open issues, or read the architecture docs and API guide. agent-substrate/substrate →
Most pages are built around Mermaid diagrams, with sequence diagrams for flows,
state diagrams for lifecycles, and flowcharts for topology. The boxes are
clickable in the hero diagram above and in the Mermaid diagrams on the deeper
pages, so try clicking ate-api-server above to drill into its internals.
We stick to the components, resources, and flows here and leave the line-by-line code to the source. If you want the current implementation, browse the repository and the docs listed below.