Why tentus builds its own integrations
It would be faster to bolt on a generic integration platform and call it a day. Here's why we mostly didn't, and the two places we did anyway.
The fast way to ship "connects to everything" is to bolt on a generic integration platform, expose whatever catalog it ships with, and call it done. We didn't do that for most of tentus's integrations, and it's worth explaining why, since the slower path was a deliberate choice, not an oversight.
Native, by default
Google, Microsoft 365, Slack, Zoom, Linear, GitHub, Figma, Zotero, Readwise — all native. tentus holds the OAuth relationship directly, calls the provider's API directly, and owns the sync logic end to end. It's more work per integration. It's also the only way to make each one feel like it was actually designed for tentus rather than generically proxied through someone else's abstraction — the sync cadence, the data shape, the error handling can all be tuned to what that specific integration actually needs.
It also means user credentials for those integrations live in exactly one place: tentus's own infrastructure, under the same RLS discipline as everything else in the product. Nothing about how a Slack token or a Google refresh token is handled is different from how any other sensitive row in the database is handled.
Where we made an exception, and why
Composio backs a specific, narrow slice: outbound actions to a longer tail of tools — Gmail send, Notion page creation, HubSpot, Asana, Trello, and a few others. Building and maintaining native OAuth apps for a dozen-plus lower-traffic connectors, each with its own quirks, would have been months of work to reach parity with what a managed platform already does well for exactly this kind of low-stakes, single-action integration.
The trade-off is real and we don't pretend otherwise: tokens for those connectors live on Composio's infrastructure, not ours, and that's disclosed plainly in the privacy policy as a subprocessor relationship. It's the right trade for actions that fire once and finish, and the wrong trade for anything that needs deep, ongoing sync — which is exactly why the integrations that hold your actual knowledge (Google Drive, Notion reads, email ingestion) stayed native.
The actual principle
Own the relationship where the data matters most and the integration needs to feel bespoke. Delegate the relationship where the action is simple, well-understood, and the alternative is genuinely months of duplicated OAuth plumbing for marginal benefit. Building fast and building trustworthy aren't always the same tool for the same job — sometimes they're two different tools, used deliberately.