Claude Code Notifications: Every Way to Get Alerted (Bell, Hooks, Slack, Push, Phone)
When you run Claude Code for anything longer than a coffee break, one question decides how much of your day it eats: how do you find out the moment it needs you? There's a whole ladder of options, from a built-in beep to a ringing phone, and the right rung depends on one thing — whether you just want to know, or whether you need to answer.
This page compares every practical method by category — notification mechanisms, not brands — and says plainly where each one is the best choice. No invented benchmarks; just how they actually behave.
Scope note up front: this is about getting notified by a coding agent. It is not about agentcall.co or the npm agentcall package, which are an unrelated programmable SMS/voice API for building telephony into your own app — a different product for a different job. Everything below is about reaching you when Claude Code (or Codex) needs a human.The one question that sorts every option
Before the table: the decision that matters is one-way vs. two-way.
- A one-way alert tells you something happened. You still have to go back to the machine and type the answer before the agent moves.
- A two-way channel takes your answer on the spot, so the agent unblocks without you returning to the terminal.
For "the run finished," one-way is perfectly fine — you'll look when you look. For "the agent is blocked on a decision," every minute you spend getting back to the keyboard is a minute of idle agent. That's the case where two-way earns its keep.
The methods, compared
Terminal bell
- Reaches you where: only at the machine, window focused/audible.
- One-way or two-way: one-way.
- Setup: a setting toggle.
- Best for: you're at your desk and just want a nudge when the terminal is in the background.
- Falls down when: you've walked away — which is exactly when you needed it.
Desktop / OS notification (via a hook)
- Reaches you where: the machine's screen, even in the background.
- One-way or two-way: one-way.
- Setup: a
Stop/Notificationhook runningosascript/notify-send. - Best for: context-switching at your desk between tasks.
- Falls down when: you've left the room; the banner lands where nobody's looking.
Push to phone — ntfy.sh
- Reaches you where: your phone, anywhere.
- One-way or two-way: one-way.
- Setup: a hook that
curls your ntfy topic; open-source, free, self-hostable. - Best for: "just tell me when it's done" while you're away from the machine, on a budget.
- Falls down when: the agent is blocked — you're notified of a decision you still have to walk back to make.
Push to phone — Pushover
- Reaches you where: your phone, anywhere.
- One-way or two-way: one-way.
- Setup: a hook that
curls the Pushover API; one-time paid. - Best for: the same "tell me when it's done," with a polished app and reliable delivery.
- Falls down when: same as ntfy — it can alert, not answer.
Slack / Telegram message (via webhook)
- Reaches you where: wherever you have Slack/Telegram — often a shared channel.
- One-way or two-way: effectively one-way for unblocking the agent (you read it, then go to the terminal).
- Setup: a hook posting to an incoming webhook or bot.
- Best for: team visibility, or you already live in Slack all day.
- Falls down when: a chat ping is easy to scroll past. A message in a busy channel is not "a decision made now" — and it still doesn't carry your reply back into the run.
Phone call — AgentCall
- Reaches you where: your phone rings, anywhere.
- One-way or two-way: two-way — you speak the answer and it becomes the agent's answer.
- Setup: one
claude mcp addcommand; sign in with Google; add to home screen. - Best for: the blocked case — a decision, an approval, or a destructive command that shouldn't wait.
- Falls down when: honestly, for pure "it finished, no action needed" a silent push is lighter-weight; a call is the tool for decisions, not FYIs.
Why a ringing phone is a different category
The push services above are all good at what they do — they get a one-way alert off your machine and into your pocket. AgentCall is solving the other half: the moments where the agent needs an answer, not just your awareness.
It's a pure-MCP voice bridge. When your agent hits a decision it won't make alone, your phone rings; it explains the situation in its own words; you talk it through; it keeps working. A short voice exchange also resolves more than typed back-and-forth — you can ask a follow-up and interrupt mid-answer (barge-in is on by default). What makes it fit this job:
- The reply is the result. There's no returning to the terminal — the words you speak are handed straight to the agent as the answer it was waiting on.
- No AI in the middle. AgentCall never generates words your agent didn't say. Your speech becomes text for the agent; the agent's text becomes speech for you.
- You define "when it matters." Standing rules in plain language decide what rings you — irreversible actions, approvals, completion, failures — so it isn't noise.
- Mishearing can't cause damage. Because transcription is treated as untrusted, the agent confirms destructive instructions out loud before acting.
- Miss it and nothing breaks. No answer within a few minutes and the agent is told the call went unanswered and proceeds on its best judgment; the missed call is in History, with optional voicemail.
- Your code stays put. AgentCall never sees your repo, terminal, or files — only the words your agent chooses to speak, only to your signed-in devices.
claude mcp add --transport http --scope user agentcall https://agentcall.io/api/mcpFree while in beta, speech minutes included — no card, no trial clock. Claude Code is the tested client; Codex CLI works in beta.
The setup most people land on
You don't pick one rung — you pick two:
- A cheap one-way push for "finished." Terminal bell when you're there; ntfy / Pushover / Slack via a hook when you're not. Perfect for completion and failure alerts.
- A phone call for "needs a decision now." Because the cost of the blocked case is idle-agent time, and the only thing that fixes it is a channel that takes your answer.
Set the standing rules once, wire the hook once, and Claude Code stops being something you have to sit and watch.
Next: Get notified when Claude Code finishes or gets stuck → · Wire it to the Stop hook → · Connect in one command →