First Run
After completing the Installation, follow this guide to verify that everything is running correctly and complete the initial setup. This is the part where you find out whether your confidence was justified or merely aspirational.

Run the Test Suite
Section titled “Run the Test Suite”Sanctum includes a test suite that validates your configuration, checks service health, and reports any issues. It is honest. Sometimes brutally so.
-
Execute the full test suite.
Terminal window bash ~/.sanctum/tests/run-all.shThe suite runs checks in order:
- Configuration validation (instance.yaml syntax, required keys)
- Node identity verification (.node_id exists and matches config)
- LaunchAgent status (loaded and running)
- Service health (port reachability, HTTP endpoints)
- VM connectivity (SSH, bridge network)
- Dashboard availability
-
Review the output.
Each check prints a status line:
[PASS] instance.yaml is valid[PASS] node_id "your-haus-name" matches config[PASS] com.sanctum.gateway is running[PASS] Gateway responding on port 1977[FAIL] com.sanctum.voice-agent is not runningA wall of
[PASS]is a beautiful thing. Address any[FAIL]lines before continuing. Do not skip them. Do not convince yourself they are probably fine. They are not fine. -
Re-run after fixes.
If you needed to fix anything, run the suite again to confirm a clean pass:
Terminal window bash ~/.sanctum/tests/run-all.sh
Verify LaunchAgents
Section titled “Verify LaunchAgents”Check that all expected Sanctum LaunchAgents are loaded and running.
launchctl list | grep sanctumYou should see entries for each enabled service. A typical hub node might show:
- 0 com.sanctum.gateway- 0 com.sanctum.dashboard- 0 com.sanctum.homeassistant- 0 com.sanctum.firewalla-bridge- 0 com.sanctum.voice-agent- 0 com.sanctum.utm-autostart- 0 com.sanctum.watchdog- 0 com.sanctum.cloudflare-tunnelThe second column is the exit status. A 0 indicates the service exited cleanly (or is still running). A non-zero value suggests a startup failure, which is macOS’s polite way of saying something went wrong and it will not be telling you what.
If a LaunchAgent is missing from the list, load it manually:
launchctl load ~/Library/LaunchAgents/com.sanctum.<service>.plistIf it exits immediately with a non-zero status, check its log output:
# Most LaunchAgents log to the system loglog show --predicate 'process == "sanctum"' --last 5m
# Or check the specific stdout/stderr files defined in the plistcat /tmp/com.sanctum.<service>.stdout.logcat /tmp/com.sanctum.<service>.stderr.log| Symptom | Cause | Fix |
|---|---|---|
| Agent not in list | Plist not loaded | launchctl load ~/Library/LaunchAgents/com.sanctum.*.plist |
| Exit status 78 | Configuration error | Check instance.yaml for the affected service |
| Exit status 127 | Binary not found | Verify node, python3, or other binaries are in the plist PATH |
| Agent loads but port unreachable | Firewall or binding issue | Check if another process is using the port with lsof -i :<port> |
Open the Dashboard
Section titled “Open the Dashboard”Navigate to the dashboard in your browser. This is the reward for all that terminal work.
-
Access the dashboard.
http://localhost:1111If you configured a hostname alias (such as a DNS entry or mDNS broadcast), you can use that instead:
http://your-haus-name -
Verify service status.
The dashboard haus screen shows the health of all enabled services. Each service tile displays:
- Service name and port
- Status indicator (green = healthy, red = down, yellow = degraded)
- Uptime since last restart
If everything is green, take a screenshot. Show someone. You have earned this.
-
Check the config endpoint.
Confirm the dashboard is reading your configuration correctly:
Terminal window curl -s http://localhost:1111/api/config | python3 -m json.toolThe response should include your instance name, slug, and the list of enabled services. Secrets are excluded from this endpoint.
Verify Node Identity
Section titled “Verify Node Identity”Confirm that your node identity is correctly configured.
cat ~/.sanctum/.node_idThis should print the slug you set during installation (for example, your-haus-name). Verify that it matches a key in the nodes section of instance.yaml:
sanctum_get nodes.$(cat ~/.sanctum/.node_id).typeThis should print hub for a hub node. If the command returns nothing or an error, double-check that your .node_id value matches the YAML key exactly. YAML does not forgive typos. YAML does not forgive anything.
Verify VM Connectivity
Section titled “Verify VM Connectivity”If you set up the Ubuntu VM, confirm the Mac-to-VM link is working. This is where two machines learn to trust each other across a private network that only they know about.
-
Check the bridge interface.
Terminal window ifconfig bridge100You should see
10.10.10.1assigned to the interface. If the interface does not exist, verify that UTM is running and the VM is started. -
Test SSH.
Terminal window This should print the VM hostname and uptime without prompting for a password (assuming SSH key auth is configured).
-
Check VM services.
Terminal window The gateway service on the VM should show
active (running).
Enable the Watchdog
Section titled “Enable the Watchdog”The watchdog monitors all services and performs automatic remediation when it detects failures. It runs on a timer (default: every 10 minutes) and is managed by its own LaunchAgent. Think of it as a night nurse for your infrastructure — quietly checking pulses, administering medicine, only paging you when someone flatlines.
Verify the watchdog is loaded:
launchctl list | grep com.sanctum.watchdogThe watchdog writes a health report after each run. Check the latest report:
cat /tmp/sanctum-watchdog-latest.logWhat Comes Next
Section titled “What Comes Next”With a verified installation, you are ready to start using Sanctum. The hard part is over. (That was a lie. The hard part is maintenance. But you have a watchdog for that now.)
Here are recommended next steps:
- Architecture Overview — Understand how the platform components fit together.
- Configure agents — Set up AI agents for security, efficiency, health, and finance.
- Add a satellite node — Extend the platform to a second location.
- Set up secret rotation — Enable automatic monthly token rotation.
- Customize the dashboard — Add or remove panels based on your enabled services.