Claude Code notifications when done or waiting for input.

To get notified when Claude Code finishes a turn, attach an alert command to its Stop hook. For permission prompts and idle waits, use a Notification hook. Below are working setups for a terminal bell, desktop alerts and free phone push, plus Claude Remote Control and Pushary for answering away from your desk.

Which Claude Code actions can Pushary hold until I approve them?

Pushary installs Claude Code hooks, so PreToolUse fires before a tool call runs and your permission policy decides whether it needs you. A gated call is held open, the question goes to your phone, and Claude continues on your answer. The Stop hook pushes when a turn ends. Every local channel, terminal bell included, is local to the machine Claude Code runs on and stops existing the moment you leave it. This is the part a settings.json cannot do: it reaches you wherever you are, and it takes an answer back.

Updated

Set up Claude Code notifications

Use a local alert while you are at your computer, or send the notification to your phone when you step away. Pushary also carries the question Claude is blocked on and takes your answer from the lock screen.

bash
npx pushary@latest setup

Pick Claude Code when prompted. Installs the hooks and connects over MCP.

Hacker NewsUitgelicht op Hacker News
Claude Code, Codex, Cursor, Gemini CLI en meer
iPhone, Android en Mac
Je code verlaat nooit je machine

Every way to get notified when Claude Code finishes

There are five ways to get notified when Claude Code finishes or needs your input: the built-in terminal bell, a desktop alert from a Notification hook, a free ntfy push to your phone, mobile push in the Claude app through Remote Control, and Pushary, which lets you answer Claude from your lock screen however it logs in. The first two only help while you are at the machine. The last three reach you anywhere.

1. Terminal bell and desktop notifications

Free

Built into Claude Code, zero setup

In Ghostty, Kitty, and iTerm2, Claude Code already sends a desktop notification when it finishes or pauses for permission, and it reaches your local machine even over SSH. In other terminals, switch the notification channel to the terminal bell. Most guides still tell you to run `claude config set --global preferredNotifChannel terminal_bell`, which now fails with `error: unknown option '--global'`: the config subcommand was removed, so set it in settings.json instead.

Or run the one-liner below, which adds a Notification hook that rings the bell and raises the desktop alert itself, so it works whatever channel you are on. Either way it stays on this machine and cannot reach you once you step away.

free, no account, nothing leaves your machine
npx pushary@latest bell

2. Desktop alert with a Notification hook

Free

Deterministic, fires on permission prompts and idle waits

Claude Code fires a Notification event when it needs your approval (permission_prompt) or is done and waiting for your next prompt (idle_prompt). A hook in .claude/settings.json turns that into any command you want, like a macOS notification via osascript or notify-send on Linux.

Add a matcher such as permission_prompt to only fire for specific types. This is the mechanism most DIY tutorials skip: no prompt hacks in CLAUDE.md, just a documented event.

.claude/settings.json
{
  "hooks": {
    "Notification": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "osascript -e 'display notification \"Claude Code needs you\" with title \"Claude Code\"'"
          }
        ]
      }
    ]
  }
}

3. Free phone push with ntfy

Free

A Stop hook plus curl reaches your phone, one-way

The Stop event fires when Claude finishes responding. Point a Stop hook at ntfy.sh and your phone gets a push for free. The trade-offs: it is one-way, so when Claude is blocked on a question you still have to walk back to the terminal to answer, and public ntfy topics are readable by anyone who guesses the name unless you reserve one or self-host.

.claude/settings.json
{
  "hooks": {
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "curl -s -d 'Claude Code finished' ntfy.sh/your-topic"
          }
        ]
      }
    ]
  }
}

4. Claude Code mobile push, through Remote Control

Your Claude plan

Anthropic's own phone push, for claude.ai accounts

Claude Code has its own mobile push, and it only works while Remote Control is on. Start the session with claude remote-control, run /remote-control in one that is already open, or turn on Enable Remote Control for all sessions in /config.

Install the Claude app on your phone, sign in with the same account, and allow notifications. Then run /config and switch on Push when actions required for permission prompts and questions, Push when Claude decides for pushes Claude sends on its own, typically when a long task finishes, or both.

You can also ask for one in your prompt, such as notify me when the tests finish. Claude picks the moment, there is no per-event setting beyond those two switches, and it skips the push while you are typing in or focused on the terminal.

You can answer the prompt from the app. It needs a Pro, Max, Team or Enterprise plan signed in through claude.ai, and on Team and Enterprise an Owner has to turn Remote Control on first. API keys, Amazon Bedrock, Google Cloud, Microsoft Foundry and a custom ANTHROPIC_BASE_URL are not supported, and your computer has to stay on.

terminal
claude remote-control

5. Pushary: push plus approvals from your phone

$9.99/mo

Answer Claude from your lock screen, however it logs in

One command installs the hooks and connects Claude Code over MCP. You get a push when Claude finishes, and when it is blocked on a permission or a question, the notification carries the question itself. Tap yes or no from your lock screen and Claude continues.

At your desk, the Pushary Mac app shows the same question in the notch. Permission policies decide which tools need your approval, and every decision lands in an audit trail. This is the difference from every free option above: they tell you Claude is waiting, Pushary lets you unblock it.

Claude's own Remote Control covers Claude sessions signed in with a claude.ai account. Pushary works however Claude Code logs in, including API keys, Bedrock and Vertex, and puts Codex, Cursor and Gemini CLI in the same app.

terminal
npx pushary@latest setup

The Claude Code workflow without notifications

You kick off a database migration in the terminal, walk away, and come back to find Claude has been stuck on a yes/no question for half an hour.

Without Pushary
Start a long refactor or migration in the terminal
Tab away to read docs or your inbox
Claude hits a permission prompt and waits
You check the terminal half an hour later
It blocked 28 minutes ago on one yes/no
With Pushary
Start a long refactor or migration in the terminal
Leave the building. The desk is no longer the limit
Claude needs a permission? Tap yes or no.
Your phone buzzes the moment the run ends
The terminal never sits idle waiting on you

Stop watching Claude Code spin. Start getting notified.

Connect Claude Code. Get notified when it is done.

Start your trial

$9.99/mo after a 3-day free trial. Cancel anytime.

Claude Code notification questions

What is preferredNotifChannel in Claude Code?

preferredNotifChannel is the Claude Code setting that chooses how it tells you it finished or needs permission. The accepted values are auto, terminal_bell, iterm2, iterm2_with_bell, kitty, ghostty, and notifications_disabled. The default, auto, sends a desktop notification in iTerm2, Ghostty and Kitty and does nothing in any other terminal, so use terminal_bell there. Set it as a top-level key in ~/.claude/settings.json. The command most guides still show, claude config set --global preferredNotifChannel terminal_bell, fails on current versions with error: unknown option '--global', because the config subcommand was removed; npx pushary@latest bell avoids the setting altogether, raising the alert itself through osascript or notify-send. Every value is local to the machine Claude Code runs on, so none of them reaches you once you walk away.

How do I get a notification when Claude Code finishes?

Claude Code fires a Stop event when it finishes responding. Hook it in .claude/settings.json to ring a bell, show a desktop alert, or curl a push service. For notifications you can act on from your phone, run npx pushary@latest setup and pick Claude Code.

How do I know when Claude Code is waiting for my input?

The Notification event fires with type permission_prompt when Claude needs an approval and idle_prompt when it is done and waiting for your next prompt. A Notification hook turns those into alerts. Pushary routes the same events to your phone and lets you answer without going back to the terminal.

Can Claude Code send notifications to my phone?

Yes, three ways. A Stop hook that curls a free service like ntfy gets you a one-way push. Pushary gets you a two-way push: when Claude is blocked on a question, the notification carries the question and you answer yes or no from your lock screen. And if you sign in with a claude.ai account, Remote Control can push to the Claude app once you switch on Push when actions required or Push when Claude decides in /config.

What happens when Claude Code needs permission and I am away from my desk?

Nothing, with the built-in channels. The terminal bell, the desktop alert and preferredNotifChannel all fire on the machine Claude Code is running on, so if you have left that machine the run simply sits blocked until you come back. Remote Control is the exception if you sign in with a claude.ai account and turn on Push when actions required. A one-way push like ntfy tells you it is blocked but still cannot unblock it. Pushary holds the tool call open through the PreToolUse hook, sends the actual question to your phone, and resumes Claude the moment you tap yes or no, so the distance between you and the terminal stops mattering.

How is Pushary different from free options like ntfy or a hook script?

Free options are one-way: they tell you Claude finished or is stuck, and then you walk back to the terminal. Pushary is two-way: you approve permissions and answer questions from the notification itself. It also adds per-tool permission policies and an audit trail of every decision.

Can Claude ask me questions via push notification?

Yes. Pushary's human-in-the-loop feature lets Claude send yes/no questions to your phone. You answer from your lock screen and Claude continues based on your response.

Does it work with Claude Desktop and Claude Code?

Yes. Pushary works with both Claude Desktop and Claude Code (terminal) via MCP. Any Claude client that supports MCP servers can use Pushary.

How much does Pushary cost?

Pushary starts with a 3-day free trial at $9.99/month. Includes 5,000 notifications per month and full MCP API access.

Building an AI product for other people? Let your users approve what your agent does, from their phone. See the Partner plan or the human-in-the-loop API.