Connector Overview
Production connector logic lives in Supabase Edge Functions because Supabase holds the relevant secrets.
Status
| Connector | Status | Function/Route | Write Risk |
|---|---|---|---|
| Fathom | Live | fathom-sync, fathom-webhook | Writes only to Supabase spine/approvals |
| Granola | Built, needs client key | granola-sync | Read-only gap-filler; skipped when Fathom already has the meeting |
| Email BCC | Live | email-webhook, email-sync | Ingests BCC'd/forwarded emails and attachments into Supabase; no mailbox send scope |
| Gmail mailbox | Built, approval required | gmail-sync | Bounded, idempotent gmail.readonly mirror; only confidently project-matched activity is exposed to CMA |
| Asana mirror | Live | asana-sync | Reads Asana into Supabase |
| Asana act | Gated | asana-act | External writes only when approved and armed |
| Toggl | Live | toggl-sync | Updates additive project-hour columns |
| Drive | Paused by decision | drive-sync | Code intact; scheduled refresh retired (#217) in favor of manual Library uploads |
| HubSpot | Built, gated | hubspot-sync | Conservative until match decisions are made |
| Calendar mirror | Live | calendar-sync | Reads availability + internal event details into Supabase |
| Calendar act | Gated | calendar-act | External writes only when approved and armed |
Common Rules
- Connector secrets are never committed.
- External writes require explicit operator switches.
- Read connectors should report partial failures rather than hiding them.
- All connector writes to Supabase must preserve org boundaries.
- Every action proposal should preserve provenance.