Releases: aby-agency/aby-claude-watcher
v1.7.2 — Toast notifications in compact view
Fixed
- Toast notifications now appear in compact view even when the bell is off. Previously, the toast overlay was gated on the per-session bell preference at the main-process level, so users in compact view who hadn't enabled the bell got no visual signal on
waiting/pendingtransitions. The IPC now fires unconditionally and the renderer gates by view mode: compact always shows the toast, grid keeps the bell-gated behaviour (unchanged), micro still skips the overlay (window too small). In compact view, the bell now controls only sound + native OS notifications.
The CHANGELOG also retroactively documents 1.7.0 and 1.7.1.
Downloads
- Apple Silicon:
Aby.Claude.Watcher-1.7.2-arm64.dmg - Intel:
Aby.Claude.Watcher-1.7.2-x64.dmg
v1.7.1 — Color semantics rework + compact branch truncation fix
What changed
State colors now match the what needs my attention? mental model rather than the what is the process doing? one. The result: only one state pops visually, and it's the one that actually demands action.
New color mapping
| State | Color | Meaning |
|---|---|---|
| thinking | 🟣 violet | Claude is reading your prompt |
| running | 🔵 blue | Claude is executing tools (in progress) |
| waiting | 🟢 green | turn finished, idle |
| pending | 🟡 amber | permission prompt — action required |
| error | 🔴 red | API error or silent crash |
Amber is now reserved for the one state where Claude is genuinely blocked on your input. Everything else is either active work (blue) or done-for-now (green), so the dashboard reads as "is anything amber? then go look" instead of forcing you to scan the whole list.
Fixes
- Compact card spinner/label color — the CSS selector targeted
.compact-meta-state, a class that didn't exist in the DOM, so the active-state coloring never applied. Spinner now correctly inherits the running-state color. - Compact card branch truncation —
.branch-valuehad a hardmax-width: 100pxthat was intended for the detail-card variant but bled into the compact view, ellipsing branch names well before the row ran out of space. Now scoped properly; compact view uses the full available width.
Install
Download the DMG matching your Mac (Apple Silicon = arm64, Intel = x64) and drag the app to /Applications.
v1.7.0 — Detect Claude Code subagents in live sessions
What changed
The app now detects background subagents dispatched from monitored Claude Code sessions and displays them as nested rows under the parent session card. When Claude launches an Agent with run_in_background: true (think parallel SEO audits, multi-role UI reviews, anything fan-out), each live subagent shows up as its own green row tagged with the agent type and description — and disappears as soon as it finishes. Works in all three views (grid, compact, micro).
No setup. No hooks to install. The watcher reads the same per-session JSONL transcripts Claude Code writes anyway (~/.claude/projects/<project>/<session>/subagents/agent-*.jsonl).
Added
subagents.js: scan the per-sessionsubagents/directory, derive each agent's state (running/completed/error) from its JSONL tail + mtime, expose aSubagentTracker.snapshotForSession()API.watcher.js: capture everyAgenttool_use from parent JSONLs intosession.agentDispatches, joiningtoolUseIdto each subagent'smeta.jsonso we can filter background vs. foreground.main.js: extendserializeSession()with asubagents: []payload (no new IPC channel — rides along with existing session updates).- Renderer: nested sub-rows under
cardHTML,compactItemHTML,microItemHTML, with view-tuned styling (full row in grid, type-pill drop in micro for density). - 25 new unit tests covering meta parsing, tail-read with huge-line safety, state derivation matrix, scan filtering, and the watcher's
agentDispatchescapture.
Filter behaviour
Only background + currently running subagents are shown. Foreground dispatches and completed/errored agents are intentionally hidden — they'd clutter the parent card without adding signal. The dispatch metadata is still tracked in memory if you want to surface them later via a toggle.
Install
Download the DMG matching your Mac (Apple Silicon = arm64, Intel = x64) and drag the app to /Applications.
v1.6.1 — popover height fix
Fixed
- Popover height stuck regardless of session count — the tray popover measured
.popover-body.scrollHeightto auto-resize, but that element hasheight: 100vh+overflow: hiddenand its scrollable child (.popover-list) scrolls internally without pushing the parent.scrollHeighttherefore always returned the current window height, so opening the popover with 1 session or 15 sessions produced the exact same ~360px window. Height is now computed fromheader.offsetHeight + popList.scrollHeight + footer.offsetHeight + 2px(body borders) so the window grows up to the existing 600px clamp before the inner list takes over scrolling.
Downloads
Aby Claude Watcher-1.6.1-arm64.dmg— Apple Silicon (M1/M2/M3/M4)Aby Claude Watcher-1.6.1-x64.dmg— Intel Macs
v1.6.0 — Live-only: drop completed/resume/clear, fix notif spam
What changed
The app now monitors only live Claude Code sessions. When a session ends, it disappears instantly — no more grey "completed" cards, no "Old sessions" divider, no resume modal. The value prop becomes "ambient awareness of what Claude is running right now"; for history or resume, the claude CLI itself is more reliable.
Removed
- Completed state: dark-grey cards, "Anciennes sessions" / "Old sessions" divider, dirty config entries from older versions are migrated out on first launch.
- Resume flow: the play button on completed cards, the modal with
--dangerously-skip-permissionstoggle, and the IPC + AppleScript machinery behind it. - Clear-completed: the "Tout effacer" / "Clear all" button and its confirmation modal.
- ~250 lines of related code, i18n strings (
state_completed,action_resume,resume_*,clear_completed_*,sessions_old_label), CSS,endedAt/wasResumedfields.
Changed
- Notification cooldown now resets only when state goes to
thinking(= a real user prompt landed). A Claude tool-loopwaiting → running → waitingno longer re-rings the bell every cycle. One ding per "Claude is waiting for you" episode. - Error sessions stay visible with a manual X button — the only non-active state still surfaced in the UI.
Install
Download the DMG matching your Mac (Apple Silicon = arm64, Intel = x64) and drag the app to /Applications.
v1.5.10 — Notifications overhaul + AskUserQuestion PENDING in bypass
Notifications overhaul
- Sound themes
- Persistent bell indicator
- Banner toast
- Ghostty terminal focus support
Watcher state fix
AskUserQuestionandExitPlanModenow correctly mark sessions as PENDING (orange) even inbypassPermissionsmode- Hook payload carries
tool_nameso the watcher can distinguish interactive tools from regular permission prompts Notificationhook coversidle_promptfallback (60s safety net)- User-level hooks now installed in
~/.claude/settings.json(was.local.jsonwhich Claude Code doesn't load at user scope)
DMGs
- arm64 — Apple Silicon (M1/M2/M3/M4)
- x64 — Intel Mac
v1.5.9 — Direct interactions: click=focus, name=rename, no context menu, no +
This is a UX-driven cleanup release. The cards lost about half their
controls and the codebase about 200 net lines, while the experience
becomes more direct: one click on a card opens its terminal, one click
on the name renames it inline, no context menus, no "+" to add sessions
manually, no remote-control bouton.
Removed
- Remote-control feature —
session.remoteUrl, the globe button on
cards, the context-menu entry, and the watcher'sbridge_statusevent
detection are gone. The internalopen-remoteIPC stays as the
underlying transport foropenExternalUrl(still used for the GitHub
link in About). - Manual "Add session"
+button — the toolbar action and its modal,
along with theadd-session/launch-sessionIPC, the
watcher.addSession()method, andfocus.launchSession(). Sessions
are auto-detected; the empty state now reads "Lancezclaudedans un
terminal — les sessions apparaissent ici automatiquement". - Rename modal — replaced by inline rename (see Added).
- Right-click context menu —
showContextMenu/hideContextMenu,
the<div class="context-menu">placeholder, theoncontextmenu
attribute on cards, and the global click listener that hid the menu.
Every action that lived there is now reachable directly: focus
terminal = click on the card, rename = click on the name, resume /
delete = the existing buttons on completed/error cards. - Terminal
>_button and "more"⋯button on macro and compact
cards. Card click handles focus. X sessions activesheader above the list (was a 1.5.7 add).- Session slug display on cards (the small grey hex string under the
name).handleCopyIdis left as dead code for now. - Pointer cursor on hover of
.card/.compact-card(it implied
reorder), and thecursor: grabon draggable cards.cursor: grabbing
is kept while a drag is actively happening.
Added
- Inline rename — hover the project name and a pencil icon fades in;
click to convert the span into an<input>in place. Enter saves,
Esc cancels, blur saves. Skips the IPC roundtrip if the value didn't
change. - Multi-window VS Code / Cursor focus — the editor case in
focus.js
was rewritten aroundopen -a "<App>" "<cwd>". macOS LaunchServices
routes the call to the window that already has that workspace open, so
clicking a card reliably brings the right Code/Cursor window forward
even when several windows are open. Crucially, this needs no
Accessibility nor Automation permission, which the previous
System Events/AXRaiseapproach did, and which broke during
npm run devbecause the dev Electron binary wasn't authorised. detectTerminalFromPidreadsps -o command=in addition to
comm=. The truncatedcomm=is justElectronfor both Code and
Cursor main processes; the full command path
(/Applications/Visual Studio Code.app/...) reliably distinguishes
them.
Changed
- Compact view layout is now 3 lines:
name + actions/état · outil/branch. The branch line wraps freely when the name is long
(no more ellipsis cutting it off — there's room on its own line). - Status bar typography unified — every label, percentage, reset
countdown and clock icon now inherits the bar's10 px / text-muted,
matching the5h/7Dlabels. One source of truth in.status-bar. - Card click = focus terminal (single click) on macro and compact
cards, matching the existing micro behaviour. Buttons inside the card
callevent.stopPropagation()so they keep their own actions.
v1.5.8 — Compact mini-cards + Settings modal anchored
Changed
- Compact view → mini cards — the previous compact view was a single
line per session that landed visually almost on top of the micro view.
It's now a true intermediate density: a small card with a header
(project + slug + actions) and two metadata lines (state · duration ·
tool · tokens, then branch · model). The list uses the same
responsive auto-fill grid as the macro view but with narrower
minimum (260 px vs 320 px), so a typical 13" screen fits 8-10 cards
vs 3-4 in macro. Macro and micro views are unchanged. - Settings modal: fixed content height — the modal used to resize
itself depending on which tab (Général, Notifications, À propos) was
active. Cycling through tabs forced you to chase the tab buttons with
the mouse. The content area is now a fixed 440 px with internal
scrolling for tabs that overflow, so the tab row stays anchored.
v1.5.7 — Active count, old sessions divider, modal refresh
Added
- Active-session count header above the list (
X active sessions) so a
glance at the dashboard tells you immediately how busy you are. - Old sessions divider — completed sessions are now visually separated
from active ones with a divider that includes a Clear all button. A
confirmation modal protects against fat-finger purges. The clear only
removes sessions from the dashboard's view (and their custom names /
notification preferences); the underlying Claude Code session files on
disk are untouched, soclaude --resumestill works. - About panel describing what the app does — replaces the keyboard
shortcuts modal in the toolbar's "?" button.
Changed
- Update check cadence — first check at startup is now 10 s (was 30 s),
and the app re-checks every 2 hours while it's running (previously only
on launch). The internal 1 h rate limit on the manual "Check" button is
unchanged. - Removed Cmd- keyboard shortcuts* (⌘1-9, ⌘G, ⌘P, ⌘F, ⌘?). They were
rarely used, took inventory in the modal that was better spent on app
context, and added behaviour that interfered with macOS Cmd-key
conventions. Esc still closes any open modal — that's UX
baseline, not a "shortcut".
v1.5.6 — Update banner polish
Changed
- Update banner padding and typography — the "Installer maintenant"
button felt cramped, especially during the long-text states
("Téléchargement 47 %", "Installation et redémarrage…"). Roughly
doubled the button's vertical padding, bumped font sizes by 1 px,
addedfont-weight: 500andwhite-space: nowrapso the label
doesn't wrap, and gave the banner itself more breathing room
(gap 12→16, padding 8/14→12/20). Hover now lifts the button by 1 px
for tactile feedback.