anotifier / guides / ccnotify
[ GUIDE · CCNOTIFY ]
Claude Code logo

ccnotify for Claude Code: which one is which?

There is no single ccnotify. At least seven unrelated open-source projects use the name, and all of them send Claude Code notifications. The best known, dazuiba/CCNotify, is a macOS-only Python script built on terminal-notifier. The ccnotify package on npm is a different tool that writes Stop hooks for Discord, ntfy and macOS. The ccnotify package on PyPI is a third, and it speaks its notifications aloud. Four newer projects are a Rust binary for Windows, macOS and Linux, a Go command line tool for macOS, and two tray or menu-bar apps. To find yours, look at the ccnotify entry in ~/.claude/settings.json and match it against the table below. anotifier is a separate project and none of these; the comparison further down says where each of them does something anotifier doesn't.

Rather skip the manual setup? One command wires every agent you have installed to desktop toasts, phone push, and Slack, Discord or Telegram:

$ npx anotifier@latest setup

Updated 2026-10-15 · also see the Claude Code notifier and the full docs

Which projects are called ccnotify?

Everything below comes from each project's own README, source or registry page, read on 2026-10-12 (links in the last section). Star counts and dates are from that day.

ProjectWhat it doesHow it installsClaude Code hooks it usesLast activity
dazuiba/CCNotify (216 stars, MIT)macOS desktop notifications when Claude finishes or needs input, including how long the task took. Clicking one opens the project in VS Code. macOS only.By hand: put ccnotify.py in ~/.claude/ccnotify/, run brew install terminal-notifier, add three hooks to settings.jsonUserPromptSubmit, Stop, NotificationLast commit 2025-10-14
foxytanuki/ccnotify (npm ccnotify, MIT)A command line tool that writes a Claude Code Stop hook for you, in three flavors: a Discord webhook, an ntfy topic, or a macOS notification. The shell scripts it generates read the session transcript, so the message carries your prompt and Claude's reply.npx ccnotify discord <webhook-url>, npx ccnotify ntfy <topic> or npx ccnotify macos, or npm install -g ccnotifyStopnpm 0.1.1, 2025-07-31
Helmi/CCNotify (PyPI ccnotify, MIT)Spoken notifications. Text-to-speech, either local Kokoro models (about 350 MB) or ElevenLabs, says when your input is needed, when a task is done, and when a risky command or an error comes up. Its README says it is tested on macOS only.uvx ccnotify installPreToolUse, PostToolUse, Stop, SubagentStop, NotificationPyPI 0.1.13, 2025-08-10; last commit 2026-02-16
MoYeRanqianzhi/CCNotify (Rust, MIT)A small binary that shows a native notification with a sound when Claude finishes: a toast on Windows, osascript on macOS, notify-send on Linux. A second build plays a custom audio file.Download a binary from its releases, or cargo build --releaseStopv0.2.0, 2026-04-25
tez-Szymon/CCNotifyA tray app for macOS 13+ and Windows 10/11, with WSL support. A clickable banner appears when a session needs attention, and clicking it returns you to the terminal. Optional iPhone alerts through an installable web app and a relay at ccnotify.pl.Build from source, or a Windows installer from its releases; then use Install Hook in the tray menu or --install-hookpermission_prompt and idle_prompt handlers (the Notification event)v0.2.0, 2026-07-01
daniil4545/ccnotify (Go, MIT)macOS notifications that name the project and the event, grouped per session, with cooldowns so it doesn't repeat itself. Clicking one raises the window that holds the project. A ccnotify doctor command checks the setup.go install github.com/daniil4545/ccnotify/cmd/ccnotify@latest, brew install terminal-notifier, then ccnotify initStop, Notificationv0.1.0, 2026-09-02
dmxj/ccnotify (Swift, MIT)A macOS 13+ menu-bar app for Claude Code and Codex CLI. Approval cards let you Allow, Deny or allow for the session without going back to the terminal, and AskUserQuestion prompts become buttons. The app's interface is in Chinese. It listens on 127.0.0.1 only.A .pkg from its releases (not Apple-signed, so right-click, Open the first time), or ./build.shClaude Code: PermissionRequest, PreToolUse (only AskUserQuestion), Notification, Stop, StopFailure, SessionStart, SessionEndv0.3.0, 2026-09-01

ningjiaen123/CCNotify-Windows is a Windows port of dazuiba's script that uses the winotify Python package. Searching GitHub for the name turns up more repositories, mostly with no stars and no description; this page covers the ones with a README that says what they do.

How do I tell which ccnotify I have?

Search the files Claude Code reads hooks from for the word ccnotify. Check ~/.claude/settings.json, and in a project .claude/settings.json and .claude/settings.local.json; foxytanuki's tool writes to the local file by default. Inside Claude Code, /hooks lists every active hook and where it came from.

# macOS, Linux, WSL, Git Bash
grep -n ccnotify ~/.claude/settings.json

# Windows PowerShell
Select-String -Path "$HOME\.claude\settings.json" -Pattern ccnotify

# Installed as a package?
npm ls -g ccnotify
pip show ccnotify
What you findWhich project
~/.claude/ccnotify/ccnotify.py followed by an event name (Stop, Notification, UserPromptSubmit), and ccnotify.db and ccnotify.log in that folderdazuiba/CCNotify (or the Windows port, which runs it with python)
uv run …/ccnotify.py with no event name, on five events, and a config.json in ~/.claude/ccnotify/Helmi/CCNotify, the PyPI package
A Stop entry whose matcher is discord-notification, ntfy-notification or macos-notification, pointing at a .sh script under ~/.local/share/ccnotify/ by defaultfoxytanuki/ccnotify, the npm package
A ccnotify executable, usually with -t, -b or -s options, on StopMoYeRanqianzhi/CCNotify
permission_prompt and idle_prompt handlers that run CCNotify.app or CCNotify.exe, and a settings.json.ccnotify-backup file next to your settingstez-Szymon/CCNotify
A ~/.config/ccnotify/config.json file, and ccnotify doctor works in a terminaldaniil4545/ccnotify
A ~/.ccnotify/ folder holding ccnotify-hook, entries that mention ccnotify-hook, and a bell icon in the menu bardmxj/ccnotify

dazuiba's and Helmi's tools both keep a script at ~/.claude/ccnotify/ccnotify.py, so installing one overwrites the other's file. The hook command tells them apart: Helmi's starts with uv run and passes no event name, dazuiba's ends with the event name.

How do the ccnotify tools compare with anotifier?

A dash means the project's README doesn't mention it, which isn't proof it can't. The anotifier row follows the code and docs for version 1.7.1.

ToolAgentsOSChannelsPhone pushSoundClick to focusApprove from the notification
anotifierClaude Code, Codex CLI, Cursor, Gemini CLI, Antigravity CLIWindows, macOS, Linux, WSLDesktop toast, ntfy, Slack, Discord, Telegram or generic webhook, terminal bellYes, through ntfy (Android and iOS)Per-event toast sounds (Windows names, mapped on macOS), terminal bellWindows onlyNo, not in a release
dazuiba/CCNotifyClaude CodemacOSDesktop (terminal-notifier)—System default soundOpens the project in VS Code—
foxytanuki/ccnotifyClaude CodemacOS, Linux and Windows per its README; the hooks are bash scripts that need jq and curlDiscord webhook, ntfy (public ntfy.sh), macOS notificationYes, through ntfy.shmacOS: system sound——
Helmi/CCNotifyClaude CodeTested on macOS; the package metadata also lists LinuxDesktop notification, spoken audio (Kokoro or ElevenLabs)—Spoken messages——
MoYeRanqianzhi/CCNotifyClaude CodeWindows 10/11, macOS, LinuxNative OS notification—OS default sound; a custom file in the sound build——
tez-Szymon/CCNotifyClaude CodemacOS 13+, Windows 10/11, WSLDesktop banner, iPhone web pushiPhone only, through its own web app and relay—Yes, back to the originating terminal—
daniil4545/ccnotifyClaude CodemacOSDesktop (terminal-notifier, or plain osascript without click)—Set per event (macOS system sound names)Yes, raises the window that holds the project—
dmxj/ccnotifyClaude Code, Codex CLImacOS 13+On-screen cards—Per-category soundsYes, window and tab (Terminal, iTerm2, tmux)Yes: Allow, Deny, or allow for the session

Where a ccnotify tool does something anotifier doesn't:

  • dmxj/ccnotify lets you approve or deny a tool call from the notification card. anotifier 1.7.1 only alerts you; there is no approval feature in a release.
  • Helmi/CCNotify speaks, and it watches tool use (PreToolUse, PostToolUse) for risky commands and errors. anotifier plays a sound or rings the bell but never speaks, and it alerts on turn end and needs-input only.
  • dazuiba/CCNotify puts how long the task took in the banner, and its click opens the project in VS Code on macOS. anotifier shows no duration, and its click-to-focus works on Windows only.
  • tez-Szymon, daniil4545 and dmxj return you to the terminal when you click a macOS banner. tez-Szymon does the same on Windows and sends iPhone alerts through a web app, so you don't need the ntfy app, and it waits until your computer has been idle for 15 seconds before it forwards one.
  • daniil4545/ccnotify can mute permission and idle banners while the window is focused. anotifier has no foreground-window muting; it has snooze and quiet hours, which silence every channel.

Where anotifier covers different ground: Codex CLI, Cursor, Gemini CLI and Antigravity CLI alongside Claude Code; desktop toasts on Windows, macOS, Linux and WSL; phone push through ntfy; Slack, Discord, Telegram and generic webhooks; one shared config file; anotifier doctor to check delivery; and no npm dependencies. Which tool fits depends on what you need. If you only use Claude Code on a Mac and want a banner that opens VS Code, dazuiba's script does that with little to install. If you came for ccnotify's Discord hook, the Discord page shows how anotifier posts there.

How do I switch to anotifier, or run both?

To switch, remove the ccnotify hooks first, then run anotifier's setup. Whether a project documents its own removal:

ProjectRemoval
dazuiba/CCNotifyDocumented: delete the hook commands that mention ccnotify from ~/.claude/settings.json, then rm -rf ~/.claude/ccnotify
foxytanuki/ccnotifyNo uninstall command in its README. Remove its Stop entries from the settings file; the scripts it generated are in ~/.local/share/ccnotify/. It backs the settings file up before each change
Helmi/CCNotifyNo uninstall section in its README. Remove the entries that run ccnotify.py from settings.json; ~/.claude/ccnotify/ holds its script and config
MoYeRanqianzhi/CCNotifyNo uninstall section in its README. Remove its Stop entry
tez-Szymon/CCNotifyDocumented: run the app with --uninstall-hook (/Applications/CCNotify.app/Contents/MacOS/CCNotify --uninstall-hook on macOS, .\CCNotify.exe --uninstall-hook on Windows)
daniil4545/ccnotifyNo uninstall section in its README. Remove its entries from settings.json; ccnotify init left a .bak of the file it changed
dmxj/ccnotifyDocumented: turn off its login item, trash CCNotify.app, delete the entries that mention ccnotify-hook from ~/.claude/settings.json (and ~/.codex/hooks.json), delete ~/.ccnotify/
npx anotifier@latest setup    # wires Claude Code and any other agent it finds
npx anotifier@latest status   # confirms which hooks it wrote
npx anotifier@latest test     # sends a test notification down every channel

Restart Claude Code afterwards so it reads the new hooks. Setup adds its own Notification and Stop entries to ~/.claude/settings.json (after backing the file up) and leaves your other hooks alone.

To run both, remember that hooks from different tools add up: if both are on Stop, both fire, and you get two notifications. Give each tool its own channel. This anotifier config keeps ccnotify's desktop banner as the only one and uses anotifier for phone push alone:

{
  "toast": {
    "enabled": false
  },
  "terminalBell": {
    "enabled": false
  },
  "ntfy": {
    "enabled": true
  }
}

Put that in ~/.anotifier/config.json; anything you leave out keeps its default. anotifier's duplicate guard collapses repeated fires of its own hook only, and snooze silences all of anotifier's channels, so neither stops another tool's banner. The ccnotify tools only hook Claude Code, except dmxj's, which also hooks Codex; for Cursor, Gemini CLI and Antigravity CLI there is nothing to double up.

Sources

Each ccnotify claim above comes from the project's own README, source code or registry page, read on 2026-10-12. Projects change, so confirm anything you rely on there.

ccnotify: common questions

What is ccnotify?

It is a name shared by several unrelated open-source tools that notify you about Claude Code: a macOS Python script (dazuiba/CCNotify), an npm package that writes Stop hooks for Discord, ntfy and macOS (foxytanuki/ccnotify), a PyPI package that speaks notifications (Helmi/CCNotify), a Rust binary for Windows, macOS and Linux (MoYeRanqianzhi/CCNotify) and three newer macOS or tray apps. They have different authors and different code.

Is the ccnotify on npm the same as the one on PyPI?

No. The npm package ccnotify (version 0.1.1) is foxytanuki's hook generator for Discord, ntfy and macOS. The PyPI package ccnotify (version 0.1.13) is Frank Helmschrott's Helmi/CCNotify, which speaks notifications with text-to-speech. dazuiba's popular CCNotify is on neither registry under that name.

How do I know which ccnotify I installed?

Search ~/.claude/settings.json for the word ccnotify and look at the hook command. A script path ending in the event name is dazuiba's, uv run is Helmi's, a .sh script under ~/.local/share/ccnotify is foxytanuki's, and a CCNotify app or ccnotify-hook path is one of the tray or menu-bar apps. Inside Claude Code, /hooks lists every active hook.

Which ccnotify works on Windows?

By their READMEs, MoYeRanqianzhi/CCNotify shows native Windows toasts and tez-Szymon/CCNotify is a Windows tray app. foxytanuki's README lists Windows too, but its hooks are bash scripts that need jq and curl and its only desktop notification is for macOS. A Windows port of dazuiba's script also exists. anotifier shows Windows toasts through BurntToast.

Does any ccnotify send notifications to my phone?

foxytanuki/ccnotify can post to an ntfy.sh topic, and tez-Szymon/CCNotify has optional iPhone alerts through a web app. The others show desktop notifications only. anotifier sends phone push through ntfy for Android and iOS.

Does ccnotify work with Codex, Cursor or Gemini CLI?

According to their READMEs, all of them are Claude Code only except dmxj/ccnotify, which also supports Codex CLI. anotifier supports Claude Code, Codex CLI, Cursor, Gemini CLI and Antigravity CLI.

Can I use ccnotify and anotifier together?

Yes, but if both hook the same Claude Code event you get two notifications. Turn off the overlapping channel in one of them, for example set toast.enabled and terminalBell.enabled to false in ~/.anotifier/config.json so anotifier only sends phone push and the ccnotify tool keeps the desktop banner.

Is anotifier related to ccnotify?

No. anotifier is a separate open-source project from DevinoSolutions and is not a fork of any ccnotify tool. The similar name is a coincidence.

Are the ccnotify projects still maintained?

It varies. On 2026-10-12, dazuiba's last commit was 2025-10-14, the npm package's last release was 2025-07-31, and the PyPI package's last release was 2025-08-10. The Rust, Go, tray and menu-bar projects had releases between April and September 2026. Check a repository's recent commits before you depend on it.

Try it

One command wires every agent you have installed: Claude Code, Codex CLI, Cursor, and Gemini CLI.

npx anotifier@latest setup

Other guides