
Hey everyone,
I've been using cmux as my daily terminal and running Claude Code inside it, and over time the same friction kept showing up — every time an agent asked for permission with a [1] Yes / [2] / [3] No menu, I had to focus the cmux pane to press 1, even when I was reading docs or typing somewhere else. Claude Code does have an auto-approve mode, but I personally prefer to read each command before saying yes — so manual approval it is. After the 50th alt-tab I cleaned up the workaround into a small open-source daemon: lazyack.
https://github.com/AngryCatKR96/lazyack
Install (Homebrew tap):
brew install AngryCatKR96/lazyack/lazyack
Then lazyack run -d to start it in the background. From any app, press Ctrl+Shift+1 while a Claude menu is waiting in cmux.
Here's what it does:
- Global hotkey from any app —
Ctrl+Shift+1(or2/3) hits cmux's Unix socket, finds the unread agent waiting on a numbered menu, and sends the keystroke to that surface without changing focus. - Right-target filtering — classifies cmux's notification body so
1never lands in a free-text Claude prompt you're typing; falls back to pane pattern matching when the notification body is ambiguous. - Consumed-notification tracking — second press routes to the next waiting agent instead of double-firing on the same one.
lazyack doctor— pre-flight checks for cmux socket reachability, hotkey registration, and common conflicts (Karabiner detection, browser tab / macOS screenshot / Spotlight collisions).- Daemon mode —
lazyack run -dsurvives parent-chain auth, PID tracking, log file, plusstatus/stop.
It's pretty specific to macOS + cmux + AI agents, so niche on top of niche — but if you're in that exact overlap, maybe it saves a few hundred alt-tabs a day. Pre-alpha (v0.1.3, single-target routing); tmux backend and multi-session HUD planned. Happy to hear any feedback or ideas.