Skip to main content

Writing a plugin

A plugin packages an extension or policy as an npm package. The CLI loads it, registers the definition, and generates commands from metadata.

Scaffold

Package name is plugin- plus the extension or policy name. The protocol id (for example @executioncontrolprotocol/jsonata) stays unchanged.

Definition

  • Import zod from "zod" directly.
  • Write product prose in .withMetadata({ summary, description, useCases, projections }). Projections are required.
  • .supports(environmentId, range?) when the plugin is host-specific.
  • Use resolveFile / writeMediaArtifact for binary I/O.
Hosts register the default-exported definition with registry.registerExtension(definition) or registerPolicy. Plugins never import @executioncontrolprotocol/node, browser, cli, or mcp.

Commands

ecp plugins build generates oclif files via toCommands from @executioncontrolprotocol/plugin-sdk. Capability metadata becomes ecp <topic> <capability> (for example ecp jsonata transform). Optional metadata.topicAlias shortens the topic (Adobe Firefly uses firefly).

Install

See the plugin catalogue for first-party packages.

See it in the repo

Next steps