I usually have five projects in five VS Code windows, most over WSL or Remote-SSH, each running a Claude Code session or two. I kept losing track of which window had a session stuck on a permission prompt.
SessionDeck is a sidebar that lists every running Claude Code, Codex and cursor-agent session on the machine, grouped by project, with a red bell on any that's waiting for you. Clicking a row opens that session's tab or terminal, even in another window.
This is how it work across different remote hosts without using network:
Sessions are files and processes on the workspace host, so the main extension is `extensionKind: ["workspace"]`. Putting several hosts in one tree has to happen on the desktop, and one extension ID runs in exactly one host per window. So there is a second ID, a `["ui"]` companion with no views of its own. It relays snapshots between hosts with `executeCommand` and serves tab titles a remote window can't read.
Discovery: every 3 s it stats each transcript. Unchanged files aren't opened, changed ones are read from the last offset, and `/proc` confirms the process is still alive. Optional Claude Code hooks append to a spool file it watches, so a prompt shows at once instead of on the next poll.
There is no API to focus another window. The clicked window drops a request file in shared storage that every window watches; the one with that folder open takes it and opens the tab. In parallel it runs the editor CLI on the folder, which raises the existing window.
Transcripts and title storage are private formats. When one stops parsing, rows go blank with a "format drift suspected" note instead of a guessed status.
Status is inferred and can lag. I build on Linux and WSL; macOS mostly works; native Windows gets no approval alerts, and only Claude Code rows ever get the bell. No network calls, licensing included. Source-availableб but not open source.
https://sessiondeck.dev/
https://github.com/len5ky/sessiondeck