Plugin validation fixes
ClawHub validates plugin packages before publish and can also show findings from automated package scans. This page covers author-facing findings, which means findings the plugin author can fix in their package metadata, manifest, SDK imports, or published artifact. It does not cover internal Plugin Inspector coverage findings. If a full report contains scanner maintenance codes without author remediation guidance, those are for OpenClaw maintainers rather than plugin authors. After applying any fix, rerun:Author-facing findings
Package metadata
package-json-missing
The package root does not includepackage.json, so ClawHub cannot identify the
npm package, version, entrypoints, or OpenClaw metadata.
- Add
package.jsonwithname,version, andtype. - Add an
openclawblock when the package ships an OpenClaw plugin. - Use Building plugins for a minimal package example and Plugin manifest for the package versus manifest split.
- Rerun
clawhub package validate <path-to-plugin>.
package-openclaw-metadata-missing
The package haspackage.json, but it does not declare OpenClaw package
metadata.
- Add
package.json#openclaw. - Include entrypoint metadata such as
openclaw.extensionsoropenclaw.runtimeExtensions. - Add compatibility and install metadata when the package will be published or installed through ClawHub.
- See package.json fields that affect discovery.
- Rerun
clawhub package validate <path-to-plugin>.
package-openclaw-entry-missing
The package metadata exists, but it does not declare an OpenClaw runtime entrypoint.- Add
openclaw.extensionsfor native plugin entrypoints. - Add
openclaw.runtimeExtensionswhen the published package should load built JavaScript. - Keep all entrypoint paths inside the package directory.
- See Plugin entry points and package.json fields that affect discovery.
- Rerun
clawhub package validate <path-to-plugin>.
package-entrypoint-missing
The package declares an OpenClaw entrypoint, but the referenced file is missing from the package being validated.- Check each path in
openclaw.extensions,openclaw.runtimeExtensions,openclaw.setupEntry, andopenclaw.runtimeSetupEntry. - Build the package if the entrypoint is generated into
dist. - Update the metadata if the entrypoint moved.
- See Plugin entry points.
- Rerun
clawhub package validate <path-to-plugin>.
package-install-metadata-incomplete
ClawHub cannot tell how the package should be installed or updated.- Fill
openclaw.installwith the supported install source, such asclawhubSpec,npmSpec, orlocalPath. - Set
openclaw.install.defaultChoicewhen more than one install source is available. - Use
openclaw.install.minHostVersionfor the minimum OpenClaw host version. - See package.json fields that affect discovery.
- Rerun
clawhub package validate <path-to-plugin>.
package-plugin-api-compat-missing
The package does not declare the OpenClaw plugin API range it supports.- Add
openclaw.compat.pluginApitopackage.json. - Use the OpenClaw plugin API version or semver floor that you built and tested against.
- Keep this separate from the package version. The package version describes the
plugin release;
openclaw.compat.pluginApidescribes the host API contract. - See package.json fields that affect discovery.
- Rerun
clawhub package validate <path-to-plugin>.
package-min-host-version-drift
The package minimum host version does not match the OpenClaw version metadata the package was built against.- Check
openclaw.install.minHostVersion. - Check any OpenClaw build metadata in the package, such as the OpenClaw version used during release.
- Align the minimum host version with the host version range the package actually supports.
- See package.json fields that affect discovery.
- Rerun
clawhub package validate <path-to-plugin>.
package-manifest-version-drift
The package version and plugin manifest version disagree.- Prefer
package.json#versionas the package release version. - If
openclaw.plugin.jsonalso hasversion, update it to match or remove stale manifest version metadata when package metadata is authoritative. - Publish a new package version after changing published metadata.
- See Plugin manifest.
- Rerun
clawhub package validate <path-to-plugin>.
package-openclaw-unsupported-metadata
Thepackage.json#openclaw block contains fields that are not supported
OpenClaw package metadata.
- Remove unsupported fields such as
openclaw.bundle. - Keep native plugin metadata in
openclaw.plugin.json. - Keep package entrypoints, compatibility, install, setup, and catalog metadata
in supported
package.json#openclawfields. - See package.json fields that affect discovery.
- Rerun
clawhub package validate <path-to-plugin>.
Published artifact
package-npm-pack-unavailable
The package cannot be packed into the artifact ClawHub would inspect or publish.- Run
npm pack --dry-runfrom the package root. - Fix invalid package metadata, broken lifecycle scripts, or files entries that make packing fail.
- Remove
private: trueif this package is intended for public publishing. - Rerun
clawhub package validate <path-to-plugin>.
package-npm-pack-entrypoint-missing
The package can be packed, but the packed artifact does not include the entrypoint files declared inpackage.json#openclaw.
- Run
npm pack --dry-runand inspect the files that would be included. - Build generated entrypoints before packing.
- Update
files,.npmignore, or build output so declared entrypoints are included. - See Plugin entry points.
- Rerun
clawhub package validate <path-to-plugin>.
package-npm-pack-metadata-missing
The packed artifact is missing OpenClaw metadata that exists in your source package.- Run
npm pack --dry-runand inspect the included metadata files. - Ensure
package.jsonincludes theopenclawblock in the packed artifact. - Ensure
openclaw.plugin.jsonis included when the package is a native OpenClaw plugin. - Update
filesor.npmignoreso package metadata is not excluded. - See Building plugins.
- Rerun
clawhub package validate <path-to-plugin>.
Manifest metadata
manifest-name-missing
The native plugin manifest does not include a display name.- Add a non-empty
namefield toopenclaw.plugin.json. - Keep
namehuman-readable and keepidas the stable machine id. - See Plugin manifest.
- Rerun
clawhub package validate <path-to-plugin>.
manifest-unknown-fields
The plugin manifest has top-level fields that OpenClaw does not support.- Compare each top-level field with the manifest field reference.
- Remove custom fields from
openclaw.plugin.json. - Move package or install metadata into supported
package.json#openclawfields instead of the manifest. - Rerun
clawhub package validate <path-to-plugin>.
manifest-unknown-contracts
The manifest declares unsupported keys insidecontracts.
- Compare each key under
contractswith the contracts reference. - Remove unsupported contract keys.
- Move runtime behavior into plugin registration code, and keep
contractslimited to static capability ownership metadata. - Rerun
clawhub package validate <path-to-plugin>.
SDK and compatibility migration
legacy-root-sdk-import
The plugin imports from the deprecated root SDK barrel:openclaw/plugin-sdk.
- Replace root-barrel imports with focused public subpath imports.
- Use
openclaw/plugin-sdk/plugin-entryfordefinePluginEntry. - Use
openclaw/plugin-sdk/channel-corefor channel entry helpers. - Use Import conventions and Plugin SDK subpaths to find the narrow import.
- Rerun
clawhub package validate <path-to-plugin>.
reserved-sdk-import
The plugin imports an SDK path reserved for bundled plugins or internal compatibility.- Replace reserved OpenClaw internal SDK imports with documented public
openclaw/plugin-sdk/*subpaths. - If the behavior has no public SDK, keep the helper inside your package or request a public OpenClaw API.
- Use Plugin SDK subpaths and SDK migration to choose a supported import.
- Rerun
clawhub package validate <path-to-plugin>.
legacy-before-agent-start
The plugin still uses the legacybefore_agent_start hook.
- Move model or provider override work to
before_model_resolve. - Move prompt or context mutation work to
before_prompt_build. - Keep
before_agent_startonly while your declared compatibility range still supports older OpenClaw versions that require it. - See Hooks and Plugin compatibility.
- Rerun
clawhub package validate <path-to-plugin>.
provider-auth-env-vars
The manifest still uses legacyproviderAuthEnvVars provider auth metadata.
- Mirror provider env-var metadata into
setup.providers[].envVars. - Keep
providerAuthEnvVarsonly as compatibility metadata while your supported OpenClaw range still needs it. - See setup reference and SDK migration.
- Rerun
clawhub package validate <path-to-plugin>.
channel-env-vars
The manifest uses legacy or older channel env-var metadata without the current setup or config metadata ClawHub expects.- Keep channel env-var metadata declarative so OpenClaw can inspect setup status without loading channel runtime.
- Mirror env-driven channel setup into the current setup, channel config, or package channel metadata used by your plugin shape.
- Keep
channelEnvVarsonly as compatibility metadata while older supported OpenClaw versions still require it. - See Plugin manifest and Channel plugins.
- Rerun
clawhub package validate <path-to-plugin>.
Security manifest
security-manifest-schema-unavailable
The package shipsopenclaw.security.json with a schema reference that ClawHub
does not recognize as available.
- Remove the schema URL if it is advisory-only.
- Use a documented versioned schema only after OpenClaw publishes one.
- Rerun
clawhub package validate <path-to-plugin>.
unrecognized-security-manifest
The package ships an unsupported security manifest file.- Remove
openclaw.security.jsonuntil OpenClaw documents a versioned security manifest schema and ClawHub behavior. - Keep security-sensitive behavior documented in your public package docs or README until the manifest contract exists.
- Rerun
clawhub package validate <path-to-plugin>.