Modular Deployment

How to set up a new assistant deployment without rebuilding from scratch.


The goal is that deploying an assistant for a new person or use case is a configuration change, not a rebuild. This page describes the target architecture and what's been built toward it so far.

The Identity Layer

Everything that makes a deployment unique belongs in the identity layer:

  • Domain name and DNS config
  • SOUL.md files per agent (identity, capabilities, instructions)
  • Site theme and content (if a site is included)
  • API credentials (Anthropic key, Google service account, Twilio, Brave)
  • Agent names and personalities

Everything else โ€” the infrastructure, the bridge services, the OpenClaw config structure โ€” is shared across deployments.

What You're Reusing

When setting up a new deployment, you're reusing:

  • The same Ubuntu + Caddy + OpenClaw + systemd setup
  • The same bridge service code (GSuite bridge, SMS bridge, CRM service)
  • The same openclaw.json structure (different agents/keys, same config format)
  • The same 11ty site template (different content, same build pipeline)

Target Deployment Manifest

We're working toward a single config file that describes a complete deployment:

domain: example.com
agents:
  primary:
    model: claude-sonnet-4-6
    tools: [web, crm, gsuite]
  chat:
    model: claude-haiku-4-5
    tools: [web]
bridges:
  gsuite: true
  sms: false
  crm: true
site:
  enabled: true
  template: default

This file should eventually drive an automated setup script. It's not there yet โ€” but all decisions made in the current setup are made with this target in mind.

Current Manual Setup Sequence

Until the setup script exists, here's the sequence for a new deployment:

Infrastructure (one-time per server):

  1. Provision Ubuntu droplet (4GB RAM minimum)
  2. Install Node.js v22, git, build tools
  3. Install OpenClaw via install script
  4. Install and configure Caddy
  5. Point domain DNS at server

Platform (per deployment): 6. Create bridge service directories, copy service code 7. Install npm dependencies for each bridge 8. Create systemd unit files and enable services 9. Configure Caddy virtualhost for the domain

Identity (unique per deployment): 10. Write openclaw.json with agents and API keys 11. Create workspace directories with SOUL.md per agent 12. Configure opt/openclaw.env with credentials 13. Set up 11ty site with content (optional) 14. Add Google credentials for GSuite bridge (optional) 15. Add Twilio credentials for SMS bridge (optional)

Opt-In Components

Every component is optional. A deployment can include:

Component When to include
11ty site Needs a public-facing website
GSuite bridge Needs email/calendar access
SMS bridge Needs text messaging
CRM service Needs lead tracking
Discord channel Needs a Discord bot
Public chat widget Needs a site chat interface

A deployment that only handles email triage needs OpenClaw + OpenClaw + GSuite bridge. That's it.

What Changes Between Deployments

Changes Stays the same
Domain Bridge service code
Agent names and identities openclaw.json structure
SOUL.md content Caddy config structure
API credentials Systemd unit format
Site content and theme Build pipeline
Which bridges are enabled Server OS and runtime

Current Status

This is being built and documented as mcinnis.dev is built. The setup script doesn't exist yet. When it does, it will live at /opt/deploy-assistant.sh and be documented here.

If you're setting this up yourself before the script exists, follow the manual sequence above and open an issue if anything is missing or unclear.