Real-time dashboard for your Claude Code sessions. See every session at a glance — thinking, running tools, or waiting for your input.
If you run more than one Claude Code session at a time, you know the pain: you start a long task in one terminal, switch to another, and twenty minutes later you realise Claude has been silently waiting for a permission prompt. Aby Claude Watcher keeps every session on screen, notifies you the moment one needs you, and jumps you back to the right terminal in one click.
Built at Aby Agency to solve our own daily workflow — shipped as MIT open source for anyone who ships with Claude.
Micro view — ambient status dots, pinned to a corner
- Auto-detects every Claude Code session running on your Mac (
~/.claude/sessions/) - Five states, color-coded — thinking, running, waiting, error, completed
- Two views — grid and compact list, drag to reorder
- Always-on-top — pin the window over your IDE
- Per-session notifications — in-app toast + sound when a session needs attention
- One-click focus terminal — supports iTerm2, Terminal.app, Warp, VSCode, Cursor, Ghostty, kitty, WezTerm, Hyper
- Resume session from the dashboard
- Remote Control indicator — globe icon when a session exposes a remote URL
- Tool pills color-coded by category (Bash, Read, Edit, Agent, MCP…)
- Cost estimation and token counters per session
- Git branch displayed per session
- Bilingual UI — French and English, runtime switcher
- Menu-bar icon with tray popover summary
- Dock badge for waiting sessions
- Auto-launch at login (opt-in)
- Manual update checker via GitHub releases (no auto-download, no phone-home)
- Download the latest
.dmgfrom Releases - Open it and drag Aby Claude Watcher to
/Applications - Important — first launch: the app is ad-hoc signed (not notarized by Apple). macOS Gatekeeper will block a double-click. Instead:
- Right-click the app in
/Applications→ Open - A warning dialog appears → click Open
- From then on, the app launches normally
- Right-click the app in
Intel (x64) build not yet available — open an issue if you need one.
git clone https://github.com/aby-agency/aby-claude-watcher.git
cd aby-claude-watcher
npm install
npm start # production mode
npm run dev # with devtoolsBuild the .dmg yourself:
npm run build| State | Color | Triggered when |
|---|---|---|
| thinking | purple | Claude is processing a user message |
| running | green | A tool is executing (Bash, Read, Agent…) |
| waiting | blue | Claude finished and is waiting for your input |
| error | red | An error appeared in the session |
| completed | grey | Session ended cleanly |
Two helper binaries live in bin/. Add them to your PATH to make the "Focus terminal" button land in the exact terminal window that started the session:
# in your .zshrc / .bashrc
export PATH="$PATH:/path/to/aby-claude-watcher/bin"Then:
cc # start a new Claude Code session (wraps `claude`)
cwa # resume the last session (wraps `claude --resume`)The wrappers open a Unix socket at /tmp/aby-claude-watcher.sock and register the host terminal's identifier so the app can switch back to it precisely.
| Shortcut | Action |
|---|---|
1–9 |
Focus session 1–9 |
V |
Toggle grid / compact view |
P |
Toggle always-on-top |
/ |
Search sessions |
? |
Show keyboard shortcuts |
Esc |
Close modal / dropdown |
The Focus terminal feature uses AppleScript. On first use, macOS will ask for Automation permission for your terminal app — approve it once in System Settings → Privacy & Security → Automation.
Why is the build unsigned / why does macOS warn me?
Apple Developer ID signing + notarization costs $99/year. Until we commit the budget, we ship ad-hoc signed builds. The right-click → Open trick is the official macOS bypass for unsigned apps and only needs to be done once per install.
Does it send any data over the network?
No telemetry, no analytics, no phone-home. The only outbound call is when you explicitly click Check for updates in Settings — a single HTTPS request to api.github.com/repos/aby-agency/aby-claude-watcher/releases/latest. Everything else runs locally.
Where is my config stored?
~/Library/Application Support/aby-claude-watcher/config.json
Sessions, window position, custom names, notification preferences, language, and auto-launch setting all live there.
How do I uninstall?
- Quit the app (menu bar icon → Quit)
- Drag
Aby Claude Watcher.appfrom/Applicationsto the Trash - Optionally remove
~/Library/Application Support/aby-claude-watcher/
Does it work with claude-code running inside Docker / WSL / a remote SSH?
Only sessions whose JSONL files land in your local ~/.claude/sessions/ are detected. Remote / containerised sessions would need their files bind-mounted here.
Can I contribute?
Yes — issues and pull requests welcome. Read CLAUDE.md for architectural decisions and the state-machine rationale before opening a PR.
main.js Electron main — window, IPC, tray, notifications
watcher.js Session discovery + JSONL parsing + state machine
socket.js Unix socket (cc / cwa wrappers)
focus.js Terminal focus via AppleScript
config.js Persistent config (debounced writes, saveSync on shutdown)
i18n.js Translations (FR / EN) — shared main ↔ renderer
preload.js Context bridge
ui/ Renderer — vanilla HTML/CSS/JS, no framework
bin/ cc / cwa shell wrappers
No build step for the UI, no bundler, no framework. Opening ui/index.html in a browser gets you 90% of the look. The dependency tree ends at Electron itself.
The design decisions (states, polling interval, notification cooldown, waiting delay) are documented in CLAUDE.md.
Built with Electron, iconography inspired by Lucide.
Made with care by Aby Agency — web & AI studio, France.


