IRCX v1.7.0 - multiple IRC networks in one gateway (shared memory)
One gateway can now host several IRC networks at once, all sharing the agent's memory, sessions, and persona - no second gateway, no split-brain.
✨ IRCX_NETWORKS
List extra networks; each <N> registers a platform ircx-<n> configured from an isolated IRCX_<N>_* env namespace. The primary network stays on the unprefixed IRCX_* vars (byte-identical, including legacy IRC_* fallbacks).
IRCX_SERVER=irc.rizon.net
IRCX_NICKNAME=pascal
IRCX_CHANNEL=#home
IRCX_NETWORKS=libera
IRCX_LIBERA_SERVER=irc.libera.chat
IRCX_LIBERA_NICKNAME=PascalAI
IRCX_LIBERA_CHANNEL=#mychan
IRCX_LIBERA_SASL_USERNAME=PascalAI
IRCX_LIBERA_SASL_PASSWORD=...Every IRCX_* setting has an IRCX_<N>_* counterpart (server/port/TLS/SASL/nick/channels/observe-mode/allowlists/BLOCKED_CHANNELS/logging/…).
How it works
load_config(env_prefix=…)and the module hooks (check_requirements/validate_config/is_connected/ env-enablement / cron sender) plus adapter-level auth reads are all prefix-aware; the legacyIRC_*fallback applies only to the primary.register()registers the primary plus one platform perIRCX_NETWORKSentry (runtime-registered Hermes platforms).- Shared memory: all instances run in one process under one profile → byterover/native memory, sessions, and persona are shared. Conversation sessions stay distinct per (network, channel).
- Network-aware tools: the
irc_*tools act on whichever network the agent was addressed in (resolved via the current-turn platform), falling back to the primary.
Pairs naturally with a soju bouncer: point each
IRCX_<N>_SERVERat soju withIRCX_<N>_SASL_USERNAME=<user>/<network>; soju multiplexes the upstreams while each instance stays a clean single-network connection.
Tests
6 new tests; full IRCX suite 156 passing, primary path unchanged. CI green.