External Integrations Reference
This is the cross-cutting index of every external service SABLE integrates with — connector sources are covered page-by-page under Connectors; this page adds the delivery and infrastructure services that sit alongside them.
Connector sources
| Service | Status | Direction | Notes |
|---|---|---|---|
| Fathom | 🟢 Live | Read | Meeting transcripts via signed webhook + 4-hourly reconciliation poller |
| Granola | 🟡 Built, needs client key | Read | 30-min poller; blocked on client GRANOLA_API_KEY |
| Asana | 🟢 Live / gated act | Read live; write gated | REST mirror plus approved-write executor behind ASANA_ACT_WRITES_ENABLED |
| Toggl | 🟢 Built | Read | Drift check + opt-in hours refresh; never rewrites the master project list |
| Google Calendar | 🟢 Live | Read live; write gated | Free/busy + event cache; approved-write executor behind CALENDAR_ACT_WRITES_ENABLED |
| Google Drive | 🟠 Paused by decision | Read | Recursive, restart-safe refresh exists and is tested, but its schedule was retired (#217); project folders are link-only and evidence goes through Library instead |
| Gmail | 🟡 Built, needs Workspace approval | Read | Domain-wide delegation, gmail.readonly; needs Workspace super-admin approval and a narrow query |
| HubSpot | 🟡 Built, gated | Read | 504 companies / 2,177 contacts / 103 deals synced; write path double-gated off |
| Resend inbound email | 🟢 Live | Read | BCC/forwarded mail via signed webhook + 10-minute recovery poller |
See Connectors overview for the shared architecture pattern, and the per-connector pages for setup and payload detail.
Delivery services
| Service | Used for | Notes |
|---|---|---|
| Resend | Outbound email (morning/EOD boards, alerts) and inbound email receiving | All four send paths read RESEND_FROM/SABLE_ALERT_FROM rather than hardcoding a sender — a board or alert with no configured sender does not attempt to send from an unverified domain. |
| Slack | Board delivery to Slack | Requires a bot token with chat:write. |
AI providers
Covered in full on AI Providers Reference — Anthropic (Claude, generation/chat/vision OCR), Voyage AI (embeddings/rerank), and Exa (opt-in public-web research).
Infrastructure services
| Service | Role | Notes |
|---|---|---|
| Vercel | Web app hosting (sable-agents-demo/web), serverless api/*.js functions | Project sable, team cprinos-7741s-projects, production domain https://sable.indigotrigger.ai. Deployment is Git-only — see Deployment. |
| Supabase | Postgres database, Auth, Storage, Edge Functions | Project ref fvngkfrmienkltuwtoxa. |
| Trigger.dev | Durable scheduled/background task execution | Replaces most pg_cron scheduling — see Trigger Task Groups. |
| GitHub | Source control, CI, PR-gated production releases | Org Indigo-Trigger, repo indigo-trigger-engagement. |
| GitNexus | Local code-intelligence index for AI-assisted development | Root-only setup script (npm run setup:gitnexus); loaded via .mcp.json inside sable-agents-demo/. |
Scheduling authority
Trigger.dev is the production scheduler for connector refreshes, reports, documents, and
watchdogs. A handful of legacy pg_cron jobs still exist as reconciliation schedules for
individual connectors (Fathom, Granola) that intentionally overlap the Trigger-scheduled sync with
a lower-frequency, longer-lookback safety net — not because Trigger is unreliable, but because a
webhook or primary poller missing an item is cheaper to catch with periodic overlap than to chase
after the fact. Keep only one primary scheduler per connector so refreshes don't race each other.
Go-live decisions still open
- Granola needs a client workspace API key (
GRANOLA_API_KEY) before its poller can run for real — it is otherwise fully built. - Gmail needs a Workspace super-admin to approve the restricted
gmail.readonlyscope, an operator-configured narrowGMAIL_SYNC_QUERY, and the organization's security/privacy and retention review — domain-wide delegation authorization alone is not the whole governance step. - HubSpot needs a matching-strategy decision (exact-name-only vs. fuzzy + domain-based) before the real write path is armed; auth already works and the read sync already runs.
- Drive is a reversal candidate, not a build: turning the scheduled refresh back on is a
one-line scheduling change in
trigger/connectors.ts, not new code — see the Drive connector page for why it was paused.
sable-agents-demo/CONNECTOR-SETUP.md still describes Drive as live on a six-hour schedule; that
status table predates #217 and should be corrected there too.
Where the code lives
sable-agents-demo/CONNECTOR-SETUP.md— the canonical connector architecture and status doc (note: its Drive row is currently stale — see above).sable-agents-demo/supabase/functions/*/index.ts— one Edge Function per connector.sable-agents-demo/trigger/connectors.ts— the Trigger-scheduled connector refresh tasks.sable-agents-demo/env-manifests/sable-supabase-edge.json,sable-web.json,sable-trigger.json— the environment-variable inventory for every service above.