Skip to main content

Assembly Line Plugins

Plugins are installable npm packages that extend Assembly Line without changing the framework core. Official plugins ship integrations maintained with Assembly Line; community plugins use the same public contracts from independent packages. This page is the catalog and install guide. To implement a plugin, see Authoring Plugins.

What A Plugin Contributes

A plugin can contribute one or more extension types:

ContributionWhat it adds
ProviderA runtime implementation for an adapter role such as sandbox, state, blob, deploy, scheduler, connection, or channel.
Connection helperAgent-scoped access to an external capability through MCP, OpenAPI, HTTP, or a reviewed sandbox CLI.
Channel helperIngress normalization and response delivery for a messaging service.
SkillOn-demand operating instructions for the plugin's tools or workflows.
Companion integrationA protocol and helper package for a separately installed application, such as a desktop companion.

The package name does not need to contain plugin. For example, @assemblyline-agents/e2b is the official E2B sandbox plugin and @assemblyline-agents/slack is the official Slack channel plugin.

Taxonomy

These terms are used consistently across the Assembly Line docs:

  • Plugin — an installable npm package that extends Assembly Line. The user-facing umbrella term.
  • Contribution — what a plugin exports: a provider registration (openeveProvider), a connection helper (openevePlugin plus a define<X>Connection factory), a channel helper (define<X>Channel), bundled skills, or a companion protocol.
  • Provider — an implementation registered for a role and kind through openeveProvider.
  • Adapter — a configured provider instance, selected in agent config with adapter(kind, options, { package }).
  • Connection — an agent-scoped declaration of an external capability and its credential contract: a file in connections/.
  • Capability (tier) — single-vendor feature packages under capabilities/ (currently LiveKit). A capability gives an agent something new to do rather than somewhere new to run, so it has no substitutable generic contract. See Adapters.

The word "capability" is overloaded; the meaning depends on where it appears:

WhereMeaning
Capability tier (capabilities/)A single-vendor feature package such as LiveKit.
Provider metadata capabilities: []Feature tags a provider advertises for preflight and tooling (for example persistent-storage).
Tool capability: blockDiscovery metadata on an authored tool (visibility, namespace, tags). See Customizing Agents.
Connection capabilities: ["issues:read"]Declared capability strings on a declaration-only connection contract.

Plugin Catalog

The framework includes a minimal zero-install baseline: local development state, blob storage, scheduling, and sandbox behavior. Everything that connects Assembly Line to an optional service or execution environment is a plugin, even when its npm package lives in the Assembly Line monorepo. The framework packages themselves (@assemblyline-agents/core, compiler, runtime, node, cli, sdk, pi, codex, otlp) are not plugins and do not appear here.

Provider-specific deep setup — OAuth application registration, CLI installs, account policy — lives in each package's README (packages/<kind> in the Assembly Line repo, or the package page on npm).

Channels

Channel plugins normalize provider events into durable Assembly Line turns and deliver replies. Consumption details are in Adapters: Channels.

KindPackageHelperRequired envOptional envassembly-line add
slack@assemblyline-agents/slackdefineSlackChannelSLACK_SIGNING_SECRET, SLACK_BOT_TOKENSLACK_BOT_USER_ID, SLACK_ASSISTANT_ENABLEDScaffolds channels/slack.ts
discord@assemblyline-agents/discorddefineDiscordChannelDISCORD_PUBLIC_KEY, DISCORD_APPLICATION_ID, DISCORD_BOT_TOKENDISCORD_GATEWAY_ENABLED, DISCORD_GATEWAY_INTENTS, DISCORD_BOT_USER_IDScaffolds channels/discord.ts
telegram@assemblyline-agents/telegramdefineTelegramChannelTELEGRAM_BOT_TOKEN; TELEGRAM_WEBHOOK_SECRET required in productionScaffolds channels/telegram.ts
teams@assemblyline-agents/teamsdefineTeamsChannelMICROSOFT_APP_ID, MICROSOFT_APP_PASSWORDASSEMBLY_LINE_TEAMS_ALLOWED_TENANTS, ASSEMBLY_LINE_TEAMS_ALLOWED_SERVICE_URLSScaffolds channels/teams.ts
photon@assemblyline-agents/photondefinePhotonChannelPHOTON_WEBHOOK_SIGNING_SECRET or PHOTON_INGRESS_TOKENManual: write channels/photon.ts yourself

For the manual row, create the channel file yourself:

// channels/photon.ts
import { definePhotonChannel } from "@assemblyline-agents/photon";

export default definePhotonChannel();

See Photon iMessage Channel for the Photon bridge.

Substrate Providers

Substrate plugins fill gateway.ts slots and sandbox declarations. Configuration, helper functions, and full env tables are in Adapters.

KindRolesPackageRequired envNotes
postgresstate (also a package-less scheduler kind)@assemblyline-agents/postgresDATABASE_URLassembly-line add postgres selects the state role. Presets: neonPostgres(), railwayPostgres(), supabasePostgres(), localPostgres()
dockersandbox, deploy@assemblyline-agents/dockerDocker CLI/daemonTwo roles: pass --role sandbox or --role deploy
daytonasandbox@assemblyline-agents/daytonaDAYTONA_API_KEYHosted sandboxes
e2bsandbox@assemblyline-agents/e2bE2B_API_KEYHosted sandboxes
modalsandbox@assemblyline-agents/modalMODAL_TOKEN_ID, MODAL_TOKEN_SECRETHosted sandboxes
s3blob@assemblyline-agents/s3S3_BUCKET, S3_REGION, S3_ACCESS_KEY_ID, S3_SECRET_ACCESS_KEYHelpers s3Blob(), minioBlob(), r2Blob()
r2blob@assemblyline-agents/r2R2_ACCOUNT_ID, R2_BUCKET, R2_ACCESS_KEY_ID, R2_SECRET_ACCESS_KEYLegacy wrapper; prefer r2Blob() from @assemblyline-agents/s3
railwaydeploy (a separate railway connection plugin also exists)@assemblyline-agents/railwayRAILWAY_TOKEN, Railway CLIassembly-line add railway selects the deploy role; use --role connection for the MCP connection
flydeploy@assemblyline-agents/flyFLY_API_TOKEN, flyctlGenerates fly.toml and publishes with flyctl deploy
vpsdeploy@assemblyline-agents/vpsNamed assembly-line.hosts.json entry, SSH key path, Docker hostSupported per-agent isolation and transactional blue/green Caddy routing; secure Hetzner create/adopt bootstrap is available

Connection Plugins

Every connection plugin is packaged as @assemblyline-agents/<kind>, exports openevePlugin, is installable with assembly-line add <kind>, bundles at least one skill, and scaffolds a read-only connections/<kind>.ts — writes stay hidden until you enable an approval policy. Protocol is MCP over Streamable HTTP unless the table says otherwise. R = required, O = optional.

Assembly Line's connection packages are scaffolding, not hosted integration accounts: the package supplies the helper, endpoint/spec defaults, tool classification, safe access defaults, skill, and preflight metadata. You create the provider application, API token, OAuth client, local process, or bridge. Official connection plugins are supported unless an entry explicitly says otherwise.

Google services are intentionally separate. Replace the former @assemblyline-agents/google package and google connection with only the grants an agent needs: @assemblyline-agents/gmail, @assemblyline-agents/google-calendar, and/or @assemblyline-agents/google-drive. Connecting or revoking one does not grant or revoke either of the others.

KindEndpointCredentialWritesNotes
gmailGMAIL_MCP_URL (R)GMAIL_MCP_TOKEN (R)YesIndependent Gmail grant; scopes are limited to Gmail read, compose, and send
google-calendarGOOGLE_CALENDAR_MCP_URL (R)GOOGLE_CALENDAR_MCP_TOKEN (R)YesIndependent Calendar grant; provider namespace is google_calendar
google-driveGOOGLE_DRIVE_MCP_URL (R)GOOGLE_DRIVE_MCP_TOKEN (R)YesIndependent Drive grant; provider namespace is google_drive
githubdefault https://api.githubcopilot.com/mcp/; GITHUB_MCP_URL (O)GITHUB_MCP_TOKEN (R)Yes
slackdefault https://mcp.slack.com/mcp; SLACK_MCP_URL (O)SLACK_MCP_TOKEN (R)YesPass --role connection (bare slack selects the channel)
telegramTELEGRAM_MCP_URL (R)TELEGRAM_MCP_TOKEN (R)Read-onlyPass --role connection (bare telegram selects the channel)
stravaSTRAVA_MCP_URL (R)STRAVA_MCP_TOKEN (R)Read-only
polarPOLAR_MCP_URL (R)POLAR_MCP_TOKEN (R)Read-only
spotifySPOTIFY_MCP_URL (R)SPOTIFY_MCP_TOKEN (R)Yes
xaiXAI_MCP_URL (R)XAI_MCP_TOKEN (R)Read-only
exadefault https://mcp.exa.ai/mcp; EXA_MCP_URL (O)EXA_API_KEY (O), sent as x-api-keyRead-onlyHosted web search and page fetch work without a key; enable advanced search through Exa's tools URL parameter
plaidPLAID_MCP_URL (R)PLAID_MCP_TOKEN (R)Read-only
granoladefault https://mcp.granola.ai/mcp; GRANOLA_MCP_URL (O)GRANOLA_MCP_TOKEN (R)Read-only
lineardefault https://mcp.linear.app/mcp; LINEAR_MCP_URL (O)LINEAR_MCP_TOKEN (R)Yes
notiondefault https://mcp.notion.com/mcp; NOTION_MCP_URL (O)NOTION_MCP_TOKEN (R)Yes
mondaydefault https://mcp.monday.com/mcp; MONDAY_MCP_URL (O)MONDAY_MCP_TOKEN (R)Yes
jiradefault https://mcp.atlassian.com/v1/mcp/authv2; JIRA_MCP_URL (O)JIRA_MCP_TOKEN (R)YesAtlassian MCP
hubspotdefault https://mcp.hubspot.com; HUBSPOT_MCP_URL (O)HUBSPOT_MCP_TOKEN (R)Read-only
figmadefault https://mcp.figma.com/mcp; FIGMA_MCP_URL (O)FIGMA_MCP_TOKEN (R)Yes
paperPAPER_MCP_URL (R)PAPER_MCP_TOKEN (O)YesDeveloper-exposed local bridge
sentrydefault https://mcp.sentry.dev/mcp; SENTRY_MCP_URL (O)SENTRY_MCP_TOKEN (R)Yes
supabasedefault https://mcp.supabase.com/mcp; SUPABASE_MCP_URL (O)SUPABASE_MCP_TOKEN (R)Yes
metabaseMETABASE_MCP_URL (R)METABASE_MCP_TOKEN (O)YesInstance MCP endpoint
cloudflaredefault https://mcp.cloudflare.com/mcp; CLOUDFLARE_MCP_URL (O)CLOUDFLARE_MCP_TOKEN (R)Yes
verceldefault https://mcp.vercel.com; VERCEL_MCP_URL (O)VERCEL_MCP_TOKEN (R)Yes
railwaydefault https://mcp.railway.com; RAILWAY_MCP_URL (O)RAILWAY_MCP_TOKEN (R)YesPass --role connection (bare railway selects the deploy target)
referodefault https://api.refero.design/mcp; REFERO_MCP_URL (O)REFERO_MCP_BEARER_TOKEN (R)Read-only
agentcashAGENTCASH_MCP_URL (R)AGENTCASH_MCP_BRIDGE_TOKEN (R)YesPaid API discovery and requests
mirrordefault https://mirror.artificialillumination.co/mcp; MIRROR_MCP_URL (O)MIRROR_OAUTH_CLIENT_ID (R), MIRROR_OAUTH_REDIRECT_URI (O)YesUser-scoped OAuth Authorization Code + PKCE or host-side redemption of a pre-scoped Mirror UI binding packet; exact Mirror write-like tools remain hidden until an Assembly Line approval policy is enabled
provenancedefault https://provenance.artificialillumination.co/mcp; PROVENANCE_MCP_URL (O)PROVENANCE_OAUTH_CLIENT_ID (R), agent identity overrides (O)Metadata onlyRegistered public-client OAuth + PKCE with provenance:ledger; ledger reconstruction is read-only and ambient capture is configured separately
soundcloudOpenAPI: bundled official spec, base https://api.soundcloud.comSOUNDCLOUD_CLIENT_ID (R), SOUNDCLOUD_CLIENT_SECRET (R), SOUNDCLOUD_REDIRECT_URI (O)YesOAuth 2.1 PKCE; the developer registers the SoundCloud app
arcadsdefault https://mcp.arcads.aiARCADS_MCP_CLIENT_ID (R), ARCADS_MCP_REDIRECT_URI (O)YesOAuth Authorization Code + PKCE with dynamic client registration; generation consumes credits
higgsfieldSandbox CLI (protocol: "cli", transport: "sandbox", command higgsfield)None — higgsfield auth login inside each persistent, user-scoped sandboxYesBundles three skills (generate, Soul ID, product photoshoot); install the official CLI in the sandbox image
browser-usedefault https://api.browser-use.com/v3/mcpBROWSER_USE_API_KEY (R), sent as x-browser-use-api-key headerYesHosted browser sessions; account, profiles, and cost policy stay developer-owned
orgostdio bridge on the runtime hostORGO_API_KEY (R), ORGO_API_BASE_URL (O)YesCloud desktops; the bridge strips VNC passwords from results
peekaboostdio, separately installed local binaryNoneYesSame-host macOS control; host requirements local + darwin — hosted deploys are rejected
computer-userelay, default https://computer-use.openeve.dev/v1; ASSEMBLY_LINE_COMPUTER_USE_RELAY_URL (O)ASSEMBLY_LINE_COMPUTER_USE_BINDING (R)YesEnd-to-end encrypted paired-Mac control; see Remote Computer Use
ffmpegstdio bridge on the runtime hostNone — install ffmpeg/ffprobe on the hostYesTyped, workspace-rooted media operations
remotionstdio bridge on the runtime hostNone — install remotion + @remotion/cli in the projectYesUses the supported Remotion CLI, not the deprecated hosted MCP

Orgo is a connection because its tools manage and control provider-owned desktops by computer_id; it does not implement the per-run SandboxSession filesystem contract. The package can add a separate sandbox role later if it binds one computer to a session and supplies the canonical file and shell operations.

Capabilities Tier

LiveKit voice dispatch and SIP tools live in capabilities/livekit as @assemblyline-agents/livekit. It exposes defineLiveKitConnection() and defineLiveKitOutboundCallTool() and requires LIVEKIT_URL, LIVEKIT_API_KEY, and LIVEKIT_API_SECRET (optional LIVEKIT_OUTBOUND_TRUNK_ID, LIVEKIT_VOICE_AGENT_NAME). It is not installable with assembly-line add; declare the tool and connection files directly. See Adapters: LiveKit Voice.

Install A Plugin With assembly-line add

assembly-line add <kind> <agentRoot> installs the plugin package with your detected package manager and wires its contribution into the agent folder. Nothing is hidden in global configuration — every result is a visible file or a printed instruction.

assembly-line add notion agent
Installing plugin @assemblyline-agents/notion with npm in /path/to/project.
Created connections/notion.ts using defineNotionConnection() with explicit read-only access.
Copied skills/notion/ from @assemblyline-agents/notion.
Set: NOTION_MCP_TOKEN
Optional: NOTION_MCP_URL
Setup: Configure Notion credentials, OAuth application, or MCP bridge for this deployment.
Run: npx assembly-line validate agent

What gets scaffolded depends on the contribution's role:

  • Connection — creates connections/<kind>.ts with read access enabled, writes disabled, and a comment showing how to opt into approval-gated writes:

    import { defineNotionConnection } from "@assemblyline-agents/notion";

    export default defineNotionConnection({
    access: {
    read: true,
    // Change to { approval: "always" } only after reviewing this plugin's write tools.
    write: false
    }
    });

    It also copies the plugin's bundled skill directories into skills/. Existing files are never overwritten: an existing connection file or skill directory is left unchanged and reported.

  • Channel — creates channels/<kind>.ts calling the channel helper (Slack, Discord, Telegram, and Teams have scaffolds). For other channel kinds the CLI prints No channel scaffold is known for "<kind>" and tells you to create the file yourself.

  • Gateway roles (state, blob, sandbox, deploy, runtime, scheduler) — edits the matching slot in gateway.ts to <role>: adapter("<kind>"), creating gateway.ts when missing. When the file cannot be edited with confidence, the CLI prints the exact snippet to paste instead of guessing.

After wiring, the CLI prints the plugin's required env vars, optional env vars, and setup steps, then the assembly-line validate command to run next.

Pass --no-install to print the package-manager command and configuration changes without installing the dependency. Two caveats: skills cannot be copied until the package exists (the CLI prints Skill <name> will be available after <package> is installed.), and community packages cannot be added at all without installation — their metadata is read by importing the installed package, so the CLI fails with Failed to load plugin package <name> ... Install it first (or rerun without --no-install).

Role Disambiguation

Some kinds provide more than one role. --role <role> selects explicitly; without it the CLI applies one rule: when a kind has exactly one non-connection contribution, that contribution wins.

CommandResult
assembly-line add postgres agentState adapter in gateway.ts
assembly-line add railway agentDeploy target in gateway.ts
assembly-line add slack agentSlack channel file
assembly-line add slack agent --role connectionSlack MCP connection file
assembly-line add telegram agent --role connectionTelegram MCP connection file
assembly-line add docker agent --role sandboxDocker sandbox (docker is sandbox + deploy, so --role is required)

Community Plugins

Install a community plugin by package name:

assembly-line add @acme/openeve-neon agent

The CLI installs the package, imports it, and reads its contributions from the openevePlugin (connections) and openeveProvider (providers) exports. The same wiring and --role rules apply; a package providing multiple roles requires --role. A package exporting neither symbol fails with Plugin package <name> does not export assemblyLinePlugin/openevePlugin or assemblyLineProvider/openeveProvider.

To build such a package, see Authoring Plugins.

Auditability And Trust

Plugins execute trusted host code and should be reviewed like application dependencies. Assembly Line deliberately limits them to named extension points instead of arbitrary lifecycle hooks. Agent authors should be able to audit a plugin's effect from the package dependency plus the explicit files and adapter selections in the agent folder.

Provider-specific secrets stay in host environment variables, authorization flows, or encrypted connection grants. They must not be embedded in plugin skills, prompts, tool inputs, or agent source files.

Stdio and sandbox-CLI plugins are trusted host dependencies: Assembly Line never lets a model or dynamic connection choose their command, arguments, working directory, or environment. Sandbox-CLI connections additionally run only reviewed operations inside the active run sandbox with individually quoted arguments — the plugin never receives an unsandboxed gateway command channel.

  • Adapters — consuming substrate adapters: role matrix, gateway config, per-adapter env.
  • connections/ — the connection file format, access and approval model, transports.
  • Authoring Plugins — implementation contracts for every contribution type.
  • Configuration Reference — every define* shape and ASSEMBLY_LINE_* env var.