Michael Limberger
Need me? Email mike@limberger.ca
About
Senior Web & Linux Administrator
Faculty of Dentistry, University of Toronto
Hi. I build web apps, keep Linux boxes healthy, and
run AI on hardware I control.
I've been doing Unix work for fifteen-plus years.
My day job is Senior Web & Linux Administrator at the
University of Toronto's Faculty of Dentistry. I look after
the Faculty's web stack and servers, and I write tools that
stay inside the building.
Right now the big one is a local AI layer for clinic policy.
It searches documents on disk and answers with citations,
without sending the chat to a vendor. We call it
RAG Proxy. I showed it at TechKnowFile 2026 and the
Faculty AI Kitchen.
Outside work I run
tech mixers and tutorials
around the GTA, usually covering local AI, Linux, privacy,
and self-hosting.
My Projects
Side projects.
Click a card for a short write-up.
🔮 RAG Proxy
Local AI for Faculty clinic and staff chat
I showed this at
TechKnowFile 2026
and the Faculty AI Kitchen.
Short public write-up:
uoft.me/rag.
In plain terms: it finds the right policy pages on a
local index, puts them in the prompt, and answers with
citations. Staff just open a chat. Nothing goes out to a
vendor API for that traffic.
We run it on two NVIDIA DGX Sparks at the Faculty. One box
hosts Open WebUI, the proxy, and bge-m3 embeddings.
The other runs the model through vLLM (Nemotron 3.5 Lightning).
Perl
Mojolicious
vLLM on DGX Spark
bge-m3
on-prem
citations
🐸 TOAD
Total Orchestration And Dispatch, a symbolic systems language
I wrote TOAD in Rust to orchestrate other programs.
There is no English if or while:
control flow is symbols. It is meant to conduct other tools,
not replace them. One static binary, no runtime.
Rust
v0.34.1
63 test files
~21k lines
single binary
⛵ Skiff
Local AI sysops and Perl coding harness
Skiff is my local AI sysops and Perl coding harness.
Terminal UI for interactive work, CLI for scripts.
Remote Commander, clibrowse, and Bosun plug in.
It talks to a local model on my machines.
Perl
v0.2.48
Tickit TUI
34 tests
local model
📡 Remote Commander
Fleet SSH for humans and agents
Named SSH hops instead of ad-hoc ssh.
Direct, two-hop, or three-hop. I use the same verbs as the
agent: status, exec,
put, get, sync,
doctor. Each machine has its own host map.
Perl
v0.3.7
multi-hop
human + agent
no raw SSH
🦊 clibrowse
Command-line remote control for a real Firefox
Not a text browser. A Go tool that drives real Firefox:
start, goto, click,
fill, page, cookies.
Same commands for me and for the agent. Hit a captcha, it
stops and asks a human.
Go
v0.1.18
real Firefox
verb CLI
two users
🔊 Bosun
Short text over speakers and a microphone
An acoustic modem, not voice chat.
One machine chirps a short line (ggwave by default). Another
hears it on a mic and prints what it got. Received text is
never executed. No network needed.
Perl
v0.1.16
ggwave
air-gap
never executes
🧠 OracleProxy
Personal homelab RAG engine
Same idea as RAG Proxy, at home.
A Perl/Mojolicious service on my Studio. Named
oracles over my own document sets, embeddings with bge-m3,
citations in the answer. Open WebUI talks to the proxy, not
the raw model. All on my hardware.
Perl
v0.3.43
Mojolicious
named oracles
citations
🎙️ dictation-linux
Push-to-talk, local speech to the focused window
Tap F9, speak, and text goes into the focused window.
Local whisper.cpp, local cleanup model, no cloud. Linux port
of my Mac dictation app. The same binary can serve speech-to-text
to other machines on Tailscale.
Rust
v0.1.0
local Whisper
local LLM
no cloud
⚔️ Battle-Grounds
Top-down 2D team PvP brawler with fantasy combat and six character classes
A 4v4 team deathmatch I built in Godot 4.6.
Blue versus Yellow, six classes, hostile NPCs, first to 25
kills. Bots fill empty slots. LAN multiplayer is planned, not
shipped yet.
Godot 4.6
GDScript
6 classes
4v4 PvP
MVP complete