The Tab-Switching Tax
Here's what my screen looked like on a typical Tuesday: four terminal tabs, each running a Claude Code session on a different part of the codebase. One needed permission to write a file. One was waiting for input. One had finished five minutes ago and I hadn't noticed. The fourth was still churning.
I was spending more time managing Claude Code than actually using it.
Every time a session needed permission, I'd hunt through tabs. Every time I wanted to check progress, I'd switch windows, lose my place in whatever I was reading, then switch back. Multiply that by four sessions, dozens of times a day.
The overhead was real. So I built Claude Peek — a macOS app that puts all of that into the one piece of screen real estate that's otherwise wasted: the notch.
What Claude Peek Does
Claude Peek is a native macOS app that monitors your Claude Code sessions from the notch area of your MacBook (or a floating pill on external displays). No Electron. No browser tabs. No terminal switching.
At a glance, you see:
- Every running Claude Code session and its current status
- Which sessions need your attention (permission requests, waiting for input)
- Session names (from
/renameor project directory)
One click gives you:
- Full conversation history, live-updating as Claude types
- Inline permission approval — allow, deny, or always-allow
- Jump-to-terminal to focus the exact window running that session
What it doesn't do:
- Phone home. No analytics, no telemetry. All data stays on your machine.
- Steal focus. It sits in the notch until you hover. It never interrupts.
Why the Notch?
Every MacBook Pro made since 2021 has a notch — a chunk of screen that most apps ignore. It's dead space. Claude Peek reclaims it.
When sessions are active, the notch subtly extends to show status. Hover to expand it. Click to open the full conversation viewer. Click away to close it. The interaction model is closer to macOS's native notification center than a separate app — always accessible, never in the way.
On external displays without a notch, Claude Peek renders as a floating pill at the top center of the screen. Same functionality, adapted to the hardware.
The Permission Problem
This is the feature that changed my workflow the most.
When Claude Code needs to write a file, run a command, or use a tool, it asks for permission. In a single terminal session, that's fine — you see the prompt, you approve or deny. But with multiple sessions, each in a different terminal tab or window, you miss permission requests constantly.
Claude Peek surfaces every permission request in one place. A session goes amber, you see what Claude wants to do, and you tap Allow, Deny, or Always Allow — all without leaving your current window.
Always Allow is per-session. If you trust Claude to write files in a specific project, allow it once and it won't ask again for that session. Keeps you in flow without blanket permissions.
Reading Conversations Without Context-Switching
The conversation viewer shows the last 50 messages for any session. It live-updates as Claude writes responses. You see:
- User messages and Claude's responses
- Tool use calls with their inputs and results
- Thinking blocks (when extended thinking is enabled)
This is surprisingly useful for monitoring background agents. Instead of switching to a terminal, losing your place, reading the output, and switching back — you hover the notch, scan the conversation, and continue what you were doing. Two seconds instead of twenty.
Terminal Focus: Jump to the Right Window
When you do need to interact with a session directly, Claude Peek knows which terminal window owns it. Click the focus button and it activates the correct window — even across macOS Spaces.
It's smarter than just "open the terminal app." It detects your terminal type (iTerm2, Warp, Ghostty, Terminal.app, Kitty, Alacritty) and IDE (VS Code, Zed, IntelliJ). For IDEs, it opens the project directory to focus the right window. For terminals, it activates without spawning a new window.
A small thing, but when you're running four sessions across two Spaces, finding the right window manually is surprisingly slow.
How It Works Under the Hood
Claude Peek connects to Claude Code through the hooks system — the same event-driven mechanism that powers formatters, linters, and other automations.
Claude Code → Python Hook → Unix Socket → Swift App → Notch UI
← permission response (allow/deny) ←
A Python hook script (auto-configured during install) listens to Claude Code events: session start, tool use, permission requests, completion, errors. It sends these as JSON events over a Unix socket to the Swift app.
For permission requests, the flow is synchronous — the hook holds the socket open until you respond in the UI. Your decision (allow/deny/always-allow) flows back through the same socket to Claude Code. No polling, no delays.
Everything is local. The Unix socket lives at /tmp/claude-peek.sock. No network calls, no cloud services. The app is signed and notarized, so no Gatekeeper warnings.
Installation
# Clone and run the installer
git clone https://github.com/teambrilliant/claude-peek.git
cd claude-peek
./install.shThe install script:
- Builds the app (requires Xcode or Swift toolchain)
- Copies it to
/Applications - Configures Claude Code hooks in
~/.claude/settings.json
Requirements: macOS 14+, Apple Silicon, Claude Code with hooks support.
After install, launch Claude Peek from Applications. It runs as a menu bar app — no dock icon, no window. Start a Claude Code session and you'll see it appear in the notch.
How Claude Peek Compares
Several tools exist for managing multiple Claude Code sessions:
| Tool | Type | Sessions | Permissions | Conversations | Platform |
|---|---|---|---|---|---|
| Claude Peek | Native macOS notch app | Yes | Inline approve/deny | Live viewer | macOS |
| Claude Squad | Terminal TUI (tmux) | Yes | Through terminal | Through terminal | Cross-platform |
| Claude Control | Desktop dashboard | Yes | No | Status only | macOS |
| Agent Deck | Polling dashboard | Yes | No | Status only | Web |
Claude Peek's advantages: native macOS integration, inline permission handling, live conversation viewer, zero focus-stealing. The tradeoff: it's macOS-only (Apple Silicon).
Tips for Power Users
Run sessions in different projects. Claude Peek shows project directory names by default. Use /rename in Claude Code to give sessions meaningful names when you're running multiple sessions in the same project.
Use Always Allow strategically. For trusted operations in a specific project (file writes, running tests), Always Allow saves constant interruptions. The rules reset when the session ends, so you're not creating permanent security holes.
Pair with the RPI framework. If you're using the Research → Plan → Implement framework, Claude Peek lets you monitor the research phase (which spawns parallel agents) without switching windows. You see each agent's progress in the conversation viewer.
External monitors work. If you're on a non-notch display, Claude Peek renders as a floating pill. Same features, just positioned at the top center of the screen instead of the notch.
Frequently Asked Questions
Does Claude Peek work with Claude Code Desktop or only the terminal CLI?
It works with any Claude Code instance that supports hooks — terminal CLI, VS Code extension, JetBrains plugin. The hook system is universal across Claude Code interfaces.
How much memory does it use?
Minimal. It's a native Swift app with no Electron runtime. Typical memory usage is 30-50MB regardless of how many sessions you're tracking. Compare that to a browser-based dashboard.
Can I send messages to Claude Code from the notch UI?
There's an experimental reply feature using MCP channels, but it requires running Claude Code with development channel flags. For most users, the click-to-focus-terminal workflow is faster and more reliable.
Does it work on Intel Macs?
Currently Apple Silicon only (macOS 14+). The app uses SwiftUI features and system APIs that require recent macOS versions.
Is it open source?
Yes. The full source is on GitHub — Swift app, Python hook script, and MCP server. MIT licensed.
Will it conflict with other Claude Code hooks I have configured?
No. Claude Code supports multiple hooks per event. Claude Peek's hooks coexist with formatters, linters, and any other hooks you've configured. The install script merges its hooks with your existing settings rather than replacing them.
Claude Peek is built by Team Brilliant. Questions or feature requests? Open an issue on GitHub or reach out at alex@teambrilliant.ai.