smalltalk pre-release
Seats
A seat is a durable agent: a harness, a model and a workspace that smalltalk keeps running. No mission owns a seat, so no mission ending stops it.
You declare a seat as a top-level agent in a KDL file. Keep that file in a Git repository so it's backed up:
version 2
agent "example/worker" {
workspace "/srv/example/app"
restart "always"
harness "claude" {
model "claude-sonnet-5"
effort "medium"
}
}
st agents apply worker.kdl --as person/ada
st terminals peek agent/example/worker
The seat starts its harness in the workspace, reads its boot instructions, checks for work, and waits.
Seats and mission agents
Agents can also be declared inside a mission. Those belong to the run: they start when it starts and stop when it ends. Use a seat for an agent that should outlive any single piece of work, and a mission agent for a helper that only exists for one run.
Don't model a durable agent as a mission with no steps. That run completes at once, and stops the agent it owns.
Work arrives as steps, not messages
You can talk to a seat, and it can talk back, but messages are conversation. Work never arrives as a message. It arrives as steps assigned to the seat.
Each seat has an ordered queue of the runs that have steps for it, and holds one step at a time. It takes the next ready step in queue order. A run that is waiting on a gate or a dependency is passed over, so it never blocks the runs behind it. A person can reorder the queue, and every move is recorded with who made it and why.
Waking a seat
When a step becomes ready, smalltalk sends a durable wake to the assigned seat through the harness's native driver. It never types into the agent's terminal.
The wake is only a nudge. The ready step lives in the graph, so it survives a daemon outage or a failed delivery.
It lives in a terminal
Every seat's harness runs in a pty session. You can peek at it, or attach to it with st terminals attach. It keeps running when the smalltalk daemon restarts: the new daemon adopts the running session instead of starting another one.