Your Mac. Your AI. No cloud required.
A native macOS AI assistant that sees your screen, hears your voice,
runs your tools, and remembers what matters — built entirely in Swift.
This is a solo project. I built Dockwright because I wanted an AI assistant that actually lives on my Mac — not in a browser tab. It's early, it's ambitious, and I'd love for people to try it out and share what works (and what doesn't). If you're into AI tooling, macOS development, or just want a better assistant — pull requests, issues, and feedback are all welcome. Let's build something great together.
| 30 Tools Email, calendar, contacts, shell, browser, music, iMessage, files, and more |
9 Providers Claude, OpenAI, Gemini, Grok, xAI, DeepSeek, Mistral, Kimi, Ollama |
Voice Say "Hey Doc" — wake word, speech-to-text, text-to-speech |
Screen Aware OCR every 15s, knows what's on screen, which apps and tabs are open |
| UI Automation Click, type, and read any app via Accessibility API |
Memory Remembers facts, ranked retrieval, poison guard, auto-consolidation |
Skills 20 community skills pre-bundled, teach it new ones with Markdown |
0 Dependencies Pure Swift + Apple frameworks. No Electron, no Docker, no npm |
Dockwright is a fully native macOS assistant — not a wrapper around a web app. It connects directly to Claude, OpenAI, Gemini, Grok, xAI, or local models via Ollama, and gives them real access to your system: files, shell, screen, browser, calendar, contacts, reminders, and more.
It doesn't just chat. It acts.
- Streaming responses with full Markdown rendering
- Multi-provider support — Claude, OpenAI, Gemini, Grok, xAI, DeepSeek, Mistral, Kimi, Ollama
- OAuth sign-in (Claude, OpenAI) or API key
- Conversation history with full-text search
- Image analysis — drag, paste, or screenshot
Shell commands, file operations, web search, clipboard, system info, Apple Reminders, Apple Notes, Calendar, Contacts, iMessage, Music/Spotify control, Finder operations, and more — 30 tools the AI can call autonomously.
Direct control of any macOS app via the Accessibility API. Click buttons, type text, press keyboard shortcuts, read UI elements — no pixel-guessing. Live AXObserver event stream monitors the frontmost app in real time, building a semantic model the AI can act on instantly.
Hands-free operation with Apple Speech Recognition. Say "Hey Doc" to activate — no button needed. Speak naturally, get a spoken response. Wake word detection via SFSpeechRecognizer (no external dependencies), silence detection, typewriter-style streaming, TTS with automatic text cleanup (strips markdown, emojis, whitespace), and session coordination to prevent audio conflicts. Supports macOS system TTS and ElevenLabs.
A 15-second ambient loop captures your screen, runs OCR, and feeds context to the AI. It knows which app is active, what you're reading, and which browser tabs are open — across Safari, Chrome, Firefox, Edge, Arc, and Brave.
Read conversations, search messages, and send texts — directly from the AI. Reads the native Messages database and sends via AppleScript.
Full cron engine with natural language. "Remind me in 2 minutes to stretch" just works. Recurring jobs, one-shot reminders, missed-job catch-up on relaunch, and native macOS notifications.
Give Dockwright a goal and it will plan, execute, self-correct, and report progress — up to 50 tool calls per task with full cancellation support. Token budgets auto-scale per model (800K for Opus, 160K for Sonnet). Smooth typewriter-style streaming at 30Hz — no stutter, no lag.
Auto-extracts facts from conversations and recalls them when relevant. Ranked retrieval (importance × relevance), automatic consolidation of stale/duplicate facts, and a PoisonGuard that blocks prompt injection attempts and credential leaks from being stored. Remembers tool failures and adapts — never bans a tool, just learns to call it smarter. SQLite + FTS5 backed.
Drop a Markdown file in ~/.dockwright/skills/ and Dockwright learns new abilities. No code required. Comes with 20 community skills pre-bundled — web search, image generation, security scanning, Excel/Word creation, and more. Activate them from the Skill Store.
Set your name, bio, avatar, and shipping address in Settings → Profile. Dockwright uses your name in conversations, shows your picture in chat, and auto-fills checkout forms when shopping on your behalf. You can also rename your assistant — call it whatever you want.
Floating chat accessible from the macOS menu bar with the Dockwright helm icon. Pin it to stay on top (floating window level) while Dockwright works in Safari or other apps. Resize between compact and expanded. Same AppState, same conversation, same tools — just a different window.
Right-click any conversation in the sidebar to pin it. Pinned conversations stay at the top in their own "Pinned" group, never buried by newer chats.
- Telegram bot — chat with Dockwright from your phone
- WhatsApp Business — two-way messaging via Meta Cloud API
- Discord — webhook notifications
- A2A server — agent-to-agent protocol on port 8766
- MCP server — Model Context Protocol on port 8767
- Siri Shortcuts — 9 intents for Spotlight and Siri
- Menu bar — always one click away
- Global hotkey — Cmd+Shift+Space
Download: Dockwright-1.0.dmg — open the DMG, drag to Applications, launch.
Build from source:
- Open Dockwright.xcodeproj in Xcode 16+
- Cmd+R to build and run
First launch:
- Sign in with Claude OAuth or paste an API key
- Start with: "What's on my screen?" or "Hey Doc, what's in my browser?"
| OS | macOS 14.0 Sonoma or later |
| Xcode | 16.0 or later |
| AI Provider | Anthropic, OpenAI, Google, xAI, DeepSeek, Mistral, Kimi, or Ollama |
| Dependencies | None — pure Apple frameworks + system tools auto-installed via Homebrew when needed |
Dockwright can control system settings like sleep mode and power management. This requires one-time setup. Open Terminal (press Cmd+Space, type "Terminal", hit Enter) and paste:
Safe option — only allows sleep/power control:
echo '%staff ALL=(ALL) NOPASSWD: /usr/bin/pmset' | sudo tee /etc/sudoers.d/dockwrightEnter your Mac password when asked. You won't see the characters — that's normal. Press Enter.
Full option — allows Dockwright to run any system command without asking for your password:
echo "$(whoami) ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/dockwrightWithout either option, Dockwright will simply ask you to run system commands yourself.
Dockwright/
├── App/ Entry point, global state, permissions
├── Core/
│ ├── Agent/ Autonomous multi-step execution
│ ├── Channels/ Notification delivery
│ ├── Heartbeat/ Proactive health checks
│ ├── LLM/ Multi-provider streaming
│ ├── Memory/ SQLite + FTS5, auto-formation, error memory
│ ├── Scheduler/ Cron engine, reminders
│ ├── Sensory/ Screen capture, OCR, browser tabs, world model, ProcessSymbiosis, AX control
│ ├── Skills/ Markdown skill loader
│ ├── Tools/ 30 tools (incl. UI automation, iMessage, Calendar, Music)
│ └── Voice/ STT, TTS, wake word
├── UI/ SwiftUI (chat, sidebar, settings, onboarding)
└── Utilities/ Keychain, SQLite, OAuth, logging
95+ Swift files · 30,000+ lines · Zero external dependencies
Dockwright runs locally on your Mac. Screen captures, voice recordings, and memory stay on disk in ~/.dockwright/. API calls go directly to your chosen provider — nothing passes through third-party servers.
See CONTRIBUTING.md for guidelines.
Questions, feedback, or just want to say hi? Reach out at doc@dockwright.com.
MIT License — free to use, modify, and distribute.
