Skip to main content

Security

ECP (Execution Control Protocol) treats execution as a governed surface: what can run, what state can change, and where secrets live.

Principles

  • Workflows are portable — no API keys or host secrets in manifests
  • Environments bind policy — budgets, approvals, state control, registry rules
  • Secrets stay on the host — OS keychain (CLI) or browser vault (demo)

Policies

First-party policy packages include: Bind policies on the environment builder (for example .withPolicies([...])) before init().

Secrets

Node / CLI

Store values in the OS keychain:
Ref form: ecp://<key> (for example ecp://openai/api-key). Bind secrets into extension config at environment setup — not into workflow manifests:
secrets("key") resolves via the keychain when the environment initializes. Prefer this over hardcoding keys or inventing ad-hoc .env loaders for extension config.

Browser demo

Cloud keys belong in the demo’s encrypted secrets vault when the UI prompts for them. See Demo providers and configuration and the hosted demo.

Registry freeze (browser)

Browser hosts often freeze the extension registry at a lifecycle point (environment:ready, environment:beforeRun, or manual). Pair freeze with registry-control so late registration is an explicit, authorized path — important when pages expose globalThis.ecp.

Default posture

Prefer allowlisted capabilities in the environment you ship. Check the graph and environment, then optionally check run input without invoking capabilities:
ecp validate is graph and environment only. --dry-run also validates workflow.accepts when the workflow declares it.

Next steps