Zed removed the wrong brake.
Zed 1.22 removed Stop controls from terminals managed by an external agent. The related change explains why. Provider terminal metadata creates a display buffer, not a process owned by the editor client. The old path treated the buffer like a local task, reported completion too early, and discarded the provider's exit status.[1][2]
Removing a button can improve control. A visible Stop that cannot reach the running process teaches the wrong ownership model. Zed kept local process kill behavior and cleanup where the client still owns them. It removed the control where the agent owns the terminal lifecycle.
A brake on the display is not a brake on the process.
Cancel is a request with a result.
The Agent Client Protocol defines $/cancel_request because JSON-RPC has no standard cancellation mechanism. Support is optional. A receiving implementation may cancel the request and nested activity. It must still answer the original request with a result or a cancellation error.[3]
This gives the interface a precise claim to make. The client sent a cancellation request. It does not yet prove that every child process stopped or that an earlier side effect was reversed. The acknowledgment and the observed effect need separate places in the UI.
Terminal custody is explicit.
ACP terminal methods put command execution in the client environment. The client returns a terminal ID. The agent may read output, wait for exit, kill the command, and release the terminal. The protocol says the agent must release the terminal when it no longer needs it.[4]
That route differs from a provider-owned terminal shown inside the editor. The pixels may look identical. The kill authority is not. A useful terminal card should expose the owner and the available action instead of drawing the same Stop control on every stream.
Agent hosts make custody visible work.
VS Code 1.140 says its Copilot harness runs in a dedicated agent-host process. The same release adds experimental delegation to connected remote agent hosts. One interface can now watch work that lives in another process or on another machine.[5]
The product lesson is simple. Put the control beside the layer it can reach. If the editor can only request cancellation, label it Request stop. If a host owns the process, name that host. Keep Stopped for a state backed by an acknowledgment and an observed effect.