Portrait of Michael Limberger

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 clinic policy and staff chat.

🐸

TOAD

A little language where control flow is symbols, not English words.

⛵

Skiff

My local AI sysops and Perl coding harness.

📡

Remote Commander

Named SSH hops so I am not typing raw ssh forever.

🦊

clibrowse

Drive a real Firefox from the command line.

🔊

Bosun

Send short text over speakers and a mic (no network).

🧠

OracleProxy

Same idea as RAG Proxy, but on my own machines at home.

🎙️

dictation-linux

Push-to-talk dictation into whatever window is focused.

⚔️

Battle-Grounds

A 4v4 team deathmatch game in Godot.

🔮 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