Driver Support Matrix
Clawdapus drivers adapt the generic governance model to specific agent runtimes. Pick a driver based on what your agent needs. All drivers support MODEL, AGENT, CLLAMA, and CONFIGURE.
New to Hermes? Start with the dedicated Hermes quickstart.
Feature Matrix
openclaw | hermes | nanoclaw | nanobot | picoclaw | nullclaw | microclaw | |
|---|---|---|---|---|---|---|---|
| Runtime | OpenClaw | Hermes | NanoClaw / Claude Code-compatible orchestrator | Nanobot | PicoClaw | NullClaw | MicroClaw |
claw init scaffold | yes | yes | yes | yes | yes | yes | yes |
| HANDLE: Discord | yes | yes | -- | yes | yes | yes | yes |
| HANDLE: Telegram | yes | yes | -- | yes | yes | yes | yes |
| HANDLE: Slack | yes | yes | -- | yes | yes | yes | yes |
| HANDLE: long-tail | -- | -- | -- | -- | yes | -- | -- |
| INVOKE (cron) | yes | yes | -- | yes | yes | yes | -- |
| Structured health | yes | yes | yes | yes | yes | yes | yes |
| Read-only rootfs | yes | yes | no | yes | yes | yes | no |
| Non-root container | -- | -- | -- | -- | yes | -- | -- |
PicoClaw long-tail platforms: WhatsApp, Feishu, LINE, QQ, DingTalk, OneBot, WeCom, WeCom App, Pico, MaixCam.
claw init also scaffolds a generic type (alpine:3.20, no driver enforcement) for custom runtimes.
Driver Behavior
All Drivers
- Chat-capable drivers that configure Discord handles set
mention_only(or the driver's equivalent) for Discord channels to prevent feedback loops in multi-agent pods. - All drivers explicitly set
HOMEin the container env to match their config mount path. - Runtime directories use
0o777permissions so container users with different UIDs can write.
openclaw
The OpenClaw driver generates openclaw.json configuration and supports the full set of Discord routing controls:
channel://discord setting | Supported |
|---|---|
DM policy (pairing, allowlist, open, disabled) | yes |
DM allowFrom | yes |
Guild requireMention | yes |
Guild users[] allowlist | yes |
allow_from_handles: true (expands into guild users) | yes |
allow_from_services: [svc...] (derives Discord IDs) | yes |
Guild policy | no |
Guild-level policy is rejected at config generation time rather than producing a config the runtime rejects at boot.
cllama wiring for OpenClaw uses models.providers.<provider>.{baseUrl, apiKey, api, models} -- not agents.defaults.model.baseURL/apiKey.
OpenClaw state uses its canonical home directory inside the container: ~/.openclaw (/root/.openclaw). Clawdapus mounts the generated config at /root/.openclaw/config/openclaw.json. The runtime keeps writable tmpfs mounts at both /root and /root/.openclaw (mode 1777): the parent /root overlay guarantees non-root users can traverse into the home directory, and the nested ~/.openclaw overlay guarantees Docker does not leave the state root behind as 0755 root:root when it creates the config bind-mount target.
hermes
The Hermes driver emits HERMES_DEFAULT_AGENT_IDENTITY so the Hermes runner starts its system prompt with a Clawdapus-managed identity instead of the upstream generic You are Hermes Agent block. It also writes a service-specific SOUL.md; when a persona is configured, the persona's SOUL.md takes priority.
Container env vars from compose environment: are not available in Hermes agent tool execution. Only vars listed in allowedEnvPassthroughKeys() reach the tool runtime via the .env file. New env vars that agents need must be added to this allowlist.
Hermes runner memory defaults to a 12000-character memory index cap and a 6000-character user-memory cap. Services can override those caps with HERMES_MEMORY_INDEX_MAX_CHARS and HERMES_USER_MEMORY_MAX_CHARS; the managed base image evicts oldest entries on overflow when the new entry can fit after eviction and rewrites MEMORY.md as mode 0666 so host-side diagnostics remain readable across writes.
For Discord handles, the Hermes driver disables the upstream text_to_speech tool by default so agents reply in text instead of model-selected voice attachments. A service can opt back in with x-claw.hermes.allow-tools: [text_to_speech].
For Discord, Slack, and Telegram handles, the driver compiles explicit Hermes platform_toolsets so the runner's native web, terminal, and file tools are an inspectable part of the generated config instead of an implicit upstream fallback. FIRECRAWL_API_KEY and FIRECRAWL_API_URL are passed through to the Hermes .env when set, so configured Firecrawl access reaches tool execution. Hermes also defaults NO_PROXY/no_proxy to localhost,127.0.0.1,cllama so a Docker-injected host proxy cannot break local cllama traffic; explicit operator NO_PROXY overrides are preserved.
Hermes Discord and Slack services default to silent-final handling because the visible reply often goes through the send_message tool. Empty visible final responses after tool calls complete as no-op turns instead of surfacing retry or nudge warnings to the channel. Operators can disable this per service with HERMES_ALLOW_SILENT_FINAL=0, or enable it explicitly for other Hermes surfaces with x-claw.hermes.allow-silent: true. Transient cron upstream failures are logged and recorded as failed runs without user-channel delivery by default; set HERMES_CRON_DELIVER_TRANSIENT_FAILURES=1 to restore the old delivery behavior.
Managed Hermes chat services also set HERMES_CHAT_STATUS_DELIVERY=off and display.memory_notifications: off by default. Retry/fallback/lifecycle status callbacks and background-review summaries stay in logs instead of being posted as channel prose; set HERMES_CHAT_STATUS_DELIVERY=on or configure display.memory_notifications when an interactive/debug channel should show that runtime telemetry. Unset HERMES_CHAT_STATUS_DELIVERY preserves upstream Hermes behavior; the quiet default is applied by the Clawdapus driver.
nanoclaw
NanoClaw / Claude Code-compatible orchestrator driver. It does not currently support HANDLE or INVOKE, and it requires PRIVILEGE docker-socket true because the runtime spawns agent containers through Docker. It has a structured health probe and uses a writable root filesystem.
nanobot
Nanobot driver with generated config and Discord/Telegram/Slack handle wiring. Supports INVOKE scheduling and read-only rootfs.
picoclaw
PicoClaw is the most platform-diverse driver, supporting the long-tail of chat platforms beyond Discord/Telegram/Slack. Supports model-list config, non-root containers, and structured health probes.
nullclaw
NullClaw supports CONFIGURE for fine-grained runtime config mutations. Use CONFIGURE nullclaw config set <path> <value> to pin guild IDs, set mention requirements, configure Telegram allowlists, or select Slack transport modes.
microclaw
Minimal driver supporting Discord, Telegram, and Slack handles. Does not support INVOKE scheduling. It has a structured health probe and uses a writable root filesystem.
Choosing a Driver
- Need Discord routing controls?
openclawhas the richest Discord config support. - Need Telegram or Slack?
openclaw,hermes,nanobot,picoclaw,nullclaw, ormicroclaw. - Need WhatsApp, LINE, or other platforms?
picoclawis the only option. - Need non-root containers?
picoclaw. - Need fine-grained runtime config?
nullclawwithCONFIGURE. - Just need a governed container?
generictype gives you an alpine base with no driver enforcement.
