Client integrations and intake
Connect a client's Slack, Linear, GitHub or Notion, turn inbound items into tasks, and let agents act in those tools.
One connection per client workspace
Integrations are scoped to a single client, never to the organization as a whole. A client connects its own Slack, Linear, GitHub or Notion from the Integrations tab on its context page, or during the new-client wizard. Long-tail tools — Jira, Asana, Monday and the rest — are reached through Composio or through your organization's own executor gateway.
Credentials are encrypted at rest and write-only in the UI: you can replace a token, you can't read one back. Because the connection belongs to the client, one client's Slack is never reachable from a task in another client.
Intake rules: what becomes a task
Nothing from an external tool reaches the board by accident. An intake rule maps a source to a destination, and only mapped sources produce tasks. Unmapped inbound items are logged and ignored.
- •Source: a Slack channel, a GitHub repository, a Linear team, or a Notion database.
- •Destination: a project, plus an optional role, default assignee and title prefix.
- •Result: a tagged Slack message, a new GitHub issue or pull request, a created Linear issue or a new Notion row becomes a Tango task that links back to where it came from.
- •Every provider is signature-verified (Slack HMAC, GitHub SHA-256), and redeliveries are dropped on the external id so nothing lands twice.
- •Notion has no webhooks, so Tango polls mapped databases on a schedule instead.
Agents acting in a client's tools
Two MCP tools cover the outbound direction. list_integrations reports what a client has connected and which actions it allows. call_integration performs one — but only while the calling worker holds an active lease on a task in that client, and only against endpoints on the provider allowlist.
Every call is written to the client's integration event log, so a comment posted to Linear or a message sent to Slack is attributable to a worker and a task.
list_integrations({ client: "@acme" })
call_integration({
task_id: "…",
provider: "linear",
action: "create_comment",
payload: { issue_id: "…", body: "Draft is attached to the Tango task." }
})Keeping connections healthy
The security audit flags three integration problems: tokens past their rotation window, active connections with no signing secret (which means intake is silently off), and connections whose last call failed. Check it after any credential rotation.