A macOS notch app that monitors all your Claude Code sessions. Approve permissions, answer questions, and jump to terminals — without switching apps.
What Perch is, who it's for, and why you'd build it.
What's in, what's out, and what that means for effort.
| Feature | Claude Island (base) | Perch (your build) | Vibe Island ($20) |
|---|---|---|---|
| AI Agents | Claude Code | Claude Code | 6 agents |
| Multi-session | No | Yes | Yes |
| Two-way interaction | Read-only | Full | Full |
| Permission approval | No | Yes | Yes |
| Q&A from notch | No | Yes | Yes |
| Plan review | Yes | Yes | Yes |
| Terminal jumping | No | 4 apps | 13+ apps |
| Notch overlay | Yes | Yes | Yes |
| Sound alerts | No | Basic | 8-bit synth |
| Price | Free (MIT) | Free (your build) | $19.99 |
| Build effort | Done | 3-5 weeks | 8-12 weeks |
Complete feature list for Perch.
kitten @ remote control for window focus~/.claude/settings.jsonHow Perch works under the hood.
/tmp/perch.sock~/.claude/settings.json.nonactivatingPaneltell app "iTerm2" to select session idghostty +ipckitten @ focus-window --match id:XTechnical requirements to build Perch.
| Component | Technology | Complexity | Est. Time |
|---|---|---|---|
| Notch panel + floating bar | NSPanel + SwiftUI | Medium | 3-4 days |
| Unix socket server | Swift NIO | Medium | 2-3 days |
| Hook scripts + auto-installer | Shell + JSON config write | Low | 1 day |
| Event parser | Swift Codable | Low | 1 day |
| Session state machine | Swift enum + Combine | Medium | 2-3 days |
| Multi-session UI | SwiftUI list + badges | Medium | 2-3 days |
| Permission approval UI | SwiftUI + socket response | Medium | 2-3 days |
| Q&A response UI | SwiftUI + socket response | Medium | 2-3 days |
| Markdown plan viewer | swift-markdown | Low-Med | 1-2 days |
| Terminal jumping (4 apps) | AppleScript + IPC | High | 5-7 days |
| Sound alerts | NSSound / AVAudioPlayer | Low | 1 day |
| Notch geometry + fallback | CGDisplay APIs | Low-Med | 1-2 days |
| Menu bar integration | NSStatusItem | Low | 0.5 day |
PreToolUse hook can return exit 0 (allow) or exit 2 (block). The hook script connects to the Unix socket, sends the tool request, and blocks waiting for Perch to respond. When the user clicks Allow/Deny in the notch, Perch writes the response back and the hook exits. This is the key mechanism enabling two-way control.
3 phases, 3-5 weeks total. Ship early, iterate.
Goal: Single CC session with full two-way control in notch.
PreToolUse blocking hook with Allow/Deny UIAskUserQuestion response UI (option buttons + text input)Milestone: Demo video of approving a Bash command from the notch.
Goal: Run 3+ CC sessions, see all in notch, jump to any terminal.
kitten @)Milestone: 3 concurrent CC sessions, approve permissions on any, click to jump to terminal.
Goal: Production quality. Ready for daily use.
Milestone: Ship v1.0 as signed .dmg.
What Claude Island gives you for free, and what you need to build.
| Option | Pros | Cons | Recommendation |
|---|---|---|---|
| Fork Claude Island | Fastest start, proven foundation, MIT license | Inherit their code style/decisions | Best option |
| Fork AgentNotch | Already has multi-agent, uses OpenTelemetry | OTLP-based (different IPC pattern), more complex | Consider |
| Build from scratch | Clean architecture, no inherited debt | 2-3x longer, reinventing solved problems | Avoid |
| Use DynamicNotchKit only | Just the notch UI library, build the rest | Still need socket, hooks, event system from scratch | If Claude Island doesn't fit |