A macOS menubar app for creating calendar events with natural language, powered by Claude.
Press ⌘⌥P from anywhere to open a Spotlight-style panel, describe your event in plain English (optionally attach a screenshot), and CalClaude uses the Claude CLI to parse it into a calendar event.
- Global hotkey — ⌘⌥P summons the input panel from any app
- Natural language — "Lunch with Sarah tomorrow at noon for 90 minutes"
- Screenshot support — Capture a region and let Claude read event details from images
- Confirmation step — Review parsed event details before creating
- Cancel support — Cancel long-running requests with a single click
- Guided onboarding — First-launch wizard walks through CLI, Accessibility, and Calendar setup
- macOS 13.0+
- Claude CLI installed and on your PATH (install guide)
- Xcode 15+ (to build from source)
git clone https://github.com/your-username/CalClaude.git
cd CalClaude
open CalClaude.xcodeprojSelect the CalClaude scheme, then ⌘R to build and run.
CalClaude's onboarding wizard checks three requirements:
- Claude CLI — Detects whether
claudeis installed and healthy - Accessibility — Needed for the global ⌘⌥P hotkey
- Calendar — Permission to create events in your calendars
The wizard reappears automatically if any requirement becomes unmet (e.g., CLI uninstalled, accessibility revoked).
- Press ⌘⌥P (or use the menubar menu) to open the panel
- Type a natural language event description
- Optionally click Capture Screenshot to include an image
- Press ⌘↵ or click Send
- Review the parsed event and click Create
- Press Escape to dismiss
- "Claude CLI auth error" — Run
claudein Terminal to re-authenticate - "No writable calendar found" — Open Calendar.app and create a calendar
- Accessibility not detected — Remove and re-add CalClaude in System Settings > Privacy & Security > Accessibility
- Request hanging — Click the Cancel button, or check your network connection
| File | Purpose |
|---|---|
CalClaudeApp.swift |
App entry, MenuBarExtra, NSApplicationDelegateAdaptor |
AppDelegate.swift |
Panel lifecycle, hotkey registration, onboarding, Claude/event orchestration |
FloatingPanel.swift |
NSPanel subclass (Spotlight-style floating window) |
HotKeyManager.swift |
Carbon global hotkey (⌘⌥P) |
InputPanelView.swift |
Text field, screenshot capture, send/cancel buttons |
AccessibilityRequiredView.swift |
PanelRootView + accessibility permission screen |
ClaudeCLIService.swift |
Runs Claude CLI with timeout, cancellation, and stderr surfacing |
CLICheck.swift |
Detects Claude CLI availability and health |
CalendarService.swift |
EventKit integration — calendar access and event creation |
CalendarEventPayload.swift |
Event payload model and JSON validation |
PanelState.swift |
Observable UI state (loading, errors, pending events) |
OnboardingState.swift |
Onboarding requirement tracking |
OnboardingView.swift |
Three-step onboarding wizard UI |
OnboardingWindowController.swift |
NSWindow management for onboarding |
SettingsView.swift |
Custom system prompt configuration |
Info.plist |
LSUIElement=true (menubar-only, no Dock icon) |