I am coming from a docker installation point of view - when installing OpenClaw with the docker method, onboarding runs through openclaw-gateway directly when the gateway itself still didn't exist. Therefore any attempt to setup skills during onboarding would fail (or at least that's the way I understand it). This makes me think - is my plugin installation mechanism / skills installation mechanism broken somehow because I run a docker container? If npm / pnpm is required for plugins/skills, have they even been properly configured for my docker setup? Please clarify and give me peace of mind. Thanks @molten valley
#I don't understand how npm or pnpm is an essential part of plugin / skill installation (or is it)?
1 messages · Page 1 of 1 (latest)
... am I getting abandoned by @molten valley ?
Nope, not abandoned 🙂 I checked the docs and code.
Short version: your Docker setup is not inherently breaking skills/plugins.
What’s going on:
-
The Docker flow is intentionally split. Before the gateway container is up, onboarding/config writes run through
openclaw-gatewaydirectly. After startup,openclaw-cliis the normal tool. That is the designed Docker path, not a broken one.
Docs: https://docs.openclaw.ai/install/docker -
Skills during onboarding do not require an already-running gateway. The onboarding skills step calls the installer logic directly, it does not depend on a live gateway RPC round-trip.
-
Skills and plugins are different:
openclaw skills install <slug>mainly downloads a skill folder into the workspace. That does not inherently need npm/pnpm.- Some skills have dependency installers (brew, node, uv, go, download). If a skill uses a node installer, then OpenClaw uses the configured node manager for that step.
openclaw plugins install <package>does involve package installation, because plugins are code packages.
Docs: https://docs.openclaw.ai/cli/skills
Docs: https://docs.openclaw.ai/cli/plugins
- In Docker, npm/pnpm run inside the container, not on your host. The runtime image is Node-based, so
npmis there, and the Docker image explicitly keepspnpmavailable too.
So the real answer is:
No, Docker does not make the plugin/skill install mechanism fundamentally broken.
If something fails, it’s more likely a specific dependency/install recipe, not “onboarding happened before the gateway existed.”
If you want a quick sanity check, run:
docker compose run --rm openclaw-cli skills check
docker compose run --rm openclaw-cli plugins doctor
docker compose run --rm openclaw-cli status --all
If any of those fail, paste the output and also:
docker compose run --rm openclaw-cli --version
Glad that helped? If this clears it up, please right-click the solution message → Apps → ✅ Mark Solution so Answer Overflow can index it.
my OpenClaw docker environment has just node, but not brew, uv, go, nor download. Am I toast?
No, you’re not toast.
The important bit is this:
- brew / uv / go are not global prerequisites
- they are just possible installer backends for certain skills
- “download” is not a binary you need installed. That installer type is handled by OpenClaw itself
So with a Docker image that has Node:
- Plugins: generally fine, because plugin install is a Node/package flow
openclaw skills install <slug>: fine, because that mostly downloads a skill folder- Skills with
nodeinstallers: fine - Skills with
downloadinstallers: usually fine - Skills with
brew/uv/goinstallers: those specific auto-installs will not work until you add those runtimes to the container
One more subtlety:
Even if a skill installs cleanly, if that skill expects a binary on PATH at runtime, that binary has to exist inside the container, not just on your host.
So the real answer is:
Your Docker setup is not broken.
It just means your container currently supports the Node-based skill/plugin path, not every possible skill installer path.
Quick sanity check:
docker compose run --rm openclaw-cli skills check
docker compose run --rm openclaw-cli skills list --eligible
That will tell you which skills are actually usable in your current container.
If you paste that output, I can tell you exactly which ones are blocked by missing brew/uv/go and which ones are totally fine.
so I can still utilize clawhub to install plugins? Sorry I have never tried out clawhub before, don't even know what it is actually.
Yep, you can still use ClawHub from Docker.
Very short version:
- ClawHub is OpenClaw’s public registry/discovery hub for skills and many community plugins
- you usually do not install “ClawHub” itself
- the normal
openclawCLI talks to it for you
So in Docker:
docker compose run --rm openclaw-cli skills search
docker compose run --rm openclaw-cli skills install <skill-slug>
docker compose run --rm openclaw-cli plugins install <package-name>
A couple of important details:
- Skills:
openclaw skills installuses ClawHub directly - Plugins:
openclaw plugins install <package>checks ClawHub first, then falls back to npm if needed
So yes, your Docker setup can still use that flow just fine.
If it helps, think of it like this:
- ClawHub = the catalog / registry
- openclaw-cli = the installer you run
- Docker = just where that installer is running
Docs:
If you want, I can give you 2 concrete examples next:
- installing a skill from ClawHub in Docker
- installing a plugin in Docker
yes show me the examples
Yep, here are two clean Docker examples.
1) Install a skill from ClawHub
Search first:
docker compose run --rm openclaw-cli skills search weather
Install one of the results, for example weather:
docker compose run --rm openclaw-cli skills install weather
Inspect it:
docker compose run --rm openclaw-cli skills info weather
docker compose run --rm openclaw-cli skills check
After that, start a new chat/session so OpenClaw picks the skill up cleanly.
2) Install a plugin in Docker
Example plugin from the docs:
docker compose run --rm openclaw-cli plugins install openclaw-codex-app-server
If you want to force ClawHub-only instead of “ClawHub first, npm fallback”:
docker compose run --rm openclaw-cli plugins install clawhub:openclaw-codex-app-server
Then verify it’s there:
docker compose run --rm openclaw-cli plugins list --verbose
docker compose run --rm openclaw-cli plugins inspect openclaw-codex-app-server
Mental model
- ClawHub website = browse/discover stuff
openclaw-cli= actually install it- Docker = where that install command runs
So yes, you can absolutely use ClawHub with your Docker setup.
If you want, next I can show:
- how to tell whether a skill is blocked by missing deps, or
- how to tell whether a plugin needs extra config after install.
how do you UNINSTALL a plugin?
In Docker, this is the basic uninstall flow:
docker compose run --rm openclaw-cli plugins list --verbose
docker compose run --rm openclaw-cli plugins uninstall <plugin-id>
Useful variants:
docker compose run --rm openclaw-cli plugins uninstall <plugin-id> --dry-run
docker compose run --rm openclaw-cli plugins uninstall <plugin-id> --keep-files
So:
plugins list --verbose= find the exact plugin id
plugins uninstall <id>= remove it--dry-run= preview only--keep-files= remove it from OpenClaw config/state, but leave files on disk
Docs: https://docs.openclaw.ai/cli/plugins
If you want, paste your plugins list --verbose output and I can point to the exact id to remove.
node@7a440ac70693:/app$ openclaw plugins install openclaw-codex-app-server
🦞 OpenClaw 2026.3.28 (unknown) — Gateway online—please keep hands, feet, and appendages inside the shell at all times.
Resolving clawhub:openclaw-codex-app-server…
ClawHub code-plugin openclaw-codex-app-server@0.5.0 channel=community verification=source-linked
Compatibility: pluginApi=>=2026.3.22 minGateway=2026.3.22
ClawHub package "openclaw-codex-app-server" is community; review source and verification before enabling.
ClawHub /api/v1/packages/openclaw-codex-app-server/download failed (429): Rate limit exceeded
node@7a440ac70693:/app$
That error is not your Docker setup breaking.
What happened:
- OpenClaw found the plugin on ClawHub
- compatibility looks fine (
minGateway=2026.3.22, and you’re on2026.3.28) - the install then failed because ClawHub rate-limited the download (
429)
So the problem is basically: ClawHub said “too many requests”, not “your container can’t install plugins.”
One subtle thing from the docs: for plugin installs, OpenClaw only auto-falls back to npm when ClawHub does not have the package or version. A 429 does not trigger npm fallback.
Easiest fix
Wait a bit, then retry:
openclaw plugins install openclaw-codex-app-server
If you want a workaround right now
Since that plugin is also on npm, you can pack it from npm and install the local archive:
npm pack openclaw-codex-app-server
openclaw plugins install ./openclaw-codex-app-server-0.5.0.tgz
Use the exact .tgz filename that npm pack prints.
Then verify:
openclaw plugins list --verbose
So, peace of mind version:
not a Docker problem, not a missing npm/pnpm problem, not a broken plugin system
just a ClawHub 429.
Docs: https://docs.openclaw.ai/cli/plugins
If you want, I can show you the safest exact Docker command sequence for the npm pack workaround too.
I've read online guides that say you need to do clawhub login first to avoid 429, but my docker container does not have clawhub
Right, and this is the subtle part:
you do not need the separate clawhub binary for OpenClaw itself to use ClawHub.
The built-in OpenClaw ClawHub client can already use auth if you provide it. It checks:
OPENCLAW_CLAWHUB_TOKENCLAWHUB_TOKENCLAWHUB_AUTH_TOKEN
and it can also read a ClawHub config file if one exists.
So if authenticated ClawHub access gives you better rate limits, you can do this without installing clawhub:
export CLAWHUB_TOKEN="your_token_here"
openclaw plugins install openclaw-codex-app-server
Or in Docker Compose terms, set it on the container/service environment.
Important distinction
clawhubCLI = separate tool for ClawHub account workflows like login/publish/syncopenclaw plugins install ...= OpenClaw’s own installer, which can still use a ClawHub token
So the missing clawhub binary is not the reason your install failed.
Practical recommendation
If you don’t already have a ClawHub token, the easiest paths are still:
- wait and retry after the 429 cools down, or
- use the npm tarball workaround I showed earlier
If you do have a ClawHub token, set CLAWHUB_TOKEN in the container and retry.
Docs: https://docs.openclaw.ai/tools/clawhub
If you want, I can show the exact docker compose env snippet for adding CLAWHUB_TOKEN cleanly.