Your AI agents, living next to the MacBook notch.
While Claude Code or Codex is working, its mascot walks beside the notch — the Claude Code banner critter for Claude, the official Codex pet for Codex. Each agent has its own slot: the moment one finishes, its mascot becomes a green blob (even while the other keeps working). The green is a "finished since you last looked" notification — focusing your terminal clears it. Click to open a panel of your sessions, grouped by prompt, with every subagent tucked under a dropdown.
One row per session, titled by the tool, led by your latest prompt — not the agents' chatter. Subagents (Codex's philosopher swarm, Claude's Task agents) fold under a ▸ N subagents dropdown. Running rows show their mascot walking in place; finished rows get a green pixel checkmark. The tag on the right is the actual model that session runs.
No hooks, no APIs, no accounts. Liveness detection follows open-vibe-island's model — a session is a running agent process in a terminal — polled every 3 s:
psfindsclaude/codexprocesses attached to a TTY (headless/background sessions are ignored)lsofmaps each process to the transcript it holds open (Codex), or to its working directory (Claude Code, which doesn't keep the transcript fd open)- transcripts provide the metadata: prompts, snippets, models, subagents
- Claude Code:
~/.claude/projects/*/*.jsonl(+<session>/subagents/agent-*.jsonl) - Codex:
~/.codex/sessions/**/*.jsonl, grouped byparent_thread_id
- Claude Code:
Within a live session, busy vs idle is a hybrid: process alive + transcript written in the last 30 s = busy (mascot walks); alive but quiet = idle (nothing in the notch, dimmed row in the panel); process gone for 2 polls = done (green blob). Sessions idle over 6 h drop off the panel. Activating a terminal app (Ghostty, Terminal, iTerm2, kitty, Warp, Alacritty) acknowledges finished agents and clears their green indicator.
Busy/idle is inferred from transcript write times, and transcript writes are bursty — so the mascot keeps walking for up to ~33 s (30 s window + 3 s poll) after a turn actually ends, and conversely a turn's quiet stretches are smoothed over. No process-level proxy (network, CPU, child processes) can fully fix this: only the agent knows when its turn ends. The precise fix would be agent hooks (UserPromptSubmit/Stop writing a state file, as open-vibe-island does), deliberately skipped here to keep the zero-config, no-hooks design. If the afterglow bothers you, that's the upgrade path.
The collapsed window is transparent and fully click-through except the tiny indicator zone, so it never blocks menu items or apps underneath. In fullscreen spaces the bar spans the whole top edge.
The Codex animation uses the official Codex Pets spritesheets (in pets/). Switch pets with:
echo dewey > ~/.config/agent-notch/petOptions: codex, dewey, fireball, rocky, seedy, stacky, bsod, null-signal. Takes effect within a couple of seconds, no restart needed. (Spritesheets © OpenAI, from their public pets CDN.)
swiftc -O main.swift -o AgentNotch
./AgentNotch &- Click the indicator → open the panel. Click anywhere → close.
- To start at login: System Settings → General → Login Items → add
AgentNotch. - Requires macOS 12+ (built and tested on a notched MacBook; on notchless displays it centers on a virtual notch).

