Skip to content

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.

The Docker ship — containers carrying services across the stack

Sanctum services catalog — every service, every port, organized by category
🔍 Hover to zoom

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. Thirty-eight services now — enough to staff two Habs benches on a good night, and they all think they’re the centreman. Each with a launchd unit, a port, a plist, and opinions about what should have been done on Tuesday.

A $600 aluminum rectangle shouldering the responsibilities of a small government. These six services are the load-bearing walls. Remove any one and the haus 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 haus automation projects go to die.

ServicePortLaunchAgent / UnitDescription
DenchClaw Gateway1977com.sanctum.gatewayMac-side agent gateway. Runs Jocasta (the Archivist — CRM data and communications) and exposes the agent API.
Home Assistant8123Docker containerHome automation hub. Bridge-networked Docker container with HomeKit bridge on port 21063.
Command Center1111com.sanctum.dashboardWeb dashboard for service status, agent activity, and system health.
Health Center2222com.sanctum.health-centerDigital twin portal — health, wellness, and haushold telemetry. Twin twos for the twin.
Holocron (Dench)1977com.sanctum.denchFamily chat interface. Bound to LAN, token-authenticated. Accessible at http://holocron/.
Dench Proxy80com.sanctum.dench-proxyLaunchDaemon (runs as root). Reverse proxy from port 80 to Holocron on port 1977.
services:
openclaw_gateway:
enabled: true
port: 1977
home_assistant:
enabled: true
port: 8123
homekit_port: 21063
dashboard:
enabled: true
port: 1111

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.

ServicePortCodenameLaunchAgentDescription
LM Studio1234com.sanctum.lmstudio-bridgeLocal LLM inference for VM agents. Currently serving qwen2.5-coder-14b-instruct via socat bridge from 10.10.10.1:1234 to 127.0.0.1:1234. API key: lm-studio.
Council MLX1337leet — the local workhorsecom.sanctum.mlxPure-Rust sanctum-mlx server. Serves Qwen3.6-35B-A3B-4bit with TurboQuant Slice 4a fused Metal kernel. mTLS-only. The 27B-distilled era ended 2026-04-22 when the council moved to the 35B MoE.
TTS Voice8008BOOB — Yoda’s mouthcom.sanctum.yoda-tts-workerQwen3-TTS via mlx-audio (workers.tts_server). XTTS retired 2026-04-19 once Qwen3-TTS proved equal quality with lower memory pressure.
Voice Agent1138com.sanctum.voice-agentYoda voice interface. Integrates with Sonos speakers via the Sonos Bridge REST API on port 1969.
Sanctum Proxy4040.40 caliber — the gatewaycom.sanctum.serverLLM routing proxy on port 4040 (binary: proxyd). Single Rust binary handling tiered model routing, prompt caching, request sanitization, PII scrubbing, and automatic fallback. KeepAlive enabled.
Memory Vault42069Nice.com.sanctum.memory-vaultLong-term memory store for agent context. SQLite vault at ~/.sanctum/memory/.vault.db, consolidates every 6h. SSE transport for MCP clients.
Jina Reranker42070The Pair Portcom.sanctum.rerankerJina v2 reranking server. Companion to Memory Vault on 42069 — the two travel together by design. Improves RAG precision for long-context memory queries.

Agents use a 3-tier model strategy ranked by the Carmack Olympics benchmark system. The Smart Router dispatches each request based on model field, glob patterns, or intent keywords. When the primary tier is unavailable, traffic cascades down through the chain until it hits local Metal inference. The generator always kicks in.

TierModelPortAgentsFallback
cloudClaude Opus 4.7 (Anthropic):4040 proxyWindu, Mothma, JocastaCoder-14B → Council MLX → error
council-opsQwen 2.5 Coder 14B (LM Studio):1234Yoda, QuiGon, AhsokaCouncil MLX → error
council-secureGemma4+LoRA (sanctum-mlx):1337Cilghal, Mundierror
coderQwen 2.5 Coder 14B (LM Studio):1234all coding tasksCouncil MLX → error

Cloud tier runs through the Sanctum Proxy on :4040 with daily cost caps, audit logging, and automatic fallback to local models when the budget circuit breaker fires. The cloud proxy does not negotiate. It does math.

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.

  1. Smart content-based routing (model field, glob patterns, intent keywords)
  2. Anthropic prompt caching injection
  3. Thinking block sanitization
  4. Empty content block fixes
  5. Context window truncation
  6. Assistant message prefill stripping
  7. PII anonymization for OpenRouter
services:
lm_studio:
enabled: true
port: 1234
council_mlx:
enabled: true
port: 1337
voice_agent:
enabled: true
port: 1138
qwen3_tts:
enabled: true
port: 8008
proxy:
enabled: true
port: 4040

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 nine 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. One talks to Sonos speakers because Docker couldn’t. Home networking in 2026 is the kind of helpful that gets people killed in horror movies.

ServicePortCodenameLaunchAgentDescription
SanctumBridge4078The FDA Neighborcom.sanctum.bridgeRead-only HTTP proxy to FDA-protected SQLite databases (iMessage, WhatsApp, Contacts, Calendar). Jocasta-mcp queries through it so the MCP server itself doesn’t need Full Disk Access.
Firewalla Bridge1984Orwell — Big Brother watchescom.sanctum.firewallaHTTP bridge to the Firewalla Purple router P2P API (port 8833). Bound to 0.0.0.0 so the VM can reach it. KeepAlive enabled.
Sonos Bridge1969com.openclaw.sonos-bridgeNative Mac SoCo REST API for 10 Sonos speakers. Replaces HA’s built-in Sonos integration. Handles TTS via XTTS, volume control, grouping, and announcements. KeepAlive enabled.
Orbi Bridge18080 / 18085com.sanctum.orbi-bridgeSocat bridge forwarding traffic from the VM to the Orbi access point (192.168.1.2 ports 80 and 5000). KeepAlive enabled.
Cloudflare Tunnelcom.sanctum.tunnelNamed tunnel sanctum-hub. Exposes health.example.net and ha.example.net via Cloudflare Zero Trust. KeepAlive enabled.
Network Control4007007 — licensed to pingcom.sanctum.ha-tunnelSSH tunnel forwarding port 4007 to the VM for Home Assistant integrations.
Health Ingester10101binary heartbeatcom.sanctum.health-tunnelSSH tunnel forwarding port 10101 to the VM for the health data ingester. KeepAlive enabled.
mDNS Aliascom.sanctum.mdns-docsBroadcasts haus aliases (sanctum-hub.local, holocron.local, etc.) via mDNS for LAN discovery. KeepAlive enabled. Consolidated from the old mdns-alias / mdns-dench split.

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.

SubdomainLocal TargetPurpose
health.example.netlocalhost:10101Health data ingestion endpoint
ha.example.netlocalhost:8123Home Assistant remote access
services:
firewalla_bridge:
enabled: true
port: 1984
sonos_bridge:
enabled: true
port: 1969
orbi_bridge:
enabled: true
port: 18080
admin_port: 18085
cloudflare_tunnel:
enabled: true
tunnel_name: sanctum-hub

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.

Eight background agents and three supporting services, 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.

ServicePortLaunchAgentDescription
Watchdogcom.sanctum.watchdogRuns every 600 seconds. Checks all enabled services and auto-heals failures via service-doctor.
Secret Rotationcom.sanctum.rotate-secretsRuns on the 1st of each month at 3:30 AM. Rotates gateway tokens and updates Keychain entries.
iCloud Filercom.sanctum.icloud-filerAuto-filing daemon. Organizes documents from iCloud Drive into structured folders. KeepAlive enabled.
iCloud Backupcom.sanctum.icloud-backupPeriodic backup of Sanctum configuration and data to iCloud Drive.
VM Autostart (QEMU headless)com.sanctum.vm-autostartLaunches QEMU headless on login, starts the Ubuntu VM, restores the bridge100 interface IP, and re-establishes the VM-facing LM Studio bridge on 10.10.10.1:1234.
Music Cleanupcom.sanctum.music-cleanupRuns every Sunday at 3:15 AM. Organizes the Apple Music library via apple-music-organize.sh.
Kiwix8888com.sanctum.kiwix-serveOffline knowledge library. Serves cached reference content. Requires external T9 drive. KeepAlive enabled with 30-second throttle.
Outline3100Docker containerSelf-hosted wiki and documentation service. Provides a collaborative knowledge base for haushold documentation.
Jocasta MCPCLICLI and Stdio RPCThe unified offline data proxy. Provides the Jedi Council safe, offline read-access to 16 disparate components: Apple Notes, Calendars, Contacts, Unified Logs, Maps, multiple messaging apps, and local file parsing.
Force Flow4077com.sanctum.force-flowNotification triage and curfew enforcement engine. Mothma’s dispatch layer — decides what deserves attention and what gets filed under “haus is fine, stop asking.” M*A*S*H 4077th energy: triages the critical from the cosmetic with gallows humor and a functioning still.
SanctumBridge4078com.sanctum.bridgeFDA-privileged HTTP proxy to iMessage, WhatsApp, Contacts, and Calendar SQLite databases. Jocasta-mcp routes reads through this so jocasta-mcp itself doesn’t need Full Disk Access granted.
LiveKit Server7880com.sanctum.livekit-serverPrivate voice server for Yoda. Bound to Tailscale IP (100.0.0.25) only — no LAN or WAN exposure. RTC TCP companion on 7881.
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: 8888

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 haushold security agent. We thought about this. We thought about this a lot. The architecture diagram made it look intentional.

ServicePortCodenameSystemd UnitDescription
OpenClaw Gateway1977Star Wars — the year hope was bornopenclaw-gateway.service (user)VM agent gateway with 1.5 GB heap. Runs 6 agents: Yoda (grand master), Mon Mothma (operations), Qui-Gon (infrastructure), Windu (security), Cilghal (health), Ki-Adi-Mundi (finance).
Dockerdocker.serviceContainer runtime for any VM-side containers.
SSH22ssh.socketRemote access. Key-only auth with PQ key exchange enabled.

Six 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.

AgentRoleSpecialization
YodaGrand MasterSenior council lead. Orchestration, council routing, final synthesis of complex decisions.
Mon MothmaOperationsForce Flow and Living Force orchestrator. Incident correlation, boot sequences, cross-domain alignment.
Qui-GonInfrastructureSystem health, Docker stability, automated recovery, memory triage.
WinduSecuritySecurity audits, Firewalla and PF rules, perimeter monitoring, daily security briefings.
CilghalHealthWellness monitoring via Apple Health, cognitive profile analysis, genome-informed scaffolding.
Ki-Adi-MundiFinanceTriptyq Capital deal flow, personal fiscal health, 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.

Terminal window
# Restart the VM gateway
ssh [email protected] 'systemctl --user restart openclaw-gateway'
# Check status
ssh [email protected] 'systemctl --user status openclaw-gateway'
# View logs
ssh [email protected] 'journalctl --user -u openclaw-gateway -f'

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.

ServicePortLaunchAgentDescription
QMDOn-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.

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:

Terminal window
launchctl load ~/Library/LaunchAgents/com.sanctum.service-name.plist

Three states, one truth: until generate-plists.sh runs and launchctl agrees, the YAML is just an opinion. The watchdog is the tie-breaker, and the watchdog has very little patience for opinions.

Every Sanctum port — what it carries, where it lives, and the joke that justifies the number — lives at Port Summary, alongside the Deadpool Protocol that governs how new ports earn their numbers. Forty rows, forty cultural references, one architectural commitment that the infrastructure is going to be consistently absurd if it’s going to be absurd at all. Pulled out of this page so the service catalog can stay about services and the port catalog can be appreciated as its own art form.