ON WATCH
 

Gerald watches Claude Code
so you don't have to.

CooCoo lives quietly in your macOS menu bar — then yells the moment Claude needs your input. Hooks-based, core alerting stays local, six personalities to pick from.

Nice — your download is starting. Check your inbox for updates too.

macOS 14+ · or skip the email and build it from source →

Open source, MIT Runs locally Zero cost
state detection

Every mood Gerald has

These are the real states CooCoo tracks via Claude Code's hook system — not vibes.

six characters

Choose who watches you

Same alerts, same hooks underneath — a different personality reacting to them. Switch anytime in Preferences.

under the hood

No PTY parsing. No spying. Just hooks.

CooCoo taps Claude Code's own hook system — the same mechanism Anthropic ships for this exact purpose.

  1. 1

    Claude Code fires a hook

    PreToolUse, Notification, or Stop — registered in your own ~/.claude/settings.json, visible and editable by you.

  2. 2

    A tiny local script fires back

    One JSON packet, sent to 127.0.0.1:47291 — your machine talking to itself. Nothing leaves the loopback interface.

  3. 3

    Gerald reacts

    Menu bar icon animates, a coo sound plays, a native notification appears — filtered so idle chatter doesn't cry wolf.

~/.claude/settings.json
  "Notification": [{ "command":
    "coocoo-notify.py waiting" }]
 
→ JSON over tcp://127.0.0.1:47291
 
● notification_type: permission_prompt
└ Gerald: "COO COO!! OI!! HOOMAN!!"
On privacy: the core alerting feature needs no internet connection at all. CooCoo does send anonymous Firebase Analytics events (app launches, state changes, character picks) to understand basic usage — you can read exactly what's collected in Analytics.swift, same as everything else here.