Connecting the OpenClaw agent (Bruce, @OCBruce_bot) to CNAT's real systems — safely, reversibly, and with room to grow. Drafted 2026-07-16.
Bruce is a full OpenClaw agent framework on Hostinger VPS 1507037 (Docker), reachable over Telegram (@OCBruce_bot) and Tailscale SSH. It gains capabilities three ways:
openclaw mcp add connects it to any Model Context Protocol server (Supabase, GHL, Hostinger, GitHub…). This is our primary integration path — no custom code, per-server access control, one command to add or remove.github, gog (Gmail/Calendar/Drive), coding-agent (delegate to Claude Code), blogwatcher (feed monitoring), 1password, diagram-maker, and more.Model: anthropic/claude-sonnet-4-6.
Bruce is not stable yet. The uid perm-flip (.openclaw → uid 1001, locking out the node/1000 gateway) still recurs even after deleting its cron jobs and disabling the sandbox — it was broken again when I checked today. A perm-guard heals it, but that's a bandaid. Wiring the stack onto an unstable base is pointless — stability is Phase 0.
Bruce currently can't touch your real data. Its only Supabase key is for bruce-shared, not cnat-internal (which powers File Bot / hotsheet / search / commissions). That's a good safety default: nothing we do can hurt production data until we deliberately grant it — and we'll grant it narrowly.
Goal: Bruce runs 48h with no perm-flip and no manual healing.
docker.sock mount and remove the broken WhatsApp channel.How: openclaw mcp add the cnat-internal Supabase MCP — but with a dedicated read-only Postgres role, never the full service key. This is the single most important safety control: Bruce gets SELECT on what it needs and nothing else.
Value (text Bruce from anywhere): "how many S817 listings closed this month?", "pull the hotsheet for 76244", "what's KP's premium YTD?"
Blast radius: zero writes possible → cannot hurt anything.
openclaw mcp add the GHL unified proxy (ghl.cnattitle.tech/mcp), scoped to read ops first (search contacts, read conversations). "What's this contact's last activity?", "any unread messages in the S817 inbox?"
Draft, don't send: Bruce drafts a message/email and shows it to you; you approve. Safe writes (create a task/note, trigger a specific n8n workflow, kick a deploy). Anything customer-facing requires your explicit confirmation — nothing auto-sends.
openclaw mcp add → test → keep, or openclaw mcp remove → gone. No big-bang.| Capability | How | Value | Phase |
|---|---|---|---|
| Mobile data assistant | Supabase MCP (read-only) | Query the whole business from your phone | 1 |
| CRM lookup | GHL proxy MCP (read) | Contact / lead / inbox status on demand | 2 |
| Draft-and-approve outreach | GHL MCP (guarded write) | Bruce writes, you approve, it sends | 3 |
| Trigger ops (deploy/sync/report) | n8n MCP / webhooks | "Run the orders sync", "redeploy X" | 3 |
| Market/competitor monitoring | blogwatcher skill | The digest done right — signal, not busy-work | 4 |
| Delegate coding | coding-agent skill | Background dev tasks + PRs | 4 |
| Email/calendar triage | gog skill | Gmail / Calendar / Drive from Telegram | 4 |
Sequencing: Phase 0 stabilize → Phase 1 read-only data → prove value → Phase 2 GHL read → Phase 3 guarded actions → Phase 4 advanced. Each phase is independently useful and reversible.
Internal planning document · Community National Title · not indexed.