# Show HN: Rezoom – one chat list for all your Claude Code sessions

> Source: <https://github.com/BEX-Robotics/rezoom>
> Published: 2026-10-11 08:53:56+00:00

**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`ssh` typed 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 with`ssh -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`/login` inside 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 as*suspended* (the kernel says so; claude's own status can't) with**▶ Continue** in its own
terminal or*Resume in Rezoom instead* ; a "busy" session whose transcript hasn't
moved for two hours shows*no progress* ; an ssh that ends inside a Rezoom pane
gets a bar with**Reconnect** (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+Shift` chord (`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](https://github.com/BEX-Robotics/rezoom/releases/latest):

```
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.
