{"id":46140985,"url":"https://github.com/824zzy/claude-visor","last_synced_at":"2026-04-10T00:07:49.710Z","repository":{"id":341139740,"uuid":"1169046048","full_name":"824zzy/claude-visor","owner":"824zzy","description":"A macOS Dynamic Island-style notch app for managing multiple Claude Code sessions. Monitor, navigate, and interact with Claude directly from your menu bar.","archived":false,"fork":false,"pushed_at":"2026-04-03T05:15:39.000Z","size":2299,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-03T05:36:30.237Z","etag":null,"topics":["ai","claude","claude-code","developer-tools","dynamic-island","macos","menu-bar","notch","swift","swiftui"],"latest_commit_sha":null,"homepage":"https://github.com/824zzy/claude-visor/releases/latest","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/824zzy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-28T05:16:54.000Z","updated_at":"2026-04-03T05:15:43.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/824zzy/claude-visor","commit_stats":null,"previous_names":["824zzy/claude-visor"],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/824zzy/claude-visor","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/824zzy%2Fclaude-visor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/824zzy%2Fclaude-visor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/824zzy%2Fclaude-visor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/824zzy%2Fclaude-visor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/824zzy","download_url":"https://codeload.github.com/824zzy/claude-visor/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/824zzy%2Fclaude-visor/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31424931,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-05T02:22:46.605Z","status":"ssl_error","status_checked_at":"2026-04-05T02:22:33.263Z","response_time":75,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","claude","claude-code","developer-tools","dynamic-island","macos","menu-bar","notch","swift","swiftui"],"created_at":"2026-03-02T06:08:11.126Z","updated_at":"2026-04-10T00:07:49.703Z","avatar_url":"https://github.com/824zzy.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"icon.png\" alt=\"Claude Visor\" width=\"128\" height=\"128\"\u003e\n  \u003ch1\u003eClaude Visor\u003c/h1\u003e\n  \u003cp\u003e\u003cstrong\u003eA Dynamic Island for your Claude Code sessions.\u003c/strong\u003e\u003c/p\u003e\n  \u003cp\u003e\n    Every running session pinned to your menu bar. See who needs approval, chat, and jump to the right terminal. Without leaving the app you're in.\n  \u003c/p\u003e\n  \u003cp\u003e\n    \u003ca href=\"https://github.com/824zzy/claude-visor/releases/latest\"\u003e\u003cimg src=\"https://img.shields.io/github/v/release/824zzy/claude-visor?style=for-the-badge\u0026label=Download\u0026color=brightgreen\" alt=\"Download\" /\u003e\u003c/a\u003e\n  \u003c/p\u003e\n  \u003cp\u003e\n    \u003ca href=\"#requirements\"\u003e\u003cimg src=\"https://img.shields.io/badge/macOS-14.0+-black?logo=apple\u0026logoColor=white\u0026style=flat-square\" alt=\"macOS 14.0+\" /\u003e\u003c/a\u003e\n    \u003ca href=\"#license\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-Apache%202.0-blue?style=flat-square\" alt=\"License\" /\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/824zzy/claude-visor/stargazers\"\u003e\u003cimg src=\"https://img.shields.io/github/stars/824zzy/claude-visor?style=flat-square\" alt=\"Stars\" /\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/824zzy/claude-visor/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/downloads/824zzy/claude-visor/total?style=flat-square\u0026label=downloads\" alt=\"Downloads\" /\u003e\u003c/a\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n\n---\n\n\u003cdiv align=\"center\"\u003e\n  \u003c!-- Drop a ~10 sec demo GIF here: pill lighting up → click → chat view → terminal jump. Tools: Kap or Gifski. --\u003e\n  \u003cimg src=\"screenshots/demo.gif\" alt=\"Claude Visor demo\" width=\"100%\" /\u003e\n  \u003cbr\u003e\u003cbr\u003e\n  \u003cimg src=\"screenshots/menubar-sessions.png\" alt=\"Menu bar sessions\" width=\"100%\" /\u003e\n  \u003cbr\u003e\u003cbr\u003e\n  \u003cimg src=\"screenshots/notch-panel.png\" alt=\"Notch panel\" width=\"55%\" /\u003e\n\u003c/div\u003e\n\n## Why Claude Visor?\n\nRunning three Claude Code sessions in parallel is great. Managing them is not.\n\nYou lose track of which one is waiting for approval. You alt-tab through terminals just to check progress. You miss the \"done\" sound because you were in another app. You end up `tmux attach`-ing five times a minute.\n\nClaude Visor pins every session to your menu bar. One glance tells you who's working, who needs approval, who's done. One click jumps you to the right terminal. One message from the notch without switching apps.\n\n## What's New in v1.7\n\n**Chat view revamped to match Claude Code.** Tools render in the same compact `⏺ Name / ⎿ summary` format you see in the terminal. Collapsed by default, one click for the full diff or output.\n\n**Multi-monitor pill widths.** The menu bar pill now adapts to whichever display has the notch, even when the active app lives on an external monitor.\n\n**Faster session clicks, wake-from-sleep recovery, and fewer crashes.** See the [v1.7.1 release notes](https://github.com/824zzy/claude-visor/releases/tag/v1.7.1) for the full list.\n\n## Features\n\n### 🎯 Session Management\nEvery running session gets its own pill in the menu bar, color-coded at a glance: **orange** working, **yellow** needs approval, **green** done. All sessions are detected automatically on startup, so nothing goes missing after a restart.\n\n### 💬 Inline Chat\nSend messages to any session from the notch. Tools render in Claude Code's compact style (contextual names like Update / Create / Search / Agent, collapsible results, ⎿ summary lines). Full markdown rendering for tables, code blocks, and lists. Multi-line input with Enter to submit and Shift+Enter for a new line.\n\n**No tmux required.** Messages go through Ghostty's AppleScript API in the background, so there's zero app switching.\n\n### ✅ Tool Approval\nSee the full command or diff before approving. Deny with feedback (\"use a different approach instead\") without typing into the terminal. The panel auto-opens when a session is waiting.\n\n### 🖥️ Multi-Monitor Aware\nThe pill adapts to whichever display has the notch, even when the active app lives on an external monitor. Pill widths recalculate on every app switch so nothing overlaps the menu bar.\n\n### 🖱️ Terminal Navigation\nClick a session pill to jump directly to its Ghostty split pane. Works across any window or split layout via a TTY marker injected into the session for deterministic matching.\n\n### 🔔 Notifications\nConfigurable sound when a session finishes. Pill bounces on completion. Auto-opens the notch when Claude asks for permission.\n\n## Roadmap\n\n- [x] Multi-session menu bar display\n- [x] Click-to-navigate to Ghostty panes\n- [x] Inline chat without tmux\n- [x] Rich tool approval with feedback\n- [x] Markdown table rendering\n- [x] Startup session discovery\n- [x] Claude Code-style compact tool display\n- [x] Multi-monitor pill width detection\n- [ ] Homebrew cask distribution\n- [ ] Keyboard shortcuts for session switching\n- [ ] Custom notch themes\n- [ ] iTerm2 / Terminal.app support\n- [ ] Quick approve from the pill (no panel open needed)\n\n## Installation\n\n### Homebrew (recommended)\n\n```bash\nbrew install --cask 824zzy/claude-visor/claude-visor\n```\n\nHomebrew takes care of everything: download, checksum verification, moving the app to `/Applications`, and removing the quarantine flag that triggers macOS's security dialog. No Gatekeeper warning, no Terminal workarounds.\n\n### Direct download\n\nGrab the latest `.zip` from the [releases page](https://github.com/824zzy/claude-visor/releases/latest), unzip, and drag `Claude Visor.app` to `/Applications`.\n\n**Expect a scary warning on first launch.** macOS will say *\"Apple could not verify that this app is free of malware.\"* This is not a real malware warning. Claude Visor isn't signed with a paid Apple Developer ID (the $99/year program), so macOS defaults to blocking it. The app is open source. You can read every line of it in this repo.\n\nTo open it anyway, run:\n\n```bash\nxattr -dr com.apple.quarantine /Applications/Claude\\ Visor.app\n```\n\nOr go to **System Settings → Privacy \u0026 Security**, scroll down, and click **Open Anyway** next to the Claude Visor entry.\n\nUse Homebrew if you want to avoid this entire dance.\n\n### Build from source\n\n```bash\ngit clone https://github.com/824zzy/claude-visor.git\ncd claude-visor\nxcodebuild -scheme ClaudeVisor -configuration Release build \\\n  CODE_SIGN_IDENTITY=- CODE_SIGNING_REQUIRED=NO\n```\n\nLocally-built apps don't get the quarantine flag, so they open without the warning.\n\n## Setup\n\n1. Launch Claude Visor\n2. Grant **Accessibility** permission (System Settings \u003e Privacy \u0026 Security \u003e Accessibility)\n3. Click the notch pill \u003e menu icon (☰) \u003e enable **Hooks**\n4. Start Claude Code in your terminal. Sessions appear automatically.\n\n## How It Works\n\nClaude Visor installs a hook script into `~/.claude/hooks/` that sends session events (tool calls, phase changes, permission requests) via a Unix domain socket. The app renders this state in the menu bar and notch panel.\n\n**Messaging without tmux**: Uses Ghostty's native AppleScript `input text` + `send key` commands to type directly into the correct terminal pane in the background. No focus switching, no app activation.\n\n**Terminal navigation**: Writes a unique marker to the session's TTY, searches Ghostty's accessibility tree for the marker, then clicks the matching pane.\n\n## Permissions\n\n| Permission | Required | Purpose |\n|---|---|---|\n| Accessibility | Yes | Menu bar width detection, Ghostty pane navigation, window interaction |\n\nClaude Visor will prompt for Accessibility on first launch. That's the only permission it needs.\n\n## FAQ\n\n**Why does it need Accessibility permission?**\nThree reasons: to measure the width of the frontmost app's menu bar (so pills don't overlap), to find the right Ghostty split pane when you click a session, and to detect which display has the notch when you're on a multi-monitor setup. Claude Visor never records keystrokes or reads window contents.\n\n**Does it work with Terminal.app or iTerm2?**\nNot yet. It's Ghostty-only right now because the messaging and pane navigation rely on Ghostty's AppleScript API and accessibility tree. Terminal.app and iTerm2 are on the roadmap.\n\n**Is any of my data sent anywhere?**\nYour Claude Code conversations stay local. They're read from `~/.claude/projects/` and rendered in the notch. The app does send anonymous usage metrics (app launches, version, macOS version) via Mixpanel to help prioritize fixes. No message content, file paths, or personally identifiable data.\n\n**Does it work on Macs without a notch?**\nThe pill anchors to the top-center of your main display. It still works without a physical notch, you just get a floating pill instead of one that wraps around the notch. MacBook Air M1/M2, Mac mini, iMac, and Mac Studio all work.\n\n**Does it work on Intel Macs?**\nmacOS 14.0 (Sonoma) or later is required. The release is a universal binary, so it runs natively on both Apple Silicon and Intel.\n\n## Star History\n\n\u003ca href=\"https://star-history.com/#824zzy/claude-visor\u0026Date\"\u003e\n  \u003cimg src=\"https://api.star-history.com/svg?repos=824zzy/claude-visor\u0026type=Date\" alt=\"Star History Chart\" width=\"600\" /\u003e\n\u003c/a\u003e\n\nIf Claude Visor saves you from alt-tabbing, a star goes a long way. It's how other Claude Code users find the project.\n\n## Credits\n\nForked from [Claude Island](https://github.com/farouqaldori/claude-island) by [@farouqaldori](https://github.com/farouqaldori). Original project licensed under Apache 2.0.\n\n## License\n\n[Apache 2.0](LICENSE.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F824zzy%2Fclaude-visor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F824zzy%2Fclaude-visor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F824zzy%2Fclaude-visor/lists"}