#qmd collection add failed for memory-root-agent-ddgr: spawn qmd ENOENT
1 messages · Page 1 of 1 (latest)
That error is basically “OpenClaw tried to run the qmd command, but your OS couldn’t find it.”
spawn qmd ENOENT= Node.js attempted to spawn an executable namedqmd, and got ENOENT (“No such file or directory”) → almost always meansqmdisn’t on the PATH for the process that’s running OpenClaw (often the gateway service).
Common causes:
qmdis installed, but only in your interactive shell PATH (Terminal), not in the systemd/launchd service environment.qmdwas installed for a different user than the one running the gateway.- You’re running OpenClaw in Docker/VM, but installed
qmdon the host (or vice‑versa).
Quick checks (run on the same machine/user that runs the gateway):
openclaw --version
command -v qmd
qmd --version
If command -v qmd prints nothing, the fix is: install qmd in a global location (or adjust the gateway service PATH so it can see it), then restart the gateway.
If you paste the output of those 3 commands + tell me your OS (macOS/Linux/Windows) and whether you’re running the gateway as a service, I can tell you the exact next step.
probably a path thing, here is where qmd is installed /home/node/.npm-global/bin/qmd
Yep — that confirms it’s a PATH/env problem.
spawn qmd ENOENT means: the OpenClaw process tried to run qmd, but in the environment the gateway is running under, qmd isn’t found on PATH (even though it exists at /home/node/.npm-global/bin/qmd).
Two good fixes:
- Tell OpenClaw the absolute path to qmd (avoids PATH issues entirely)
In your OpenClaw config, set:
memory: {
qmd: {
command: "/home/node/.npm-global/bin/qmd"
}
}
(Then restart the gateway.)
- Make sure the gateway service PATH includes it
If the gateway is running under systemd/docker/pm2/etc, it often won’t load your shell profile, so/home/node/.npm-global/binnever gets added.
Quick sanity checks:
ls -l /home/node/.npm-global/bin/qmd
/home/node/.npm-global/bin/qmd --version
If you tell me how you’re running the gateway (docker container? openclaw gateway install / systemd? just in a terminal?), I can point you to the exact place to set PATH or the config.
docker container
If OpenClaw is running inside a Docker container, spawn qmd ENOENT usually boils down to one of these:
qmdis not installed inside the same container as OpenClaw (installing it on the host won’t help), orqmdis in the container, but the gateway process’ PATH doesn’t include/home/node/.npm-global/bin.
Fastest fix (Docker-friendly): set an absolute command path
In your OpenClaw config, set:
memory: {
qmd: {
command: "/home/node/.npm-global/bin/qmd"
}
}
Then restart/recreate the container.
Verify from inside the container
Run:
docker exec -it <openclaw_container> /home/node/.npm-global/bin/qmd --version
docker exec -it <openclaw_container> sh -lc 'command -v qmd; echo $PATH'
Alternative fix: add PATH in docker-compose
services:
openclaw:
environment:
PATH: /home/node/.npm-global/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
One key question: is qmd installed in the same container that’s running the gateway, or in a different container? If it’s a different container, OpenClaw won’t be able to spawn it at all (you’ll need it in the gateway container).
ok I added that path in the openclaw.json and it seems to be working now as there is no errors. How can I see the status of qmd?
QMD usually doesn’t run as a “service” (unless you enabled an optional daemon layer) — OpenClaw typically just spawns the qmd CLI on-demand. So “status” is basically: can qmd see its index + collections, and do queries work.
1) Check QMD directly inside the container
If qmd isn’t on PATH, use the absolute path you configured:
docker exec -it <openclaw_container> /home/node/.npm-global/bin/qmd status
docker exec -it <openclaw_container> /home/node/.npm-global/bin/qmd collection list
2) Make sure you’re looking at the same index OpenClaw uses
OpenClaw often calls qmd with an --index ... argument (so running plain qmd status might show “empty” even though OpenClaw is fine).
Easiest way: grep the container logs for the exact qmd invocation, then reuse that --index:
docker logs <openclaw_container> 2>&1 | grep -i qmd
# then run: qmd --index <that-path> status / collection list