Skip to content

LaunchAgents Audit (2026-06-09)

LaunchAgents Audit — a launchpad control panel with rows of labeled status indicators, some teal (running clean), some amber (scheduled), a few flickering red (error).

launchctl list | grep -c com.sanctum on the Mini returns 112 loaded jobs today. Six weeks ago this page said 51. Nobody added sixty-one services in a fit of ambition — they accreted, one plist at a time, the way barnacles accrete on a hull that nobody scrapes. This page is no longer a full census (112 rows would blow the five-minute budget); it’s a representative inventory of the load-bearing agents, the genuinely-flapping ones, and the services that have since graduated from LaunchAgents to LaunchDaemons.

Legend: RUN running clean · SCHED scheduled (no PID, last exit 0) · FAIL error state · OFF disabled.

AgentStatePurpose
com.sanctum.mlxRUNsanctum-mlx serving Qwen3.6-35B-A3B-4bit on :1337 mTLS. The brain.
com.sanctum.mlx-codestralRUNOn-call code seat — Codestral-22B-v0.1-4bit on :3301 (plain). Replaced the retired Coder-14B path 2026-06-07.
com.sanctum.lmstudio-bridgeRUN-flap exit -15socat forward of LM Studio’s :1234 onto the Mac↔VM bridge IP. The forward is up; nothing is loaded behind it right now (the 14B it used to front retired 2026-06-07).
AgentStateIntervalPurpose
com.sanctum.council-guardianSCHED30 sFast /v1/models probe; restart sanctum-mlx if dead
com.sanctum.council-canarySCHED10 minSlow chat probe (“2+2”) for correctness regression
com.sanctum.council-driftSCHED1 hSHA-check deployed artifacts vs repo. Flipped green since the last snapshot — was the standing FAIL here
com.sanctum.council-parity-smokeFAIL exit 2nightly 03:0010-prompt token-level parity test vs Python mlx_lm. The new flapper — see the table below
com.sanctum.council-integritySCHEDhourlyWeight manifest re-verify
com.sanctum.drift-sentinelFAIL exit 15 minWindu’s Firewalla-vs-ARP drift detector. Exit 1 still standing — likely stale threshold
AgentStatePurpose
com.sanctum.tunnelRUN-flap exit 143Primary cloudflared tunnel (run-tunnel.sh). Not ssh — that was the old story; this is Cloudflare’s edge
com.sanctum.health-tunnelRUN-flap exit 255Health Center tunnel; respawned after SSH timeout
com.sanctum.bridgeRUNBridge100 sanctum-triage proxy
com.sanctum.orbi-bridgeRUNOrbi router API bridge
com.sanctum.presenceRUNPresence detector (who’s home)
AgentStatePurpose
com.sanctum.livekit-serverRUNLiveKit voice call server
com.sanctum.yoda-orchestratorRUNVoice-loop orchestrator (binds STT → council → TTS)
com.sanctum.yoda-stt-workerRUNSpeech-to-text worker
com.sanctum.yoda-tts-workerRUNText-to-speech worker

The monolithic com.sanctum.voice-agent that this row used to flag as exit-1-flapping no longer exists — the voice stack was split into the three workers above, all currently exit 0. A failure mode you’ve decomposed is a failure mode you can actually point at.

AgentStatePurpose
com.sanctum.tommyRUNTommy briefing agent
com.sanctum.yoda-agentRUNYoda agent runtime
com.sanctum.yoda-token-minterRUNYoda auth token rotation
com.sanctum.claude-max-proxyRUNClaude Max HTTP proxy on :3456 (CLAUDE_MAX_PORT). Replaced the per-request com.sanctum.claude-cli-proxy CLI-spawn proxy on 2026-04-27.
com.sanctum.signal-cliRUNSignal CLI message daemon
com.sanctum.icloud-filerRUN-flap exit 143iCloud file organizer; SIGTERM-respawn pattern (not the clean RUN this used to claim)
AgentStateSchedulePurpose
com.sanctum.morning-briefingSCHEDdailyMorning briefing generation
com.sanctum.perf-reviewSCHEDweeklyPerformance review snapshot
com.sanctum.tech-lookoutSCHEDdailyTech news scan
com.sanctum.model-scoutSCHEDweeklyNew model release scan
com.sanctum.fire-drillSCHEDmonthlyRecovery drill
com.sanctum.rotate-secretsSCHEDweeklySecret rotation
com.sanctum.secrets-auditSCHEDdailySecret hygiene audit — exit 1 cleared since last snapshot, now green
com.sanctum.token-refreshSCHED1 hOAuth token refresh
com.sanctum.version-checkSCHEDdailySW version drift check
com.sanctum.signal-healthSCHEDhourlySignal CLI health check
com.sanctum.agent-markdown-syncSCHED5 minSync agent prompts ↔ repo
AgentStatePurpose
com.sanctum.ha-self-healerFAIL exit 1Auto-remediate HA flaps — exit 1 standing
com.sanctum.openclaw.ha-healerSCHEDOpenClaw HA healer
com.sanctum.openclaw.docker-startupFAIL exit 1Post-Docker-ready startup hook — exit 1 recurring
com.sanctum.vm-autostartSCHEDVM auto-start on boot
com.sanctum.vm-pushSCHEDPush artifacts to VM
com.sanctum.post-bootFAIL exit 8Post-boot verification script — exit 8 recurring (was 4 at the last snapshot)
com.sanctum.rust-readiness-checkSCHEDPre-flight Rust toolchain check — exit 2 cleared, now green
com.sanctum.memory-consolidateSCHEDMemory-vault consolidation — exit 1 cleared, now green
com.sanctum.force-flowRUNSecurity alert router (bell, notify, escalate)

The top-level supervisor com.sanctum.watchdog is gone from LaunchAgents — it became the Rust com.sanctum.watchdog-rust (daemon, see below). And com.sanctum.openclaw.colima retired 2026-05-16 when the haus moved Docker from Colima to OrbStack; its respawning orphan VM was the whole reason for the cleanup.

AgentStatePurpose
com.sanctum.dashboardRUN-flap exit -15Holocron dashboard server; respawned after recent SIGTERM
com.sanctum.rewind-dashboardRUNRewind dashboard (activity timeline)
com.sanctum.health-centerRUN-flap exit 143Health Center API; respawned after SIGTERM
com.sanctum.triageRUN-flap exit -15sanctum-triage UI; SIGTERM-respawn pattern

The com.sanctum.proxy “exit 101” launcher that lived here doesn’t exist anymore. Proxying is now a pair of daemonscom.sanctum.proxyd and com.sanctum.dench-proxy (see below).

The page is titled LaunchAgents Audit, but several load-bearing services have since moved to /Library/LaunchDaemons/ — they run before login, as root, which is exactly where a network bridge or a process supervisor wants to be. They are listed here so the audit isn’t blind to them, even though launchctl list in the user domain won’t show them.

DaemonPurpose
com.sanctum.watchdog-rustRust top-level process supervisor (was the LaunchAgent com.sanctum.watchdog)
com.sanctum.proxydSystem proxy daemon (was the LaunchAgent com.sanctum.proxy)
com.sanctum.dench-proxyDenchClaw model/auth proxy
com.sanctum.firewallaFirewalla API bridge (was a LaunchAgent)
com.sanctum.ha-gatewayHome Assistant REST gateway (was a LaunchAgent)
com.sanctum.castellan + com.sanctum.castellan-deadmanCastellan supervisor and its dead-man’s switch
com.sanctum.pfctl · com.sanctum.vmnet · com.sanctum.bootstrapPacket-filter rules, VM networking, boot bootstrap

These are the real artifacts on disk — the suffix is the retirement date, which is its own little changelog:

FileReason
com.sanctum.mlx-vanilla.plist.disabled-20260423Python mlx_lm vanilla fallback, parked at the mTLS cutover
com.sanctum.mlx-coder.plist.retired-20260607The Coder-14B seat, superseded by mlx-codestral (:3301)
com.sanctum.pressure-valve.plist.retired-20260529-195232Memory-pressure watchdog (see the Probes note above)
com.sanctum.ram-sentinel.plist.retired-20260529-195232 · com.sanctum.admit.plist.retired-20260529-195232Retired the same evening, same consolidation
com.sanctum.openclaw.colima.plist.retired-2026-05-16Colima → OrbStack migration
com.sanctum.ha-tunnel · graphiti-tunnel · network-control-tunnel (retired .plists)The three tunnels folded out of the Bridges table

Note: com.sanctum.server is now actively loaded (PID present, exit 0) — the old “Rust router not yet promoted, deferred” note is stale. It got promoted.

Ordered by noise level (recurring non-zero exits deserve attention first):

AgentExitPriorityLikely cause
com.sanctum.post-boot8Medium — runs once at bootHook script expecting something that isn’t there; code moved 4 → 8 since last snapshot
com.sanctum.council-parity-smoke2Medium — correctness regression gateThe new non-zero; check the nightly token-level diff vs Python mlx_lm
com.sanctum.cathedral-long-context-weekly2Medium — weekly long-context checkLikely a context-cap or timeout in the weekly run
com.sanctum.nightly-compactor3Low — nightly log/state compactionCheck the compactor log for a partial run
com.sanctum.openclaw.docker-startup1Low — race with Docker readinessProbably benign if Docker eventually loads
com.sanctum.drift-sentinel1Low — Windu’s drift detectorStale-threshold candidate, like council-drift used to be
com.sanctum.ha-self-healer1Low — HA remediationCheck whether HA is reachable at run time
com.sanctum.git-drift-sentinel · house-bible-sync1KnownUncommitted parallel-session work shows up as drift — resolves when it lands

Almost certainly. The 2026-04-23 cut of this page counted 51 on the Mini and called it sprawl. It is now 112. That is not growth, it is sediment — and a hand-maintained doc rotted seven weeks behind reality is the proof. Not because any individual agent is wrong, but because:

  • No single-pane dashboard for their health — you find out an agent is flapping by tailing logs. (launchd-health-sentinel + chitti now catch some of this, but not all.)
  • No standard naming convention for probes vs bridges vs scheduled jobs vs apps — everything is com.sanctum.<noun>, so grep can’t tell a probe from a UI.
  • Retirement is manual. Agents linger long past their usefulness unless someone notices — though the dated .retired-* suffixes on disk are at least an honest paper trail now.

A future consolidation pass could:

  1. Fold the probes into sanctum-server as child tasks — it’s promoted and loaded now, so guardian, canary, drift, integrity, and parity-smoke (all probes of the same brain) no longer need five separate plists.
  2. Adopt naming prefixes: com.sanctum.probe.*, com.sanctum.bridge.*, com.sanctum.app.*, com.sanctum.sched.*. Makes launchctl list | grep probe trivially grep-able.
  3. Generate this page from launchctl list instead of hand-editing it. A doc that can’t drift is a doc that can’t lie. Until that exists, treat every count here as “true on the snapshot date, decaying thereafter.”

None of that is urgent. The system works — that’s exactly why nobody scrapes the hull. This inventory exists so the next reorg has a ground-truth starting point, and so the next reader knows which of these 112 names still answer when you call them.