cc-notifynub: A Pixel-Art Companion for Claude Code in tmux

cc-notifynub: A Pixel-Art Companion for Claude Code in tmux

My daily setup: Ghostty terminal, tmux, and multiple Claude Code instances, each in its own tmux window, each working on a different feature. In each window I keep Neovim side by side for review.

The problem? Jumping between windows with Ctrl+A + window index to check if Claude is done yet. Or worse, realizing minutes later that Claude has been waiting for permission to run a command while I was focused on something else entirely.

Yes, Claude Code now has an auto mode that skips permission prompts entirely. But if you prefer to stay in control and review what Claude does before it acts (which I do), you’ll be dealing with permission prompts regularly. Claude Code also supports native desktop notifications in terminals like Ghostty and Kitty, but when you’re running multiple instances across tmux windows, a macOS notification that says “Claude needs attention” doesn’t tell you which one, and you still have to find the right window manually.

That’s why I built cc-notifynub, a pixel-art notification overlay that pops up right inside tmux, shows me which window needs attention, and lets me jump there with a single Enter keystroke.

Demo & Source Code

Source code: GitHub Repo

How It Works

Instead of actively monitoring each Claude Code session, NotifyNub handles the routing:

  1. You start Claude Code tasks in multiple tmux windows
  2. You focus on reviewing or coding in [5:feature/auth]
  3. A popup appears in the top-right corner: Claude in [7:docs/readme] needs permission to run Bash
  4. You press Enter and tmux jumps you straight to that window
  5. You approve, give the next instruction, and switch back to [5:feature/auth]
  6. Another popup: [6:fix/cart-total] is done. You review when you’re ready

NotifyNub is a small pixel-art character rendered with ANSI colors. It has two states:

     ▄▄▄▄▄              ▄▄▄▄▄
    █ ▲ ▲ █            █ ▓ ▓ █
    █ ▄▄▄ █            █  ▄  █
    ▀▀▀▀▀▀▀            ▀▀▀▀▀▀▀

     Done            Permission

Press Enter to jump to the source window, or q to dismiss.

NotifyNub Permission State

NotifyNub Done State

Getting Started

Note: I developed and tested cc-notifynub on macOS with Ghostty and tmux.

Prerequisites

Install

Add the marketplace source and install the plugin:

/plugin marketplace add konstantindenerz/cc-notifynub
/plugin install cc-notifynub@cc-notifynub

The hooks are registered automatically.

Test It

Trigger a test notification without waiting for Claude to finish:

~/.claude/plugins/marketplaces/cc-notifynub/scripts/notify.sh --test
~/.claude/plugins/marketplaces/cc-notifynub/scripts/notify.sh --test permission

Under the Hood

The entire plugin is a single bash script (~130 lines) with zero external dependencies, not even jq. It hooks into Claude Code via two hooks: Stop (task finished) and Notification with the permission_prompt matcher (tool approval needed).

A few things worth highlighting:

The full source is on GitHub. It’s short enough to read in one sitting.

What’s Next

Right now, a new notification replaces any popup that’s already on screen. If two Claude instances finish at the same time, you’ll only see the second one. In practice this rarely causes issues because the timing usually doesn’t overlap, but it’s something to be aware of. A notification queue is on the list for a future version.

Conclusion

If you’re running multiple Claude Code instances in tmux and want to stay in your flow, give NotifyNub a try: GitHub.