Native macOS menu bar app that monitors your Claude Code sessions
Know when Claude is working, done, or waiting for you — without leaving your current app.
You're deep in a design file, a doc, or another terminal tab. Claude Code is running in the background. You have no idea if it's still working, finished, or waiting for your approval — until you switch back and check. Every time.
Solai lives in your menu bar as a tiny animated icon — 12 radiating bars that pulse, spin, and breathe to reflect exactly what Claude Code is doing right now. Each state has a distinct motion pattern you can recognize at a glance, even from peripheral vision.
No setup. No accounts. No cloud. Just install and forget.
|
Sleeping No active session Slow, gentle breathing pulse. Bars stay short and dim. |
Working Claude is processing Rotating energy wave sweeps around. Bars near peak extend long. |
Idle Task complete All bars uniform length. Calm, synchronized pulse. |
Waiting Needs your input Alternating ripple bursts. Even/odd bars pulse on offset. |
The icon is a monochromatic template image — macOS automatically renders it in the correct color for light and dark menu bars. Zero configuration.
Ambient awareness — Each animation pattern is instantly distinguishable at a glance. You never need to read text or click anything.
Multi-session — Running Claude Code in three projects? Solai tracks them all. The icon shows the highest-priority state (waiting > working > idle > sleeping). The dropdown lists every session with its project name and current state.
Native notifications — Get notified when Claude Code finishes a task or needs your input. Notifications include the project name so you know which session needs attention.
Zero footprint — Pure Swift, no Electron, no Python, no runtime. Under 5MB binary, under 10MB RAM, under 0.2% CPU while animating.
Hook-driven — Uses Claude Code's native hook system. No polling, no CPU waste. State changes propagate in under 100ms via FSEvents.
Grab the latest .dmg from the Releases page
Open the .dmg, drag Solai to Applications, launch it. On first run, Solai will:
- Ask for notification permission
- Install inline hook commands into
~/.claude/settings.json - Optionally set itself to launch at login via Settings
That's it. No accounts, no config files, no terminal commands.
git clone https://github.com/adroual/solai.git
cd solai
swift build -c release
.build/release/SolaiRequires Xcode 15+ and macOS 14 (Sonoma).
Claude Code event → Inline hook command → State file (/tmp) → FSEvents → Solai → Animated icon
Solai registers lightweight inline bash commands into Claude Code's ~/.claude/settings.json hook configuration. Every time Claude Code changes state (starts working, needs permission, finishes), the hook writes the new state to a file in /tmp. Solai watches /tmp via macOS FSEvents (not polling) and updates the menu bar animation accordingly.
Each session gets its own state file keyed by PID (/tmp/solai_state_{PID}), enabling multi-session tracking. A companion meta file (/tmp/solai_meta_{PID}) stores the project path for display in the menu.
┌───────────────────────────────┐
│ Sessions │
│ crewify — Working │
│ pmm-kit — Idle │
│ dentanorme — Waiting │
│───────────────────────────────│
│ Settings... ⌘, │
│ About Solai │
│───────────────────────────────│
│ Quit Solai ⌘Q │
└───────────────────────────────┘
Clicking a session activates your terminal. Hold Option to reveal "Uninstall Hooks..." for clean removal.
| Language | Swift 5.9+ |
| Frameworks | AppKit, SwiftUI, UserNotifications |
| Icon rendering | Core Graphics → NSImage template (22pt) |
| File watching | DispatchSource (FSEvents) on /tmp |
| Animation | 12 bars × 20–30 fps (adaptive) |
| Min OS | macOS 14 Sonoma |
| Binary size | < 5 MB |
| Memory | < 10 MB RSS |
| CPU | < 0.2% animating, ~0% sleeping |
Solai's icon has no center element — just 12 radiating bars. This was a deliberate choice. Menu bar icons should be ambient, not attention-grabbing. The bars communicate state through motion alone:
- Speed tells you intensity (slow = calm, fast = active)
- Uniformity tells you stability (all equal = settled, uneven = dynamic)
- Pattern tells you what to do (rotating = wait, pulsing = look now)
The result: you develop an intuitive sense for what Claude Code is doing without consciously looking at the icon.
MIT — use it, fork it, improve it.
☀️ Add a Ray
Solai is free and open source. If it saves you even one context switch,
consider adding a ray to keep the sun shining.
Built with Claude Code. Monitored by Solai.
Made by Alex Droual
