Say it once. The reminder appears automatically.
Hold a shortcut, speak, and release. V2Do transcribes your voice locally, asks Claude to split and structure the tasks, converts relative time expressions, and writes the result to Apple Reminders.
Hold trigger → record with a menu-bar and HUD indicator
Release → transcribe locally with SpeechAnalyzer
→ structure tasks and dates with Claude
→ write reminders through EventKit
→ show a confirmation notification with Undo
For example, “Remind me to eat at noon tomorrow, and submit the expense report before Friday” becomes two reminders with the corresponding due dates.
- Local speech recognition — audio stays on the Mac; only transcribed text is sent to the configured LLM.
- Relative date parsing — understands phrases such as “tomorrow at 3 PM,” “before Friday,” and “in half an hour.”
- Multiple tasks from one recording — splits a single spoken note into separate reminders.
- Offline fallback — if the model is unavailable, the original transcription is saved instead of discarded.
- Undo from the notification — remove reminders created by the most recent recording.
- Accidental-trigger protection — recordings shorter than 0.5 seconds are ignored.
- Native Reminders integration — benefits from Apple notifications, Siri, and iCloud sync.
- Menu-bar operation — optional launch at login, hidden Dock icon, and weekly creation/completion statistics.
- macOS 26 or newer; local transcription uses the SpeechAnalyzer API.
- An Anthropic API key or an Anthropic-compatible gateway for task extraction.
Download the latest V2Do-x.y.z.dmg from Releases, drag V2Do into Applications, and use right-click → Open the first time because the app is self-signed.
git clone https://github.com/realruian/v2do.git
cd v2do
python3 make_icon.py # requires Pillow only when regenerating the icon
./build_app.sh
./make_dmg.sh # optionalThe application bundle is written to dist/V2Do.app.
- Grant Microphone, Reminders, and Accessibility permissions.
- Add an Anthropic API key in Settings. For a compatible gateway, also set its base URL.
- Choose a trigger key and reminder list.
| Setting | Description |
|---|---|
| API key | Official Anthropic key or a compatible gateway key |
| API URL | Empty for api.anthropic.com, otherwise the compatible gateway base URL |
| Model | Defaults to a fast Haiku model; other supported models can be selected |
| Trigger | Right Option, Right Command, Right Control, or Left Control |
| Reminder list | Empty uses the system default list |
| Layer | Implementation |
|---|---|
| Desktop app | Swift Package, AppKit, and SwiftUI |
| Global shortcut | NSEvent global flagsChanged monitor |
| Speech recognition | macOS SpeechAnalyzer and SpeechTranscriber |
| Task extraction | Claude Messages API with tool-use JSON output |
| Reminders | EventKit EKReminder |
| Notifications | UserNotifications with an Undo action |
- The current build is self-signed and not notarized.
- Gateways must support the Anthropic
/v1/messagesformat; OpenAI-only gateways are not supported. - Speech recognition is currently fixed to Simplified Chinese.