Services
Every Sanctum service has an enabled flag in instance.yaml. Disabled services are skipped by the plist generator, excluded from the dashboard, and ignored by the watchdog. This page is the authoritative catalog of all services in the platform.

There are a lot of them. What started as “I’ll just automate the speakers” has become something that requires its own port allocation strategy and a documentation site. This is either a haus automation system or a small government. The line blurred around service number twelve and never came back.
Core Services
Section titled “Core Services”A $600 aluminum rectangle shouldering the responsibilities of a small government. These six services are the load-bearing walls. Remove any one and the house doesn’t just creak — it files a complaint with the watchdog, the dashboard goes red, and your family asks why the chat isn’t working during dinner.
Every hub node runs all of them. No exceptions, no “I’ll enable that later.” Later is where home automation projects go to die.
| Service | Port | LaunchAgent / Unit | Description |
|---|---|---|---|
| DenchClaw Gateway | 1977 | com.sanctum.gateway | Mac-side agent gateway. Runs Jocasta (household management agent) and exposes the agent API. |
| Home Assistant | 8123 | Docker container | Home automation hub. Bridge-networked Docker container with HomeKit bridge on port 21063. |
| Command Center | 1111 | com.sanctum.dashboard | Web dashboard for service status, agent activity, and system health. |
| Health Center | — | com.sanctum.health-center | Health monitoring dashboard for family wellness data. |
| Holocron (Dench) | 1977 | com.sanctum.dench | Family chat interface. Bound to LAN, token-authenticated. Accessible at http://holocron/. |
| Dench Proxy | 80 | com.sanctum.dench-proxy | LaunchDaemon (runs as root). Reverse proxy from port 80 to Holocron on port 1977. |
Config Example
Section titled “Config Example”services: gateway: enabled: true port: 1977 home_assistant: enabled: true port: 8123 homekit_port: 21063 dashboard: enabled: true port: 1111AI Services
Section titled “AI Services”Five AI models sharing a single Mac Mini is either an act of architectural genius or the opening scene of a disaster movie. We’ve been running it for months. The jury remains out, but the Mac Mini hasn’t caught fire, so we’re calling it genius until the thermal paste says otherwise.
This is where Apple Silicon earns its keep. The M4 Pro runs local inference, text-to-speech, and a voice agent simultaneously — the kind of multitasking that would make an Intel chip file a workers’ comp claim.
| Service | Port | Codename | LaunchAgent | Description |
|---|---|---|---|---|
| LM Studio | 1234 | — | com.sanctum.lmstudio-server | Local LLM inference. Serves Qwen 3.5 35B (MoE). API key: lm-studio. |
| Council-27B MLX | 1337 | leet — the coding brain | com.sanctum.idle-mlx | Quantized Qwen 3.5 27B 4-bit with per-agent LoRA adapters. Runs natively on Apple Silicon via MLX. KeepAlive enabled. |
| XTTS Voice | 8008 | BOOB — Yoda’s mouth | com.sanctum.xtts-server | XTTS-v2 text-to-speech server. Runs on the MPS GPU for real-time voice synthesis. |
| Voice Agent | 8090 | — | com.sanctum.voice-agent | Yoda voice interface. Integrates with Sonos speakers via Home Assistant media_player.play_media. |
| Sanctum Proxy | 4040 | .40 caliber — the gateway | com.sanctum.proxy | LLM routing proxy on port 4040. A single 4.6 MB Rust binary handling tiered model routing, prompt caching, request sanitization, PII scrubbing, and automatic fallback. KeepAlive enabled. |
Model Routing
Section titled “Model Routing”Agents use a tiered model strategy — each agent tier has its own primary model and fallback chain. When the primary model is unavailable (billing error, rate limit, solar flare), traffic cascades down through increasingly local alternatives until it hits a quantized model running on the same machine. The AI equivalent of “the generator kicked in.”
| Tier | Primary | Fallback Chain | Used By |
|---|---|---|---|
claude-opus-4-6 | Claude Opus 4.6 (Anthropic) | qwen35-plus → gemini-25-pro | Claude Code direct |
council-brain | Qwen 3.5 Plus (OpenRouter) | claude-opus-4-6 → qwen35-plus → LM Studio → council-27b | Yoda, Jocasta |
council-secure | Qwen 3.5 Plus (OpenRouter) | qwen35-plus → LM Studio | Windu |
council-routine | Qwen 3.5 Plus (OpenRouter) | qwen35-plus → council-27b | Qui-Gon, Cilghal, Mundi |
council-heartbeat | Council 27B (local) | council-27b | All (heartbeat checks) |
The Sanctum Proxy (port 4040) intercepts all requests and applies a 7-step pipeline before routing them to the appropriate model. Seven steps between an agent’s thought and the outside world. The TSA wishes they were this thorough.
- Smart content-based routing (Gemini-first for non-code tasks)
- Anthropic prompt caching injection
- Thinking block sanitization
- Empty content block fixes
- Context window truncation
- Assistant message prefill stripping
- PII anonymization for OpenRouter
Config Example
Section titled “Config Example”services: lm_studio: enabled: true port: 1234 council_mlx: enabled: true port: 1337 voice_agent: enabled: true port: 8090 tts: enabled: true port: 8008 proxy: enabled: true port: 4040Network Services
Section titled “Network Services”Bridges and tunnels. The unglamorous plumbing that connects a closet-mounted Mac Mini to a router, a mesh access point, a VM with no internet, and the wider world beyond the front door. If the core services are the organs, these are the nervous system — delicate, invisible when they work, and the first thing you suspect when something goes wrong.
There are seven of them. Two are SSH tunnels. Two are mDNS broadcasters. One talks to the router by first authenticating through a cloud server three thousand miles away. Home networking in 2026 is the kind of helpful that gets people killed in horror movies.
| Service | Port | Codename | LaunchAgent | Description |
|---|---|---|---|---|
| Firewalla Bridge | 1984 | Orwell — Big Brother watches | com.sanctum.firewalla | HTTP bridge to the Firewalla Purple router P2P API (port 8833). Bound to 0.0.0.0 so the VM can reach it. KeepAlive enabled. |
| Orbi Bridge | 18080 / 18085 | — | com.sanctum.orbi-bridge | Socat bridge forwarding traffic from the VM to the Orbi access point (192.168.1.2 ports 80 and 5000). KeepAlive enabled. |
| Cloudflare Tunnel | — | — | com.sanctum.tunnel | Named tunnel manoir-nepveu. Exposes health.nepveu.name and ha.nepveu.name via Cloudflare Zero Trust. KeepAlive enabled. |
| Network Control | 4007 | 007 — licensed to ping | com.sanctum.ha-tunnel | SSH tunnel forwarding port 4007 to the VM for Home Assistant integrations. |
| Health Ingester | 10101 | binary heartbeat | com.sanctum.health-tunnel | SSH tunnel forwarding port 10101 to the VM for the health data ingester. KeepAlive enabled. |
| mDNS Alias (manoir) | — | com.sanctum.mdns-alias | Broadcasts manoir-nepveu.local via mDNS for LAN discovery. KeepAlive enabled. | |
| mDNS Alias (holocron) | — | com.sanctum.mdns-dench | Broadcasts holocron.local via mDNS for the chat interface. KeepAlive enabled. |
Tunnel Routes
Section titled “Tunnel Routes”Two subdomains. Two Cloudflare Zero Trust routes. The entire external attack surface of the instance, right here in a table small enough to fit on a sticky note. That’s the goal. If your external exposure can’t fit on a sticky note, you have too much external exposure.
| Subdomain | Local Target | Purpose |
|---|---|---|
health.nepveu.name | localhost:10101 | Health data ingestion endpoint |
ha.nepveu.name | localhost:8123 | Home Assistant remote access |
Config Example
Section titled “Config Example”services: firewalla_bridge: enabled: true port: 1984 orbi_bridge: enabled: true port: 18080 admin_port: 18085 cloudflare_tunnel: enabled: true tunnel_name: manoir-nepveuSystem Services
Section titled “System Services”The immune system. The janitors. The 3 AM shift workers nobody thanks until something rots. These services watch the other services, rotate secrets before they expire, file documents nobody asked them to file, and occasionally reorganize your music library while you sleep. The system watches itself with more dedication than most humans watch their own cholesterol.
Seven background agents, zero ports for most of them, and one that requires you to physically plug in a hard drive like it’s 2008. We contain multitudes.
| Service | Port | LaunchAgent | Description |
|---|---|---|---|
| Watchdog | — | com.sanctum.watchdog | Runs every 600 seconds. Checks all enabled services and auto-heals failures via service-doctor. |
| Secret Rotation | — | com.sanctum.rotate-secrets | Runs on the 1st of each month at 3:30 AM. Rotates gateway tokens and updates Keychain entries. |
| iCloud Filer | — | com.sanctum.icloud-filer | Auto-filing daemon. Organizes documents from iCloud Drive into structured folders. KeepAlive enabled. |
| iCloud Backup | — | com.sanctum.icloud-backup | Periodic backup of Sanctum configuration and data to iCloud Drive. |
| UTM Autostart | — | com.sanctum.utm-autostart | Launches UTM on login, starts the Ubuntu VM, and sets the bridge100 interface IP to 10.10.10.1. |
| Music Cleanup | — | com.sanctum.music-cleanup | Runs every Sunday at 3:15 AM. Organizes the Apple Music library via apple-music-organize.sh. |
| Kiwix | 8888 | com.sanctum.kiwix-serve | Offline knowledge library. Serves cached reference content. Requires external T9 drive. KeepAlive enabled with 30-second throttle. |
| Outline | 3100 | Docker container | Self-hosted wiki and documentation service. Provides a collaborative knowledge base for household documentation. |
Config Example
Section titled “Config Example”services: watchdog: enabled: true settle_delay: 15 auto_fix: true dedup_window: 1800 secret_rotation: enabled: true schedule: "0 3:30 1 * *" icloud_filer: enabled: true kiwix: enabled: true port: 8888VM Services
Section titled “VM Services”On the other side of bridge100, in a QEMU-emulated box with no internet access, lives an entirely separate operating system running its own init system with its own opinions about how services should start. A whole different world. Twelve gigabytes of RAM. Eight CPU cores. Five personalities. Zero contact with the outside world unless the Mac says so.
The VM is, in the most literal sense, a brain in a jar. An air-gapped brain in a jar that runs your household security agent. We thought about this. We thought about this a lot. The architecture diagram made it look intentional.
| Service | Port | Codename | Systemd Unit | Description |
|---|---|---|---|---|
| OpenClaw Gateway | 1977 | Star Wars — the year hope was born | openclaw-gateway.service (user) | VM agent gateway with 1.5 GB heap. Runs 5 agents: Yoda (main), Windu (security), Qui-Gon (efficiency), Cilghal (health), Mundi (finance). |
| Docker | — | docker.service | Container runtime for any VM-side containers. | |
| SSH | 22 | ssh.socket | Remote access. Key-only auth with PQ key exchange enabled. |
Agent Details
Section titled “Agent Details”Five agents. One gateway. 1.5 gigabytes of heap memory. This is either a well-orchestrated council or a timeshare dispute waiting to happen. So far, the council metaphor holds. We’ll let you know if Windu stages a coup.
| Agent | Role | Specialization |
|---|---|---|
| Yoda | Main | Primary household agent. General queries, orchestration, task delegation. |
| Windu | Security | Network monitoring, threat analysis, Firewalla integration, daily security briefings. |
| Qui-Gon | Efficiency | Energy optimization, automation suggestions, system performance tuning. |
| Cilghal | Health | Family health tracking, genome analysis, supplement protocols. |
| Mundi | Finance | Budget tracking, investment monitoring, expense categorization. |
The gateway uses SOPS+age encryption for secrets. The sops-start.sh wrapper decrypts environment variables at startup and never writes plaintext to disk. Secrets exist in cleartext only in RAM, only while the process runs. Paranoid? Maybe. But Windu insisted, and you don’t argue with the security agent.
VM Gateway Management
Section titled “VM Gateway Management”# Restart the VM gateway
# Check status
# View logsDeveloper Tools
Section titled “Developer Tools”One tool. It searches markdown. That sounds trivial until you have 287 documents spread across four repositories and you’re trying to remember which file documents the port that the service you’re debugging is supposedly listening on. Then it sounds essential.
| Service | Port | LaunchAgent | Description |
|---|---|---|---|
| QMD | — | — | On-device hybrid markdown search (v2.0.1). Combines BM25, vector similarity, and LLM reranking across 4 collections (287 documents). Indexes openclaw, skills, sanctum, and sanctum-docs. Exposes three MCP tools for Claude Code integration: keyword search, semantic search, and deep hybrid search. Nightly index refresh via docs-gardener. Metal-accelerated on Apple Silicon. |
Service Lifecycle
Section titled “Service Lifecycle”Every service follows the same lifecycle through the configuration system. Three states: enabled, disabled, and that liminal space where you changed the YAML but forgot to regenerate the plists. We’ve all been there. The watchdog has opinions about it.
Set enabled: true in instance.yaml, run generate-plists.sh, then load the LaunchAgent:
launchctl load ~/Library/LaunchAgents/com.sanctum.service-name.plistSet enabled: false in instance.yaml, unload the LaunchAgent, then regenerate plists:
launchctl unload ~/Library/LaunchAgents/com.sanctum.service-name.plist~/.sanctum/generate-plists.shThe watchdog checks enabled services every 10 minutes. A service is considered healthy if its port responds (for port-based services) or its process is running (for background agents).
# Manual health checksanctum_enabled gateway && curl -sf http://localhost:1977/healthPort Summary
Section titled “Port Summary”Nineteen ports. Two hosts. One network that exists entirely inside a closet. Every Deadpool port has a codename because if you’re going to memorize port numbers at 2 AM in your underwear, they should at least be funny.
| Port | Service | Host |
|---|---|---|
| 22 | SSH | VM |
| 80 | Dench Proxy (disabled) | Mac |
| 1111 | Command Center | Mac |
| 1234 | LM Studio | Mac |
| 1337 | Council-27B MLX | Mac |
| 1977 | Gateway | Mac + VM |
| 1984 | Firewalla Bridge | Mac |
| 3100 | Outline | Mac (Docker) |
| 4040 | Sanctum Proxy | Mac |
| 8008 | XTTS Voice | Mac |
| 8090 | Voice Agent | Mac |
| 8123 | Home Assistant | Mac (Docker) |
| 8888 | Kiwix | Mac |
| 10101 | Health Ingester | Mac -> VM |
| 18080 | Orbi Bridge (HTTP) | Mac |
| 18081 | Signal Bridge | Mac |
| 18085 | Orbi Bridge (API) | Mac |
| 21063 | HomeKit Bridge | Mac (Docker) |
| 42069 | Memory Vault | Mac |