{"slug": "show-hn-orb-self-hosted-ai-assistant-that-messages-you-first", "title": "Show HN: Orb – Self-hosted AI assistant that messages you first", "summary": "Developer Nathan Langley released Orb, a self-hosted AI assistant backend that proactively messages users via an iOS companion app. The open-source server runs on Windows (macOS planned), uses Claude through the user's own Claude Code CLI by default, and includes a voice loop, agent spine with ~60 built-in tools, multi-brain router, and push notifications with deduplication.", "body_md": "**The backend behind Orb —\nthe AI assistant that talks first, on hardware you own.**\n\n[ Get the app](https://apps.apple.com/us/app/orb-ai/id6776376035) ·\n\n[·](https://nathanlangley.dev/Orb-Wiki/self-hosting.html)\n\n**Setup walkthrough**[·](/getorb/Orb-Backend/blob/main/API.md)\n\n**API reference**\n\n**Every setting** The iOS app is the face; this server is everything behind it. The app works out of the box on-device — this server is the optional half that gives it hands, memory, and a machine of its own. Orb doesn't wait to be asked: the backend watches over your projects, keeps a running model of what's going on, plans ahead, does approved work on its own, and reaches your phone only when it's genuinely worth your attention.\n\n| Capability | What that means |\n|---|---|\nVoice server |\nA WebSocket voice loop: speech in (local Whisper), a real conversation out (neural TTS). No wake word on the phone — you just talk. |\nAgent spine |\nOne thin loop where the model itself decides when to speak and when to act, with ~60 built-in tools: weather, mail, files, stocks, screen, sessions, missions, reminders, notifications. |\nMulti-brain router |\nClaude (through your own logged-in Claude Code CLI), Grok, Codex, or local models behind a single consistent voice. Swap mid-conversation; the persona never changes. |\nThe mind |\nA process that runs between conversations: maintains a situation model of your life and projects, notices what changed, makes predictions, proposes real work, supervises what you approve. |\nSessions |\nDelegate long-running jobs (builds, research, training runs) to tracked background agents you can watch, message, and stop from your phone. |\nPush done right |\nAPNs notifications with deduplication, hard pacing, full-message payloads, and delivery receipts that can never be silently swallowed. |\n\nWindows-first today (macOS backend planned). Python 3.11+.\n\n```\ngit clone https://github.com/getorb/Orb-Backend\ncd Orb-Backend\npython -m venv venv\nvenv\\Scripts\\pip install -r requirements.txt\nvenv\\Scripts\\python scripts\\setup.py     # guided: token, identity, boot check\nvenv\\Scripts\\python supervisor.py        # runs the server with crash recovery\n```\n\nThen give it an address your phone can reach (`tailscale serve --bg 8340`\n\n) and pair\nthe app: **menu (☰) → Your PC**. The full walkthrough with every gotcha spelled out:\n** Self-Hosting guide**.\n\nPrefer to delegate? Install [Claude Code](https://docs.anthropic.com/en/docs/claude-code),\nrun `claude`\n\nin the repo root, and say **\"Set up the Orb backend for me\"** — the\nrepo's CLAUDE.md teaches it the whole flow.\n\n**Model access**— the default conversational brain is Claude through your own logged-in[Claude Code](https://docs.anthropic.com/en/docs/claude-code)CLI (`claude -p`\n\n). No API key is shipped, asked for, or stored. Grok/Codex CLIs and any OpenAI-compatible free tier can slot into the router chain (`ORB_FREE_BACKENDS`\n\n).**Push**— your own APNs key from your Apple Developer account (a`.p8`\n\nfile — never commit it; the`.gitignore`\n\nalready refuses). Background push to a*closed*app only works for an iOS build under your own team + bundle id; with the public App Store app you get in-app WebSocket notifications instead. Details in[SELF_HOSTING.md](/getorb/Orb-Backend/blob/main/SELF_HOSTING.md).**Mail**— your own Gmail app password; the built-in mail tools are read-only.\n\nEvery variable is documented in [.env.example](/getorb/Orb-Backend/blob/main/.env.example) and\n[SELF_HOSTING.md](/getorb/Orb-Backend/blob/main/SELF_HOSTING.md).\n\n| File | Role |\n|---|---|\n`server_win.py` |\nThe server: WS voice loop, HTTP API, brain dispatch, the notification choke point (dedup / pacing / receipts) |\n`agent.py` |\nThe thin agent loop — the model decides talk-vs-tool, the harness executes |\n`brain.py` |\nBrain router: Claude CLI, Grok/Codex, free backends, local floor, cooldowns |\n`tool_registry.py` + `otools/` |\nEvery tool, one file each, registered with `@tool(...)` |\n`mcp_http.py` + `orb_mcp.py` |\nThe tool surface as MCP: resident loopback `/mcp` for the Claude brain; stdio for Codex/Grok |\n`proactive_engine.py` |\nZero-AI collection ticks, twice-daily synthesis, the scheduler (reminders survive restarts) |\n`mind.py` |\nBetween-conversation agency: situation model, budgeted wakes, approval-gated proposals |\n`stt.py` / `personas.py` |\nEars (faster-whisper) and voice (neural TTS + persona definitions) |\n`supervisor.py` |\nKeeps the backend alive; enables self-restart after code changes |\n\n**Live on the App Store (free):**\n[https://apps.apple.com/us/app/orb-ai/id6776376035](https://apps.apple.com/us/app/orb-ai/id6776376035)\n\nThe app itself is closed-source. This backend is the open half of the pair: the app\ntalks to it over a WebSocket + a small HTTP API documented in [API.md](/getorb/Orb-Backend/blob/main/API.md) —\nnothing stops you from building your own client.\n\n**Local-first.** Your data is collected on your machine and stays there.**Bring your own keys.** The backend never ships credentials.**Structural safety.** Autonomous surfaces can't reach destructive tools — those tools are absent from those surfaces, not merely discouraged. Anything that acts on the world requires your explicit approval, and every autonomous step is logged where you can read it.**Silence is a feature.** The proactive layer treats \"nothing worth saying\" as a correct, first-class outcome.\n\n- Fully offline local-model brain tier (Ollama / Qwen) as a first-class default.\n- macOS backend.\n- QR pairing from inside the app.\n\nMIT — see [LICENSE](/getorb/Orb-Backend/blob/main/LICENSE). The license covers this backend only; the Orb iOS app\nand the Orb name/branding are not part of it.\n\nBuilt by [ninjahawk](https://github.com/ninjahawk).", "url": "https://wpnews.pro/news/show-hn-orb-self-hosted-ai-assistant-that-messages-you-first", "canonical_source": "https://github.com/getorb/Orb-Backend", "published_at": "2026-07-28 20:08:18+00:00", "updated_at": "2026-07-28 20:22:56.304518+00:00", "lang": "en", "topics": ["artificial-intelligence", "ai-agents", "ai-tools", "ai-products", "ai-infrastructure"], "entities": ["Nathan Langley", "Orb", "Claude Code", "Anthropic", "Grok", "Codex", "Apple", "OpenAI"], "alternates": {"html": "https://wpnews.pro/news/show-hn-orb-self-hosted-ai-assistant-that-messages-you-first", "markdown": "https://wpnews.pro/news/show-hn-orb-self-hosted-ai-assistant-that-messages-you-first.md", "text": "https://wpnews.pro/news/show-hn-orb-self-hosted-ai-assistant-that-messages-you-first.txt", "jsonld": "https://wpnews.pro/news/show-hn-orb-self-hosted-ai-assistant-that-messages-you-first.jsonld"}}