multi-agent system · 2x gateways · telegram interface · as of feb 2026
graph TD
%% ── HUMANS ──
ANDY(("👤 Andy"))
STEVE(("👤 Steve"))
%% ── CHANNELS ──
TG_A["📱 Telegram\nAndy's chat"]
TG_S["📱 Telegram\nSteve's chat"]
%% ── GATEWAYS ──
GW_MM["🖥️ Mac Mini Gateway\nOpenClaw · :3102\nTailscale VPN\nCharlie's home"]
GW_LP["💻 MacBook Air Gateway\nOpenClaw · :18789\nTom's home"]
%% ── AGENTS ──
CHARLIE["🟣 Charlie\nOps Agent · main\nGemini 3.1 Pro / Sonnet 4.6\nvc: /Users/venagency"]
SAMMY["🔵 Sammy\nMarketing Agent\nGemini 3.1 Pro"]
BRIAN["🟤 Brian\nSales Agent\ndisabled"]
TOM["🟠 Tom\nSteve's AI\nPi Agent\n/Users/andynguyen"]
%% ── SUB-AGENTS ──
SUB_C["⚡ Sub-agents\nCodex · Opus 4.6 · Flash 3\nspawned by Charlie / Sammy"]
%% ── INTEGRATIONS ──
GMAIL["📧 Gmail\ninbox@ven.com.au\nandy@ven.com.au"]
CLICKUP["✅ ClickUp\nWebhook :9210\nTask management"]
GADS["📊 Google Ads API"]
META["📘 Meta Ads API"]
SMOOTH["🌐 Smooth CLI\nBrowser automation"]
SKILLS["📚 ven-skills/\n50+ agent skills"]
SHARED["📁 ~/shared/\nFile drop bridge"]
%% ── HUMAN FLOWS ──
ANDY <-->|"DM"| TG_A
STEVE <-->|"DM"| TG_S
%% ── GATEWAY FLOWS ──
TG_A <-->|"webhook"| GW_MM
TG_S <-->|"webhook"| GW_LP
%% ── AGENT FLOWS ──
GW_MM --> CHARLIE
GW_MM --> SAMMY
GW_MM --> BRIAN
GW_LP --> TOM
%% ── SUB-AGENT SPAWNING ──
CHARLIE -->|"spawn"| SUB_C
SAMMY -->|"spawn"| SUB_C
%% ── CHARLIE INTEGRATIONS ──
CHARLIE -->|"2min cron"| GMAIL
CHARLIE -->|"receive events"| CLICKUP
CHARLIE --> SMOOTH
%% ── SAMMY INTEGRATIONS ──
SAMMY --> GADS
SAMMY --> META
%% ── INTER-AGENT BRIDGE ──
CHARLIE <-->|"[CHARLIE→TOM]\n[TOM→CHARLIE]\nwake events"| TOM
CHARLIE <-.->|"file drop\n~/shared/"| SHARED
TOM <-.->|"file drop\n~/shared/"| SHARED
%% ── SKILLS ──
SKILLS -.->|"loaded per task"| CHARLIE
SKILLS -.->|"loaded per task"| SAMMY
%% ── STYLING ──
classDef human fill:#44475a,stroke:#bd93f9,stroke-width:2px,color:#f8f8f2
classDef channel fill:#2d3555,stroke:#8be9fd,stroke-width:1.5px,color:#f8f8f2
classDef gateway fill:#2a2d4a,stroke:#6272a4,stroke-width:2px,color:#f8f8f2
classDef agentCharlie fill:#3a3060,stroke:#bd93f9,stroke-width:2.5px,color:#f8f8f2
classDef agentSammy fill:#1e3a4a,stroke:#8be9fd,stroke-width:2px,color:#f8f8f2
classDef agentTom fill:#3d2e0a,stroke:#ffb86c,stroke-width:2px,color:#f8f8f2
classDef agentDisabled fill:#2a2a2a,stroke:#44475a,stroke-width:1px,color:#6272a4
classDef subagent fill:#1a3a28,stroke:#50fa7b,stroke-width:1.5px,color:#f8f8f2
classDef integration fill:#312820,stroke:#ffb86c,stroke-width:1.5px,color:#f8f8f2
classDef skills fill:#252535,stroke:#6272a4,stroke-width:1px,color:#6272a4,stroke-dasharray:4 4
classDef shared fill:#2a2535,stroke:#ff79c6,stroke-width:1.5px,color:#f8f8f2
class ANDY,STEVE human
class TG_A,TG_S channel
class GW_MM,GW_LP gateway
class CHARLIE agentCharlie
class SAMMY agentSammy
class TOM agentTom
class BRIAN agentDisabled
class SUB_C subagent
class GMAIL,CLICKUP,GADS,META,SMOOTH integration
class SKILLS skills
class SHARED shared
[TOM→CHARLIE]. Charlie replies via cron(wake) to Tom's gateway at ws://localhost:18789.~/shared/ (file drop bridge). Direct gateway connection currently has token mismatch — file drop is the working path.