Integrations
Integrations are credentialled bridges from agents to external services. The platform ships with 60+ providers, each contributing typed actions to the tool registry.
An integration wraps an external service (Slack, Gmail, GitHub, Stripe, Linear, BigQuery, and others) into a uniform shape that agents can call. Every provider contributes a set of typed actions to the platform-wide tool registry.
The provider shape
Each provider lives under apps/admin/src/lib/agent-core/integrations/providers/{name}/ and exports a definition built with createIntegration():
createIntegration({
name: "slack",
displayName: "Slack",
description: "Post messages and react to events in Slack.",
auth: slackAuth, // AuthDefinition
ui: slackUI, // helpUrl, setupSteps shown in the Integrations page
actions: [slackPostMessage, slackListChannels, ...],
});The full provider list is collected in providers/index.ts and exposed as ALL_PROVIDERS. Both the UI catalog and the tool registry derive from that single array — there is no manual registration step beyond adding the import and pushing into ALL_PROVIDERS.
Auth types
| Type | Used for | Examples |
|---|---|---|
oauth | OAuth 2.0 flows | Reddit, Linear, Google Workspace |
api_key | Simple API key or token | Sentry, Slack, Stripe |
service_account | GCP service account JSON | Google Analytics, BigQuery |
github_app | GitHub App credentials | GitHub |
internal | No external auth | nova-admin, workspace |
none | No authentication | Webhook receivers |
Action naming
Actions follow {prefix}_{service}_{verb}_{noun}:
slack_post_message
gw_gmail_list_messages
gw_gsc_search_analytics
github_create_pull_requestWhen a flow node references an action, set integrationAction to the full action name. The executor resolves tools by action name directly — do not strip or add the provider prefix.
Risk levels
Every action is tagged with one of:
- safe — read-only.
- moderate — writes user-visible state.
- destructive — deletes or irreversibly modifies state.
The UI surfaces these to operators, and agents can be configured to require approval for anything above a threshold.
Adding a new provider
The full checklist lives in .claude/rules/integrations.md. The short version:
- Create
providers/{name}/withindex.ts,auth.ts,client.ts,types.ts,actions/. - Import the provider in
providers/index.tsand add it toALL_PROVIDERS. - Add an icon entry in
components/agents/integration-icons.tsx— one key, both kebab and snake variants are auto-generated. - (Optional) Seed agents that use the provider under
packages/cli/src/seeds/data/agents/.
The UI catalog auto-derives from ALL_PROVIDERS; no extra wiring needed.
Skills
Skills are reusable prompt fragments that any agent can invoke with /skill-name. They keep agent definitions short and shared knowledge centralized.
Observability
Every agent run, tool call, and model response is captured as a trace. The Observability surface lets operators replay any execution end-to-end.