App state

The agent reads and operates the board below. State enters context through a ContextSource — budgeted and traced like every other layer, re-read every turn so it can never contradict the screen — and actions are ordinary ToolDefinitions, so they inherit presets, confirm-suspension and deny-last for free. The board is plain React state: drive it by hand, then ask the agent to, and watch the same state change.

todo
doing
done

Demo transport — replies are scripted, so use the buttons to change the board and read the state layer in the trace below. Point this panel at a real provider and the agent drives the board itself.

The agent already knows the board — it is in the context layer, not the conversation.