The notch and the Mac

Watch Your AI Agents From the MacBook Notch

See what every Claude Code, Codex and Gemini CLI session is doing from your Mac's notch or menu bar: status, permission prompts and usage, compared.

On this page
  1. What "watching an agent" means
  2. Your options, compared
  3. Why the notch works for this
  4. How a menu bar app knows what Claude Code is doing
  5. Setting up Eddie
  6. What you see for each agent
  7. Usage and cost from the menu bar
  8. The processes agents leave behind
  9. Privacy
  10. Not on a Mac?
  11. FAQ

The easiest way to watch AI coding agents on a Mac is to put their status where your eyes already go: the menu bar, and on a MacBook, the notch in the middle of it. A notch app like Eddie listens to each agent's hooks and shows every Claude Code, Codex, Cursor and Gemini CLI session as working, needs you or done, with a sound when one needs your permission. If you only want Claude Code usage numbers, its status line or a usage report covers that without any app.

This guide explains what you can actually see from outside the terminal, how each option gets that information, and how to set up the notch so you stop switching back to check on a session.

What "watching an agent" means

An agent session moves through a few states. Most time is lost in the gaps between them, when the agent is waiting on you and nothing tells you.

StateWhat it meansWhere the signal comes from
WorkingThe agent is thinking, editing or running toolsUserPromptSubmit and tool hooks, or the transcript growing
Needs youA permission prompt or a question is waitingThe PermissionRequest hook, or Notification with permission_prompt
DoneThe agent finished its replyThe Stop hook
FailedThe turn ended on an API error, such as a rate limitThe StopFailure hook
IdleFinished a while ago, still waiting for your next promptNotification with idle_prompt, about 60 seconds after finishing

On top of state, there are two things worth watching: usage, meaning tokens and what they would cost at API prices, and processes, such as the dev servers and browsers an agent started. Claude Code writes usage to session transcripts under ~/.claude/projects, and the processes are visible to ps and lsof like any others. The hooks reference documents every event in the table above.

Your options, compared

OptionEvery session at a glanceInstant "needs you"Usage and costVisible from other appsSetup
Eddie (notch app)Yes, one row per sessionYes, the notch peeks out with a soundPer session, project and day for Claude CodeYesOne click per agent; Mac and Windows, cost on the Mac
Built-in notificationsNoAfter about six seconds away, in iTerm2, Ghostty and KittyNoYes, as bannersNone
Your own hooksNoYes, as a banner or soundNoYesEdit settings.json
Claude Code's status lineThe current session onlyNoEstimated session cost, plus plan limits on Pro and MaxNo, it lives in the terminalA small script
ccusage and similar CLIsNoNoDetailed reports from local logsNoRun a command

A few honest notes on the alternatives. Choose the built-in notification if you run one session in iTerm2, Ghostty or Kitty: it's free and needs nothing. Choose your own hooks if you're on Linux, where Eddie isn't available, or on Windows and would rather not install an app; the notification guide has configs for both. Choose the status line if you mostly care about usage while you're already in the terminal; the status line docs list fields such as cost.total_cost_usd and, for Pro and Max subscribers, rate_limits.five_hour.used_percentage. Choose a usage CLI if you want a detailed report rather than a live view.

Where they all fall short is several sessions at once. Banners arrive one at a time and pile up in Notification Center; a status line only describes the terminal it's in. Seeing all your agents means one place that holds every session's current state, which is what the notch is good at.

Why the notch works for this

The notch is already dead space in the middle of your menu bar, it's on every Space and every full-screen app, and it's where your eyes land when you look up. That makes it a good place for status that's mostly quiet. When nothing is happening it should look like a normal notch. When something needs you, it should change shape enough to catch your eye, then go back once you've answered.

Eddie's notch peeking out with a session named api marked Needs you
The closed notch peeking out for one session, from the interactive demo on editz.pro.

That's the same idea as Live Activities and the Dynamic Island on an iPhone, which is why notch apps are sometimes sold as a "Dynamic Island for Mac". Most of them focus on music, files and calendar. Our guide to notch apps for developers covers that wider category; this guide is about agents.

How a menu bar app knows what Claude Code is doing

There's no magic, and you can build a crude version yourself. Claude Code runs hooks at each state change, so a few lines in ~/.claude/settings.json can write every change to a file:

~/.claude/settings.json
{
  "hooks": {
    "UserPromptSubmit": [
      {
        "hooks": [
          { "type": "command", "command": "jq -c '{time: (now | todate), state: \"working\", session: .session_id, project: .cwd}' >> \"$HOME/.claude/agent-status.jsonl\"" }
        ]
      }
    ],
    "PermissionRequest": [
      {
        "hooks": [
          { "type": "command", "command": "jq -c '{time: (now | todate), state: \"needs you\", session: .session_id, project: .cwd, tool: .tool_name}' >> \"$HOME/.claude/agent-status.jsonl\"" }
        ]
      }
    ],
    "Stop": [
      {
        "hooks": [
          { "type": "command", "command": "jq -c '{time: (now | todate), state: \"done\", session: .session_id, project: .cwd}' >> \"$HOME/.claude/agent-status.jsonl\"" }
        ]
      }
    ]
  }
}

Run tail -f ~/.claude/agent-status.jsonl in a spare terminal and you'll see a line each time a session starts working, asks for permission or finishes. The PermissionRequest hook prints nothing, so the permission prompt still appears as usual. You need jq, which you can install with brew install jq.

A real app does the same thing with more care. It uses a tiny helper instead of jq, so the hook returns in milliseconds. It also reads the transcripts, because hooks alone miss some changes: pressing Esc to interrupt Claude fires no Stop hook, and sessions you started before connecting never sent a UserPromptSubmit. Finally, it clears "needs you" once the session moves on, which a log file can't do.

Setting up Eddie

Eddie is our notch app for exactly this. Setting it up on a Mac:

  1. Install it, open Settings and connect Claude Code. It takes one click: Eddie adds its hooks to ~/.claude/settings.json and saves a backup of the file first.
  2. Restart Claude Code sessions that were already open, so they load the new hooks.
  3. Connect Codex, Cursor or Gemini CLI the same way if you use them. For Codex, run /hooks once inside Codex and trust the new hook; Codex skips hooks you haven't reviewed, as its hooks docs explain.
  4. Press ⌃⌥A from any app to open the agents list, or just leave it closed and let it tap you.

Prefer to edit config files yourself? Settings includes a manual setup guide with a ready-made prompt you can paste into the agent, and disconnecting an agent removes the hooks again. You can check exactly what was added with /hooks in Claude Code.

What you see for each agent

How much a notch app can show depends on what each agent reports through its hooks. This is the compatibility table from our home page:

AgentLive status"Needs you" alertsCostCPU, RAM, ports
Claude Code (terminal, VS Code, Cursor terminal)YesYesYesYes
Codex (CLI, IDE, ChatGPT app)YesYes, after you trust the hook in /hooksNot yetYes
Cursor's agentWorking and doneNo, Cursor doesn't report approvalsNoCLI only
Gemini CLIYesYesNoYes
Claude desktop app, Code tabYes, from its saved transcriptsQuestions onlyYesYes
opencode, Aider or any program you addBusy or idleNoNoYes
Eddie's open notch with three sessions: api needs you, web working, and a Codex session idle
In the interactive demo on editz.pro: each session's state, what it's waiting on, its ports and today's cost.

The Claude desktop app is the odd one out. The app follows its Code tab through the session transcripts it saves on your Mac, with nothing to connect. Permission prompts never reach those transcripts, so it can show working, done and questions Claude asks you, but not a pending approval.

Usage and cost from the menu bar

For Claude Code, the app reads token counts from the local session logs and shows API-equivalent cost per session, per project and per day. No API key is needed, and nothing is uploaded.

Keep in mind what that number means. It's what the same tokens would cost at Anthropic's list API prices. On a Pro or Max plan you aren't billed per token, so treat it as a measure of which sessions are heavy, not as your bill. Our guides on how to check Claude Code token usage and what Claude Code costs go deeper, and the status line guide shows how to put your plan's 5-hour limit in the terminal.

The processes agents leave behind

Agents start things: next dev on port 3000, a Vite server, a headless Chrome for tests. When a terminal closes, some of those keep running in the background and hold their ports. The agents tab shows each agent's process tree with memory, CPU and ports, flags dev servers whose parent is gone, and stops them in two clicks. If you'd rather do it by hand, our guide to finding and killing leftover dev servers shows the lsof and kill commands.

Privacy

Watching agents shouldn't mean sending your work somewhere. Hooks run locally and write to local files, and the app keeps everything on your Mac, with no account, no cloud and no analytics. Its hooks record what the notch needs to show, such as the start of your prompt and the agent's latest reply, and the privacy page lists every file it reads and the few things that leave your Mac: license checks, update checks and services you connect yourself.

Not on a Mac?

On a Mac, Eddie needs macOS 14 or later. On Windows 10 or 11, Eddie for Windows shows the same working, needs you and done states at the edge of your desktop; install it from the Microsoft Store and activate it with the same key. There's no Linux version, so on Linux the hooks are the answer: see Claude Code notifications on Linux, on Windows if you'd rather use hooks there, and on your phone for when you're away from the desk entirely. If you run several sessions at once on any OS, running Claude Code sessions in parallel has tips for keeping them apart.

FAQ

Is there a Claude Code usage monitor for the Mac menu bar?

Yes. A notch app such as Eddie sits in the middle of the menu bar and shows each Claude Code session's status and API-equivalent cost, read from Claude Code's local logs. If you only want numbers inside the terminal, Claude Code's status line can show the session's estimated cost and, on Pro and Max plans, how much of the 5-hour and 7-day limits you've used.

Can I see when Claude Code needs permission without watching the terminal?

Yes. Claude Code fires a PermissionRequest hook the moment it asks for permission, and a Notification hook with the permission_prompt type after the prompt has waited about six seconds. A hook can turn either into a desktop notification, and a notch app can turn it into a status that stays visible until you answer.

Does a notch app work on a Mac without a notch?

Eddie does. On an iMac, Mac mini, Mac Studio or an external display it draws a slim notch of its own in the middle of the menu bar, and you can choose which display it lives on.

Can it show Codex, Cursor and Gemini CLI too?

Through their own hooks, yes, with limits that depend on what each agent reports. Codex and Gemini CLI report permission prompts; Cursor only reports when its agent starts and stops working. The compatibility table above lists exactly what Eddie shows for each one.

Is the cost shown what Anthropic bills me?

Not on a Pro or Max plan. Tools that read Claude Code's local logs show API-equivalent cost at Anthropic's list prices, which is useful for seeing which sessions are heavy. Subscription plans aren't billed per token.

Does watching agents this way send my code anywhere?

It doesn't have to. Hooks run on your machine and write to local files. Eddie keeps everything on your Mac, with no account and no analytics; the only network calls are license checks, update checks and services you connect yourself.