Tools & plugins
Using Home Assistant with OpenClaw
Browse more in Tools & plugins.
All tools & plugins guides →This guide shows you how to work with OpenClaw’s plugin system so you can wire external tools like Home Assistant into your agents. You’ll install plugins, control them from the CLI or chat commands, and understand how OpenClaw discovers and prioritizes plugins.
config` so your Home Assistant integration can sit alongside other OpenClaw plugins cleanly.
Prerequisites
- ✓An existing OpenClaw installation with the `openclaw` CLI available in your shell.
- ✓A running OpenClaw Gateway process so plugin changes can be loaded and restarted.
- ✓Access to edit your OpenClaw config file where `plugins` settings live.
Steps
- 1
Inspect which plugins OpenClaw already loads
Before you add anything for Home Assistant, see what plugins OpenClaw already discovers. This helps you avoid naming collisions and confirms that the plugin system itself is working.
Run the list command and skim for bundled providers and any existing external plugins.
bashopenclaw plugins list - 2
Install an external plugin package
OpenClaw installs external plugins from npm, ClawHub, or a local path. Use the install command to pull in a plugin that will talk to Home Assistant or any other external system.
The same resolver works for bare package specs, `clawhub:` prefixes, or local directories and archives.
bash# From npm openclaw plugins install @openclaw/voice-call # From a local directory or archive openclaw plugins install ./my-plugin openclaw plugins install ./my-plugin.tgz - 3
Configure plugin entries and allowlists in your config file
After install, you control which plugins can run and how they’re configured via the `plugins` block. This is where you’ll eventually add a Home Assistant plugin id and its `config` object.
config`.
json{ plugins: { enabled: true, allow: ["voice-call"], deny: ["untrusted-plugin"], load: { paths: ["~/Projects/oss/voice-call-extension"] }, entries: { "voice-call": { enabled: true, config: { provider: "twilio" } }, }, }, } - 4
Restart the OpenClaw Gateway to apply plugin changes
Config changes and new installs only take effect after the Gateway restarts. Use the gateway restart command so your updated `plugins` config and any new Home Assistant-related plugin code are loaded.
If you run the Gateway with config watch, it usually restarts itself shortly after the write, but this command is the explicit way to force it.
bashopenclaw gateway restart - 5
Control plugins from chat with slash commands
If you prefer to manage plugins from inside a chat channel, enable chat-native plugin commands. This is handy when you want to toggle a Home Assistant plugin on the fly without shell access.
plugins: true` is set, you can install, inspect, and enable plugins directly from the conversation.
text/plugin install clawhub:@openclaw/voice-call /plugin show voice-call /plugin enable voice-call - 6
Use CLI discovery and enablement rules to debug plugin loading
When your Home Assistant plugin doesn’t show up, use the richer CLI flags to see what OpenClaw discovered and why. The verbose and JSON modes expose plugin states like disabled, missing, or invalid, and `inspect` gives per-plugin details.
This is the fastest way to confirm that your plugin id, config, and discovery paths line up.
bashopenclaw plugins list # compact inventory openclaw plugins list --enabled # only loaded plugins openclaw plugins list --verbose # per-plugin detail lines openclaw plugins list --json # machine-readable inventory openclaw plugins inspect <id> # deep detail openclaw plugins inspect <id> --json # machine-readable openclaw plugins inspect --all # fleet-wide table openclaw plugins info <id> # inspect alias openclaw plugins doctor # diagnostics
Configuration
| Option | Description | Example |
|---|---|---|
| plugins.enabled | Master toggle that turns all plugins on or off globally. | |
| plugins.allow | Allowlist of plugin ids that are permitted to run. | |
| plugins.deny | Denylist of plugin ids that are always blocked, even if allowed elsewhere. | |
| plugins.load.paths | Extra file or directory paths where OpenClaw should look for plugin code. | |
| plugins.entries.voice-call.enabled | Per-plugin toggle that enables or disables the `voice-call` plugin. | |
| plugins.entries.voice-call.config.provider | Provider selection for the `voice-call` plugin. | twilio |
| plugins.slots.memory | Selects which memory plugin occupies the exclusive `memory` slot. | memory-core |
| plugins.slots.contextEngine | Selects which context engine implementation OpenClaw uses. | legacy |
Troubleshooting
A plugin you configured under plugins.entries.<id> does not appear in `openclaw plugins list`.
OpenClaw treats that as a missing plugin when discovery cannot find the id you referenced. paths`, then rerun the list command.
openclaw plugins list --verboseA plugin shows up but refuses to run because its config is invalid.
OpenClaw marks plugins with schema-mismatched config as invalid and fails closed on install. config` block, then use the doctor command to get guided fixes if the install path pointed you there.
openclaw plugins doctorAfter editing the plugins config, your changes do not take effect in the Gateway.
Config changes require a Gateway restart before OpenClaw reloads plugin state. Restart the Gateway process so it picks up the new `plugins` settings and reactivates your plugins.
openclaw gateway restartWorkspace-origin plugins under `.openclaw` never activate even though they are discovered.
Workspace-origin plugins are disabled by default due to the enablement rules. enabled: true` or the `openclaw plugins enable <id>` command so OpenClaw activates them.
openclaw plugins enable <id>Frequently asked questions
Powered by Mem0
Add persistent memory to OpenClaw
Official Mem0 plugin for OpenClaw keeps context across chats and tools. Smaller prompts, lower cost, better continuity for your agents.