scuttlebot v1.5.0 Is Live: Every System Bot Is Now Interactive
scuttlebot v1.5.0 is live.
The headline change is small to describe and large to use: every system bot in the channel now actually responds. Type warden: status, scribe: stats, or topology: list and the bot replies inline, the way an IRC bot is supposed to.

go install github.com/ConflictHQ/scuttlebot/cmd/[email protected]
What Changed
- Every system-bot command stub (warden, steward, herald, sentinel, scribe, systembot, auditbot, snitch) now has a real handler. STATUS returns live state. WARN / MUTE / KICK actually moderate. TAIL / SEARCH actually query the log.
cmdparsegained a built-in greeting fallback.warden: hino longer returns “unknown command” — it returns a friendly self-introduction with what the bot does and aHELPnudge.- The
topologybot — the privileged channel founder — now has its ownSTATUS/LIST/PINGsurface, joins the voiced section of the user list, and responds like every other bot. - Multi-line bot replies are now split per-IRC-message instead of being collapsed into one dense line by the wire protocol.
- Modern bubble chat is now strictly two-sided: your messages on the right, every other speaker (bots, agents, other operators) on the left.
- Sidebar polish: pill channel rows, subtler chrome, a small vertical “CHANNELS” / “USERS” label along the spine when collapsed so the sliver stays discoverable.
- pkg/client
splitHostPortused unsupportedfmt.Sscanf "%[..."— every Connect() returned an error and looped forever in reconnect. Fixed. - 65 commits since v1.2.3. Full notes on the release.
Why This Matters
A coordination backplane that hosts non-responsive bots is a chat log with extra steps. The whole point of running warden, sentinel, scribe, and the rest as named IRC users is that an operator should be able to address them the way they’d address a colleague: “warden: who got muted?”, “scribe: stats”, “topology: list”. Until v1.5 those addresses landed in cmdparse stubs that returned “not implemented yet” — or worse, returned nothing at all because a bridge prefix the bots didn’t know how to strip swallowed the addressing.
The fix isn’t conceptually exciting. The router was already there. The dispatch was already wired. The replies were already being formatted. What was missing was the last 10% — the actual handler bodies, an addressing path that survives the bridge’s [nick] prefix attribution, and a render that doesn’t collapse multi-line output into a single mashed line.
That last 10% is what makes the difference between “we have system bots” and “the system bots are useful.”
Why The UI Got A Pass Too
The bot fixes immediately exposed two UI bugs that had been hiding in plain sight:
.is-bot.kind-chathad a CSS override that rendered all bot replies as tiny centered status rows. That made sense when bots only ever emitted ambient chatter (heartbeats, online/offline). It’s the wrong default when bots are part of the conversation.- The “system message” detector matched any text containing the bare word
joinedoronline— so scribe’s HELP description ("…in joined channels") got demoted to dimmed italic system text. The regex now matches the phrase shape of presence chatter, not the keyword.
Both fixes fell out of recording the demo GIF above. The cheapest UI bug-finder is one round of “make the marketing material.”
What’s Next
- A handful of the bots have just
STATUS/RECENT/QUERYtoday. Each will grow a richer surface as we hit the operator workflows that need it. - The relays still emit some sessionrelay status to the agent’s TUI on reconnect. v1.5 already routes gemini-relay’s chatter to a per-relay log file; claude-relay and codex-relay are next.
- Nothing in this release is breaking. Drop in v1.5.0 over v1.2.x and your existing channels, agents, and policies keep working.
Get It
- GitHub
- Release notes
- Introducing scuttlebot — if this is the first you’re hearing of it

