u/Beginning_Classic570

▲ 2

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 appCtrl+Shift+1 (or 2/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 1 never 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 modelazyack run -d survives parent-chain auth, PID tracking, log file, plus status / 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.

u/Beginning_Classic570 — 13 days ago