Installation
Quick Install
Section titled “Quick Install”Open Terminal and run:
curl -fsSL https://sanctum.run/install.sh | bashThe installer checks your hardware, installs dependencies, walks you through configuration, and sets up your Sanctum — all in about two minutes. No manual YAML editing required.
The installer will:
- Verify your Mac meets the requirements (Apple Silicon, macOS 15+, 16GB+ RAM)
- Install missing dependencies (Homebrew, Node.js, Python, Docker) with your permission
- Ask you a few questions about your home and which features you want
- Create
~/.sanctum/instance.yamlwith your configuration - Start the Presidio privacy containers (PII scrubbing for external AI)
- Set up the shell library and LaunchAgents
After installation, visit the First Run guide to verify everything is working.
Manual Installation
Section titled “Manual Installation”If you prefer to set things up by hand, follow the steps below. Make sure you have completed all the Requirements first.
Create the Sanctum Home Directory
Section titled “Create the Sanctum Home Directory”-
Create the directory structure.
Sanctum stores all configuration, templates, and runtime data under
~/.sanctum.Terminal window mkdir -p ~/.sanctum/{templates/launchagents,tests,lib,scripts} -
Copy the example configuration.
The example file is an annotated template that documents every available option.
Terminal window cp ~/.sanctum/instance.yaml.example ~/.sanctum/instance.yaml -
Set your node identity.
Each node needs a single-line identity file that tells the system which node it is.
Terminal window echo "your-home-name" > ~/.sanctum/.node_idUse a short, lowercase slug. This value must match a key under the
nodessection of yourinstance.yaml.
Configure instance.yaml
Section titled “Configure instance.yaml”Open ~/.sanctum/instance.yaml in your editor. The file is organized into these top-level sections:
# Instance identityinstance: name: "Your Home Name" slug: "your-home-name"
# Node topologynodes: your-home-name: type: hub host: 192.168.1.10 # ...
# Services and their portsservices: gateway: enabled: true port: 18789 homeassistant: enabled: true port: 8123 # ...
# VM configurationvm: ip: 10.10.10.10 bridge_ip: 10.10.10.1 ssh_user: ubuntu # ...
# Secret managementsecrets: backend: keychain # "keychain" on Mac, "sops" on VM rotation_day: 1 # Day of month for auto-rotationKey Sections to Edit
Section titled “Key Sections to Edit”At minimum, configure the following for your environment:
| Section | What to Set |
|---|---|
instance.name | Human-readable name for your home |
instance.slug | URL-safe lowercase slug |
nodes | At least one hub node with its LAN IP |
services | Enable or disable services based on what you need |
vm.ip | Your VM’s static IP (default: 10.10.10.10) |
Install the Shell Library
Section titled “Install the Shell Library”The shell library provides helper functions used by scripts and LaunchAgents.
-
Source the library in your shell profile.
Add this line to your
~/.zshrc(or~/.bashrc):Terminal window source ~/.sanctum/lib/config.sh -
Reload your shell.
Terminal window source ~/.zshrc -
Verify the library is loaded.
Terminal window sanctum_get instance.slugThis should print your instance slug. If it does, the config library is working.
The shell library provides these functions:
| Function | Purpose |
|---|---|
sanctum_get <key> | Read a value from instance.yaml |
sanctum_slug | Shortcut for the instance slug |
sanctum_home | Returns the Sanctum home directory path |
sanctum_vm_ssh <command> | Run a command on the VM via SSH |
sanctum_enabled <service> | Check if a service is enabled |
sanctum_expand <template> | Expand {{PLACEHOLDER}} variables in a template |
Generate LaunchAgents
Section titled “Generate LaunchAgents”Sanctum uses macOS LaunchAgents to manage services. Rather than maintaining individual plist files by hand, you generate them from templates.
-
Review the templates.
Templates live in
~/.sanctum/templates/launchagents/. Each template uses{{PLACEHOLDER}}syntax for values pulled frominstance.yamland macOS Keychain. -
Run the generator.
Terminal window # Preview what will be generated (no files written)bash ~/.sanctum/generate-plists.sh --dry-run# Generate for realbash ~/.sanctum/generate-plists.shThe generator does the following:
- Reads each template from
~/.sanctum/templates/launchagents/ - Expands placeholders with values from
instance.yaml - Pulls tokens from macOS Keychain where referenced
- Skips templates for disabled services
- Writes rendered plists to
~/Library/LaunchAgents/
- Reads each template from
-
Load the generated agents.
Terminal window # Load all Sanctum LaunchAgentsfor plist in ~/Library/LaunchAgents/com.sanctum.*.plist; dolaunchctl load "$plist"done
Set Up the Dashboard
Section titled “Set Up the Dashboard”The dashboard is a web interface that displays the status of all services, nodes, and agents.
-
Install dependencies.
Terminal window cd ~/.sanctum/dashboardnpm install -
Build and start.
Terminal window npm run devThe dashboard will be available at
http://localhost:3001.Terminal window npm run buildnpm startIn production, the dashboard LaunchAgent handles startup automatically. The generator creates the appropriate plist if the dashboard service is enabled in
instance.yaml. -
Verify the config endpoint.
The dashboard serves instance configuration (with secrets excluded) at its API endpoint:
Terminal window curl -s http://localhost:3001/api/config | python3 -m json.toolYou should see your instance configuration as JSON.
Set Up the VM
Section titled “Set Up the VM”If you plan to run VM workloads (agent orchestration, knowledge graph), set up the Ubuntu VM.
-
Create the VM in UTM.
Use the settings from the Requirements page. Install Ubuntu 24.04 LTS with SSH enabled.
-
Configure networking.
The Mac needs to set the bridge IP each time the VM starts. This is handled by the UTM autostart LaunchAgent, which runs:
Terminal window sudo ifconfig bridge100 10.10.10.1/24A sudoers entry at
/etc/sudoers.d/vmnet-bridgeallows this without a password prompt. -
Set the VM’s static IP.
Inside the VM, configure a static IP of
10.10.10.10on the vmnet interface using netplan or your preferred method. -
Test connectivity.
Terminal window # From Macssh ubuntu@10.10.10.10# From VMping 10.10.10.1
Next Steps
Section titled “Next Steps”With the base installation complete, proceed to First Run to verify everything is working and complete initial setup.