Connections
Connections are how agents reach outside services — Slack, Gmail, Google
Sheets, Notion, Attio, GitHub, and ~1,000 more. An agent declares what it needs
in its connections: field; each operator authorizes the accounts their runs
act as.
Per-user authorization
Connections are authorized per user, per workspace. Because a run executes as a specific acting user, it uses that user’s authorized accounts. A manual run uses yours; a scheduled run uses the automation owner’s; an event run uses the trigger owner’s. If an agent needs a service nobody has connected, the sidebar surfaces an “Action needed” prompt with a Connect button.
Three substrates
| Substrate | When to pick it |
|---|---|
| Composio | The default. ~1,000 services wrapped as REST tools. Lowercase slugs (slack, googlesheets). |
| Native MCP | The provider has an official MCP server — richer, schema-aware tools, fewer round trips, and TAS-managed OAuth. |
| Secrets | A plain API key for a service with no OAuth (e.g. Clay), read by sidecar Python tools. |
Prefer Native MCP when the provider is in TAS’s native catalog: it uses the provider’s official server and TAS-managed OAuth (just click Connect — no bring-your-own OAuth app). Use Composio for providers not in that catalog.
Declaring connections on an agent
connections: - { type: slack, tools: [SLACK_SEND_MESSAGE] } - { type: attio, source: native-mcp, name: default, tools: [run-basic-report] }type:is the provider slug.source:defaults tocomposio; setnative-mcpfor native providers.name:is the connection slot (“default” unless you keep multiple accounts of the same provider, e.g.workvspersonal).tools:narrows what the agent can call (works on both substrates).
Authorizing and reconnecting
Authorize and manage connections under Connections. If a credential expires or is revoked, the connection is marked stale and runs that need it fail with a clear message — reconnect from the same page. See Troubleshooting.
For doing deterministic I/O over a connection from Python, see Sidecar Python tools.
Secrets (API keys)
Some services — like Clay — authenticate with a plain API key, not OAuth.
For these, use a Secret: a free-form, workspace-level key an admin sets
once under Connections → Secrets and the whole workspace shares (unlike the
per-user OAuth connections above). Secrets are read by an agent’s
sidecar Python tools via
tas_tools.secret("name") — they attach no tools and are invisible to the
model.
-
Add one (admin): Connections → Secrets → name (e.g.
clay) + value. It’s encrypted at rest and shown masked. -
Use it in a tool:
tas_tools.secret("clay")returns the value. -
Optionally declare it on the agent so the studio prompts an admin to set a missing one:
connections:- { type: clay, source: secret }