One chat list for every AI coding session on your machine. Rezoom shows each agent, ssh, tmux or shell session as a chat: what it's doing right now, what it last said, and one click to bring it back. Native C++/Qt6, follows your KDE light/dark theme, embeds real Konsole terminals.
| Agent | What Rezoom knows |
|---|---|
| Claude Code | live state (working, waiting, frozen), live title and output, auto-adopt, freeze detection |
| Codex | found in history, adopted, resumed with codex resume , detected when started in a pane |
| Any other CLI agent (aider, Gemini CLI, opencode…) | runs as a terminal chat; resumable through a command template in Settings |
| Agents on other machines, over SSH | the ssh you typed is remembered as the way back in; Scan remote finds claude and tmux sessions on a host and adopts each as a chat that resumes over ssh |
- See everything at once. Rezoom reads the registry Claude Code already writes
(
~/.claude/sessions/). Every session shows its state: Claude's orange spinner while working (a still star when it's stuck), green when it finished and it's your turn, grey idle, blue at a shell, red frozen on a usage limit, hollow resumable — its live title, and its latest output while it works. New sessions appear on their own; tool-spawned ones (in/tmp, or started by another claude) are left out. - Find the one you mean. Each running session shows the name other agents
call it by (
bex-6b), external sessions carry their Konsole window title, and search matches names, titles, messages and folders. - Never lose a session. Every chat keeps the exact command that brings it back. Whatever was running comes back when Rezoom starts, even after a crash.
- Move sessions without killing them. A session running in some other Konsole window gets a ⤵ on its row: one click beams it into Rezoom live (reptyr), and the old window is closed for you. Or jump to its window. "Restart to update" is one keystroke per session.
- Rezoom over SSH. An
sshtyped in any pane is recorded as that chat's way back in; an ssh open in any Konsole tab shows up as a chat, with the remote claude's working/your-turn state read from its title;Scan remote lists the claude and tmux sessions on a host and adopts each one, resuming withssh -t host 'claude --resume …'. Nothing connects until you click. - More than one Claude login? Optional. Right-click a chat →Run under another
Claude account… (
Ctrl+Shift+K) creates a separate account (~/.claude-<name>, optionally sharing your settings and CLAUDE.md), and you/logininside claude once. Those chats carry a small account tag and always resume under their account. With a single login, none of this appears. - Group across screens. Float chats into their own tabbed windows and pull them back; the layout survives restarts.
- Know when something's wrong. A session frozen by Ctrl+Z shows assuspended (the kernel says so; claude's own status can't) with**▶ Continue** in its own terminal orResume in Rezoom instead ; a "busy" session whose transcript hasn't moved for two hours showsno progress ; an ssh that ends inside a Rezoom pane gets a bar withReconnect (a click, never automatic).
- Know when you're blocked. One click in Settings installs a Claude Code Notification hook; sessions frozen on a usage limit turn red with the reset time.
- Keyboard first. Everything has a
Ctrl+Shiftchord (Ctrl+Shift+/lists them), so plain Ctrl keys still reach your shell.
Rezoom runs entirely on your machine and never calls an API. It reads Claude's own
files and writes only its own. The two exceptions are opt-in and say so in Settings:
the freeze-detection hook (added to ~/.claude/settings.json, with a backup) and
skipping Claude's "trust this folder?" prompt for folders you already use (off by
default). SSH chats never connect until you click.
Debian/Ubuntu (25.04 or newer, for KF6) — download the .deb from the
latest release:
sudo apt install ./rezoom_1.2.0_amd64.deb # pulls Qt6/KF6/konsole-kpart via apt
Fedora/openSUSE — build from the spec: rpmbuild -ba dist/rezoom.spec.
Arch — dist/PKGBUILD: makepkg -si from a directory containing it.
Packages depend on your distro's Qt/KF6; nothing is bundled.
Optional: reptyr for moving live sessions
(sudo setcap cap_sys_ptrace+ep $(which reptyr) to allow it under Yama — Settings
shows whether it's ready), tmux, jq for the freeze-detection hook.
Linux:
sudo apt install qt6-base-dev libkf6parts-dev libkf6service-dev \
libkf6coreaddons-dev libkf6i18n-dev extra-cmake-modules
cmake -B build -G Ninja
ninja -C build
build/rezoom
macOS:
brew install cmake ninja qt
cmake -B build -G Ninja -DCMAKE_PREFIX_PATH="$(brew --prefix qt)"
ninja -C build
build/rezoom
KF6/Konsole is KDE-only, so chats open in Terminal.app windows instead of embedded panes. Presence, titles, search, auto-adopt, auto-resume, restart, archive, templates and freeze detection work the same: Claude Code writes the same registry on macOS. Beam-in and "Go to its window" need Linux (reptyr, KWin) and don't appear on macOS, and single-instance is off there (the session store stays consistent anyway).
rezoom-cli list # chats + live presence + agent name (TSV)
rezoom-cli resume <query> # reopen a chat; query = agent name (bex-6b), id or title
rezoom-cli resume <query> --print
rezoom-cli adopt-running # adopt every untracked running claude
rezoom-cli prune # drop dead chats stranded in /tmp
rezoom --resume <query> # GUI: select + launch (forwards to a running instance)
| Path | What |
|---|---|
~/.local/share/rezoom/sessions.json |
chat records (multi-process safe) |
~/.local/share/rezoom/notifications.jsonl |
freeze-detection capture |
~/.config/rezoom/rezoom.conf |
templates, preferences, window layout |
~/.claude/sessions/<pid>.json |
live registry (written by claude, read-only) |
~/.claude/projects/*/<uuid>.jsonl |
transcripts (read-only) |
$REZOOM_DATA_DIR and $REZOOM_CLAUDE_DIR point the app at other locations, and
$REZOOM_SCREENSHOT=<file.png> renders the window to a PNG and quits — that's how
the screenshots above were made, from demo data.
MIT.