Sandbox
@DevLab-Technologies/agent-isle

Notch monitor for Claude Code and other coding agents

Agent Isle is a macOS app that lives in the notch and shows live agent sessions, approvals, questions, and status updates. It reads Claude Code, Cursor, Grok, and Copilot session history directly, and it can also receive events from other tools through a local HTTP server.

44 stars4 forksSwiftUpdated 7d ago
Who it's for

Builders who want to keep an eye on agent sessions, approve actions, and return to the right workspace without leaving their flow.

What it delivers

You can monitor and approve coding-agent work from the notch instead of switching between terminals and windows.

What it does

Notch-anchored island

Shows a collapsed pill in the notch and expands into a full session panel on hover or click.

Multi-agent monitoring

Reads session history from Claude Code, Cursor CLI, Grok CLI, and GitHub Copilot CLI without a separate server for each tool.

Inline approvals

Shows permission requests with a diff and lets you allow or deny them from the island.

Question prompts

Surfaces multiple-choice agent questions and returns the selected answer back to the session.

Session jumping

Focuses the exact terminal, editor, or Claude Desktop conversation for the selected session.

Voice and sound callouts

Plays chiptune alerts or spoken callouts when a session finishes or needs a decision.

Local event server

Accepts POST events on `localhost:4711` for tools that are not built in.

Hook installers

Adds and removes Claude Code and Cursor hook files from the `Scripts/` folder.

How to get it

  1. 1Run
    brew install --cask DevLab-Technologies/tap/agent-isle
  2. 2If the release isn't notarized, macOS Gatekeeper blocks the first launch. Either…
    xattr -dr com.apple.quarantine "/Applications/Agent Isle.app"

README

Agent Isle

build Latest release Total downloads License: MIT Platform: macOS 14+

A Dynamic Island for your coding agents. Agent Isle is a native macOS app that lives in the notch and lets you monitor, approve, and jump back to your AI coding agents — Claude Code, Grok, Copilot and more — without leaving your flow.

Pure Swift, no Electron. Runs as a lightweight menu-bar accessory under 100 MB RAM.

Agent Isle expanded island showing Claude, Grok, and Copilot sessions

Icon: a neon terminal prompt — > and a block cursor.

Features

  • Notch-anchored island — a black pill hugging the notch that expands on hover or click into a full panel of every running agent session.
  • Multi-agent, hook-free monitoring — reads each tool's own session history:
    • Claude Code — terminal, VS Code, Cursor, and Desktop sessions, including Desktop sessions running on a remote host over SSH
    • Cursor CLI (cursor-agent) — read straight from its ~/.cursor/chats store
    • Grok CLI and GitHub Copilot CLI
  • Live status — each session shows working / idle, its latest activity line, git branch, elapsed time, and token usage.
  • Approve from the notch — for Claude Code and Cursor, permission requests render an inline diff with Deny (⌘N) / Allow (⌘Y); the decision flows straight back to the agent.
  • Answer questions — multiple-choice prompts answered right in the island.
  • Click to jump — click a session to focus the exact session, not just its host app (detected via TERM_PROGRAM): editors focus the window already open on the workspace (via the bundled code/cursor CLI), and Claude Desktop deep-links to the conversation.
  • Filter tabs — Monitor / Approve / Ask.
  • 8-bit sound alerts — synthesized chiptune cues, or bring your own: override any cue with a custom .wav / .aiff / .mp3 in Settings → Sound.
  • Voice callouts — hear a spoken line when an agent finishes or needs you, with a distinct voice per agent. Uses the on-device system voice by default (offline, free); optionally bring your own OpenAI / ElevenLabs key for premium voices and your own OpenAI / Anthropic key for AI-written summaries. See Voice callouts.
  • Fully local by default — the only always-on moving part is a localhost event server; nothing leaves your machine unless you opt into a cloud voice/summary provider with your own API key.

Install

Homebrew

brew install --cask DevLab-Technologies/tap/agent-isle

Homebrew downloads the latest release, verifies it, and drops Agent Isle.app in /Applications. Upgrade with brew upgrade --cask agent-isle (the in-app updater also keeps it current).

The cask formula lives in Casks/agent-isle.rb. Publishing it to the DevLab-Technologies/homebrew-tap repository is a pending follow-up; until that tap is live, use the direct download below.

Direct download

Grab the latest prebuilt app from the Releases page (see the version and total-downloads badges above). Download Agent-Isle.zip, unzip it, and drag Agent Isle.app to /Applications.

If the release isn't notarized, macOS Gatekeeper blocks the first launch. Either right-click the app and choose Open, or clear the quarantine flag once:

xattr -dr com.apple.quarantine "/Applications/Agent Isle.app"

Prefer to build from source? See Build & run below.

Requirements

  • macOS 14 (Sonoma) or later, Apple Silicon or Intel
  • Xcode / Swift 5.9+ toolchain (to build from source)

Build & run

swift build                     # compile
bash Scripts/bundle.sh          # build "build/Agent Isle.app"
open "build/Agent Isle.app"     # launch (appears in the notch + menu bar)

On first launch it shows demo mode — simulated sessions so you can see it work. It switches to real sessions automatically as soon as any are detected. Quit and toggle demo/sound from the gear menu in the expanded island.

Connect your agents

Claude Code — monitoring works with no setup (Agent Isle reads ~/.claude/projects/ transcripts). To also approve permissions from the notch:

bash Scripts/install-hooks.sh   # adds hooks to ~/.claude/settings.json
bash Scripts/uninstall-hooks.sh # remove them (monitoring still works)

Claude Desktop sessions running over SSH are monitored too. They're discovered from Desktop's own session store, and their transcript — which Claude Code writes on the remote host — is mirrored here over SSH, incrementally, so those cards carry the same activity line, token total, todo list, pending questions and live chat history as a local session. Nothing to install on the remote host: it reuses the host, port and key Desktop already connects with.

Notch approvals are the one thing SSH sessions don't get. Those need the hook running on the remote host, and it posts to localhost:4711, which there isn't this app.

Cursor CLI (cursor-agent) — monitoring works with no setup (Agent Isle reads the per-session SQLite store.db under ~/.cursor/chats). To also approve shell, MCP, and file-edit calls from the notch:

bash Scripts/install-cursor-hooks.sh   # adds hooks to ~/.cursor/hooks.json (preserves others)
bash Scripts/uninstall-cursor-hooks.sh # remove them (monitoring still works)

Grok CLI / GitHub Copilot CLI — detected automatically from ~/.grok/sessions and ~/.copilot/history-session-state. Nothing to configure.

Any other tool — POST to the event server. Every request needs X-Agent-Isle-Token, matching the file Agent Isle writes on first launch at ~/.agent-isle/token (directory 0700, file 0600). Missing or wrong token returns 401 {"ok":false,"error":"unauthorized"}.

curl -X POST http://localhost:4711/event \
  -H 'Content-Type: application/json' \
  -H "X-Agent-Isle-Token: $(cat ~/.agent-isle/token)" \
  -d '{
  "type": "status", "session": "my-session", "agent": "codex",
  "title": "build api", "terminal": "iTerm",
  "status": "working", "message": "Writing routes/users.ts"
}'

Event types

typeBehavior
statusCreate/update a session (status, message, title).
permissionShow an approval card; blocks until you decide, then replies {"decision":"allow"|"deny"}.
questionShow options; blocks until chosen, replies {"decision":"<option>"}.
doneMark the session finished.
removeDrop the session.

Voice callouts

Agent Isle can speak a short line when an agent finishes a turn or needs a decision — "Claude finished: fix auth bug", "Codex wants permission to edit middleware.ts" — so you can keep working in another window. Turn it on in Settings → Voice. Each agent gets a distinct, stable voice.

Two tiers, both opt-in and off by default:

  • On-device (default). Uses macOS's built-in speech synthesizer and composes the line locally. Free, offline, and nothing leaves your Mac.

  • Bring your own key (optional). For higher-quality voices or AI-written summaries, add your own provider key:

    PurposeProvidersKey
    VoiceOpenAI, ElevenLabsyour OpenAI / ElevenLabs API key
    SummaryOpenAI, Anthropicyour OpenAI / Anthropic API key

    You're billed by that provider directly — Agent Isle runs no backend and takes no cut. Keys are stored in the macOS Keychain (never in plists or diagnostic exports). Only the short line to be spoken is sent, and only to the provider you selected. If a request fails, Agent Isle falls back to the on-device voice so you still hear the callout.

Voice callouts respect the same quiet scenes (Focus, screen-lock, screen-sharing) as sounds and notifications.

Architecture

Sources/AgentIsle/
  main.swift              App entry (NSApplication, accessory policy)
  AppDelegate.swift       Notch window + menu-bar item + watcher/server wiring
  Notch/
    NotchGeometry.swift   Detects the physical notch (falls back to a centered pill)
    NotchWindow.swift     Fixed-size floating panel + click-through hit region
    PassthroughView.swift Passes clicks through everywhere except the island
  Views/
    IslandRootView.swift  Collapsed <-> expanded switch, spring animations
    CollapsedIsland.swift  Resting pill (focus session + count badge)
    ExpandedIsland.swift   Full panel: header, session list, filter tabs, gear menu
    SessionRow.swift       Per-session row (badge, status, tokens); click to jump
    PermissionCard.swift   Inline diff + Allow/Deny; QuestionCard for choices
    AppMark.swift          The terminal-prompt logo, drawn in SwiftUI
  Model/
    Models.swift          AgentKind, SessionStatus, AgentSession, PermissionRequest
    SessionStore.swift    Observable state + demo generator + filters
  Server/
    EventServer.swift     Localhost HTTP listener; parks blocking requests
    IdeWatcher.swift      Hook-free Claude Code session discovery (transcripts)
    TranscriptReader.swift Tails transcripts for activity + token totals
    ExternalAgents.swift  Adapters for Cursor / Grok / Copilot
    CursorStore.swift     Reads Cursor's SQLite store.db (meta + blob DAG)
    HookInstaller.swift   Register/remove Claude Code hooks from the app
    CursorHookInstaller.swift  Same for Cursor's ~/.cursor/hooks.json
    Jumper.swift          Focus a session's terminal/IDE
  Sound/
    SoundPlayer.swift     Runtime-synthesized square-wave alerts + custom-file playback
    SoundPack.swift       Pure event -> custom-audio-file resolution
Casks/
  agent-isle.rb           Homebrew cask (points at the GitHub release zip)
Scripts/
  bundle.sh               Package the binary into a .app
  release.sh              Universal build + (optional) notarization + zip + cask sha256
  install-hooks.sh        Register Claude Code hooks
  uninstall-hooks.sh      Remove them
  agent-isle-hook.py      Claude Code -> island bridge (approvals from the notch)
  install-cursor-hooks.sh Register Cursor hooks
  uninstall-cursor-hooks.sh Remove them
  agent-isle-cursor-hook.py Cursor -> island bridge (approvals from the notch)
  make_icon.py            Generate the app icon

Contributing

Contributions are welcome — especially new agent adapters. Each adapter is a small addition to ExternalAgents.swift that reads a tool's session history and returns ExternalSession values. Open an issue or PR.

License

MIT — see LICENSE.

Files in the repo

Repository payload13 top-level entries
  • .github
  • Casks
  • docs
  • Scripts
  • site
  • Sources
  • Tests
  • .gitignore
  • CLAUDE.md
  • CONTRIBUTING.md
  • LICENSE
  • Package.swift
  • README.md

Discussion (0)

Ask about usage, or say what you built with it

Sign in to join the discussion.

No comments yet. Be the first to say what this is good for.

More tools

JuliusBrussee/
caveman

🪨 why use many token when few token do trick — Claude Code skill that cuts 65% of tokens by talking like caveman

105k
1 add
MemPalace/
mempalace

The best-benchmarked open-source AI memory system. And it's free.

59k
stablyai/
orca

Orca is the ADE for working with a fleet of parallel agents. Run any coding agent with your own subscription. Available on desktop, mobile and remote runtime.

66k

A cross-platform desktop All-in-One assistant for Claude Code, Codex, OpenCode, OpenClaw, Grok Build & Hermes Agent. Only official website: ccswitch.io

132k

Never stop coding. Free MIT AI gateway: one endpoint, 352 providers (150+ free), 1200+ models Kimi, Claude, GPT, Gemini, GLM, DeepSeek, MiniMax. Works with Claude Code, Codex, Cursor, OpenCode, Cline & Copilot. Quota-aware auto-fallback, RTK+Caveman compression saves 15-95% tokens, MCP/A2A, Desktop/PWA. Built by 550+ contributors

64k
headroomlabs-ai/
headroom

Compress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.

71k