Voice-first AI companion. An orb that talks to you, remembers you, and routes the heavy lifting to your existing agents.
ORBIS is a single-owner native desktop app. You talk to the orb; it talks back in real time; it remembers you across sessions; it hands off complex tasks to whatever agents you've configured (A2A fleet agents, OpenAI-compatible endpoints). The differentiator is the companion layer — persistent memory, slow personality drift, moods, and a visible expressive form — around a thin voice-routing agent.
Status: free public beta for Apple Silicon Mac. Download the signed, notarized app at orbis.protolabs.studio/download. See getting started for installation and your first conversation, or DECISIONS.md for the architecture.
- Voice-first. Real-time bidirectional audio through the native macOS Tauri shell, Rust-owned microphone/speaker transport, and the Pipecat pipeline. Text fallback is possible but the pitch is "talk to it, don't chat."
- Router-first. The orb's primary capability is delegating to your configured agents — it's the voice frontend for the AI stack you already have, not another agent framework.
- Companion-layer. Persistent conversational recall and persona settings, with a customizable orb. Personality and mood machinery is available; the emotional layer is disabled by default.
- Single-owner. One instance, one owner. Multi-device access comes through native desktop ports after the Mac release path stabilizes. Not multi-tenant.
- Not another coding agent (OpenCode / Claude Code / Goose / Aider are all fine; delegate to them instead).
- Not a game (no progression mechanics, no collectibles as gameplay, no social visits).
- Not a replacement for ChatGPT — your reasoning still lives in whichever model you've wired up.
- Not a PWA or browser voice app. The supported runtime is native Tauri desktop; Linux and Windows desktop support come after the Mac native-audio build is stable.
- Not gacha, loot boxes, energy timers, or FOMO-driven monetization.
Requirements: Apple Silicon Mac, Python 3.11 (matching the shipped sidecar), Bun, Rust for the native shell, and a language model. See BUILDING.md for the complete native build setup. The wizard offers Built-in (MLX), which runs Qwen3.5-4B in-process after a roughly 2.5 GB model download; it currently opens on the Ollama preset. You can also choose LM Studio, vLLM, a hosted provider, or another OpenAI-compatible endpoint.
The native Mac build uses Parakeet speech recognition and Kokoro speech synthesis on-device. Python-only development defaults to Whisper unless configured otherwise. Cloud speech is optional. First-run runtime and speech downloads need internet access and about 3 GB of disk, with additional space for a local language model. Fully local inference can run offline afterward. The Docker development path supports NVIDIA GPU or CPU hosts; see below.
# One-time
uv sync --python 3.11 --extra test --extra lint
cp .env.example .env # optional — fallback env vars and runtime tuning
# config/orbis.yaml is auto-written by the first-run setup wizard
# Fast backend/UI iteration
cd web && bun install && bun run dev # frontend on :5173
# in a second shell:
.venv/bin/python app.py # backend on :7866For the native shell and packaged sidecar flow, use the desktop docs:
scripts/preflight-native-audio-host.sh
scripts/nuke-and-rebuild.sh --launch --tailOn first boot, the setup wizard walks through microphone permission, speech-model downloads, names, a language model, and a starter orb. The LLM step requires a successful connection check. After setup, wait for voice readiness and double-click the orb to talk.
The bundled hub delegate targets protoAgent at 127.0.0.1:7870.
protoAgent is a separately managed service: start it before delegating work,
or configure an agent you already run. ORBIS can hold a conversation without
the hub, using its own chosen language model.
The default docker-compose.yml reserves GPU 0 so Whisper STT +
Kokoro TTS run on CUDA. It assumes:
- an NVIDIA GPU visible to the host
- NVIDIA driver ≥ 570 (CUDA 12.8 compatible — the torch wheel baked
into the image is pinned to
+cu128to match) nvidia-container-toolkitinstalled (nvidia-ctkonPATH,nvidia-container-runtimeregistered with dockerd)
With that in place:
docker compose up # GPU path (default)On a CPU-only host (laptop, shared box with no NVIDIA card, etc.), layer the CPU override on top — it drops the GPU reservation + runtime hint so the container boots without the toolkit:
docker compose -f docker-compose.yml -f docker-compose.cpu.yml upModel inference is slower on CPU. Fish TTS is opt-in via the fish
profile — unrelated to this GPU switch, see docker-compose.yml for
that service.
Tailnet-hosted backend access is still possible for development and
automation, but the browser/PWA voice runtime is not supported. The
Drawer → Settings → Access panel accepts the owner API key for API
auth (generate with
python3 -c "import secrets; print('pv_ak_' + secrets.token_urlsafe(32))"
and write it into config/users.yaml).
┌──────────────────────────────┐
│ macOS Tauri app │
│ (orb viz + drawer) │
└────────┬─────────────────────┘
│ native PCM socket
▼
┌──────────────────────────────┐ ┌────────────────────┐
│ Pipecat voice pipeline │◀──────▶│ Your agents │
│ (STT → ORBIS LLM → TTS) │ A2A │ (A2A / OpenAI) │
│ │ OpenAI │ │
│ ORBIS LLM = small/fast │ │ protoAgent, │
│ router + personality layer │ │ Claude Code, │
│ │ │ MCP servers, │
│ │ │ whatever │
└─────┬────────────────────────┘ └────────────────────┘
│
▼
┌──────────────────────────────┐
│ SQLite memory backend │
│ sessions / facts / │
│ personality / mood │
└──────────────────────────────┘
ORBIS's voice agent has a deliberately small set of tools:
delegate_to(target, query)— hand off to one of your configured agents. A2A-compatible or OpenAI-compatible. Results stream back through the delivery controller and narrate naturally.- Reminders and inbox — schedule, list, or cancel reminders and check pending messages from your agents.
- Persona switching and personality adjustment — select a configured persona by voice or ask for a personality adjustment.
Orb visual control is handled outside the agent's tool surface.
Deeper tool use belongs to your delegates. The older in-process orchestration path remains during migration; the durable direction is the protoAgent hub.
SQLite stores conversational state locally in the app's persistent data
directory (override with ORBIS_DB_PATH). Tables include:
sessions— one row per voice session (with FTS5 search)facts— structured storage retained during migration. Long-term knowledge belongs to the protoAgent hub; conversational recall uses session summaries.personality_axes— 10 slow-drift axes (playful↔serious, warm↔guarded, sarcastic↔sincere, verbose↔terse, hopeful↔cynical, grandiose↔grounded, probing↔incurious, philosophical↔pragmatic, independent↔clingy, curious↔bored)personality_events— append-only drift logmood— short-term (valence / arousal / guardedness)
No graph DB. No Neo4j. No vector DB. The "poor-man's Graphiti on SQLite" shape — see DECISIONS.md § Memory.
config/orbis.yaml— persona (slug, name, system prompt, LLM knobs, filler verbosity), voice (TTS provider + voice id), orb (starter variant / palette / params). Copy fromconfig/orbis.example.yaml. Saved config is authoritative; environment variables such asSYSTEM_PROMPTare fallbacks for omitted fields. Re-read viaPOST /api/persona/reloadorPOST /api/config(which the drawer UI calls).config/starter_orbs.yaml— the curated pool the setup wizard presents at first boot. Ship 8 by default; edit to taste.config/users.yaml— owner credential (single entry). Omitted = single-user fallback (no auth enforced). Required for tailnet hosting.config/delegates.yaml— A2A / OpenAI-compat endpoints thedelegate_totool can reach.
.venv/bin/python -m pytest # full backend suite
cd web && bun run build # type-check + build frontend
scripts/check-macos-release-config.py📚 docs/ is organised by Diátaxis — tutorials, how-to guides, reference, and explanation. Start there to use or understand ORBIS (e.g. getting started).
The docs below are for picking up the codebase, read in this order on a cold pickup:
- STATUS.md — current snapshot. Where the codebase is, module map, what's shipped vs still pending. Always up to date.
- DECISIONS.md — frozen architecture decisions. Amendments are additive; don't silently change direction.
- HANDOFF.md — QA checklist, known open questions, and ordered next steps. Written for a teammate (or tomorrow-you) picking ORBIS up fresh.
- docs/internal/proactive-companion.md — user-facing guide: what ORBIS can do as a proactive companion (reminders, hand-offs to your agents, external pings), how to drive it by voice, and the full config-knob reference.
- docs/internal/orb-visualizer.md — engineering reference for the orb plugin system inherited from protoVoice (variant registry, shared signal bus, palette system, field types).
Seed provenance: this repo started as a squashed fork of
protoLabsAI/protoVoice
@ v0.12.1, then was carved to ORBIS scope. See the commit history
from the initial commit through the carve: series for what came
out of the seed.
Apache License 2.0 — © 2026 protolabs.studio. See NOTICE. Contributions are accepted under the same license (Apache-2.0 §5), so there's no separate CLA. The app and orb customization are free; the paid entitlement system has been removed.
