{"id":50523042,"url":"https://github.com/cursorvoice/cursor-voice","last_synced_at":"2026-06-20T00:00:51.507Z","repository":{"id":361907137,"uuid":"1256273336","full_name":"cursorvoice/cursor-voice","owner":"cursorvoice","description":"Talk to your Mac — a native macOS voice assistant that sees your screen, drives your Mac, and answers back. Powered by the OpenAI Realtime API. Open source.","archived":false,"fork":false,"pushed_at":"2026-06-10T13:13:12.000Z","size":1929,"stargazers_count":12,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-10T13:22:06.534Z","etag":null,"topics":["accessibility","ai","macos","macos-app","menubar-app","openai","realtime-api","swift","voice-assistant","voice-control"],"latest_commit_sha":null,"homepage":"https://cursorvoice.app","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cursorvoice.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"custom":["mailto:sponsor@cursorvoice.app"]}},"created_at":"2026-06-01T16:11:16.000Z","updated_at":"2026-06-10T13:14:00.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/cursorvoice/cursor-voice","commit_stats":null,"previous_names":["tottenabderrahmane1-create/cursor-voice","cursorvoice/cursor-voice"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/cursorvoice/cursor-voice","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cursorvoice%2Fcursor-voice","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cursorvoice%2Fcursor-voice/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cursorvoice%2Fcursor-voice/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cursorvoice%2Fcursor-voice/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cursorvoice","download_url":"https://codeload.github.com/cursorvoice/cursor-voice/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cursorvoice%2Fcursor-voice/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34552295,"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-19T02:00:06.005Z","response_time":61,"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":["accessibility","ai","macos","macos-app","menubar-app","openai","realtime-api","swift","voice-assistant","voice-control"],"created_at":"2026-06-03T06:00:31.029Z","updated_at":"2026-06-20T00:00:51.501Z","avatar_url":"https://github.com/cursorvoice.png","language":"Swift","funding_links":["mailto:sponsor@cursorvoice.app"],"categories":["Audio"],"sub_categories":[],"readme":"# Cursor Voice\n\n**→ [cursorvoice.app](https://cursorvoice.app)**\n\nA native macOS voice assistant that lives next to your cursor. Press a hotkey, talk to it, and it sees your screen, drives your Mac, and answers back — powered by the OpenAI Realtime API.\n\n```\n              cursor\n                 ┃\n                 ▼   ←  ⌃⌥/  summon\n                 ◯   listening…\n                 ◯   \"search youtube for lo-fi beats\"\n                 ◯   opening a link…\n```\n\n## What it does\n\n- **Voice-in / voice-out** via `gpt-realtime` (configurable per-session)\n- **Sees your screen** — captures the display via ScreenCaptureKit so it can answer about what's in front of you\n- **Drives the Mac** — synthesizes mouse and keyboard input via CGEvent; clicks UI elements by name via the Accessibility tree; runs AppleScript and shell commands\n- **Web access** — `web_search` (no API key) + `fetch_url` for live information\n- **Persistent memory** — remembers facts across sessions\n- **Wake word** — opt-in, on-device, listens for \"Hey Cursor\" via SFSpeechRecognizer\n\n## Install\n\n### One-line installer (curl)\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/cursorvoice/cursor-voice/main/install.sh | bash\n```\n\nDownloads the latest release, copies the app into `/Applications`, strips the quarantine attribute, and launches it. Done.\n\n### Homebrew\n\n```bash\n# Install\nbrew tap cursorvoice/cursor-voice\nbrew install --cask cursor-voice\n\n# Update to the latest release\nbrew upgrade --cask cursor-voice\n```\n\nThe cask's `postflight` strips quarantine automatically — no right-click-Open dance.\n\n### Manual\n\n1. Download the DMG from the [latest release](https://github.com/cursorvoice/cursor-voice/releases/latest).\n2. Open it, drag **Cursor Voice** into Applications.\n3. **First launch**: macOS Gatekeeper will refuse to open it (it's self-signed, not notarized — no paid Developer ID). Fix with one of:\n   - **Right-click the app → Open** → confirm in the dialog.\n   - Or: `xattr -dr com.apple.quarantine /Applications/CursorVoice.app \u0026\u0026 open /Applications/CursorVoice.app`\n\nYou'll see a small aurora orb appear in the menu bar.\n\n## Setup\n\n1. Click the menu bar orb → **Settings…**\n2. Paste your **OpenAI API key** (stored in your Keychain).\n3. Pick a **hotkey** (default `⌃⌥/`) and optionally enable the wake word.\n4. Macros will prompt for **Microphone**, **Speech Recognition**, **Screen Recording**, and **Accessibility** permissions the first time you press the hotkey. Grant all four — each one unlocks one capability.\n\n\u003e **Important**: macOS only honors Screen Recording and Accessibility on a fresh process launch, so quit and reopen the app after granting them.\n\n## Use\n\n- **Press the hotkey** anywhere — the orb materializes at your cursor.\n- **Speak** — it streams audio to the realtime model and speaks back.\n- **Interrupt** by talking over it; it stops mid-sentence cleanly.\n- **Click outside the orb / press Esc** to dismiss.\n- **Wake word** (opt-in): say *\"Hey Cursor\"* anywhere.\n\nExample commands:\n\n- \"What's on my screen?\"\n- \"Search YouTube for lo-fi beats\"\n- \"Open the Downloads folder\"\n- \"Play Bohemian Rhapsody in Apple Music\"\n- \"Click the Save button\"\n- \"Remember that my main project lives in `~/Code/foo`\"\n\n## Models\n\nPick a Realtime model in **Settings → Advanced**:\n\n| Model                    | Notes                                   |\n| ------------------------ | --------------------------------------- |\n| `gpt-realtime`           | Default GA model                        |\n| `gpt-realtime-2`         | Reasoning, slower, most capable         |\n| `gpt-realtime-1.5`       | Best voice quality                      |\n| `gpt-realtime-mini`      | Cheap \u0026 fast                            |\n| `gpt-realtime-translate` | Real-time speech-to-speech translation  |\n\nChanges apply to the open session immediately (it reconnects).\n\n## Permissions\n\nCursor Voice asks for, in order:\n\n1. **Microphone** — to capture your voice\n2. **Speech Recognition** — only if wake word is enabled (on-device)\n3. **Screen Recording** — for `see_screen` and the auto-attached screenshots after each action\n4. **Accessibility** — for `click_element` (AX-tree clicking) and mouse/keyboard synthesis\n\nYou can see live status in **Settings → Permissions** with deep-link buttons to the relevant System Settings pane.\n\n## Privacy\n\n- API key lives only in your local Keychain.\n- Audio is streamed to OpenAI's Realtime API while the orb is active. No audio leaves your Mac when the orb is dismissed.\n- Wake word listening is **on-device** — audio is not transmitted unless the phrase matches.\n- Memory is stored locally at `~/Library/Application Support/CursorVoice/memory.json`.\n\n## Build from source\n\nRequirements: macOS 14+, Command Line Tools (`xcode-select --install`).\n\n```bash\ngit clone https://github.com/cursorvoice/cursor-voice.git\ncd cursor-voice\n./scripts/build.sh\n./scripts/dmg.sh\nopen ./build/CursorVoice.app\n```\n\n`build.sh` compiles with `swiftc`, assembles the bundle, generates the `.icns`, writes `Info.plist`, and ad-hoc-signs with the hardened runtime. `dmg.sh` packs the bundle into a drag-to-Applications DMG.\n\nThere's no Xcode project required — the codebase is plain Swift sources organised under `Sources/CursorVoice/`.\n\n## Architecture\n\n- `App.swift` / `AppCoordinator.swift` — entry point, lifecycle, orchestrates everything\n- `MenuBarExtra` — SwiftUI menu bar item with `SettingsLink`\n- `Orb/` — borderless `NSPanel` floating at the cursor; the aurora SwiftUI view with reveal/breath/audio-reactive animations; cursor halo overlay\n- `Realtime/RealtimeClient.swift` — `URLSessionWebSocketTask` against `wss://api.openai.com/v1/realtime`; barge-in interruption with `response.cancel` + `conversation.item.truncate`\n- `Realtime/AudioEngine.swift` — `AVAudioEngine` capture at 24kHz PCM16, playback via `AVAudioPlayerNode`\n- `Realtime/ToolHandler.swift` — dispatch for the tool calls\n- `Capabilities/` — `ScreenCapture` (ScreenCaptureKit), `InputSynth` (CGEvent mouse/keyboard), `AXTree` (Accessibility tree introspection), `WebSearch`, `AppleScriptRunner`, `ShellRunner`, `MemoryStore`\n- `Hotkey/` — Carbon `RegisterEventHotKey`\n- `WakeWord/` — `SFSpeechRecognizer` continuous recognition\n- `Settings/` — SwiftUI Settings scene + Keychain\n\n## Caveats\n\n- **App Sandbox is off.** The shell + AppleScript tools and CGEvent posting need this. If you re-enable the sandbox, drop those capabilities.\n- **Ad-hoc signature.** No paid Developer ID, so no notarization. Gatekeeper will block on first launch — see install instructions above.\n- **Apple Silicon only.** Built for `arm64-apple-macos14.0`.\n\n## Support\n\nCursor Voice is free and open source.\n\n- **Questions or bug reports:** open a [GitHub issue](https://github.com/cursorvoice/cursor-voice/issues) or email **support@cursorvoice.app**.\n- **Sponsorship or partnership:** **sponsor@cursorvoice.app** (or the **Sponsor** button at the top of this repo). Keeping the project online costs a little each year — any support is genuinely appreciated.\n\nThank you 💜\n\n## License\n\nMIT.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcursorvoice%2Fcursor-voice","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcursorvoice%2Fcursor-voice","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcursorvoice%2Fcursor-voice/lists"}