Am I crazy?
There is a joke about people who get backyard chickens to save money on eggs.
They don't. The coop costs more than a decade of cartons. Then there is feed, fencing, a heat lamp, the night a raccoon wins, and the rooster who attacks you every morning even though you are the one bringing breakfast and are clearly not a threat. The eggs are good. They are not cheaper. The whole thing only makes sense if you wanted chickens anyway — if you like the work, the smell, the routine, the small win of something you built making something you can hold.
Running a coding agent on your own GPUs is that joke for people who already live in cloud LLM land all day.
You already know the cloud product: point it at a repo, ask a loose question, watch it read files, edit code, run commands. I wanted that same loop with my code never leaving the house. So I put four RTX 3090s in a desktop box — 96 GB of video memory, roughly frontier-model sized if you are counting VRAM — and spent months trying to make "local Cursor" real.
Spoiler, and the only thesis of this post: 96 GB ≈ a frontier model. That still isn't Cursor. Local is more work for less gain. I still think it was worth it, because I wanted the chickens.
The pitch in my head vs what showed up
In my head: buy enough GPU memory, run a strong coder model, wrap it in an open agent UI, stop uploading repos. Done.
What showed up: a second full-time hobby sitting on top of the first.
The hardware was the fun kind of hard. Normal Ryzen board, 64 GB of DDR4 (DDR5 prices are nuts, and for this job system RAM mostly just keeps the host alive), four mutt 3090s hanging off a split PCIe slot, a car radiator in the garage, separate power supplies so spikes don't trip the wall. I measured how fast the cards can shout at each other. The skinny links are enough for how I use it. That part worked.
The agent stack was the expensive eggs. Three separate messes.
First, memory. You have to shoehorn a big model across four cards without it falling over. vLLM has a ridiculous number of switches for that — how you split the model, how much of each card you dare use, how long a chat you allow, which "go faster" options you leave on. Leave the wrong ones on and the server acts like you have free space until you ask a real question, then it dies mid-answer. Most of week one was not coding. It was dialing those knobs until the thing would just stay up.
Second, tools. A coding agent is useless if it cannot actually search the repo, open a file, or run a command. That needs a handshake the model and the UI both understand. I had the wrong one. Logs looked healthy. Nothing ran. The model still had to say something, so it predicted into the hole: fake folder trees, imaginary ls output, a fluent walkthrough of code that was not there.
Third, ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber ber…. but no, really. Random gibberish loops. Not a clever fake repo — just the sampler falling down a well. Same junk forever until you kill the job. No tools involved. The run just goes feral.
96 GB does not buy that product loop for free. Cloud Cursor is retrieval, tools, defaults, polish, someone else's on-call. Locally you own all of it. Eventually I got a narrow daily driver — coder model, local UI, search that actually runs, a nudge to run the build before claiming green. Fine for some traces and small honest edits. Still weaker than Cursor most days.
Most mornings I still buy eggs at the store. Some mornings the backyard ones are exactly what I wanted.
So why bother
If this sounds like regret, it is not.
I liked the split-slot puzzle. I liked spreading power across supplies. I liked moving the radiator outside and teaching a Raspberry Pi to run the loop fan because a temperature probe lied. I liked soldering the agent stack together the same way — flags, handshakes, little benchmarks so I could learn what works and what doesn't.
Nobody keeps backyard chickens because the spreadsheet says so. They keep chickens because they like chickens.
If you want Cursor, but free, this weekend: don't. If you measure success by never thinking about the stack: don't. If you hate chickens: don't.
If you want private repo work, you will babysit configs, and you would build the coop even when grocery eggs stay cheaper forever — then yeah. The cloud is the grocery store. Local is the coop where you own the data, the failure modes, and the raccoons.
I am crazy in the sense that I wanted the coop.