This demo runs 3 Claude Code agents on 2 substrate worker pods. Each agent has its own short prompt and works in a loop: ask Claude, print the answer, idle for 45 seconds, repeat. While an agent is idle, substrate can suspend it (snapshot its process state, free its pod) and let a different agent borrow that pod — that’s the multiplex. The dashboard refreshes every 2.5 seconds; pods, actors, and logs are all live so you can watch the rotation happen.
Click Give a task to assign a randomly chosen short task to a randomly chosen agent. Each task moves through three states — queued while the agent is suspended, running while it owns a worker pod, and completed once substrate suspends it again.
The pool of substrate-managed pods that actually host running agents. The WorkerPool is configured with 2 replicas for 3 agents, so substrate is forced to share — at any moment at most 2 agents own pods, and the third is suspended waiting its turn. Substrate rotates ownership as agents transition between active and idle phases.
ActorTemplates define each agent (container image,
prompt, idle interval). Actors are the live instances
bound — or not — to a worker pod. Watch the
phase: Running means the actor is on a pod
executing right now; Suspended means its state is stored and
it’s waiting for a free pod; Resuming /
ResumeGoldenActor are the substrate transitions in between.
Each card below tails the logs of one worker pod. Because substrate moves
agents between pods, the log stream you see in a single card switches
ownership over time — you’ll see one agent’s
[demo-actor: agent-luna] tick output, then a transition, then
[demo-actor: agent-mars] picking up on the same pod. That
ownership transition is the multiplex in action.