DojoBot — The AI Regular of #linuxdojo

DojoBot

DojoBot is the resident AI of #linuxdojo — part channel member, part sysadmin sidekick. He answers questions like any regular (in 40 words or less, no fluff), but he can also search the web in real time and cite his sources, check DNS records and TLS certificates, look up weather and whois, remember who said what, pass messages between people, and set timed reminders — all from plain conversation. No command syntax to memorize.

He is powered by xAI's Grok, lives on a FreeBSD server, and has opinions.

About

Most IRC bots make you learn their command language. DojoBot works the other way around: you talk to him like a person, and he decides which of his tools the question needs. Ask "is the cert on linuxdojo.org close to expiring?" and he goes and checks the actual certificate. Ask "have you seen zam?" and he checks. Ask him to remind you about the pizza in 20 minutes and he will — in channel, 20 minutes later.

When a question needs current information — docs, news, release notes, "what's the latest FreeBSD" — he searches the web live and posts a src: link with his answer, so you can check his work.

Where to Find Him

Networkirc.linuxdojo.org, port 6697 (TLS)
Channel#linuxdojo
NickDojoBot
# any IRC client works, e.g.:
irssi -c irc.linuxdojo.org -p 6697 --tls
/join #linuxdojo

Talking to DojoBot

Two ways to get his attention in channel:

DojoBot: how do I tune ZFS ARC on 16GB of RAM?
!ask what's the difference between pkg and ports?

That's it. Everything below — search, seen, tell, reminders, weather, DNS, SSL — happens through the same natural conversation. He picks the tool; you just ask.

Tip He keeps answers to ~40 words in channel. If you want something long-form — a script, a config, a walkthrough — use paste mode and he'll hand you a link instead of flooding the channel.

His Toolbelt

Tools DojoBot can decide to use mid-conversation:

ToolWhat it doesAsk him something like
Web searchLive web search with a cited src: link"where's the handbook page on jails?"
seenWhen a nick was last active and what they said"have you seen zam?"
tellLeaves a memo, delivered when that person next speaks"tell zam his build finished"
remindTimed reminder announced in channel"remind me in 20 minutes to check the oven"
weatherCurrent conditions anywhere"is it hotter in Phoenix or Death Valley right now?"
dnsLive DNS lookups (A, AAAA, MX, TXT, NS, CNAME, PTR)"who handles mail for freebsd.org?"
sslFetches a site's TLS cert — issuer, expiry"how long until the cert on linuxdojo.org expires?"
whoisDomain / IP registration info"how old is the slackware.com domain?"
geoipWhere in the world an IP lives"where is 8.8.8.8?"
pingReachability + latency from the server"is netcraft.com up?"
uptimeThe dojo server's uptime and load"how long since your last reboot?"

Example Session

<joe>     DojoBot: can you show me the freebsd handbook where it can
          get me started with jails
<DojoBot> Start here — the official handbook chapter covers creating
          and managing jails from scratch.
<DojoBot> src: https://docs.freebsd.org/en/books/handbook/jails/

<joe>     DojoBot: is the ssl cert on linuxdojo.org close to expiring?
<DojoBot> No, valid until Oct 16 2026.

<joe>     DojoBot: have you seen zam?
<DojoBot> zam was last seen 2h 7m ago saying: rebooting the router brb

<joe>     DojoBot: tell zam his build finished
<DojoBot> Memo sent to zam.
          ... later, the moment zam speaks ...
<DojoBot> zam: memo from joe (3h ago): his build finished

<joe>     DojoBot: remind me in 2 minutes to stretch
<DojoBot> Reminder set.
          ... two minutes later ...
<DojoBot> joe: reminder from you (2m ago): stretch

Memory

DojoBot remembers the conversation — and who said what. Every exchange is tagged with the asker's nick, so follow-ups like this just work:

<phil>    DojoBot: what did joe ask you earlier?
<DojoBot> joe wanted the handbook chapter on jails.
  • The channel shares one rolling memory of the last ~40 exchanges.
  • It survives restarts — he wakes up remembering.
  • His seen records, pending memos, and reminders survive restarts too.
  • DojoBot: reset wipes the conversation and starts fresh.

Long Answers & Pastes

Channel answers are capped short on purpose. For real code or long output, ask for a paste — he generates the full answer with no length limit and drops it on the dojo's own PrivateBin:

<joe>     DojoBot: paste me a bourne shell script that backs up /etc
          nightly with zfs snapshots
<DojoBot> https://linuxdojo.org/pastebin/?...

You can also hand him text to paste directly: DojoBot: paste <your text>.

Classic ! Commands

The pre-AI command set still works, for the muscle-memory crowd. Same engines the AI tools use:

CommandDoes
!ask <question>Same as addressing him by nick
!weather <place> [c|f] / !wx <lat,lon>Current weather
!dns <host> [type]DNS lookup
!ssl <host[:port]>TLS certificate summary
!whois <domain|ip>WHOIS lookup
!geo <ip>IP geolocation
!ping <host>One ping from the server
!uptimeServer uptime

Customizing Him

The channel can reshape DojoBot's personality live:

DojoBot: system?Show his current system role
DojoBot: system <new role>Give him a new personality (persists until reset)
DojoBot: resetBack to stock DojoBot, memory wiped
Note A custom personality survives restarts. He only goes back to being himself when someone says reset.

House Rules

DojoBot also moonlights as channel bouncer. Two things get you on his bad side:

  • Wall-of-text pastes — messages over ~400 characters. Use the pastebin instead.
  • Flooding — more than 4 messages in 4 seconds.

First offense gets a warning. Second gets the FloodingBastard timeout: a 10-second ban-and-kick to think about what you did. The ban lifts itself — come back in and behave.

Under the Hood

For the curious — no secrets here, just architecture:

  • A single Python 3.11 script (~1,100 lines) on a FreeBSD 15 server, running as an rc.d service. IRC side via the irc library over TLS with auto-reconnect and exponential backoff.
  • The brain is xAI's Grok via the Responses API. Server-side web search and a set of local function tools (seen / tell / remind / weather / dns / ssl / whois / geoip / ping / uptime) are offered on every call — the model decides when to use them, the bot executes and feeds results back until it has an answer.
  • Tool handlers shell out to the real thing: drill, whois, ping, openssl s_client — plus Open-Meteo for weather and geocoding. Answers come from live lookups, not the model's memory.
  • Conversation history (nick-tagged, capped), seen records, memos, and reminders all persist as JSON with atomic writes, so a restart loses nothing.
  • Replies run on a worker thread pool so a slow lookup never blocks the channel; a background thread delivers due reminders.
  • Pastes go to a self-hosted PrivateBin (encrypted, burn-after-reading capable) via pbincli.

Questions? Come ask him yourself — #linuxdojo on irc.linuxdojo.org:6697. He doesn't bite unless you flood.