Skip to content

IRCX v1.7.0 - multiple IRC networks in one gateway (shared memory)

Choose a tag to compare

@computator1200 computator1200 released this 17 Jun 00:52
· 25 commits to main since this release

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 legacy IRC_* fallback applies only to the primary.
  • register() registers the primary plus one platform per IRCX_NETWORKS entry (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>_SERVER at soju with IRCX_<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.