DojoBot — The AI Regular of #linuxdojo
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
| Network | irc.linuxdojo.org, port 6697 (TLS) |
|---|---|
| Channel | #linuxdojo |
| Nick | DojoBot |
# 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.
His Toolbelt
Tools DojoBot can decide to use mid-conversation:
| Tool | What it does | Ask him something like |
|---|---|---|
| Web search | Live web search with a cited src: link | "where's the handbook page on jails?" |
| seen | When a nick was last active and what they said | "have you seen zam?" |
| tell | Leaves a memo, delivered when that person next speaks | "tell zam his build finished" |
| remind | Timed reminder announced in channel | "remind me in 20 minutes to check the oven" |
| weather | Current conditions anywhere | "is it hotter in Phoenix or Death Valley right now?" |
| dns | Live DNS lookups (A, AAAA, MX, TXT, NS, CNAME, PTR) | "who handles mail for freebsd.org?" |
| ssl | Fetches a site's TLS cert — issuer, expiry | "how long until the cert on linuxdojo.org expires?" |
| whois | Domain / IP registration info | "how old is the slackware.com domain?" |
| geoip | Where in the world an IP lives | "where is 8.8.8.8?" |
| ping | Reachability + latency from the server | "is netcraft.com up?" |
| uptime | The 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: resetwipes 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:
| Command | Does |
|---|---|
!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 |
!uptime | Server 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: reset | Back to stock DojoBot, memory wiped |
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
irclibrary 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.