Beyond one window
Sessions in the Claude desktop app
Local conversations get a row with a colour read from the transcript. Cloud ones are not here at all.
The Claude desktop app runs a conversation in one of two places, and only one of them is on this machine.
A cloud session runs on Anthropic's servers and leaves nothing on this disk. A local session runs here, as a child of the application, and writes exactly the files every terminal session writes. The application says which is which itself, and that answer is taken rather than guessed at.
The colour is derived, and it says so
Those sessions run with a configuration directory of their own and never read the hooks on this machine, so nothing announces what they are doing.
What is left is the transcript, and a transcript can say running or answered. It cannot say waiting for a permission, because no record marks that pause.
So a desktop row never goes amber and never goes red, and its card says the colour is derived. A limit you are told is a limit.
The row lives longer than the process
That agent process lives one turn: the application starts it to answer and removes its session file when it exits. Measured here, a conversation whose last word landed at 22:44:38 left an empty sessions directory stamped 22:44, so a row built on the process alone appeared while the model worked and vanished at the moment there was something to read.
The row therefore rests on the index beside each conversation and on its transcript, bounded by three gates that are the application's own answers: the folder resolved as local, not archived, and active recently.
It goes when the conversation is archived, when the app is quit, when it has been silent for twelve hours, or when you delete the conversation, which takes its folder off the disk and the row with it.
The click
A conversation in the application's Code tab opens itself. The application files each one under an id of its own, beside the id the session reports, and has a link that opens it. The click reads that id from the application's own index and follows the link. Measured on a test Mac: with the application showing one conversation, a click on the other's row brought that one up.
Any other conversation raises the application, and that is all the click promises for it. Open in the Hub reads its transcript there, read only, and Show in the Claude app in the row's menu raises the application. That holds whichever machine the session runs on: a conversation the application opened on a node over ssh has its row marked remote, and the click raises the application here, because that is where the conversation is. The application goes by two names in Claude Code's own files, local-agent and, since 2.1.281, claude-desktop; the panel knows both.
Cloud sessions
They are not shown, and that is a declared limit rather than a missing feature. A cloud session runs inside an isolated Linux virtual machine with an address of its own. A hook fired in there would look for this panel on that machine's own loopback, and nothing installable from here reaches inside.
Four kinds of probe were tried: descriptor, socket, network route, session file. None found anything at all.
Conversations in a worktree of their own
The application can give each conversation its own copy of the repository, a worktree with a generated name such as vigilant-ramanujan-790712. The row reads as the project and the worktree instead — Exit · vigilant-ramanujan — so that a column of them still says which project each one belongs to. A name you give the row wins, as everywhere.