VibeRite is a native macOS writing assistant that improves selected text anywhere on your Mac using local Ollama models. No cloud APIs. Private by design.
- macOS 14 or later
- Xcode 15+
- Ollama 0.24+ running locally
- Accessibility permission for VibeRite
# Install from https://ollama.com if needed
ollama serveIn another terminal, pull the default model:
ollama pull llama3.2:3bOther supported models (optional):
ollama pull llama3
ollama pull mistral
ollama pull gemmaVerify Ollama is reachable:
curl http://localhost:11434/api/tags- Open
VibeRite.xcodeprojin Xcode. - Select the VibeRite scheme and your Mac as the destination.
- Press ⌘R to build and run.
- Grant Accessibility when prompted (required for global hotkey and paste workflows).
- Open System Settings → Keyboard → Keyboard Shortcuts → Services.
- Find VibeRite and enable the writing actions you want.
- In supported apps, select text → right-click → Services → VibeRite → choose an action.
Works best in native and standard text fields (Notes, TextEdit, Mail, Safari, Slack, Xcode, Chrome, etc.).
- Select text in any app.
- Press ⌘⇧F to run Improve Writing (default hotkey action).
- A small floating HUD shows progress; improved text is pasted automatically.
VibeRite/
├── App/ # App entry, AppDelegate, floating HUD
├── Models/ # WritingAction, OllamaModel, settings, state
├── Services/
│ ├── HotkeyManager # Carbon global hotkey (⌘⇧F)
│ ├── ContextMenuManager # NSServices registration
│ ├── ClipboardManager # Pasteboard snapshot/restore
│ ├── AccessibilityManager
│ ├── OllamaService # Local /api/generate streaming
│ ├── PromptTemplateService
│ ├── TextReplacementService
│ ├── PermissionsManager
│ └── WritingCoordinator # End-to-end pipeline
├── ViewModels/ # MVVM (MainViewModel)
├── Views/ # SwiftUI main window + HUD
└── Utilities/
MVVM flow: Views bind to MainViewModel → WritingCoordinator orchestrates capture → Ollama → replace → ProcessingStateHolder drives the floating panel.
Hotkey path: HotkeyManager → copy selection (⌘C via CGEvent) → Ollama → paste (⌘V) with clipboard restored afterward.
Services path: macOS passes selected text on the service pasteboard → Ollama → result written back to the same pasteboard.
| Permission | Why | How |
|---|---|---|
| Accessibility | Simulate ⌘C/⌘V and read selection system-wide | System Settings → Privacy & Security → Accessibility → enable VibeRite |
| Network (outgoing) | Talk to localhost:11434 only |
Granted via entitlements; no internet required |
VibeRite does not send text to the cloud. All inference runs through your local Ollama instance.
| Setting | Value |
|---|---|
| API | http://localhost:11434/api/generate |
| Default model | llama3.2:3b |
| Supported models | llama3.2:3b, llama3, mistral, gemma |
| Streaming | Enabled (NDJSON chunks) |
Ollama not running: The app shows a friendly error and suggests ollama serve.
Model missing: Pull the model, e.g. ollama pull llama3.
Switch models in the VibeRite main window (segmented control). Choice is persisted in UserDefaults.
- Nothing happens on ⌘⇧F: Confirm Accessibility is enabled and VibeRite is running in the background.
- “No text selected”: Highlight text first; some apps block synthetic copy — try Services instead.
- Services missing: Rebuild the app, then re-check Keyboard Shortcuts → Services.
- Slow responses: Use a smaller model or shorter selections (12k character limit).
- Menu bar presence
- Custom prompts and shortcuts
- Preview / diff before replace
- Writing history
- Menu bar command palette