ccn is a small program that Claude Code runs through its hooks, on macOS, Windows or Linux. Install it and you get a desktop notification the moment Claude finishes, needs a permission or asks a question. Pair your phone whenever you like, and the same moments also arrive as a push, where you can approve, deny or answer. Nothing runs in the background, and it works in any terminal.
01Install
macOS and Linux
curl -fsSL https://claudecodenotifier.com/web/install.sh | sh
Windows (PowerShell)
irm https://claudecodenotifier.com/web/install.ps1 | iex
Windows support is in beta. winget and Scoop packages are coming.
Homebrew
brew trust --formula touch-tap/tap/ccn && brew install touch-tap/tap/ccn
Anyone with Node.js
npx @touchtap/ccn pair
Each line installs ccn and its hooks, so the next time Claude Code finishes or needs you, a notification appears on this computer. No phone is needed and nothing runs in the background. ccn adds seven entries to ~/.claude/settings.json and leaves everything else in that file as it was. Have a code from the phone app? The lines under Pair your phone install and pair in one go.
02Pair your phone
Pairing is optional and never holds anything up: ccn keeps notifying this computer whether or not a phone is paired. Once one is, every notification also reaches your phone as a push, and you can approve, deny or answer from there. There are two ways to pair.
Scan a QR code from the terminal
ccn pair
Run ccn or ccn pair. It prints a QR code and a link that stay valid for 24 hours: scan the code with your phone's camera, or open the link on the phone. Without the app, the link offers the store first; with it, the phone connects by itself. ccn pair --no-wait prints them and returns at once, so you can carry on working and scan later.
Type the code from the app
ccn pair 482913
Open Claude Code Notifier on your phone and add a computer. The app shows a 6-digit code and the exact line to run, with the code already in it. If ccn is installed, ccn pair followed by the code is enough. Otherwise, each install line takes the code and installs and pairs in one go:
curl -fsSL https://claudecodenotifier.com/web/install.sh | sh -s 482913irm https://claudecodenotifier.com/web/install.ps1 | iex; ccn pair 482913brew trust --formula touch-tap/tap/ccn && brew install touch-tap/tap/ccn && ccn pair 482913npx @touchtap/ccn pair 482913Replace 482913 with the code on your phone. Codes last 24 hours; the app makes a new one when it runs out.
After ten desktop notifications with no phone paired, ccn adds one line suggesting ccn pair. ccn config set pair_nudges off turns it off.
03What you get
On its own, ccn shows a notification on this computer when Claude finishes, needs a permission or asks a question. With a phone paired you also get:
- Claude has finished: a push the moment a turn ends.
- Permissions: allow once, allow for the session, or deny, from the phone.
- Questions: pick an answer when Claude asks you to choose.
- A follow-up: right after Claude finishes, send the next instruction from the phone.
If you have typed in the last 30 seconds, nothing waits: the terminal asks as usual and the phone gets a note. If you are away, the terminal waits for your phone, and stops waiting the moment you touch the keyboard. You can change the timings for each computer in the app.
04Commands
ccn pairShow a QR code and link to pair a phone (valid for 24 hours) and wait for itccn pair CODEPair with the 6-digit code from the appccn pair --no-waitPrint the QR code and link, then return at onceccn doctorCheck the hooks, the pairing and the connectionccn testSend a test notificationccn devicesList paired phones, or revoke oneccn config showShow this computer's settingsccn config set pair_nudges offStop the suggestion to pair after desktop notificationsccn syncFetch settings changed on the phone nowccn upgradeUpdate ccn to the latest version nowccn config set auto_update offTurn off the daily update checkccn unlockBuy a licence and unlock this computer (see Licence)05Licence
A licence bought on claudecodenotifier.com/licence unlocks every phone paired with up to 3 computers. It is held by the computer: you type the key into ccn, never into the phone app.
ccn unlockBuy a licence in the browser and unlock this computer (--lifetime to pay once)ccn activate KEYUse your key on this computer (--replace NAME frees another computer's slot)ccn deactivateFree this computer's slot so the key can be used elsewhereccn licenceShow the plan, renewal date and the computers using the keyWithout a licence, ccn may show one line a day in Claude Code, and a desktop notification, saying how to unlock. CCN_NO_NUDGE=1 turns it off.
06Updates
ccn upgrade
ccn keeps itself current: once a day it checks for a new version in the background and installs it. ccn upgrade updates right away, and ccn config set auto_update off turns the daily check off. If you installed with Homebrew or npm, ccn leaves updating to your package manager and tells you the command to run.
07The Mac app
The Claude Code Notifier Mac menu bar app still works, and it's free. If you prefer an app to a terminal, download it or run brew trust --cask touch-tap/tap/claude-code-notifier && brew install --cask touch-tap/tap/claude-code-notifier. Unlike ccn, it can fire webhooks, and it needs iTerm2, kitty or tmux to reply from the phone. Don't run both on the same Mac, or every notification arrives twice. To switch from the app to ccn, pair with ccn pair CODE --replace-mac-app, which removes the app's hooks, then quit the app.
08Uninstall
ccn uninstall
This removes the hooks from settings.json, revokes the pairings and deletes local state. Then delete the binary: ~/.local/bin/ccn on macOS and Linux, %LOCALAPPDATA%\Programs\ccn on Windows, or brew uninstall ccn.
ccn forget
Erases this computer from the relay server and removes ccn.