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
- Taxonomy
- Plugin Catalog
- Install A Plugin With assembly-line add
- Community Plugins
- Auditability And Trust
What A Plugin Contributes
A plugin can contribute one or more extension types:
| Contribution | What it adds |
|---|---|
| Provider | A runtime implementation for an adapter role such as sandbox, state, blob, deploy, scheduler, connection, or channel. |
| Connection helper | Agent-scoped access to an external capability through MCP, OpenAPI, HTTP, or a reviewed sandbox CLI. |
| Channel helper | Ingress normalization and response delivery for a messaging service. |
| Skill | On-demand operating instructions for the plugin's tools or workflows. |
| Companion integration | A 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 (openevePluginplus adefine<X>Connectionfactory), 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:
| Where | Meaning |
|---|---|
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: block | Discovery 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.
| Kind | Package | Helper | Required env | Optional env | assembly-line add |
|---|---|---|---|---|---|
slack | @assemblyline-agents/slack | defineSlackChannel | SLACK_SIGNING_SECRET, SLACK_BOT_TOKEN | SLACK_BOT_USER_ID, SLACK_ASSISTANT_ENABLED | Scaffolds channels/slack.ts |
discord | @assemblyline-agents/discord | defineDiscordChannel | DISCORD_PUBLIC_KEY, DISCORD_APPLICATION_ID, DISCORD_BOT_TOKEN | DISCORD_GATEWAY_ENABLED, DISCORD_GATEWAY_INTENTS, DISCORD_BOT_USER_ID | Scaffolds channels/discord.ts |
telegram | @assemblyline-agents/telegram | defineTelegramChannel | TELEGRAM_BOT_TOKEN; TELEGRAM_WEBHOOK_SECRET required in production | — | Scaffolds channels/telegram.ts |
teams | @assemblyline-agents/teams | defineTeamsChannel | MICROSOFT_APP_ID, MICROSOFT_APP_PASSWORD | ASSEMBLY_LINE_TEAMS_ALLOWED_TENANTS, ASSEMBLY_LINE_TEAMS_ALLOWED_SERVICE_URLS | Scaffolds channels/teams.ts |
photon | @assemblyline-agents/photon | definePhotonChannel | PHOTON_WEBHOOK_SIGNING_SECRET or PHOTON_INGRESS_TOKEN | — | Manual: 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.
| Kind | Roles | Package | Required env | Notes |
|---|---|---|---|---|
postgres | state (also a package-less scheduler kind) | @assemblyline-agents/postgres | DATABASE_URL | assembly-line add postgres selects the state role. Presets: neonPostgres(), railwayPostgres(), supabasePostgres(), localPostgres() |
docker | sandbox, deploy | @assemblyline-agents/docker | Docker CLI/daemon | Two roles: pass --role sandbox or --role deploy |
daytona | sandbox | @assemblyline-agents/daytona | DAYTONA_API_KEY | Hosted sandboxes |
e2b | sandbox | @assemblyline-agents/e2b | E2B_API_KEY | Hosted sandboxes |
modal | sandbox | @assemblyline-agents/modal | MODAL_TOKEN_ID, MODAL_TOKEN_SECRET | Hosted sandboxes |
s3 | blob | @assemblyline-agents/s3 | S3_BUCKET, S3_REGION, S3_ACCESS_KEY_ID, S3_SECRET_ACCESS_KEY | Helpers s3Blob(), minioBlob(), r2Blob() |
r2 | blob | @assemblyline-agents/r2 | R2_ACCOUNT_ID, R2_BUCKET, R2_ACCESS_KEY_ID, R2_SECRET_ACCESS_KEY | Legacy wrapper; prefer r2Blob() from @assemblyline-agents/s3 |
railway | deploy (a separate railway connection plugin also exists) | @assemblyline-agents/railway | RAILWAY_TOKEN, Railway CLI | assembly-line add railway selects the deploy role; use --role connection for the MCP connection |
fly | deploy | @assemblyline-agents/fly | FLY_API_TOKEN, flyctl | Generates fly.toml and publishes with flyctl deploy |
vps | deploy | @assemblyline-agents/vps | Named assembly-line.hosts.json entry, SSH key path, Docker host | Supported 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.
| Kind | Endpoint | Credential | Writes | Notes |
|---|---|---|---|---|
gmail | GMAIL_MCP_URL (R) | GMAIL_MCP_TOKEN (R) | Yes | Independent Gmail grant; scopes are limited to Gmail read, compose, and send |
google-calendar | GOOGLE_CALENDAR_MCP_URL (R) | GOOGLE_CALENDAR_MCP_TOKEN (R) | Yes | Independent Calendar grant; provider namespace is google_calendar |
google-drive | GOOGLE_DRIVE_MCP_URL (R) | GOOGLE_DRIVE_MCP_TOKEN (R) | Yes | Independent Drive grant; provider namespace is google_drive |
github | default https://api.githubcopilot.com/mcp/; GITHUB_MCP_URL (O) | GITHUB_MCP_TOKEN (R) | Yes | |
slack | default https://mcp.slack.com/mcp; SLACK_MCP_URL (O) | SLACK_MCP_TOKEN (R) | Yes | Pass --role connection (bare slack selects the channel) |
telegram | TELEGRAM_MCP_URL (R) | TELEGRAM_MCP_TOKEN (R) | Read-only | Pass --role connection (bare telegram selects the channel) |
strava | STRAVA_MCP_URL (R) | STRAVA_MCP_TOKEN (R) | Read-only | |
polar | POLAR_MCP_URL (R) | POLAR_MCP_TOKEN (R) | Read-only | |
spotify | SPOTIFY_MCP_URL (R) | SPOTIFY_MCP_TOKEN (R) | Yes | |
xai | XAI_MCP_URL (R) | XAI_MCP_TOKEN (R) | Read-only | |
exa | default https://mcp.exa.ai/mcp; EXA_MCP_URL (O) | EXA_API_KEY (O), sent as x-api-key | Read-only | Hosted web search and page fetch work without a key; enable advanced search through Exa's tools URL parameter |
plaid | PLAID_MCP_URL (R) | PLAID_MCP_TOKEN (R) | Read-only | |
granola | default https://mcp.granola.ai/mcp; GRANOLA_MCP_URL (O) | GRANOLA_MCP_TOKEN (R) | Read-only | |
linear | default https://mcp.linear.app/mcp; LINEAR_MCP_URL (O) | LINEAR_MCP_TOKEN (R) | Yes | |
notion | default https://mcp.notion.com/mcp; NOTION_MCP_URL (O) | NOTION_MCP_TOKEN (R) | Yes | |
monday | default https://mcp.monday.com/mcp; MONDAY_MCP_URL (O) | MONDAY_MCP_TOKEN (R) | Yes | |
jira | default https://mcp.atlassian.com/v1/mcp/authv2; JIRA_MCP_URL (O) | JIRA_MCP_TOKEN (R) | Yes | Atlassian MCP |
hubspot | default https://mcp.hubspot.com; HUBSPOT_MCP_URL (O) | HUBSPOT_MCP_TOKEN (R) | Read-only | |
figma | default https://mcp.figma.com/mcp; FIGMA_MCP_URL (O) | FIGMA_MCP_TOKEN (R) | Yes | |
paper | PAPER_MCP_URL (R) | PAPER_MCP_TOKEN (O) | Yes | Developer-exposed local bridge |
sentry | default https://mcp.sentry.dev/mcp; SENTRY_MCP_URL (O) | SENTRY_MCP_TOKEN (R) | Yes | |
supabase | default https://mcp.supabase.com/mcp; SUPABASE_MCP_URL (O) | SUPABASE_MCP_TOKEN (R) | Yes | |
metabase | METABASE_MCP_URL (R) | METABASE_MCP_TOKEN (O) | Yes | Instance MCP endpoint |
cloudflare | default https://mcp.cloudflare.com/mcp; CLOUDFLARE_MCP_URL (O) | CLOUDFLARE_MCP_TOKEN (R) | Yes | |
vercel | default https://mcp.vercel.com; VERCEL_MCP_URL (O) | VERCEL_MCP_TOKEN (R) | Yes | |
railway | default https://mcp.railway.com; RAILWAY_MCP_URL (O) | RAILWAY_MCP_TOKEN (R) | Yes | Pass --role connection (bare railway selects the deploy target) |
refero | default https://api.refero.design/mcp; REFERO_MCP_URL (O) | REFERO_MCP_BEARER_TOKEN (R) | Read-only | |
agentcash | AGENTCASH_MCP_URL (R) | AGENTCASH_MCP_BRIDGE_TOKEN (R) | Yes | Paid API discovery and requests |
mirror | default https://mirror.artificialillumination.co/mcp; MIRROR_MCP_URL (O) | MIRROR_OAUTH_CLIENT_ID (R), MIRROR_OAUTH_REDIRECT_URI (O) | Yes | User-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 |
provenance | default https://provenance.artificialillumination.co/mcp; PROVENANCE_MCP_URL (O) | PROVENANCE_OAUTH_CLIENT_ID (R), agent identity overrides (O) | Metadata only | Registered public-client OAuth + PKCE with provenance:ledger; ledger reconstruction is read-only and ambient capture is configured separately |
soundcloud | OpenAPI: bundled official spec, base https://api.soundcloud.com | SOUNDCLOUD_CLIENT_ID (R), SOUNDCLOUD_CLIENT_SECRET (R), SOUNDCLOUD_REDIRECT_URI (O) | Yes | OAuth 2.1 PKCE; the developer registers the SoundCloud app |
arcads | default https://mcp.arcads.ai | ARCADS_MCP_CLIENT_ID (R), ARCADS_MCP_REDIRECT_URI (O) | Yes | OAuth Authorization Code + PKCE with dynamic client registration; generation consumes credits |
higgsfield | Sandbox CLI (protocol: "cli", transport: "sandbox", command higgsfield) | None — higgsfield auth login inside each persistent, user-scoped sandbox | Yes | Bundles three skills (generate, Soul ID, product photoshoot); install the official CLI in the sandbox image |
browser-use | default https://api.browser-use.com/v3/mcp | BROWSER_USE_API_KEY (R), sent as x-browser-use-api-key header | Yes | Hosted browser sessions; account, profiles, and cost policy stay developer-owned |
orgo | stdio bridge on the runtime host | ORGO_API_KEY (R), ORGO_API_BASE_URL (O) | Yes | Cloud desktops; the bridge strips VNC passwords from results |
peekaboo | stdio, separately installed local binary | None | Yes | Same-host macOS control; host requirements local + darwin — hosted deploys are rejected |
computer-use | relay, default https://computer-use.openeve.dev/v1; ASSEMBLY_LINE_COMPUTER_USE_RELAY_URL (O) | ASSEMBLY_LINE_COMPUTER_USE_BINDING (R) | Yes | End-to-end encrypted paired-Mac control; see Remote Computer Use |
ffmpeg | stdio bridge on the runtime host | None — install ffmpeg/ffprobe on the host | Yes | Typed, workspace-rooted media operations |
remotion | stdio bridge on the runtime host | None — install remotion + @remotion/cli in the project | Yes | Uses 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>.tswith 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>.tscalling the channel helper (Slack, Discord, Telegram, and Teams have scaffolds). For other channel kinds the CLI printsNo 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 ingateway.tsto<role>: adapter("<kind>"), creatinggateway.tswhen 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.
| Command | Result |
|---|---|
assembly-line add postgres agent | State adapter in gateway.ts |
assembly-line add railway agent | Deploy target in gateway.ts |
assembly-line add slack agent | Slack channel file |
assembly-line add slack agent --role connection | Slack MCP connection file |
assembly-line add telegram agent --role connection | Telegram MCP connection file |
assembly-line add docker agent --role sandbox | Docker 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.
Related Docs
- 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 andASSEMBLY_LINE_*env var.