Halo › Guides

How to know when Claude Code is done on a Mac

You give Claude Code a task, switch to something else, and then keep alt-tabbing back to check on it. Here's how to make your Mac tell you instead.

By Otabek Abdiraimov, who makes Halo. Updated 8 October 2026.

Halo's Agents tab in the notch: one Claude Code session editing a file, one needing permission, and a Codex session done in 4 minutes 12 seconds
Halo's Agents tab: what each Claude Code and Codex session is doing, plus your usage limits.

The two moments that matter

A long Claude Code task has two moments when you need to look:

Claude Code has a hook for each: Notification fires when it needs your permission or is waiting for input, and Stop fires when it finishes responding. Every option below is built on these two hooks.

Option 1: Claude Code's built-in alert

When Claude Code finishes or pauses for permission while you seem to be away from the terminal, it sends a notification on its own. In Ghostty and Kitty that becomes a macOS notification with no setup. In iTerm2, turn it on under Settings › Profiles › Terminal: check “Notification Center Alerts”, then click “Filter Alerts” and enable “Send escape sequence-generated alerts”.

In other terminals, such as Apple Terminal, Warp or the VS Code terminal, add this to ~/.claude/settings.json to ring the terminal bell instead:

{
  "preferredNotifChannel": "terminal_bell"
}

Free and quick, but a bell is easy to miss if your sound is off, and a banner doesn't say which project it's about.

Option 2: your own hook (free)

Add hooks to ~/.claude/settings.json that play a sound when Claude Code finishes and show a notification when it needs you:

{
  "hooks": {
    "Stop": [
      { "hooks": [{ "type": "command", "command": "afplay /System/Library/Sounds/Glass.aiff" }] }
    ],
    "Notification": [
      { "hooks": [{ "type": "command", "command": "osascript -e 'display notification \"Claude Code needs you\" with title \"Claude Code\"'" }] }
    ]
  }
}

If the file already has a "hooks" section, merge these two events into it. Claude Code picks up the change on its own; run /hooks to check that both are there.

Limits: the notification doesn't say which project needs you when you run several sessions, banners land in the corner of the screen, and nothing tells you how long a task has been running.

Option 3: see it in the notch with Halo

I built this into Halo because I kept alt-tabbing to my terminal myself. Halo uses the same hooks, but shows the result where you're already looking: the top of the screen.

The closed notch with Claude's icon on the left and a raised hand on the right, meaning Claude Code needs permission
Claude Code is waiting for permission: the notch shows a raised hand.

Setting it up

  1. Install Halo and open its Settings.
  2. In Island Tabs, turn on Agents and usage limits and click Connect next to Claude Code.
  3. Make sure Agent status is on. Turn off Sound when an agent needs you or finishes if you only want the visual.
  4. Start a new Claude Code session. It appears in the notch on its first event.

Connecting backs up ~/.claude/settings.json first and adds Halo's hooks next to yours. Disconnecting removes only Halo's hooks. The hooks write short status events to a file on your Mac; nothing is sent anywhere.

Which one to pick

Questions

Can Claude Code notify me when it's done?

Yes. Claude Code runs hooks at moments like Stop (it finished its turn) and Notification (it needs your permission or is waiting for input). A hook can play a sound, show a macOS notification, or tell an app like Halo to show the status in your notch.

Which hook fires when Claude Code needs permission?

The Notification hook. It fires when Claude Code asks to use a tool or has been waiting for your input. The Stop hook fires when it finishes responding.

Does this work with Codex too?

Halo shows Codex sessions with no setup: it reads Codex's own session files on your Mac. The hook recipes on this page are for Claude Code.

Does Halo send my code or prompts anywhere?

No. Claude Code's hooks write short status events to a file on your Mac and Halo reads them there. Nothing leaves the Mac.

Can I undo Halo's Claude Code connection?

Yes. Halo backs up ~/.claude/settings.json before connecting. Disconnecting removes only Halo's hooks and restores your original status line.

Halo app icon

Try Halo

Dynamic Island for your Mac, notch or not. $9.99 one-time, no subscription.

Buy Halo

See everything Halo does ›