← Back to Explore seedling

58 Keys, Then 1

The contradiction between hand-soldered input devices and single-digit approval workflows

February 2026

I type Dvorak on a split keyboard with blank keycaps. The firmware is custom QMK running on dual ATmega32U4s — four layers, fixed-point physics, a custom I2C message protocol with checksums and sequence numbers. I built a distributed Pong game across the two halves because I had spare cycles on the microcontrollers and couldn't not. Current firmware uses 73% of available flash.

Then I open Claude Code and press 1.

Approve. Approve. Approve. The entire input surface of an agentic workflow is a numbered list. My right hand does nothing. Half the keyboard — the half I soldered — is scenery.

The contradiction

There's a contradiction here that I find genuinely interesting, not just funny. I care about input. I care about the physical interface between my hands and the machine. I moved to Dvorak because the default layout was an accident of typewriter mechanics. I moved to a split board because the default form factor was an accident of manufacturing cost. I use blank keycaps because the labels were for a layout I don't use. Every choice is deliberate. Every choice is mine.

And then the workflow says: pick a number.

What happens before the number

But here's what the workflow doesn't say: what happened before the number.

Before I press 1, I've read the diff. Not the summary — the diff. I've written test specs that define what "correct" means before the agent touches a line of code. I've built a Go CLI called uroboro that captures every architectural decision into a local SQLite database so the next session has context for why the last session made the choices it did. I built another tool that reconstructs session context from git history because the expensive human judgment isn't typing — it's knowing what to type and whether what came back is right.

Last June I deleted 10,250 lines in a single commit. Everything an AI had generated over two and a half weeks of feature sprawl — a tamagotchi system, a sensei, a voice analyzer, analytics, vector search. Twelve features that did everything and nothing. I stripped it back to what it actually did, preserved the experimental branch like a specimen in a jar, and rebuilt three separate tools from the wreckage. The code died. The thinking lived.

I've written at length about the difference between rubber-stamp approval and actual human oversight. The pattern that works: Human decides what and why, automation handles how. The pattern that doesn't: Human → AI → Decision → Action. That's not assistance, that's replacement. The numbered list looks identical in both cases. The difference is invisible to anyone watching your hands.

The satire

I wrote a satire piece about this — a three-key keyboard for approval-based development. It's a product page for a keyboard that does the only thing the workflow appears to ask of you. It escalates through a Pro model and then an Ultra that routes your keypresses through a datacenter for inference, because if you're already outsourcing the code, why not outsource the keystroke.

It's a joke, but the thing underneath it isn't. The keyboard I actually built is an expression of a value: that the interface matters, that the tool should fit the hand, that defaults are worth questioning. The agentic loop doesn't disagree with that value — it just makes it irrelevant to one specific moment of programming. The approval moment. And that moment is the smallest part of the work, even though it's the most visible.

The iceberg

The 58 keys aren't for the approval. They're for everything around it — writing the specs, reading the diffs, drafting the prompts, editing the output, building the tools that make the approval mean something instead of nothing. The 1 is the tip. The keyboard is the iceberg.

I don't think this is a problem to solve. It's a tension to sit with. But it's not the tension I thought it was when I started writing this. The contradiction isn't between caring about input and having trivial input. It's between what the workflow looks like and what the workflow is. From the outside, I press 1. From the inside, the 1 is the least interesting keystroke of the day.

But it is funny that I mass-flash custom firmware onto a hand-soldered microcontroller so I can press it more comfortably.