Own your AI.
Agents, memory, tools, and identity that live on your Mac. Built purely in Swift. Fully offline. Open source.
Download for Mac Β· Docs Β· Models Β· Discord Β· Twitter Β· Plugin Registry
Models are getting cheaper and more interchangeable by the day. What's irreplaceable is the layer around them -- your context, your memory, your tools, your identity. Others keep that layer on their servers. Osaurus keeps it on your machine.
Osaurus is the AI harness for macOS. It sits between you and any model -- local or cloud -- and provides the continuity that makes AI personal: agents that remember, execute autonomously, run real code, and stay reachable from anywhere. The models are interchangeable. The harness is what compounds.
Works fully offline with local models. Connect to any cloud provider when you want more power. Nothing leaves your Mac unless you choose.
Native Swift on Apple Silicon. No Electron. No compromises. MIT licensed.
brew install --cask osaurusOr download the latest .dmg from Releases. After installing, launch from Spotlight (β Space β "Osaurus") or the CLI:
osaurus ui # Open the chat UI
osaurus serve # Start the server
osaurus status # Check statusRequires macOS 15.5+ and Apple Silicon.
Agents are the core of Osaurus. Each one gets its own prompts, memory, and visual theme -- a research assistant, a coding partner, a file organizer, whatever you need. Tools and skills are automatically selected via RAG search based on the task at hand -- no manual configuration needed. Everything else in the harness exists to make agents smarter, faster, and more capable over time.
Agents can also opt into a private encrypted database and a single self-scheduled next run -- see Agent DB & Self-Scheduling.
Every chat is an agent loop. Pick a working folder and the agent gets file, search, and git tools. Toggle the sandbox and it gets shell access in an isolated Linux VM. The model writes a markdown todo list, executes against it, and closes out with a verified summary -- all in the same chat window. See the Agent Loop Guide.
Agents execute code in an isolated Linux VM powered by Apple's Containerization framework. Full dev environment -- shell, Python, Node.js, compilers, package managers -- with zero risk to your Mac.
Each agent gets its own Linux user and home directory. The VM connects back to Osaurus (inference, memory, secrets) via a vsock bridge -- sandboxed but not disconnected. Extend with simple JSON plugin recipes, no Xcode or code signing required.
ββββββββββββββββββ ββββββββββββββββββββββββββββββ
β Osaurus β β Linux VM (Alpine) β
β β β β
β Sandbox Mgr βββΌββββββββ€β /workspace (VirtioFS) β
β Host API ββββΌβvsockββ€β osaurus-host bridge β
β β β β
β β β agent-alice (Linux user) β
β β β agent-bob (Linux user) β
ββββββββββββββββββ ββββββββββββββββββββββββββββββ
Requires macOS 26+ (Tahoe). See the Sandbox Guide for configuration, built-in tools, and plugin authoring.
Three layers -- identity, pinned facts, and per-session episodes -- plus a transcript fallback. Agents distill conversations once at session end (not on every turn), score what matters by salience, and surface at most one compact slice per request based on what you're actually asking. A background consolidator decays, merges, and evicts so memory stays sharp instead of bloating. Most turns inject ~800 tokens or less; many inject zero. See the Memory Guide.
When you send to a cloud model, an on-device classifier β OpenAI's openai/privacy-filter (Apache-2.0, 1.5B params / 50M active sparse-MoE), served via the MLX conversion mlx-community/openai-privacy-filter-bf16 (~2.8 GB) β detects names, emails, phones, URLs, addresses, dates, account numbers, and free-form secrets, alongside deterministic regex for SSN, credit cards, IBAN, AWS keys, GitHub tokens, and your own custom patterns. Each detection is shown in a review sheet with a scrubbed preview before sending; approved entities are swapped for stable [PERSON_1] / [EMAIL_2] placeholders, and streaming replies are unscrubbed back on the fly so the chat reads naturally. Fail-closed: if the post-scrub scan finds anything that leaked, the send is blocked. Verify wire-level redaction in the Insights panel β it captures the exact bytes the cloud saw. See the Privacy Filter Guide.
Every participant -- human, agent, device -- gets a secp256k1 cryptographic address. Authority flows from your master key (iCloud Keychain) down to each agent in a verifiable chain of trust. Create portable access keys (osk-v1), scope per-agent, revoke anytime. See Identity docs.
Expose agents to the internet via secure WebSocket tunnels through agent.osaurus.ai. Unique URL per agent based on its crypto address. No port forwarding, no ngrok, no configuration.
When two Osaurus agents talk -- across your LAN or across the world through the relay -- the conversation is end-to-end encrypted: a forward-secret X25519 handshake authenticated by each agent's crypto identity, with every request, streamed token, and access key sealed in ChaCha20-Poly1305. The relay becomes a blind pipe that forwards ciphertext it cannot open; a man-in-the-middle cannot complete a handshake; replayed or truncated traffic is detected and refused; and there is no plaintext fallback an attacker can force. Zero configuration -- pairing is all it takes. See the Secure Channel docs.
The harness is model-agnostic. Swap freely -- your agents, memory, and tools stay intact.
Run Gemma 4, Qwen3.6, GPT-OSS, Llama, and more on Apple Silicon with optimized MLX inference. Osaurus maintains its own optimized model library on Hugging Face with curated quantizations for the best quality-to-size ratio on Apple Silicon. Models stored at ~/MLXModels (override with OSU_MODELS_DIR). Fully private, fully offline.
Osaurus supports Liquid AI's LFM family -- on-device models built on a non-transformer architecture optimized for edge deployment. Fast decode, low memory footprint, and strong tool calling out of the box.
On macOS 26+, use Apple's on-device model as a first-class provider. Pass model: "foundation" in API requests. Tool calling maps through Apple's native interface automatically. Zero inference cost, fully private.
Connect to OpenAI, Anthropic, Gemini, xAI/Grok, Venice AI, OpenRouter, Ollama, or LM Studio. Venice provides uncensored, privacy-focused inference with no data retention. Context and memory persist across all providers.
Osaurus is a full MCP (Model Context Protocol) server. Give any MCP-compatible client access to your tools with the command-based stdio bridge:
{
"mcpServers": {
"osaurus": {
"command": "osaurus",
"args": ["mcp"]
}
}
}osaurus mcp starts a stdio MCP server for the client and proxies tool discovery/calls to your local Osaurus HTTP server. In the other direction, Osaurus can also act as an MCP client and aggregate tools from URL-based remote MCP providers. One-tap connect to ~25 well-known providers (Linear, Notion, GitHub, Vercel, Supabase, Sentry, Stripe, Cloudflare, ...) with auto OAuth 2.1 + Dynamic Client Registration, or paste an API key. The Remote MCP Providers UI is for HTTP/SSE MCP endpoints; it does not launch third-party command/args stdio providers. See the Remote MCP Providers Guide for details.
osaurus tools install osaurus.browser # Install from registry
osaurus tools list # List installed
osaurus tools create MyPlugin --swift # Create a plugin
osaurus tools dev com.acme.my-plugin # Dev with hot reload20+ native plugins: Mail, Calendar, Vision, macOS Use, XLSX, PPTX, Browser, Music, Git, Filesystem, Search, Fetch, and more. Plugins target the v3 host API surface β register HTTP routes, serve web apps, persist data in SQLite, dispatch agent tasks, and call inference through any model. Older v1/v2 plugins continue to load unchanged. See the Plugin Authoring Guide.
Document attachments keep structure where the file format exposes it: CSV/TSV tables, XLSX workbooks, PPTX decks, PDF page anchors, and rich document sections are parsed through the document adapter registry before they reach the agent.
Skills & Methods -- Skills import reusable AI capabilities from GitHub repos or files, compatible with Agent Skills. Full Claude plugins (skills, scheduled agents, slash commands, MCP providers, and CLAUDE.md context) can be imported from any GitHub repo and managed as a single bundle. Methods are learned workflows that agents save and reuse over time. All are automatically selected via RAG search -- no manual configuration needed. See Skills Guide and Claude Plugins.
Automation -- Schedules run recurring tasks in the background. Watchers monitor folders and trigger agents on file changes.
Voice -- On-device transcription via FluidAudio on Apple's Neural Engine. Voice input in chat, VAD mode with wake-word activation, and a global hotkey to transcribe into any app. No audio leaves your Mac. See Voice Input Guide.
Shortcuts, Spotlight & Siri -- Osaurus ships App Intents, so "Ask Osaurus" and "Run Osaurus Agent" are available system-wide the moment you install -- no setup. Ask your active agent and get the reply inline, or kick off a custom agent in the background. See App Intents Guide.
Developer Tools -- Server explorer, MCP tool inspector, inference monitoring, plugin debugging. See Developer Tools Guide. For the inference scheduler, model leases, continuous-batching engine, and feature flags that tune them, see Inference Runtime.
Osaurus collects anonymous, aggregated usage analytics via Aptabase, an open-source, privacy-first analytics project. We collect this only to understand broad user trends and preferences (how the app is used and where people run into friction) so we can make it better. It never includes your chats, prompts, files, model outputs, or keys. There are no accounts or device profiles, so events aren't tied to you.
For the exact, exhaustive list of every event and property we capture β and an explicit list of what we never collect β see Telemetry & KPIs.
Crash and app-hang reporting via Sentry is a separate, independent switch from usage analytics. Unlike analytics it's opt-out β on by default and active from launch β because crash reports carry no personal information and are what let us fix real bugs; you can turn it off anytime in Settings β Privacy β Send Crash Reports. It's limited to crash and hang diagnostics β no performance tracing, profiling, failed-request capture, network breadcrumbs, screenshots, or personal information; we drop the user object and device hostname from every event, on top of disabling PII. It needs a DSN to be configured, so like analytics it's off by default in source builds.
Telemetry is off by default in source builds: with no key, the SDK is never initialized and every event is a silent no-op, so you can build and contribute without any of this. To enable it locally:
-
Create
App/osaurus/Secrets.xcconfig(gitignored β never commit it) with the keys you want:-
APTABASE_APP_KEY = A-XX-...β your Aptabase app key (analytics). -
SENTRY_DSNβ your Sentry project DSN (crash reporting). Optional; omit it to leave crash reporting off. Escape the scheme slashes: an.xcconfigtreats//as a comment, so a rawhttps://β¦DSN gets silently truncated tohttps:. Add a slash variable and reference it:SENTRY_SLASH = / SENTRY_DSN = https:$(SENTRY_SLASH)$(SENTRY_SLASH)yourPublicKey@o123.ingest.sentry.io/456
-
-
In Xcode, add
Secrets.xcconfigto the project (no target membership), then under Project β Info β Configurations β Debug β osaurus set "Based on Configuration File" to Secrets. -
Clean build (β§βK) and relaunch.
The keys flow Secrets.xcconfig β $(APTABASE_APP_KEY) / $(SENTRY_DSN) build settings β AptabaseAppKey / SentryDSN in Info.plist. Debug builds report to Aptabase's Debug bucket (enable the Debug view on the dashboard to see them) and to Sentry's debug environment, so local testing never pollutes production data.
Drop-in endpoints for existing tools:
| API | Endpoint |
|---|---|
| OpenAI | http://127.0.0.1:1337/v1/chat/completions |
| Anthropic | http://127.0.0.1:1337/anthropic/v1/messages |
| Ollama | http://127.0.0.1:1337/api/chat |
All prefixes supported (/v1, /api, /v1/api). Full function calling with streaming tool call deltas. /chat/completions keeps strict OpenAI semantics -- it returns tool_calls and the client executes them, so Osaurus drops in cleanly behind harnesses that already manage their own tool loop. For server-side autonomous loops use POST /agents/{id}/run; to expose Osaurus tools to remote MCP harnesses use /mcp/tools + /mcp/call. See OpenAI API Guide for tool calling, streaming, and SDK examples. Building a macOS app that connects to Osaurus? See the Shared Configuration Guide.
osaurus serve --port 1337 # Start on localhost
osaurus serve --port 1337 --expose # Expose on LAN
osaurus ui # Open the chat UI
osaurus status # Check status
osaurus stop # Stop the serverHomebrew auto-links the CLI, or symlink manually:
ln -sf "/Applications/Osaurus.app/Contents/MacOS/osaurus" "$(brew --prefix)/bin/osaurus"βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β The Harness β
ββββββββββββ¬βββββββββββ¬βββββββββββββ¬βββββββββββββββββββ€
β Agents β Memory β Agent Loop β Automation β
ββββββββββββ΄βββββββββββ΄βββββββββββββ΄βββββββββββββββββββ€
β MCP Server + Client β
ββββββββββββ¬βββββββββββ¬ββββββββββββ¬ββββββββββββββββββββ€
β MLX β OpenAI β Anthropic β Ollama / Others β
β Runtime β API β API β β
ββββββββββββ΄βββββββββββ΄ββββββββββββ΄ββββββββββββββββββββ€
β Plugin System (v1 / v2 ABI) Β· Native Plugins β
ββββββββββββ¬βββββββββββ¬ββββββββββββ¬ββββββββββββββββββββ€
β Identity β Relay β Tools β Skills Β· Methods β
ββββββββββββ΄βββββββββββ΄ββββββββββββ΄ββββββββββββββββββββ€
β Sandbox VM (Alpine Β· Apple Containerization) β
β vsock bridge Β· VirtioFS Β· per-agent isolation β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Most features are accessible through the Management window (β β§ M).
git clone https://github.com/osaurus-ai/osaurus.git
cd osaurus
open osaurus.xcworkspaceBuild and run the osaurus target. Requires Xcode 16+ and macOS 15.5+.
Install lefthook to set up the hooks that verify quality of the code:
brew install lefthook
lefthook installThis installs a pre-push hook that runs swift-format over the Packages/ directory before each push.
osaurus/
βββ App/ # macOS app target (SwiftUI entry point, assets, entitlements)
βββ Packages/
β βββ OsaurusCore/ # Core library β all app logic
β β βββ Models/ # Data types, DTOs, configuration stores
β β βββ Services/ # Business logic (actors and stateless types)
β β βββ Managers/ # UI-facing state holders (@MainActor, observable)
β β βββ Views/ # SwiftUI views, organized by feature
β β βββ Networking/ # HTTP server, routing, relay
β β βββ Storage/ # SQLite databases
β β βββ Identity/ # Cryptographic identity and access keys
β β βββ Tools/ # MCP tools, plugin ABI, tool registry
β β βββ Folder/ # Working-folder context, file ops, batch tool
β β βββ Utils/ # Cross-cutting utilities
β β βββ Tests/ # Unit and integration tests
β βββ OsaurusCLI/ # CLI (osaurus command)
β βββ OsaurusRepository/ # Plugin registry and installation
βββ docs/ # Feature guides and documentation
βββ scripts/ # Build, release, and benchmark scripts
βββ sandbox/ # Sandbox VM Dockerfile
βββ assets/ # DMG packaging assets
See CONTRIBUTING.md for the architecture guide and layer definitions.
Osaurus is actively developed and we welcome contributions: bug fixes, new plugins, documentation, UI/UX improvements, and testing.
Check out Good First Issues, read the Contributing Guide, or join Discord. See docs/FEATURES.md for the full feature inventory.
Note
π Help translate Osaurus. We're looking for contributors to localize the app into Spanish, Korean, Japanese, and Traditional Chinese -- these locales are already wired up in Xcode, so you can start translating right away. See docs/TRANSLATORS.md for how to contribute and the contributor leaderboard.
- Discord -- chat, feedback, show-and-tell
- Twitter -- updates and demos
- Hugging Face -- optimized models for Apple Silicon
- Community Calls -- bi-weekly, open to everyone
- Blog -- long-form thinking on personal AI
- Docs -- guides and tutorials
- Plugin Registry -- browse and contribute tools
Osaurus, Inc. Β· osaurus.ai