The task composer

How the chat strip on a task page infers Ask / Edit / Replace / Extend, what each intent sends to the chain, and how task versions undo a mutation.

The chat strip at the bottom of a task's interface panel used to only answer questions. It now infers one of four intents from what you type — Ask, Edit, Replace, Extend task — and three of them mutate the task rather than just answering about it. This page is the mechanics; product behaviour (the chips, the intent menu, the Only this / Connected / Entire system scope control) reads the same on the task page itself.

Focus

The composer's focus is an explicit list of interface ids (focusedInterfaceIds), never an inferred read of whichever tab happens to be open. An empty list means the whole task is context. A one-release legacy activeInterfaceId field is honoured only when the list is empty, so an older client bundle still narrows the way it used to.

Intent

A deterministic rule pass decides the intent on every keystroke; when it is not confident, one debounced call to a small classifier prompt refines it. The guess is always overridable — a click on the intent chip fixes it until the draft is cleared.

Replace requires exactly one focused interface. With zero or more than one, the chain refuses the request server-side by rejecting the directive.

Note

Edit and Replace apply directly, with no pending-approval diff, because the person who sent the message already approved it. A chain-authored edit with no composer directive behind it still goes through the pending-proposal gate.

Task versions

Any Edit, Replace or Extend snapshots the task's current interfaces and markdown before the job is enqueued, so it can be undone. Snapshots live next to the task's own storage and are capped at 20 per task, oldest dropped first. Restoring a version — the whole task, or one interface — snapshots the state it is about to overwrite first, so a restore is itself undoable.

A snapshot failing never fails the send: the turn just runs with no restore point for that one change.