Releases: zillydev/claude-code-manager
Release list
v0.1.4
Added
- Delete several sessions at once. ⌘-click sessions in the sidebar to pick them along with the one that's open, or ⇧-click to pick a run of them from it, then Delete from the bar that appears at the bottom — or right-click one of them. A plain click still just opens a session. Once they're gone the list scrolls back to where you started picking, instead of leaving you where the last click was. Sessions with Claude running in a terminal have it closed first, and if Claude is in the middle of a reply you're asked before anything stops. This applies to deleting a single session too.
- Take a session's terminal from another window. A session whose terminal runs in another window used to offer only "Switch to it". It now also offers Open here instead, which stops it there and starts it in this window. While Claude is working in it, the same dialog as ⌘W asks first; the other window is left showing
[process exited]with Restart.
Fixed
- Row menus open upward when there's no room below. The ⋯ menu on a session near the bottom of the sidebar was cut off by the list's edge, so reaching Delete meant scrolling first. Menus now open on whichever side has room, and one too tall for either scrolls instead of being clipped.
- An open session's token counts and duration keep up with it. The context size, lifetime tokens, duration and event count above a transcript were worked out once, when you opened the session, and never again — so a session opened seconds after it started read "0 tokens" for as long as you watched it, while the sidebar showed the real number. They now grow as Claude writes, and start over after an auto-compaction, as they do when you reopen the session.
- The project filter's group heading sits over its own projects. Picking one of several projects sharing a name moved its heading to the top of the menu, where it sat over "All projects" and everything alphabetically before the group. The heading now stays with the directories it names, and a rule closes the group where it ends, so the projects after it read as their own.
- A question you chatted about instead of answering says so. Picking "Chat about this" on one of Claude's questions left its card looking unanswered, since Claude Code records it as a declined question rather than an answer; the card now ends with "Chat about this". A question dismissed with Esc reads "Dismissed without an answer".
- Messages no longer appear twice. Clicking another session while a large one was still loading left the window listening to the live tail twice, so from then on every new message showed up twice — in whichever session it displayed — until the app was restarted. And a message Claude wrote at the very moment a session opened could arrive twice too, or, if it was half-written, not at all. Now only the most recent open listens, and a session picks up exactly where its first read stopped.
Changed
- Uses less memory. Keeping the sessions list current while Claude is working no longer copies every session's cached details each time a session file changes, and a window no longer keeps a terminal alive for every session you've looked at, only for the one you're on and those where Claude is still running.
- The Open tab's icon shows how many sessions are open. A small count on its icon says how many sessions have Claude running in a terminal, turning green while Claude is working in any of them, so you can see it without switching tabs. The tooltip spells out both numbers.
- Precise session status is on by default, as a Claude Code plugin. Claude reports each session's state itself — a question or permission prompt shows as needing you the moment it appears — through a small
ccm-statusplugin the app adds to Claude Code, and a note in the sidebar says so. Turn it off in Settings or with/plugin, and it stays off. If you had switched it on before, its hooks move out of~/.claude/settings.jsoninto the plugin. It needs Apple's command line tools, and uninstalling the app leaves nothing behind that errors.
Install
brew tap zillydev/tap && brew trust zillydev/tap
brew install --cask claude-code-managerOr download the universal .dmg below (Apple Silicon + Intel).
It is not signed or notarized by Apple, so after dragging the app
to /Applications clear the quarantine attribute once:
xattr -cr "/Applications/Claude Code Manager.app"(Or right-click the app → Open → Open.) The Homebrew cask and
make install both avoid this.
Full changelog: v0.1.3...v0.1.4
v0.1.3
Added
- Diffs for files a shell command changed. When Claude edits files with a command —
sed, a script, a heredoc — rather than its Edit tool, Claude Code now records what changed, and the transcript shows it: each file's diff appears after the command's output, highlighted like an Edit, and the collapsed call shows how many files and lines changed (2 files +3 −1). In-session find searches these diffs too. In these diffs and in Edit diffs, a changed line now also highlights the exact words that changed, so a one-word edit in a long paragraph stands out. Sessions from Claude Code 2.1.270 on. - A notice when a new version is out. The app checks GitHub for a newer release now and then, and when there is one, the foot of the sidebar says so, with the command that upgrades it —
brew upgrade --cask claude-code-manager— and a button to copy it. Click the version to read its release notes. Dismiss it with ✕ and it stays hidden until the next release; Settings → About keeps showing it. - An Open tab for running terminals. A new sidebar tab (⌘4) lists every session with Claude running in a terminal, across all your windows, and which window each is in. Close one with ✕ — it asks first if Claude is mid-turn — or close all the idle ones at once.
- Session links. "Copy link" in a session's menu copies a
claude-code-manager://session/…link; clicking it — say, in an Obsidian note — opens the app on that session, launching it if it isn't running and bringing forward the window that already has it. Links open the installed app, not a development build. - A warning before closing on running work. Closing a window or quitting with Claude still working in one of its terminals now asks first, listing those sessions; closing it would stop them mid-turn. Idle terminals close as before, since their sessions resume from where they were. (Quitting from the Dock or logging out doesn't ask.)
- A clear button in global find. A ✕ in the search field clears the query and its results at once and leaves the cursor in the field, with the search options showing again.
- Precise status via Claude Code hooks. Opt-in, in Settings → Integrations: Claude itself now reports each session's state, so the sidebar and the published status file can say needs you the instant a question, permission prompt, or plan appears, and your turn within seconds of a reply finishing — no more waiting out the quiet-terminal hold. It installs a small relay into
~/.claude/settings.json(your existing hooks are untouched; a one-time backup is kept, and switching off removes exactly what was added). Sessions started before toggling keep the inferred status. - An About section in Settings. It shows the running build's version, and opens the repository, that version's release notes, and the issue tracker.
Fixed
- Selecting text no longer closes a dialog. Dragging to select text in the note editor — or in Settings, the tag editor or any other dialog — and letting go outside it closed the dialog, because the release counted as a click on the dimmed background. A dialog now closes only when the click both starts and ends on the background.
- A fork opens as soon as you create it. Forking stayed on the original session, and the new one — which keeps the forked message's timestamps — sorted among old sessions, far below where you were looking. Forking now opens the fork, and the sidebar scrolls to its row wherever it sorts.
- A session's title is its latest prompt, not an out-of-date one. The sidebar and title bar took the title from a record Claude Code writes only now and then, so it lagged a turn behind while Claude worked, and stuck on an older prompt for good when a session stopped before the next write — 45 of 300 recent sessions showed a stale one. The title now comes from the conversation itself, including prompts with images,
/commands,!commands and messages queued while Claude works, and a finished background task can no longer become the title. The title bar also updates as you go, rather than only when the session is reopened. - A slow search can't overwrite a newer one. Running a second search before the first finished could leave the first one's results on screen once it caught up; only the latest search's results are shown now.
- Question cards show every answer. A chosen option whose label contains a comma is highlighted again (Claude Code quotes such labels inside the answer sentence, and the card's parser stopped at the first quote), and an answer you typed instead of picking — including a notes-only answer — now appears as its own accented row under the question, rather than the card looking unanswered.
- Pressing Esc before Claude's first token no longer leaves the session "running". Claude Code writes no interrupt marker when there was nothing to interrupt, and no hook fires on Esc — so ccm now treats the Esc / Ctrl-C you press in its own terminal as the end of the turn.
- Interrupting Claude while nothing was streaming no longer leaves the session "running". Esc during a queued prompt or a task notification writes the interrupt marker without the message id the previous detection relied on — a third of all interrupts. The marker text itself now ends the turn.
- A global-find result takes you to the message. Clicking one often did nothing, for several unrelated reasons. Results included lines Claude Code writes as user messages but the transcript never shows — skill bodies, slash-command caveats, and a slash command's own stdout (
Set model to …), which alone was 104 of 355 unreachable results on a real corpus — so there was nothing to scroll to; search now asks the same question the renderer does, and stops offering them. Slash-command,!shell and task-notification turns are shown but carried no anchor to scroll to (one subagent-heavy session had 180 unreachable task notifications); they do now. And a message on a branch the session rewound away from is in the file but on no screen: the transcript now says so and offers Show this branch, which re-renders the session along that path and scrolls to the message, with a banner back to the current branch. A message Compact mode is filtering still offers Show all. - A session waiting on a question shows as unread, not running. Claude Code writes nothing to its session file while a question is on screen, and a live terminal only proves the process exists — so for a session ccm is running, the terminal itself now answers, by attribution: output that follows your own keystroke or a resize is the TUI answering you (browsing a question's options, typing, scrolling), while a real burst Claude wasn't asked for — a spinner tick, streamed text — is work. That moment of falling silent is also what dates the wait, since the file still ends on your own prompt: the session goes unread, the way a finished turn does, and clears when you look at it — including the session you have open, if its window is behind another or on a Space you're not on. A long build keeps its running indicator throughout.
Changed
- ⌘↵ saves a note, and reopening one puts the cursor at the end. In a session's note editor, ⌘↵ saves and closes, like clicking Save, and the Save button shows the shortcut. Opening an existing note places the cursor after its last character, scrolled into view, ready to add to it.
- A session reopens where you were reading. Scroll up in a session, switch away — or quit — and it now comes back to the same message instead of jumping to the latest. A session you left at the bottom still opens at the latest, new turns included, and opening one from a search result, bookmark or fork still goes to that message. Positions hold across compact mode and window resizes, and the last 300 sessions are remembered.
- A session reopens on the tab you left it on. Switching away from a session you were using in its Terminal and coming back used to land in Manager; it now returns to the Terminal as long as claude is still running there. A session you left on Manager comes back to Manager, and one whose terminal has stopped opens in Manager rather than starting claude again. Remembered per window, until you quit.
- Search options follow what you type, and
tool:lists your tools. The options list in global find used to vanish the moment you typed a letter; it now narrows to the operators that word could become (to→tool:,link→has:link) and picking one replaces the word. Aftertool:it lists every tool your sessions have called, most used first, matching anywhere in the name — sorunfindsmcp__tabularis__run_querywithout remembering the prefix. - Tool results show what the call did. A search like
tool:Bashortool:AskUserQuestionreturned a wall of identical "(tool: Bash)" cards. Each card now shows the call itself: the command it ran, the question it asked, the file it edited, the pattern it searched for. Bookmarked tool calls read the same way, and a collapsed tool call in the transcript names what it did instead of showing raw JSON. Long file paths keep their file name. - The find match you're on stands out. It was the same amber as every other match, just darker, so it was hard to pick out; it is now a solid orange with its own text colour, and its mark in the scrollbar is orange too.
- A global-find result shows you the text you searched for. Opening a result used to land on the right message but leave you to find the words in it yourself — hard in a long reply. It now opens the find bar with your search, starting on the match inside that message, so the text is highlighted, scrolled into view, and every other match in the session is a ⌘G away. Your find-bar toggles are left as you set them.
!shell commands render as a terminal block. Running!cmdin Claude Code wrote two messages showing raw<bash-input>/<bash-stdout>tags with HTML-escaped text ...
v0.1.2
Universal macOS build (Apple Silicon + Intel).
This build is not signed or notarized by Apple, so Gatekeeper
will refuse it on first launch. After dragging the app to
/Applications, clear the quarantine attribute:
xattr -cr "/Applications/Claude Code Manager.app"(Or right-click the app → Open → Open.) You only need to do
this once per install. Building from source with make install
avoids this entirely.
Full Changelog: v0.1.1...v0.1.2
v0.1.1
Universal macOS build (Apple Silicon + Intel).
This build is not signed or notarized by Apple, so Gatekeeper
will refuse it on first launch. After dragging the app to
/Applications, clear the quarantine attribute:
xattr -cr "/Applications/Claude Code Manager.app"(Or right-click the app → Open → Open.) You only need to do
this once per install. Building from source with make install
avoids this entirely.
Full Changelog: v0.1.0...v0.1.1
v0.1.0
Universal macOS build (Apple Silicon + Intel).
This build is not signed or notarized by Apple, so Gatekeeper
will refuse it on first launch. After dragging the app to
/Applications, clear the quarantine attribute:
xattr -cr "/Applications/Claude Code Manager.app"(Or right-click the app → Open → Open.) You only need to do
this once per install. Building from source with make install
avoids this entirely.
Full Changelog: https://github.com/zillydev/claude-code-manager/commits/v0.1.0