OpenClaw on IRC
The plugin, the two access gates, mention gating, per-channel tool limits, NickServ, and what the queue cannot recover
IRC is the oldest surface OpenClaw connects to and the docs treat it accordingly: install the official plugin, set a host, a nick and the channels to join, and prefer a private server for bot coordination, because predictable public channels are a poor place for bot or swarm backchannel traffic. Here is the setup, the durability caveat the protocol imposes, the two access gates that confuse people, mention gating, the tool restrictions the docs recommend for public channels, NickServ, and the troubleshooting list.
Setup and durability
- Install the plugin, then set at least the host, the nick and the channels; TLS is on by default on port 6697, with 6667 for intentional plaintext, and the probe verifies the channel. Config changes hot-reload, and if you use a public network the docs name Libera.Chat, OFTC and Snoonet as common choices.
- Each accepted message is written to the durable ingress queue before policy checks and dispatch, so pending or retryable messages survive a restart, serialised per channel or direct-message peer.
- IRC provides no replayable delivery id and does not resend what a disconnected client missed, so OpenClaw assigns a local id stable only within the current TCP connection: the queue protects the accept-to-dispatch window, but it cannot recover a message that never arrived or deduplicate a server resend across connections.
- Named accounts inherit the channel-wide reply mode, editing one restarts only that account in the default reload mode, and pending direct messages from an earlier connection are discarded because nicknames can change owners.
Prefer a private IRC server for bot coordination.
The two gates
There are two separate gates for channels: channel access, the group policy plus the groups map, decides whether the bot accepts messages from a channel at all, and sender access, the group allowlist or a per-channel allow list, decides who may trigger it inside that channel. The gotcha the docs single out is that the plain allow-from key is for direct messages, not channels: a log line saying a group sender was dropped under the allowlist policy means the sender was not allowed for channel messages, and the fix is the group allowlist or the per-channel one. Allowlist entries should use stable identities in the nick, user and host form; bare nick matching is mutable and only enabled by a key whose name starts with dangerously. Even an allowed channel and sender are mention-gated by default, so a missing-mention drop in the log is expected until the message names the bot or you set require-mention to false for that channel, or for every channel with an open policy and a wildcard entry.
Public channels and NickServ
- If a public channel allows everyone, anyone can prompt the bot, so the docs restrict tools there: deny the runtime and filesystem groups, the gateway, nodes, cron and browser tools for the channel, or use per-sender tool policies with prefixed keys, a strict wildcard fallback and a looser entry for your own identity, first match winning.
- NickServ identify runs whenever a password is set, with the service name configurable and a password file as an alternative; one-time registration on connect needs an email and should be disabled once the nick is registered to avoid repeated attempts.
- The default account can be configured from environment variables, host, port, TLS, nick, username, real name, password, channels and NickServ values, except that the host cannot come from a workspace env file. IRC uses raw TCP or TLS sockets outside the operator-managed forward proxy, so deployments that require all egress through that proxy should keep the channel disabled unless direct egress is approved.
OpenClaw pairing explains the approval flow the direct-message default uses, and OpenClaw on Discord the channel whose mention gating works the same way.
Outbound text and troubleshooting
Markdown goes out as plain text with code contents and link destinations preserved; long replies are rendered before splitting so fences stay consistent across chunks, the chunk limit and chunk mode control the split, and the socket enforces the line-size limit. The message CLI sends straight to a channel or nick. When the bot connects but never replies in a channel, check the groups map and the missing-mention drops; when login fails, check nick availability and the server password; when TLS fails on a custom network, check the host, port and certificate.
On Diali
IRC is not among the channels Diali connects today: the ones we run are WhatsApp, Telegram, Discord, Slack, Mattermost, Matrix, SMS and voice, and a self-run instance is where this plugin lives for now. Connect your first channel in five minutes shows our connect flow, Hosted OpenClaw on Diali is the assistant and Diali security describes the boundary.
- Channel access and sender access are two gates.
- Mention-gated by default; the allow-from key is for DMs.
- The queue cannot recover what IRC never delivered.
Stop reading about it, build one
Set up an agent, pick a channel, and have it working inside the app you already keep open.
