Plugins
Discover, install, and wire optional Assembly Line integrations without expanding the framework core.
Plugins are standards-based packages selected by stable ID at typed locations
in agent.md and pinned in plugins.lock. Published plugins resolve from the
agent's installed dependency graph; there is no official-plugin catalog in core.
checked-in local plugins are auto-discovered under plugins/<name>/ and must
contain an Agent Plugins v1 plugin.json. Portable Skills and MCP servers need
no client extension; native Assembly Line capabilities add an
ai.assemblyline/ entry.
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. Plugin installation resolves a
published ID or checked-in local plugin and records it in plugins.lock; it
does not scaffold executable root files. Channels and infrastructure are
selected explicitly in agent.md. To implement a plugin, see
Authoring Plugins.
Locking reviews what is installed; selection decides what is active. Artifact packaging walks only the selected plugin graph, so an installed but unselected published package contributes no code, dependency, route, or authority. A checked-in local plugin is the intentional exception and activates by presence.
- 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 cohesive surfaces:
| Contribution | What it adds |
|---|---|
| Agent Skills | Portable, lazy procedures and resources under skills/. |
| MCP servers | Portable model tools described by mcp.json. |
| Native tools | Typed Assembly Line tools with schemas, execution boundaries, and approval policy. |
| Connections | External identity, credentials, grants, events, and MCP/A2A/OpenAPI/HTTP/SDK/CLI execution. |
| Models | Pi provider registration, discovery, authentication, embeddings, request semantics, accounting, and runtime requirements. |
| Infrastructure | Deploy, state, blob, sandbox, secrets, and channel-scoped media implementations. |
| Typed behavior | Lifecycle, run-event, context, instrumentation, composition, channel, or provider behavior selected at its consuming field. |
The ai.assemblyline entry has one canonical value contract. It must use an
ESM default export or CommonJS module.exports. Its root may declare one
plugin-wide configSchema and the contribution sections tools,
connections, hooks, lifecycle, composition, contexts,
instrumentation, channels, providers, models, and channelHooks. Obsolete singular/plural
aliases and the named assemblyLinePlugin native-entry export are rejected.
Package-level helper exports with that name are a separate connection-package
API and do not change the native entry contract.
Model, channel, and infrastructure packages are full Agent Plugins, but they
are not entries in the capabilities: capability list. Authors
select them through explicit fields such as channels: [slack] or sandbox: e2b, or through the provider prefix in model. A plugin may provide a custom implementation for one of those
boundaries, but it does not make the boundary disappear from agent.md.
Published capability plugins may expose schema-validated per-agent options at
capabilities.<plugin>.config. Configuration belongs to the plugin as a
whole; contribution-level tools and connections mappings remain policy
exceptions. Credentials never belong in config. Tool and connection
contributions declare environment requirements so preflight, secret sync,
runtime boot, and inspection share one inventory.
Taxonomy
These terms are used consistently across the Assembly Line docs:
- Plugin: a published or checked-in Agent Plugins v1 package selected at a typed authoring location or activated by local presence.
- Contribution: what a plugin declares in its statically inspected
ai.assemblylineentry: a model, provider, channel, connection, tool, hook, Skill, or other typed extension. Infrastructure packages exportassemblyLineProvider; model packages exportassemblyLineModelProvider. Their complete static contracts live in that same package and lock entry. - Provider plugin: an implementation selected by a model prefix, channel,
or explicit infrastructure field rather than by
capabilities:. - Adapter: the runtime instance resolved from an
agent.mdsingular plugin selection or its typed options mapping. - Connection: an agent-scoped capability and credential contract contributed
by a selected plugin; it is not a root
connections/file.
The word "capability" is overloaded; the meaning depends on where it appears:
| Where | Meaning |
|---|---|
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 kernel baseline for local state,
blob storage, scheduling orchestration, sandbox behavior, process-env secrets,
and the Node/Pi runtime. A model plugin is still required. The framework kernel
packages themselves (@assemblyline-agents/core, compiler, runtime, node,
cli, sdk, docs, and pi) are not plugins. openrouter, openai, and
openai-codex are ordinary model plugins, not privileged kernel packages.
Provider-specific setup, OAuth registration, CLI installation, and account
policy live in each package's README (packages/<kind> in the
Assembly Line repo, or the package page on npm).
Models
| Prefix | Package | Selection |
|---|---|---|
openrouter/ | @assemblyline-agents/openrouter | model: openrouter/openai/gpt-5.4-mini |
openai/ | @assemblyline-agents/openai | model: openai/gpt-5.4-mini |
openai-codex/ | @assemblyline-agents/openai-codex | model: openai-codex/gpt-5.6-terra |
The prefix resolves the locked plugin's models contribution. Pi receives
only those selected registrations and contains no bundled provider catalog or
provider-specific behavior. The openai-codex plugin delegates directly to
Pi's standard provider and OAuth flow; the removed custom Codex app-server
package is not part of the architecture.
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 | Selection |
|---|---|---|---|---|---|
slack | @assemblyline-agents/slack | defineSlackChannel | SLACK_SIGNING_SECRET, SLACK_BOT_TOKEN | SLACK_BOT_USER_ID, SLACK_ASSISTANT_ENABLED, SLACK_WORKSPACE_CREDENTIALS_JSON | channels: [slack] |
discord | @assemblyline-agents/discord | defineDiscordChannel | DISCORD_PUBLIC_KEY, DISCORD_APPLICATION_ID, DISCORD_BOT_TOKEN | DISCORD_GATEWAY_ENABLED, DISCORD_GATEWAY_INTENTS, DISCORD_BOT_USER_ID | channels: [discord] |
telegram | @assemblyline-agents/telegram | defineTelegramChannel | TELEGRAM_BOT_TOKEN; TELEGRAM_WEBHOOK_SECRET required in production | None | channels: [telegram] |
teams | @assemblyline-agents/teams | defineTeamsChannel | MICROSOFT_APP_ID, MICROSOFT_APP_PASSWORD | ASSEMBLY_LINE_TEAMS_ALLOWED_TENANTS, ASSEMBLY_LINE_TEAMS_ALLOWED_SERVICE_URLS | channels: [teams] |
photon | @assemblyline-agents/photon | definePhotonChannel | PHOTON_WEBHOOK_SIGNING_SECRET or PHOTON_INGRESS_TOKEN | ASSEMBLY_LINE_PUBLIC_URL, PHOTON_MEDIA_URL_SIGNING_SECRET, PHOTON_MEDIA_URL_TTL_MS, PHOTON_LOCATION_TOOL_TIMEOUT_MS | channels: [photon] |
a2a | @assemblyline-agents/a2a | defineA2AChannel | A2A_PUBLIC_URL, A2A_PEER_TOKENS | None | channels: [a2a] |
Channel provider implementations stay inside the selected plugin; agent
authors only declare the channel ID and any explicit exceptions in agent.md.
That selection also activates plugin-owned channel tools, such as Photon's
conversation tools and Slack's private-file retrieval tool. Optional MCP
connections remain explicit capabilities: entries.
The Slack channel also exposes typed resolve_dm_by_email and post_message
operations to authored tools through callSlackChannelOperation. These are
semantic, allowlisted channel operations rather than a raw Web API passthrough.
They reuse the configured workspace credential, and post_message applies the
channel's Markdown splitting, error handling, and stable per-chunk Slack
idempotency IDs. Scope declarations stay operation-specific:
resolve_dm_by_email requires users:read, users:read.email, and im:write;
post_message requires chat:write.
See Photon iMessage Channel for the Photon bridge.
The attachment-capable channel packages declare the official audio plugin
as a package dependency. assembly-line add installs and locks that dependency
without activating it under capabilities:; the channel's audio selector
chooses one of its provider contributions.
Observability
| Kind | Package | Required env | Selection |
|---|---|---|---|
otlp | @assemblyline-agents/otlp | OTEL_EXPORTER_OTLP_ENDPOINT | observability: otlp |
The OTLP package owns its instrumentation factory, defaults, required
environment, and accepted option schema. Install and select it with
assembly-line add otlp agent.
Substrate Providers
Substrate plugins provide explicit infrastructure profiles selected in
agent.md.
Configuration, helper functions, and full env tables are in
Adapters.
| Kind | Roles | Package | Required env | Notes |
|---|---|---|---|---|
postgres | state and scheduler | @assemblyline-agents/postgres | DATABASE_URL | state: postgres is the clean direct selection; neon, railway, and supabase add provider-owned defaults. |
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 | blob: r2 selects the R2 plugin. |
railway | deploy (the same plugin also contributes a railway connection) | @assemblyline-agents/railway | RAILWAY_TOKEN, Railway CLI | Use --role deploy for deployment or --role connection for the MCP connection. |
fly | deploy | @assemblyline-agents/fly | FLY_API_TOKEN, flyctl | Generates fly.toml and publishes with flyctl deploy |
hetzner | deploy | @assemblyline-agents/vps | Named Hetzner entry in assembly-line.hosts.json, SSH key path, Docker host | Supported per-agent isolation and transactional blue/green Caddy routing; secure create/adopt bootstrap is available |
Connection Plugins
Every connection plugin exports its Agent Plugins v1 and ai.assemblyline
entries. Selection is recorded by plugin ID; no connections/<kind>.ts is
scaffolded. Tool connections enable their reviewed tool surface under the
plugin's compiled access and approval policy. Credential-only connections
declare their own static capability ceiling. Protocol is MCP over Streamable HTTP unless
the table says otherwise. R = required, O = optional.
Each connections.<name> entry contains its complete reviewed contract. It
does not point to a privileged compiler profile or require the compiler to
join a second connection catalog.
Assembly Line's connection packages are not hosted integration accounts. The package supplies endpoint/spec defaults, tool classification, reviewed access defaults, 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 separate direct REST connections. Select only the grants
an agent needs: gmail, google-calendar, and google-drive. Connecting or
revoking one does not affect the others. The three packages can share one deployment-owned Google OAuth web
client (GOOGLE_CLIENT_ID and GOOGLE_CLIENT_SECRET), while Assembly Line stores a
separate refreshable grant and requests service-specific scopes for each connection.
| Kind | Endpoint | Credential | Writes | Notes |
|---|---|---|---|---|
a2a | Static agentCardUrl; service interface discovered from the card | Per-peer tokenEnv (R) | Cancellation only | A2A v1.0 JSON-RPC; advertised skills become tools; card-advertised origins are allowlisted |
gmail | Direct HTTP API: default https://gmail.googleapis.com/gmail/v1; GMAIL_API_BASE_URL (O) | GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET (R); GOOGLE_REDIRECT_URI (O) | Yes | Gmail REST API with an independent grant; scopes are limited to Gmail read, compose, and send; read-only requests only gmail.readonly |
google-calendar | Direct HTTP API: default https://www.googleapis.com/calendar/v3; GOOGLE_CALENDAR_API_BASE_URL (O) | GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET (R); GOOGLE_REDIRECT_URI (O) | Yes | Calendar REST API with an independent grant; provider namespace is google_calendar; read-only omits event writes and their scope |
google-drive | Direct HTTP API: default https://www.googleapis.com; GOOGLE_DRIVE_API_BASE_URL (O) | GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET (R); GOOGLE_REDIRECT_URI (O) | Yes | Drive REST API with an independent grant; byte-safe base64 download/export/upload; read-only requests drive.readonly |
github | default https://api.githubcopilot.com/mcp/; GITHUB_MCP_URL (O) | GITHUB_MCP_TOKEN (R) | Yes | |
github-app | Host-only credential connection | GITHUB_APP_ID, GITHUB_APP_PRIVATE_KEY (R); GITHUB_APP_INSTALLATION_ID for environment mode; slug/client values for user mode | Git and GitHub CLI authority configured on the App installation | One-hour sandbox credential; no model-facing connection tools. Repository selection and permissions are owned by GitHub App settings. See GitHub App sandbox access. |
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 | |
x | Direct HTTP API: default https://api.x.com/2; X_API_BASE_URL (O) | X_API_CLIENT_ID, X_API_CLIENT_SECRET (R); X_API_REDIRECT_URI (O) | Yes | Per-user OAuth 2.0 Authorization Code + PKCE; reads account identity and private bookmarks; publishing is limited to text posts and replies; read-only omits tweet.write |
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 | |
grata | default US https://mcp.grata.com; EU https://eu-mcp.grata.com/ via GRATA_MCP_URL (O) | GRATA_MCP_CLIENT_ID, GRATA_MCP_CLIENT_SECRET (R); GRATA_MCP_REDIRECT_URI (O) | Yes | Per-user OAuth 2.0 + PKCE and refresh tokens. Register the Assembly Line callback with the selected region's /register endpoint; developers choose autonomous, approval-required, read-only, or custom access. |
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 | |
attio | https://mcp.attio.com/mcp; ATTIO_MCP_URL (O) | ATTIO_MCP_CLIENT_ID (R), ATTIO_MCP_REDIRECT_URI (O) | Yes | Attio-hosted MCP with OAuth Authorization Code + PKCE and refresh tokens. Defaults to per-user grants; set subject: "workspace" and preauthorize a dedicated Attio member for a shared company agent. |
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 | |
agentmail | default https://mcp.agentmail.to/mcp; AGENTMAIL_MCP_URL (O) | AGENTMAIL_API_KEY (R), sent as x-api-key | Yes | Official hosted MCP; all 24 API-key tools are reviewed and enabled, including inbox lifecycle, messages, drafts, and attachments |
resend | default https://mcp.resend.com/mcp; RESEND_MCP_URL (O) | RESEND_API_KEY (R) | Yes | Official hosted MCP; API-key and webhook-secret creation/retrieval tools are blocked so credentials stay outside model context |
agentcash | AGENTCASH_MCP_URL (R) | AGENTCASH_MCP_BRIDGE_TOKEN (R) | Yes | Paid API discovery and requests |
treg | default https://treg.to/mcp/; TREG_MCP_URL (O) | TREG_TOKEN (R) | Yes | Hosted catalog discovery and team-tool access; call can spend prepaid balance or mutate an upstream service; unknown upstream tools remain hidden until reviewed |
margins | default https://margins.artificialillumination.co/mcp; MARGINS_MCP_URL (O) | One-time page/folder/workspace binding packet; agent identity overrides (O) | Yes | Host-side margins__pair redemption stores rotating bearer credentials outside model/sandbox context; comments and suggestions are writes; Margins independently enforces the packet's scope and suggest/edit permission |
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; read access includes the cursor-safe mirror.list_changes projection feed and mirror.get_skill for current provider action contracts; Mirror write-like tools use the connection's approval policy |
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 |
dropbox | Direct HTTP API: default https://api.dropboxapi.com/2; DROPBOX_API_BASE_URL (O) | DROPBOX_APP_KEY (R), DROPBOX_APP_SECRET (R), DROPBOX_REDIRECT_URI (O) | Yes | OAuth Authorization Code + PKCE with offline refresh; read-only omits write tools and write scopes; binary transfer is intentionally outside the initial JSON/text surface |
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 | 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 |
1password | Direct in-process API using the official 1Password SDK | Credential: OP_SERVICE_ACCOUNT_TOKEN (R) | Metadata only | Tools list and search vault/item metadata; complete items, concealed fields, and arbitrary secret resolution are not model-facing. The connection can source a value for a trusted host-side sink. The package separately provides the gateway secrets store. See the package guide. |
orgo | stdio bridge on the runtime host | Credential: ORGO_API_KEY (R); config: ORGO_API_BASE_URL (O) | Yes | Cloud desktops; the bridge strips VNC passwords and accepts secure host-side credential fills from trusted sources |
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.artificialillumination.co/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 | sandbox CLI (protocol: "cli", transport: "sandbox") | None, install remotion + @remotion/cli in the sandbox project | Yes | Project code, including composition discovery, runs inside the active sandbox rather than on the gateway host |
Connection Event Sources
These connection plugins include host-only event adapters. API and watch
sources are registered and renewed by Assembly Line. Manual sources still
verify, queue, deduplicate, retry, and dispatch deliveries, but the provider
requires a console step that assembly-line connections wire reports. Event
sources are enabled by default and can be disabled with events: false.
Deliveries start agent work only when an explicit event automation matches;
unmatched events are acknowledged without durable payload storage.
| Connection | Mode and scope | events.resources | Extra host setup |
|---|---|---|---|
agentmail | API, connection | Optional inboxId or podId | Existing AGENTMAIL_API_KEY |
browser-use | Manual, connection | None | BROWSER_USE_WEBHOOK_SECRET; add the reported URL in Browser Use |
cloudflare | API, user | accountId, alertType; optional policy filters | CLOUDFLARE_WEBHOOK_SECRET |
figma | API, user | context and contextId | Authorized Figma token |
github-app | Manual, connection | None | GITHUB_APP_WEBHOOK_SECRET; set the App webhook URL in GitHub |
gmail | Watch, user | None | GOOGLE_CLOUD_PROJECT, GMAIL_PUBSUB_TOPIC, GMAIL_PUBSUB_VERIFICATION_TOKEN; pre-create the topic, grant Gmail's push service account Pub/Sub Publisher, then point an operator-owned push subscription at the reported callback URL |
google-calendar | Watch, user | Optional calendarId; defaults to primary | Authorized Calendar token |
google-drive | Watch, user | Optional drive selection | Authorized Drive token |
hubspot | API, connection | None | HUBSPOT_APP_ID, HUBSPOT_DEVELOPER_API_KEY, HUBSPOT_CLIENT_SECRET |
jira | API, user | baseUrl and jql | Authorized Jira token; dynamic hooks renew before expiry |
linear | Manual, user | None | LINEAR_WEBHOOK_SECRET; add the reported URL in API settings |
metabase | Manual, connection | None | METABASE_WEBHOOK_SECRET; select the reported webhook on each alert |
mirror | API, user | None; select granted connections in Mirror | Existing Mirror binding grant; connection-level event scope stays in Mirror |
monday | API, user | boardId; events come from include | MONDAY_SIGNING_SECRET |
notion | Manual, user | None | Add the reported URL in the integration UI; Assembly Line captures the verification token |
plaid | API, connection | accessTokenEnv for every Item | PLAID_CLIENT_ID, PLAID_SECRET |
polar | API, connection | None | POLAR_CLIENT_ID, POLAR_CLIENT_SECRET |
railway | Manual, connection | None | Add the reported URL in Railway project settings |
resend | API, connection | None | Existing RESEND_API_KEY |
sentry | API, user | organization and project | Authorized Sentry token |
strava | API, connection | None | STRAVA_CLIENT_ID, STRAVA_CLIENT_SECRET, STRAVA_WEBHOOK_SIGNING_SECRET |
supabase | API, user | projectRef, table; optional schema | SUPABASE_WEBHOOK_SECRET; installs a pg_net trigger |
vercel | API, user | Optional projectId and teamId | Authorized Vercel token |
Higgsfield is not in this table. Its official SDK supports a callback attached to an individual generation, while the packaged connection uses the official sandbox CLI, whose current command surface does not accept that callback. The plugin therefore does not advertise a persistent event source it cannot wire.
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.
Tool Packs
Tool packs are trusted runtime code, not connections. They need no credential contract unless the tool itself uses a separately declared connection.
| Kind | Package | Tools | Configuration | Notes |
|---|---|---|---|---|
openui | @assemblyline-agents/openui | openui_create, openui_update, openui_publish | capabilities.openui.config.brand for name, legal name, theme tokens, data-URI logo, and footer; R2_PUBLIC_BASE_URL or S3_PUBLIC_BASE_URL for publication | Complete official OpenUI library, immutable private revisions, and verified HTTPS publication with runtime-selected link delivery |
OpenUI TextContent parses GitHub-Flavored Markdown, including pipe tables,
task lists, strikethrough, and autolinks. Markdown workspace files passed to
openui_create or openui_update use the same renderer.
deliver_artifact remains the private file-delivery mechanism. It snapshots
one exact workspace file for the active channel. openui_publish instead
fetches and verifies the exact HTTPS URL issued by public blob storage; it
never asks the model to invent a link.
LiveKit Voice And Telephony
LiveKit voice dispatch and SIP tools live in packages/livekit as
@assemblyline-agents/livekit. assembly-line add livekit agent selects one
conforming plugin that contributes its credential contract plus
livekit_dispatch_agent, livekit_outbound_call, and
livekit_transfer_call. It requires LIVEKIT_URL, LIVEKIT_API_KEY, and
LIVEKIT_API_SECRET (optional LIVEKIT_OUTBOUND_TRUNK_ID and
LIVEKIT_VOICE_AGENT_NAME). All three external actions are approval-gated. See
the LiveKit package guide.
Plugin Packages Ship Automatically
Artifact packaging derives its dependency set from the compiled selected graph: models, providers, channels, capabilities, connections, and qualified plugin references all carry the package that implements them. The build vendors (local mode) or pins (release mode) only that graph. There is no allowlist, kind-to-package guess, or unconditional model-provider dependency. An unresolvable selected package fails validation/build instead of producing an artifact that cannot boot.
Install A Plugin With assembly-line add
assembly-line add <kind> <agentRoot> installs the capability or provider
package with your detected package manager and updates the appropriate
agent.md selection.
The command does not hide changes in global configuration. Each result is a
visible file or a printed instruction.
assembly-line add notion agentThe command installs the package, selects notion in agent.md, updates
plugins.lock, and prints its required environment and validation steps.
What gets selected depends on the contribution's role:
-
Connection provider: exposes every reviewed tool through the selected plugin's
ai.assemblylineextension, with no rootconnections/file:capabilities: notion: connections: notion: disable: [delete_page] approval: update_page: alwaysThe provider's reviewed default policy applies when no exception is present.
disablenarrows its surface andapprovalchanges an individual action within the plugin and host policy ceilings. Connection tools stay behind deferred discovery; they are not copied into a roottools/folder or injected into every model prompt.Connection plugins do not contribute or copy root skills. Live provider tool names, descriptions, schemas, and the resolved access policy remain the authoritative model-facing contract.
-
Tool provider: exposes tools through the plugin's
ai.assemblylineextension and may bundle namespaced skills. Nothing is copied into a roottools/folder. -
Channel: contributes a channel provider selected explicitly in
agent.md; ingress and delivery remain inside the plugin boundary. -
Infrastructure provider (
state,blob,sandbox,deploy,secrets): implements an explicit reviewed plugin selection inagent.md. The runtime is always Node. Audio processors are selected only throughchannels.<name>.audio. -
Model provider: selects the plugin's declared default
provider/modelvalue undermodeland packages its Pi registration.
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 skip the package manager and print the exact install
command. It does not mutate agent.md or plugins.lock, because the CLI cannot
trust a declaration it has not installed and inspected. A published plugin is
not selected or locked until its installed manifest can be validated. Plugin
skills remain namespaced and become available after the selected plugin is
resolved.
Role Disambiguation
Some package IDs exist under more than one role. --role <role> disambiguates
the requested capability or explicit provider profile. A connection role adds
a plugin ID; a channel or infrastructure role updates its dedicated
agent.md field. No role creates a root channel, connection, tool, or gateway
file.
| Command | Result |
|---|---|
assembly-line add postgres agent --role state | Installs Postgres and selects state: postgres |
assembly-line add railway agent --role deploy | Installs Railway and selects deploy: railway |
assembly-line add slack agent --role channel | Installs Slack and selects it under channels: |
assembly-line add slack agent --role connection | Installs and locks the Slack connection provider |
assembly-line add 1password agent --role secrets | Installs 1Password and selects secrets: 1password |
assembly-line add docker agent --role sandbox | Installs Docker and selects sandbox: docker |
assembly-line add openai-codex agent --role model | Installs the Pi-native provider and selects its declared default under model: |
assembly-line add otlp agent | Installs OTLP and selects observability: otlp |
Community Plugins
Install a community plugin by package name:
assembly-line add @acme/assembly-line-search agentThe CLI installs the package and validates its Agent Plugins v1 plugin.json
without executing source. Portable Skills and mcp.json are discovered at
their standard locations. Native contributions are statically inspected from
the declared ai.assemblyline entry. The published plugin ID is added to
agent.md and its exact package, integrity, components, and authority are
pinned in plugins.lock.
Use assembly-line plugin init <name> <agentRoot> for checked-in code. After
editing it, run assembly-line plugin lock <agentRoot>; a new or changed
capability descriptor requires --confirm-upgrade, while implementation-only
content changes simply refresh the integrity hash.
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 with static authority inventories. 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.
- Plugin connections: connection contributions, access, approval, and transports.
- Authoring Plugins: implementation contracts for every contribution type.
- Runtime Configuration: runtime and operator environment variables.