Skip to main content
Plugins extend OpenClaw with integrations like Linear, Slack, and custom services. Clawup manages plugin installation, configuration, and secret injection across your fleet — so you declare what plugins an agent needs and Clawup handles the rest.

Built-In Plugins

Clawup ships with curated manifests for two plugins. No extra setup is needed beyond listing them in identity.yaml. These built-in manifests live in the plugin registry and include full secret definitions, validators, and lifecycle hooks. See the integration guides linked above for per-plugin setup details.

Using a Plugin

The happy path for any plugin — built-in or custom:

1. Declare in identity.yaml

2. Override per-agent in clawup.yaml (optional)

3. Scaffold and deploy

During clawup init, Clawup resolves each plugin’s manifest, discovers its required secrets, and adds them to .env.example. Fill in the values, then deploy.

Configuration Hierarchy

Plugin configuration merges from three levels. Later levels override earlier ones:

Example: All Three Levels

This hierarchy lets you customize per-deployment without forking the identity or the plugin manifest.

Creating a Custom Plugin Manifest

When You Need One

  • A third-party OpenClaw plugin not in the built-in registry
  • You want to override a built-in plugin’s metadata (add hooks, change defaults)
  • You’re developing a plugin and need to test the manifest locally

Where to Place It

Plugin manifests go in a plugins/ directory inside the identity:
The file name doesn’t matter — Clawup reads the name field inside the YAML. Files must end with .yaml or .yml.

Walkthrough: my-analytics.yaml

Here’s a step-by-step breakdown of writing a manifest for a hypothetical analytics plugin.

Required Fields

  • name — Must match the OpenClaw plugin package name.
  • displayName — Shown in CLI output and prompts.
  • installable — Set true if the plugin needs openclaw plugins install. Set false for config-only plugins like Slack (which is built into OpenClaw).
  • configPath — Either "plugins.entries" (most plugins) or "channels" (communication plugins like Slack).

needsFunnel

Set true if the plugin receives incoming webhooks. Clawup will enable Tailscale Funnel to expose a public HTTPS endpoint.

secrets

Each key in secrets is a config key passed to the plugin. The value describes how to collect and validate it.

internalKeys

Keys listed here are used by Clawup for routing and metadata but are not written to the OpenClaw config file. Use this for values that the plugin doesn’t need at runtime.

configTransforms

Transforms restructure config keys before writing to OpenClaw. The Slack plugin uses this to flatten nested DM config:
Given input { dm: { policy: "open", allowFrom: ["*"] } }, the transform produces { dmPolicy: "open", allowFrom: ["*"] }.

webhookSetup

For plugins that receive incoming webhooks:

hooks

Plugin-level lifecycle hooks. See the Lifecycle Hooks guide for the full reference.
Resolve hook keys at the plugin level must match a secret marked autoResolvable: true.

defaultConfig

Lowest-priority configuration defaults:

Plugin Manifest Schema Reference

The Zod schema in packages/core/src/schemas/plugin-manifest.ts is the source of truth. The TypeScript interface below is derived from it.

PluginManifest Fields

PluginSecret Fields

WebhookSetup Fields

ConfigTransform Fields

Plugin Resolution

Clawup resolves plugin metadata through a three-tier chain. The first match wins.

1. Identity-Bundled (Highest Priority)

Manifests placed in plugins/<name>.yaml inside the identity directory. Use this to:
  • Add manifests for third-party plugins
  • Override built-in manifests (e.g., add hooks or change defaults)

2. Built-In Registry

The PLUGIN_MANIFEST_REGISTRY in packages/core/src/plugin-registry.ts. Contains curated, tested manifests for openclaw-linear and slack.

3. Generic Fallback

For any plugin not found in the first two tiers, Clawup generates a minimal stub:
The generic fallback means any OpenClaw plugin works with zero manifest — Clawup will install it and pass through any config you set in pluginDefaults or per-agent plugins. You only need a custom manifest when you want secret management, hooks, or webhook setup.

Secrets

Discovery

During clawup init, Clawup resolves each plugin’s manifest, collects all secrets entries, and generates the appropriate .env.example entries. Each secret’s envVar is used as the environment variable name.

Scope

Auto-Resolution

Secrets marked autoResolvable: true can be derived at deploy time by a resolve hook. The hook script runs on your machine during clawup deploy, with all other secrets available as environment variables. The script’s stdout becomes the secret’s value.

Validation

The validator field specifies a required prefix. During clawup secrets set and deploy, values are checked against this prefix:

Setup Instructions

The instructions field provides step-by-step guidance shown during clawup secrets set:

Secret Flow

Complete Examples

Minimal Manifest

The smallest valid plugin manifest — just name, installable flag, and config path:
All fields, with hooks, webhook setup, and config transforms:
See the examples/plugin-manifests/ directory for the built-in Linear and Slack manifests as YAML references.

Tips

  • Test config locally — run clawup config show --json to inspect the resolved plugin configuration before deploying.
  • Override built-in manifests — place a same-named file in plugins/ (e.g., plugins/openclaw-linear.yaml) to override the built-in manifest with your own hooks or defaults.
  • Version control manifests — keep plugin manifests in the identity repo alongside identity.yaml so they’re versioned together.
  • Use internalKeys for routing metadata (like agentId) that Clawup needs but the OpenClaw plugin doesn’t.
  • Start without a manifest — the generic fallback means any plugin works immediately. Add a manifest later when you need secrets, hooks, or webhook setup.
  • Check the Zod schemapackages/core/src/schemas/plugin-manifest.ts is the source of truth. If the docs and schema disagree, the schema wins.