Durable Goals
A Goal is the unit of durable intent in Wayland Core. Where a session is what is happening now, a Goal is what you asked for, recorded in a form that outlives the process running it.
Kill the process mid-run and the Goal is still there, in state, and resumable.
Durable Goals landed in v0.12.26.
One kernel under every loop owner
Section titled “One kernel under every loop owner”Wayland Core runs agentic work through five loop owners: Anvil, Council, Crucible, ForgeFlows, and Direct. Before v0.12.26 each carried its own notion of what finished meant.
They now share one durable Goal kernel, with a single canonical terminal taxonomy lifted into wcore-types and one transition path driven from the shipped binary. A Goal completed under Crucible and a Goal completed under ForgeFlows mean the same thing and are queried the same way.
Goals on the wire
Section titled “Goals on the wire”Goals are first-class on the host protocol, not just an internal bookkeeping detail:
- A typed Goal control command set, so a host can drive Goal state directly.
goal streamfor a live view of Goal transitions as they happen.- Refusals rendered in the TUI rather than swallowed.
- Durable Goal state shown in the terminal.
If you embed the engine, see Driving the Engine from a Host and the JSON Stream Protocol.
The durable task ledger
Section titled “The durable task ledger”Fleet work rides a durable task ledger with an epoch fence. Three properties come out of that design, and each closes a specific failure:
- Dependencies are enforced at the durable boundary. A task cannot start because an in-memory view thought its dependency was done; the durable record decides.
- An agent releasing a claim must present its own epoch. A stale agent that wakes up late cannot release a claim that has since moved on.
- A loop-owner claim carries a lease. A dead owner cannot deadlock its own Goal, because the lease expires and the claim becomes reclaimable.
Taken together, these are what make a Goal genuinely resumable rather than merely recorded. A Goal whose worker died is not a Goal stuck forever waiting on that worker.
Where Goals fit
Section titled “Where Goals fit”| You want | Read |
|---|---|
| To run a council of providers under a Goal | Crucible |
| To run authored multi-step flows | Workflows |
| To spread work across worktree workers | Swarm |
| To see the turn-by-turn mechanics beneath a Goal | Agent Loop and Turn Lifecycle |
| To run a Goal on another machine | Execution Backends |