Architecture Overview

What components make up a personalized AI assistant and how they fit together.


This doc covers the full stack for a personalized AI assistant deployment — from the server to the agent to the site. Everything here is what's running on mcinnis.dev.

The Three-Layer Model

All components fit into one of three layers:

Infrastructure layer — The platform everything runs on. A Linux server, a reverse proxy (Caddy), a process manager (systemd), and the agent runtime (OpenClaw). Goal: a single setup script that takes a fresh Ubuntu droplet to a running platform.

Platform layer — The services the agent uses. Bridge services for email, SMS, and CRM. The agent routing config. The tool registry. These are modular — a deployment that doesn't need SMS shouldn't have the SMS bridge installed.

Identity layer — What makes a deployment unique. The domain, the SOUL.md files, the site content, the API credentials, the agent names. Swapping this layer is what turns "Coral on mcinnis.dev" into a different assistant on a different domain.

Component Map

Internet
  │
  ▼
Caddy (reverse proxy, TLS, static files)
  ├── mcinnis.dev → serves public/ (11ty output)
  ├── reef.mcinnis.dev → OpenClaw dashboard
  ├── /api/chat → OpenClaw gateway (port 18789)
  └── /api/sms → SMS bridge (port 3032)
  │
  ▼
OpenClaw (agent runtime)
  ├── main agent (Opus 4.6) — CLI sessions, direct work
  ├── public-chat agent (Haiku 4.5) — site chat widget
  ├── discord agent (Haiku 4.5) — Discord channel
  ├── content-writer (Sonnet 4.6) — site publishing
  ├── gmail-assistant (Sonnet 4.6) — email triage
  └── outreach-agent (Sonnet 4.6) — CRM + outreach
  │
  ▼
Bridge services (localhost only)
  ├── GSuite bridge :3031 — Gmail + Calendar API proxy
  ├── SMS bridge :3032 — Twilio inbound/outbound
  └── CRM service :3033 — SQLite lead pipeline
  │
  ▼
External APIs
  ├── Anthropic API (Claude models)
  ├── Google Workspace (Gmail, Calendar)
  ├── Twilio (SMS)
  └── Brave Search API (web research)

Server

DigitalOcean Ubuntu droplet. 4GB RAM, 2 vCPU is sufficient for this workload. The agent runs as the openclaw system user. Caddy handles TLS automatically via Let's Encrypt.

OpenClaw runs as a systemd service (openclaw.service). The three bridge services each run as their own systemd unit.

Agent Runtime

OpenClaw is the agent platform. It manages:

  • Model API calls to Anthropic
  • Tool execution (exec, read, write, web search, etc.)
  • Session history and context
  • Multi-agent routing via channel bindings
  • The dashboard UI at reef.mcinnis.dev

Each agent gets its own workspace directory with its own SOUL.md (identity/instructions), session history, and tool policy.

Site Pipeline

The site is optional — not every deployment needs one. When enabled:

Coral writes src/blog/2026-02-21-post.md
  → npm run build (Tailwind + Eleventy)
  → public/ updated
  → git push
  → Caddy serves updated static files

Eleventy (11ty) is the static site generator. Tailwind CSS handles styling. The agent publishes by writing a markdown file — no HTML generation needed.

What's Not Here

  • No Docker in production (sandbox mode off — agent runs directly on host)
  • No Kubernetes, no load balancer, no CDN (single droplet is fine at this scale)
  • No database for the site (static files only)
  • No build server — builds run directly on the production droplet