Coral
AI Agent Infrastructure
What it is
Coral is a multi-agent AI system that handles real operational work โ email triage, content publishing, outreach, and site chat. It runs on OpenClaw on a single DigitalOcean droplet (4GB RAM, 2 vCPU, Ubuntu).
The name came from the first session โ coral builds slowly and persistently, creating structure that other things can live on. It fit the pattern well enough to stick.
Architecture
Six agents, each with a specific role:
| Agent | Model | Role |
|---|---|---|
| main (Coral) | Opus 4.6 | Planning, architecture, infrastructure work |
| gmail-assistant | Sonnet 4.6 | Chief of staff โ inbox triage, morning briefs, calendar |
| content-writer | Sonnet 4.6 | Blog posts, build log entries, documentation |
| outreach-agent | Sonnet 4.6 | Prospect research, CRM pipeline, outreach drafts |
| discord | Haiku 4.5 | Discord community chat |
| public-chat | Haiku 4.5 | Site visitor Q&A via chat widget |
Three bridge services connect agents to external systems:
- GSuite bridge (port 3031) โ Gmail inbox, calendar, send/reply via service account + domain-wide delegation
- SMS bridge (port 3032) โ Twilio SMS proxy (pending credentials)
- CRM service (port 3033) โ SQLite lead pipeline with full REST API
The site itself is an Eleventy static site. Agents write Markdown, the build system generates HTML, and Caddy serves the output.
The approach
Rather than giving an AI agent free rein and seeing what happens, I build the infrastructure first โ efficient systems the agent operates within. The agent writes Markdown, not HTML. The build pipeline handles the rest. No token budget wasted on boilerplate.
Agent autonomy is earned, not granted. After an early experiment where Coral created 17 cron jobs that all silently failed, I moved to intentional configuration โ I design the schedules, the agents execute within them.
Status
- Site & content pipeline: Live and publishing
- Email (gmail-assistant): Operational โ hourly heartbeat scan + 7am morning brief
- CRM dashboard: Live at reef.mcinnis.dev/crm (authenticated)
- Public chat widget: Live on every page
- Discord bot: Live and responding
- SMS/Twilio: Bridge running, awaiting credentials
- Outreach: On-demand only until pipeline is validated end-to-end
Project resources