DEV Community

Claude Code Notifier
Claude Code Notifier

Posted on

How I Stopped Losing Time to Stalled Claude Code Sessions

How I Stopped Losing Time to Stalled Claude Code Sessions

Two months ago I ran an experiment. For one week, I tracked every time I came back to my terminal and found Claude Code waiting for my input. Not working. Not thinking. Just... waiting.

Average wait time before I noticed: 34 minutes.

Over a typical 8-hour day with 4-5 Claude Code sessions, that's over 2 hours of dead time. Not Claude's time - mine. The AI was ready to keep going. I was the bottleneck.

The problem nobody talks about

Claude Code is the most productive developer tool I've ever used. But it has a fundamental interaction pattern that creates a hidden tax on your time:

  1. You start a task
  2. Claude works autonomously
  3. Claude hits a point where it needs your input (permission to edit a file, confirmation to proceed, a decision about approach)
  4. You don't know this has happened
  5. Time passes
  6. You eventually check your terminal
  7. You respond
  8. Claude resumes

Steps 4-6 are where productivity goes to die. And with each new Claude model release bringing more autonomous capabilities - sub-agents, bigger context windows, better reasoning - sessions are getting longer and permission prompts are firing at less predictable times.

What I tried first

DIY notifications with ntfy.sh: Worked, but required maintaining a shell script, wrapping the claude command, and didn't know when to stay quiet. I'd get buzzed while actively staring at my terminal.

Polling my terminal: Old habits die hard. I'd alt-tab every few minutes to check. This is the worst solution because it interrupts whatever else I'm doing.

Just accepting it: This is what most people do. It's also what I did for months before doing the math on wasted time.

The insight that changed everything

The notification isn't the product. Ambient productivity recovery is the product.

What I mean: the value isn't in the "ding." It's in the 34 minutes you get back because you responded in 30 seconds instead of 34 minutes.

Over a month, that's roughly 40 hours. A full work week.

But here's the second insight, and this is the one that matters for building a tool that people actually keep: the notification has to be smart enough to shut up.

If you're already looking at your terminal, a notification is noise. It's worse than useless - it trains you to ignore notifications, which means you'll miss the ones that actually matter.

What I built

I built Claude Code Notifier, a free macOS menu bar app that solves this properly. Here's what "properly" means:

Smart suppression

The app monitors which application is in the foreground. If your terminal (iTerm2, Kitty, Terminal, Warp, Alacritty, Ghostty, or any of 15+ supported terminals) is the active app, notifications are suppressed.

This is the single most important feature. It's the difference between a useful tool and an annoying one. No other Claude Code notification tool does this.

Zero-config hooks

Earlier versions required users to manually add hook scripts to their Claude Code configuration. Conversion was terrible - even a 2-minute setup process loses most people.

Now, hooks install automatically. The app writes a Python one-liner into Claude Code's ~/.claude/settings.json that enriches hook payloads with terminal context and pipes them to a local Unix domain socket. No wrapper commands. You keep using claude exactly as you do now.

Multi-session awareness

If you're running 3 Claude Code sessions across different terminal windows, the app tracks all of them independently. The menu bar icon shows a count of sessions waiting for input. Click it to see which ones need attention.

Mobile companion

This is the feature that surprised me most in terms of usage. When you're away from your desk - in a meeting, at lunch, on the couch - you can still respond to Claude Code permission prompts from your phone.

The iOS and Android companion apps receive push notifications and let you approve or deny with a tap. A Cloudflare Workers relay handles the push delivery.

Everything else

  • Configurable reminders: If you don't respond within X minutes, get reminded
  • Quiet hours: Suppress notifications during sleeping hours
  • Webhook integration: Forward to Slack, Discord, or custom endpoints
  • Session analytics: Track response times, session durations, daily stats

The technical decisions

For the developers reading this, a few decisions that shaped the architecture:

Unix domain sockets for IPC. Claude Code's hook system can pipe data to external processes. I considered HTTP (localhost server), but Unix sockets have no port conflicts, no firewall issues, and are faster for local communication. The socket lives at /tmp/ccn-{uid}.sock.

Native Swift, not Electron. This is a menu bar utility. It should use negligible resources and feel like part of the OS. SwiftUI for the interface, SwiftData for session persistence, Combine for reactive state. The entire app is under 20MB.

Protocol-based architecture. Every service and repository has a protocol, with live implementations and mock implementations. This makes previews work properly and makes the codebase testable.

Timing

Two things make this especially relevant right now:

  1. Claude Code sessions keep getting longer and more autonomous. Sub-agents, larger context windows, and smarter models with every release mean more permission prompts at less predictable times. And with a new Sonnet model rumored to be imminent, this trend is accelerating.

  2. Xcode 26.3 just shipped with native Claude Agent SDK integration. A wave of Swift/iOS developers are about to start using Claude Code's agentic capabilities for the first time.

If you're using Claude Code without notifications, you're leaving productivity on the table. And the gap is about to get wider.

Try it

The Mac app is completely free. The mobile companions offer a few free responses, then a subscription for unlimited. The mobile subscription is how I fund the project.

I'd love to hear how other people handle this problem. Are you a terminal-starer? A periodic checker? Do you have a DIY notification setup? What would make a tool like this more useful for your workflow?

Top comments (1)

Collapse
 
ccnotifier profile image
Claude Code Notifier

Happy to answer any questions about the architecture or feature requests