{"id":50547322,"url":"https://github.com/affirm/navi","last_synced_at":"2026-06-04T00:01:25.899Z","repository":{"id":352717213,"uuid":"1213826374","full_name":"Affirm/navi","owner":"Affirm","description":"Claude Code session monitor and notifier","archived":false,"fork":false,"pushed_at":"2026-06-02T14:37:04.000Z","size":151,"stargazers_count":9,"open_issues_count":1,"forks_count":2,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-02T16:22:33.912Z","etag":null,"topics":["claude-code-plugin","monitoring-plugin","monitoring-tool","notifications"],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Affirm.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","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-04-17T20:00:18.000Z","updated_at":"2026-06-02T14:42:49.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Affirm/navi","commit_stats":null,"previous_names":["affirm/navi"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Affirm/navi","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Affirm%2Fnavi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Affirm%2Fnavi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Affirm%2Fnavi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Affirm%2Fnavi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Affirm","download_url":"https://codeload.github.com/Affirm/navi/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Affirm%2Fnavi/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33884734,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-03T02:00:06.370Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["claude-code-plugin","monitoring-plugin","monitoring-tool","notifications"],"created_at":"2026-06-04T00:01:24.907Z","updated_at":"2026-06-04T00:01:25.888Z","avatar_url":"https://github.com/Affirm.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Navi 🧭\n[![License](https://img.shields.io/badge/license-BSD--3--Clause-blue)](LICENSE)\n[![Platform](https://img.shields.io/badge/platform-macOS-lightgrey)](https://github.com/Affirm/navi)\n[![Claude Code](https://img.shields.io/badge/Claude%20Code-plugin-8A63D2)](https://docs.anthropic.com/en/docs/claude-code)\n\n**A floating macOS monitor for Claude Code sessions**\n\nSee what every Claude Code session is doing across all your terminals — at a glance, from one floating window.\n\n\n\n\u003cimg width=\"364\" height=\"277\" alt=\"Screenshot 2026-04-20 at 1 13 09 PM\" src=\"https://github.com/user-attachments/assets/64e85feb-0caf-4927-8181-66bae2f75430\" /\u003e\n\n## Installation\n\n```shell\n/plugin marketplace add Affirm/navi\n/plugin install navi@navi\n```\n\nHooks are registered automatically. Navi builds and launches itself the first time an event fires.\n\n## What You Get\n\n| Feature | Description |\n|---------|-------------|\n| **Session status** | Working (green), Idle (blue), needs attention (orange) at a glance |\n| **Inline permissions** | Approve or deny tool permissions without switching terminals |\n| **Session discovery** | Auto-detects running sessions by scanning `~/.claude/sessions/` |\n| **Jump to terminal** | One-click focus the correct terminal tab for any session |\n| **Auto-dismiss** | Stale permission cards clean up when approved in the terminal |\n| **Menu bar icon** | Toggle the window; icon signals pending permissions |\n| **Per-event sounds** | Configurable alerts for permission, completion, notification events |\n| **Multi-session** | Monitor many concurrent Claude Code sessions side-by-side |\n| **Session row badges** | Optional per-session badges for working folder, git status, permission mode, model, and open PR (each independently toggleable in Settings, all default off) |\n\n## Requirements\n\n- macOS (tested on macOS 15+)\n- Xcode Command Line Tools (`xcode-select --install`)\n- Python 3 (ships with macOS)\n- [Claude Code](https://docs.anthropic.com/en/docs/claude-code)\n\n## Settings\n\nClick the gear icon to configure sounds, font size, and experimental features (jump-to-terminal, menu bar icon, session status, instant notifications, etc.). Each feature is independently toggleable; most default on.\n\nEach sound can be set to any macOS system sound (Glass, Ping, Submarine, etc.).\n\n## Manual Setup\n\nIf you'd rather not use the plugin system:\n\n```bash\ngit clone https://github.com/Affirm/navi.git\ncd navi\nbash build.sh        # Downloads + verifies the published Navi.app release\nopen Navi.app\n```\n\nThen register the hooks from `hooks/hooks.json` in your `~/.claude/settings.json`, replacing `${CLAUDE_PLUGIN_ROOT}` with the absolute path to this directory.\n\n## How It Works\n\n```\nClaude Code session\n  │\n  ├── UserPromptSubmit ──→ userpromptsubmit.sh ──→ writes working signal ──→ /tmp/navi/events/\n  ├── PreToolUse ────────→ pretooluse.sh ────────→ captures tool_use_id ──→ /tmp/navi/pretooluse/\n  ├── PermissionRequest ─→ hook.sh → parse_event.py → event JSON ─────────→ /tmp/navi/events/\n  ├── PostToolUse ───────→ hook.sh → parse_event.py → resolve signal ─────→ /tmp/navi/events/\n  ├── Stop ──────────────→ hook.sh → parse_event.py → event JSON ─────────→ /tmp/navi/events/\n  ├── StopFailure ───────→ hook.sh → parse_event.py → event JSON ─────────→ /tmp/navi/events/\n  ├── Notification ──────→ hook.sh → parse_event.py → event JSON ─────────→ /tmp/navi/events/\n  └── PostToolUseFailure → hook.sh → parse_event.py → resolve signal ─────→ /tmp/navi/events/\n\n~/.claude/sessions/*.json ──→ Navi session discovery (PID liveness + TTY lookup)\n\nNavi.app\n  ├── polls /tmp/navi/events/ (instant via kqueue watcher + fallback timer)\n  ├── discovers sessions from ~/.claude/sessions/\n  ├── tracks Working/Idle/Dead status per session\n  └── displays events in SwiftUI floating window + menu bar popover\n        │\n        User clicks Approve/Deny\n        │\n        writes response to /tmp/navi/responses/\u003cevent-id\u003e\n        │\n        hook.sh reads response, returns decision to Claude Code\n```\n\nFor permission requests, `hook.sh` writes an event file and polls for a response file. When you click Approve/Deny, Navi writes the response, the hook picks it up and returns the decision to Claude Code. If no response comes within 120 seconds, it falls back to the terminal prompt.\n\nFor architecture details and guidance on extending Navi, see [`CONTRIBUTING.md`](CONTRIBUTING.md).\n\n## Uninstall\n\n```bash\nclaude plugin uninstall navi\npkill -x Navi 2\u003e/dev/null\nrm -rf /tmp/navi\n```\n\n## Development\n\n```bash\ngit clone https://github.com/Affirm/navi.git\ncd navi\nbash scripts/build-from-source.sh ./out   # Compiles Sources/ into ./out/Navi.app(.zip)\nopen ./out/Navi.app                       # Launch\n```\n\n`bash build.sh` is the *install* entrypoint — it downloads the pre-built release artifact for the version in `plugin.json` and verifies its checksum + Sigstore attestation, but does not compile from source. Contributors compile via `scripts/build-from-source.sh` (or `NAVI_BUILD_FROM_SOURCE=1 bash build.sh` to install a local build in place). See [`CONTRIBUTING.md`](CONTRIBUTING.md) for architecture, the feature-flag system, and guidance on adding experimental features.\n\n## Troubleshooting\n\n### `failed to build module 'SwiftUI'` / `this SDK is not supported by the compiler`\n\n```\nfailed to build module 'SwiftUI', this SDK is not supported by the compiler\n(the SDK is built with 'Apple Swift version 6.0.3 effective-5.10 (swiftlang-6.0.3.1.5),\nwhile this compiler is 'Apple Swift version 6.0.3 effective-5.10 (swiftlang-6.0.3.1.10...)'\n```\n\nThis is not a Navi bug — it means your Xcode Command Line Tools install is inconsistent: the SDK (`.swiftmodule` files for SwiftUI, AppKit, etc.) was produced by a sibling build of the Swift compiler than the one `swiftc` reports. That usually happens after a partial macOS/CLT update, or when Xcode.app and CLT end up on different update cycles.\n\n**Check what's active:**\n\n```bash\nxcode-select -p\nxcrun swift --version\nxcrun --show-sdk-version\nxcrun --show-sdk-path\n```\n\n`scripts/build-from-source.sh` prints the same information at the top of every build, so you can read it from the build output too.\n\n**Fix in order of escalation:**\n\n1. **Re-align the developer directory** (30 seconds). If you have Xcode.app installed, point to it; otherwise point to CLT:\n\n   ```bash\n   # With Xcode.app installed\n   sudo xcode-select -s /Applications/Xcode.app/Contents/Developer\n\n   # CLT only\n   sudo xcode-select -s /Library/Developer/CommandLineTools\n   ```\n\n2. **Reinstall Command Line Tools** (5 minutes). Most reliable fix when you don't have Xcode.app, or when alignment didn't help:\n\n   ```bash\n   sudo rm -rf /Library/Developer/CommandLineTools\n   xcode-select --install\n   ```\n\n3. **Update macOS + Xcode/CLT to current.** If the versions have drifted far apart across major releases, install all pending updates in System Settings → General → Software Update, then reinstall CLT.\n\nAfter any of these, run `bash scripts/build-from-source.sh ./out` (or `bash build.sh` if you only meant to install the published release) again.\n\n## Contributors\n\nCreated by [@Clast](https://github.com/Clast)\n\nNavi started inside Affirm's internal plugin catalog before it became this standalone repo, so some contributors don't appear in this repo's git history. Special thanks to:\n\n- [@KieranLitschel](https://github.com/KieranLitschel) — improved session status (Working / Idle), session names, auto-dismiss, jump-to-terminal button\n\n- [@manassarpatwar](https://github.com/manassarpatwar) — menu bar UI, instant filesystem-watcher notifications, plus a long tail of stability fixes\n\n- [@tarkatronic](https://github.com/tarkatronic) — suggested open-sourcing Navi and helped with open-source setup\n\n## License\n\nBSD 3-Clause — see [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faffirm%2Fnavi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faffirm%2Fnavi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faffirm%2Fnavi/lists"}