Utsav Khairnar

“There are no random acts… We are all connected… You can no more separate one life from another than you can separate a breeze from the wind…”

— Mitch Albom, The Five People You Meet in Heaven

Work

AlmaJune 2026 – present

I build multi-agent harnesses for pure computer use: agents that do real jobs in Blender, AutoCAD and the like, cheaply and reliably. It’s my first close look at how a startup works, next to some really great people. A few things I worked on:

Memory that lasts a whole project

Fig. 1

context fixed belief state act app verify disk ledger append if proven update 1 500 120 rewind: load, not replay grows every step

One real job runs to hundreds of steps, far more than a model can hold. I built a memory that stays small: the agent works from a short picture of where things stand, keeps everything it has verified, and can go back to any point without redoing the work.

Knowing why a run failed

Fig. 2

Macs day file uploader counts, error words words, if consented store $ trace one command per shortcut failed runs one run run 4f2a file expense, 11.6 s model call step Verdictstep_failed 0 2 4 6 8 10 12 s turn 1 open app turn 2 click Send turn 3 upload file timeout

Every run leaves a trace of each step and model call, with a plain reason when it stops. One command opens any run, from any machine, at the step that broke. What people say stays on their Mac unless they opt in.

along the way...

  • took ownership of 14 automated workflows, like saving or visualising content with a single trigger word.
  • designed robust CLIs for various apps for v0 of the agent.
  • built demos to turn the tech into a product.
  • replaced the agent’s 72k-character planner with a one-pass classifier over 27 tools; tasks went from 33 s to 19 s and accuracy from 94% to 97%.
  • shipped the command-line version of the beta.

Reliance IndustriesDec 2025 – Mar 2026

  • Distributed systemsImproved the document-parsing microservice behind the letter-of-credit tool that business operations runs on: each document now takes 23 s instead of 72 s, over 3,000+ documents a day for 230 sales executives.
  • ML systemsTrained a model that forecasts salt production yield across six regions, 27% more accurate than the old baseline.

BrydgeworkApr – May 2026

Freelance. Co-built a donation platform for 4,000 monthly users and ran its deployment.

Projects

qwendooma model as a computer

  • The real Doom, running inside a language model. Nothing is trained: the weights are set by hand so that every token the model writes is one step of a small computer.
  • There’s no OS and no disk. The game is written into the model’s memory once, and from then on the model runs every instruction itself.
  • Doom needs megabytes and the machine had 32 KB, so I grew its memory to 12 MB: the model went from 11 layers to 328.
  • At first the first frame was 9 days away. Skipping the parts of the model that provably can’t change the next token made it 47× faster, with every token still matching a reference CPU.
  • It works: the model booted Doom and drew its first 41 frames, over 76 million tokens, each one pixel-for-pixel what the real machine draws.

Fig. 4The model is the machine

the model its memory holds the game Doom code + map written in once, before the first token each token is one CPU step ~3,700 a second token out back in 328 layers, nothing trained
Doom goes into the model’s memory once. After that, each token the model writes is fed back in, and each one is a step of the game.

bytesizedtiny programs

  • A real language model, SmolLM2-135M, run by a C program of 2,946 bytes: small enough to fit in one QR code.
  • It reads the original model files as they are, and writes exactly the same words as the official Hugging Face code, token for token.
  • It started as 67,976 bytes of plain C. Eighteen small cuts, each one checked before the next, made it 23× smaller.
  • Scan the QR code, make it runnable, and it writes code.

Fig. 5Small enough for a QR code

64 KB 16 KB 4 KB QR limit plain C, 67,976 bytes no libc unpacks itself 2,946 bytes the whole program
The program’s size after each change. The last one lands 7 bytes under what a QR code can hold.

carmenGPU kernels

  • Claude writes Metal kernels for Apple Silicon and carmen trusts none of them. Each is checked against a float64 answer key on hundreds of inputs, some the model never sees, then timed against MLX with error bars.
  • The judge is tested too: I planted 75 realistic bugs and it caught all 75, where the one-input check most benchmarks use caught 40. It also caught two of my own false speedups.
  • Alone, the kernels beat MLX by up to 1.82×, wherever MLX runs several small kernels that could be one. Fused into Qwen 2.5 0.5B, they make decode 3% faster with identical output.
  • Bigger models taught me the real limit: from 3B up, MLX already decodes at 97% of memory bandwidth. What helps is reading fewer bytes per token, so speculative decoding made Qwen 3B 1.48× faster at an 8k prompt.

Fig. 6Seven gates, one secret

Carmy the LLM static compile no-tolerance visible battery fresh fuzz hidden draw timing the judge real model never shown fail: where and why winner Qwen 0.5B 8 kernels → 2 decode 1.02× 75 planted bugs one-shape check 35 slip through carmen’s judge all 75 caught
The model writes kernels but never grades them. Failures go back with where and why; the hidden draw is never shown to it.

tokenplocal inference

  • Tells you which local LLMs your machine can run, at what quant and how fast, before you download a single gigabyte.
  • Fit is weights + KV cache against usable memory; speed is memory bandwidth ÷ bytes read per token. Both recalibrate from your real runs.
  • Then it downloads, loads and chats with the pick on ollama, llama.cpp or MLX, and serves it on an OpenAI-compatible API.
  • One Rust binary for macOS and Linux: brew install utsav1033/tap/tokenpati.

Fig. 7What fits, and how fast

Apple M4 16 GiB unified · 4-bit · 8k context 16 GiB usable 12 Qwen3 8B 5.8 GiB 18 tok/s runs fast Qwen3 14B 9.7 GiB 10 tok/s runs Mistral Small 24B 15.0 GiB too big never downloads weights KV cache speed ≈ bandwidth ÷ bytes
tokenp’s own maths on a 16 GiB M4. The 24B model needs 15 GiB, crosses the usable line, and is never downloaded.

FlowGapvoice agents

  • A voice agent can only handle what someone wrote a node for.
  • FlowGap reads its call transcripts and finds what callers actually wanted.
  • It drafts the nodes the flow is missing.
  • In 298 test calls, 49% asked for something the flow couldn’t handle.

Fig. 8Where calls leak

298 calls, embedded declared flow no node 13 calls Classify intent Book appointment Reschedule / cancel Insurance / TPA Billing & payment Clinic info Prescription refill Lab reports drafted node
Intents clustered from 298 calls, matched to the flow’s nodes. The cluster with no match becomes a drafted node.

Open source

Smaller things

Writing

All writing →

Publications

Education

Reading