How to Install and Configure @memtensor/memos-local-plugin for Hermes and OpenClaw Agents
I was setting up a Hermes Agent instance and wanted to give it persistent memory via the @memtensor/memos-local-plugin. My first instinct: npm install -g @memtensor/memos-local-plugin.
npm install -g @memtensor/memos-local-pluginIt failed with a 404. The package is not on the public npm registry.
Fine. I cloned the repo, ran npm install -g from the local directory, and got a tarball dumped in my global node_modules — no plugin files, no config, nothing actually deployed. The agent started but summarization and reflection were broken. No errors, no warnings. Just silent degradation.
The Installer, Not the Package
The plugin ships as a bundle, not a standalone npm package. The only correct way to install it is through the bundled install.sh script:
cd apps/memos-local-pluginbash install.sh --version 2.0.0Or pipe the remote script directly:
bash -c "$(curl -fsSL https://raw.githubusercontent.com/MemTensor/MemOS/main/apps/memos-local-plugin/install.sh)"The installer detects whether you’re running Hermes or OpenClaw, copies the plugin to the correct agent directory, writes a default config.yaml, and restarts the agent. For local testing, npm pack then bash install.sh --version ./tarball.tgz works the same way.
On Windows, use install.ps1 instead.
Where Everything Lives
After installation, the layout depends on your agent:
| Agent | Plugin dir | Runtime data dir |
|---|---|---|
| Hermes | ~/.hermes/plugins/memos-local-plugin/ | ~/.hermes/memos-plugin/ |
| OpenClaw | ~/.openclaw/plugins/memos-local-plugin/ | ~/.openclaw/memos-plugin/ |
The runtime directory holds config.yaml, data/, skills/, and logs/. Upgrading or uninstalling never touches these — your data and config survive reinstalls.
Config Location Priority
The bridge process (the Node.js process that runs the plugin) needs to find config.yaml. The resolution order is:
$MEMOS_HOME— full path to the runtime directory$MEMOS_CONFIG_FILE— full path to a specific config file--homeflag passed to the bridge- Default path (
~/.hermes/memos-plugin/or~/.openclaw/memos-plugin/)
When none of these point to a valid config, the plugin falls back to defaults — local embedding, no LLM provider. This means summarization and reflection silently stop working. The agent runs, the plugin loads, but the memory features are effectively dead.
Docker Deployment
In Docker, the default path usually doesn’t exist or points to a non-persistent layer. The fix is setting MEMOS_HOME:
FROM nousresearch/hermes-agent:latest
RUN bash -c "$(curl -fsSL https://raw.githubusercontent.com/MemTensor/MemOS/main/apps/memos-local-plugin/install.sh)"
ENV MEMOS_HOME=/opt/data/.hermes/memos-plugin
CMD node /opt/data/.hermes/plugins/memos-local-plugin/bridge.cts --agent=hermes --daemon && hermes chatMount a volume to $MEMOS_HOME so data persists across container restarts:
services: hermes: build: . volumes: - ./memos-data:/opt/data/.hermes/memos-plugin environment: - MEMOS_HOME=/opt/data/.hermes/memos-pluginVerify the Installation
Check that the runtime directory and config exist:
ls -la ~/.hermes/memos-plugin/config.yamlIf the file is missing, run the installer again or create it manually from the template at apps/memos-local-plugin/config.yaml in the repo.
Summary
In this post, I walked through installing @memtensor/memos-local-plugin the right way — through install.sh, not npm install -g. I explained why the npm approach fails, where the plugin and its data live, how config resolution works, and how to set MEMOS_HOME in Docker to avoid silent feature degradation. The one thing to remember: if memory features aren’t working, check that config.yaml is present and that the bridge process can find it.
Final Words + More Resources
My intention with this article was to help others share my knowledge and experience. If you want to contact me, you can contact by email: Email me
Here are also the most important links from this article along with some further resources that will help you in this scope:
Oh, and if you found these resources useful, don’t forget to support me by starring the repo on GitHub!
Comments