If you've ever found yourself frantically cycling through half a dozen terminal tabs trying to figure out which Claude Code agent is blocked on a permission prompt or waiting for input, manelrv's new open-source app CCTV deserves your attention. The macOS menu-bar utility gives you a single always-on-top window that displays the live state of every Claude Code instance running on your machine โ whether that's working, waiting for approval, waiting for input, done, or failed. The magic lies in how CCTV monitors sessions without slowing anything down. It uses a hybrid approach: background sessions launched with claude --bg are tracked via file watchers that read the state.json files Claude Code's supervisor persists under ~/.claude/jobs/. Foreground sessions get their own treatment through HTTP hooks that POST to a local server embedded in the app, responding instantly and never adding latency to your workflow. The architecture is Rust-powered under the hood โ built with Tauri 2 โ while the UI runs as a React webview. The urgency ordering is worth highlighting: waiting for permission takes top priority, followed by waiting for input, then error states, working sessions, no signal, idle, and finally completed ones. That blocked agent you actually need to deal with floats straight to the top of the list automatically. Hit Cmd+Shift+Space and focus jumps directly to that session's terminal tab โ no manual hunting required. Beyond the core monitoring, CCTV packs in a dynamic tray icon (calm/alert variants plus a numeric attention counter), per-session context-window occupancy meters with amber/red thresholds so you know who's about to run out of room, desktop notifications that alert once per agent when it starts needing you (no spam), and an NSPanel that floats above fullscreen apps without stealing focus. The app supports eight languages โ English, Spanish, Portuguese, German, French, Italian, Catalan, and Russian โ with auto-detection or manual pinning from the tray menu. Installation is currently via Homebrew cask: brew install --cask manelrv/tap/cctv, followed by an xattr -dr com.apple.quarantine /Applications/CCTV.app step. That extra command exists because CCTV isn't signed or notarized yet โ Gatekeeper quarantine blocks the app on first install. The developer notes notarization is on the roadmap, so once that lands, this workaround disappears. You can also build from source if you've got Node.js 18+, Rust, and Tauri 2's platform deps. Foreground session hooks require a small config merge: drop the hooks key from hooks/settings.snippet.json into your ~/.claude/settings.json, and every new terminal session appears in CCTV automatically. Background sessions need zero setup โ they show up out of the box thanks to that file watcher watching ~/.claude/jobs/. The project is marked as functionally complete on macOS with 57 passing tests, a full Rust test suite covering state machine logic and reaper cleanup, and a release pipeline that ships both Homebrew cask updates and universal .dmg files on every git tag. The roadmap next includes signing + notarization to eliminate the quarantine workaround, followed by Linux/Wayland support (Hyprland rules already drafted in the architecture docs) and eventually Windows.
Key Takeaways
- CCTV eliminates terminal tab-hopping when managing multiple Claude Code agents simultaneously
- Hybrid monitoring: file watcher for bg sessions + HTTP hooks for foreground terminals โ zero latency impact
- Global hotkey Cmd+Shift+Space jumps focus to whichever agent needs you most, in urgency order
- Built with Tauri 2 (Rust/React), currently unsigned requiring a one-time xattr workaround on macOS
The Bottom Line
This is the kind of utility that feels obvious only after you've used it โ if you're running more than two Claude Code agents at once, CCTV is practically essential. The urgency-sorted focus jump alone saves enough context-switching to pay for the install time tenfold. For developers wanting to dig into the internals, full architecture docs live in docs/ARCHITECTURE.md, data source details in docs/DATA-SOURCES.md, and a complete worklog tracking every decision in WORKLOG.md.