A bell entry
Anything that finishes while you’re not looking at its conversation raises a notification you can pick up later.
When an agent starts something that keeps going while you carry on — a long command, a dev server, a helper, a scheduled run, a document export — it shows up in one place: a slim bar just above the message box.
One list, one set of controls. Everything running for you — in this conversation and in your other ones — is on that bar. You can open any of it, stop one thing, or stop everything at once.
Collapsed, it is a single line with a count:
● 3 working in the background · 1 needs you
It is hidden when nothing is running. Click it — or press ⌘J / Ctrl+J — to expand the full list in place. It never covers the message box, and pressing Esc collapses it again.
Expanded, each row reads the same way: what kind of work it is, what it is doing, how long it has been going, and what you can do about it.
| Kind | What it is |
|---|---|
| Command | A command the agent left running |
| Server | A development server it started, with its port |
| Helper | A helper working on a piece of the job |
| Run | Another turn of this or another agent — a scheduled run, a follow-up, a goal pass |
| Export | A presentation or document being rendered |
| Scheduled | A summary row: what is queued to run later, and when |
And one vocabulary for status, everywhere in the product: Starting · Working · Waiting · Needs you · Done · Failed · Stopped.
Rows are grouped under This chat first, then Elsewhere for work running in your other conversations. Finished items stay visible for about ten minutes so you can see what happened, then clear themselves.
When nothing is running, the panel says so: Nothing running. Work from earlier sessions is in the chat.
On a phone, the same one-line summary appears and expands into a sheet.
When the agent finishes its turn cleanly, anything it started and never came back to is stopped and tidied up — you are not left paying for a command nobody is reading. The card in the conversation says so: Stopped at turn end.
Two things survive on purpose:
Stopping a run from the message box stops the run and everything it started that wasn’t meant to outlive it. Servers stay up; the confirmation says so before you commit.
If a run is deliberately waiting on something it started, the conversation says so rather than looking finished: Waiting on a background job — you can keep chatting; this run resumes when it finishes.
If a command runs past its time limit, it is not killed and thrown away. It is moved into the background and carries on, and the agent is handed the job so it can check the output later. You see it appear as a Command row on the bar, with everything it had printed so far.
A few things are deliberately never moved to the background this way — anything that is really just waiting, and any version-control command, where a half-finished operation is worse than a stopped one.
The agent is told when background work finishes, so it never sits in a loop polling or re-running a command just to see whether it’s done. If the conversation has already ended, work that finished and produced something to read can wake the agent for one more turn to summarise it. Work that was stopped, failed, or produced no output is reported the next time you open the conversation instead. The waking turn appears as a system note in the conversation, never as a message from you.
You get told too, when you weren’t watching:
A bell entry
Anything that finishes while you’re not looking at its conversation raises a notification you can pick up later.
A toast
If you’re in a different conversation when something finishes, a small notice tells you which one and offers to open it.
The browser tab
The tab title carries a marker while work is running, and a tick when it finishes — so a background tab still tells you.
Whether a completion also reaches you by email follows your organization’s notification preferences — failures are emailed by default, successes are opt-in.
You are told once per item, never twice.