- Information Systems @ UMN
- Semester 5 · 2024 cohort
- Open to internships
ONE LAYERDEEPER.
I build the plumbing under AI products: LLM routing benchmarks, agent-to-agent protocols, and telematics decoded from raw bytes.
How I work
I frame each problem, work through the design with AI as a research partner, then direct the implementation and validate every result against real behavior before shipping.
301 km on the screen.
J5 EV Dashboard, the self-hosted app I built for my own car. Captured 15 September 2026.

- b29–3001 2Duint16, big-endian301 km
- b2841uint865 %
The range, 301 km, is bytes 29 and 30: 01 2D. The battery, 65 percent, is byte 28: 41.
Underneath, 73 bytes with no documentation.
CarLinko's cloud sends the car's whole state as one packed blob. I mapped it by driving the car and watching which bytes moved.
Charge costs match my real PLN Mobile receipts to 99.6–99.9%.
The same offsets held on four CarLinko cars in four countries. 21 stars on GitHub.
Only the bytes behind this screen are printed. The other 70 were not captured.
System architecture case study
Every agent,every tool call,in plain sight.
A multi-agent office built on the open-source 9router codebase. 157 of its 576 commits are mine: the A2A protocol layer, the office simulation and delegation model, and the agent memory and routing layer.

Agents sit at desks in a pixel-art office and delegate real work to each other: files, shell commands, web searches. Multi-agent behaviour is usually read out of logs. Putting delegation in a room makes it watchable.
- @mention routing
- Org-chart context in every prompt
- Persistent memory
- Cron tasks
- Fallback across 40+ providers
Office
Routing
Agent runtime
A2A protocol
Providers
One delegation, step by step
Stages of one delegated message
A2A methods: message/send · tasks/get · tasks/cancel
- MENTIONED@Thinker in chat
- ROUTEDorg chart injected
- DELEGATED[A2A:Kevin:task]
- CALLEDmessage/send
- EXECUTEDtool-use loop
- REPLIEDown bubble in chat
- CALLED → FALLBACK · provider fails, 9router tries the next
- CALLED → CANCELED · tasks/cancel
Agent tools
Files
- write_file
- read_file
- list_dir
- grep_file
- delete_file
- generate_file
Work inside the office workspace path.
Shell
- bash
Runs inside the container, so output lands in the mounted workspace.
Web
- web_search
- fetch_url
Live information instead of training data.
Memory and time
- remember
- recall
- schedule_task
Facts persist across sessions; scheduled jobs run later on their own.
Live output
SSE output from the README's live test
→ Calling: Thinker
Thinker: (asking Kevin...)
→ Calling: Kevin
write_file({"path":"test.txt","content":"hello from kevin"})
→ File written: test.txt
read_file({"path":"test.txt"})
→ Content: "hello from kevin"
$ cat /workspaces/Office 1/test.txt
hello from kevin
LLM routing pipeline
Routing rules,not leaderboards.
Most benchmarks rank models on one global score. RouteBench profiles the models behind an OpenAI-compatible router on executed work, then tells the router which model should get which task.
Benchmark path
sample card from the README · mistral-medium-3-5 · SPECIALIST
- tests fail
- model sends files
- harness reruns
- suite green
sample card: solved 2/2 · avg 1 turn
RouteBench · self-initiated, sole author, 2026
Limits the README states up front: single-turn packs check a baseline and compare latency and injection resistance, not intelligence. Generated code runs through spawnSync with no shell in a throwaway directory, which is not a hardened sandbox.
RouteBench repository ↗Command line
Poke around.Type help.
Try projects, j5, agents or upstream. Everything it prints comes from my CV and public repositories.
A command line for this page. Output comes from my CV and public repositories, not a live server.
Discovery