Now that PR #24, #26, #28 are all on main, the missing piece is connecting the moving parts via macOS-native surfaces.
Three independent additions
A — Native notifications in LisaIsland.app
Replace the web `Notification` API path with macOS `UNUserNotificationCenter`. Better permission flow, plays nicer with Focus / Do Not Disturb, can carry the LISA mascot as the notification icon.
- New `Notifier.swift` in `packaging/island-mac/Sources/LisaIsland/`
- Permission request on first `notify` postMessage from the page
- `IslandContent.swift` handles new message type `{type: "notify", title, body, sessionId}`
- `src/web/island.ts`: prefer native bridge over `new Notification(...)` when `window.webkit.messageHandlers.island` is present
- Notification click → bridges back to `open_full_gui`
B — Session row jump actions
Each Claude session row in the expand panel currently shows status + project + time. Phase 3.5 adds two actions in an inline expanded view:
- 📁 Open in Finder — opens the session's cwd in Finder
- 📋 Copy resume command — `cd "" && claude --resume ` to clipboard, ready to paste in any terminal
Needs the watcher to surface `cwd`, which is a top-level field in Claude Code's JSONL (already-public-shape metadata, not message content). Privacy contract unchanged.
C — Lisa.app menu bar mirror
Lisa.app gains a menu bar status item that mirrors the Claude active count:
- `▷ 3` when 3 sessions active
- `▶︎ 1` when 1+ waiting (needs you)
- `✕` when error
- `○` when none
Click → bring Lisa.app to front. Tooltip shows per-state breakdown.
Polls `/api/claude/sessions` every 10s (no SSE in Swift yet — keeps it simple).
Strategy
All three are independent in code (different files / directories / surfaces) but conceptually one "Phase 3.5 native polish" milestone. Ship as a single PR with three logical commits so review can step through each piece if desired.
Out of scope
- iTerm2 / Warp URL scheme jump to a specific terminal pane (needs per-app integration; later)
- Per-session SSE subscription in Swift (current polling is sufficient)
- macOS Focus / Do Not Disturb opt-in UI (system handles)
Now that PR #24, #26, #28 are all on main, the missing piece is connecting the moving parts via macOS-native surfaces.
Three independent additions
A — Native notifications in LisaIsland.app
Replace the web `Notification` API path with macOS `UNUserNotificationCenter`. Better permission flow, plays nicer with Focus / Do Not Disturb, can carry the LISA mascot as the notification icon.
B — Session row jump actions
Each Claude session row in the expand panel currently shows status + project + time. Phase 3.5 adds two actions in an inline expanded view:
Needs the watcher to surface `cwd`, which is a top-level field in Claude Code's JSONL (already-public-shape metadata, not message content). Privacy contract unchanged.
C — Lisa.app menu bar mirror
Lisa.app gains a menu bar status item that mirrors the Claude active count:
Click → bring Lisa.app to front. Tooltip shows per-state breakdown.
Polls `/api/claude/sessions` every 10s (no SSE in Swift yet — keeps it simple).
Strategy
All three are independent in code (different files / directories / surfaces) but conceptually one "Phase 3.5 native polish" milestone. Ship as a single PR with three logical commits so review can step through each piece if desired.
Out of scope