← back to blog

ai, engineering, tools

box box

no laptop. no terminal. people have email. i have agent mail.

07:14
sunday 26 july
reviewboxbox · clauseo-v27h
overnight: the indexer stops lying
tests green. diff attached. waiting on a merge.
questionboxbox · boxbox-web41m
mid-feature: two read stamps disagree
device A says read, device B says unread. who wins?
permissionboxbox · clauseo-v212m
the migration is wedged
$ bunx prisma migrate reset --force
faultboxbox · cmx3h
the pty test hangs on darwin
three digs, no root cause. parking it with receipts.
07:14▮▮▮
needs you · 4main ──quiet
reviewclauseo-v27h
overnight: the indexer stops lying
+1,204 −118 · 6 commits
merge
later
questionboxbox-web41m
device A says read, device B says unread. who wins?
MAX(readAt) wins
unread wins, always
permission12m
$ bunx prisma migrate reset --force
faultcmx3h
the pty test hangs on darwin
07:14 · four calls · main moved twice
box box
no laptop. no terminal. people have email. i have agent mail.
fable-5 · claude-opus-5 · claude-sonnet-5 · gemini-3.6-flash · — ?
tap to skip ▸

my morning starts the way most people's do. i wake up, reach for my phone, and check my mail before my brain has fully booted.

except my mail is from agents.

this morning's stack: an agent finished a branch on clauseo overnight, tests green, diff attached, waiting on a merge. another one, mid-feature, hit an edge case it didn't want to guess on, so it asked. a third wanted permission to run something destructive. a fourth hit a wall and said so. i went through all of it lying down, half asleep, one thumb. approve, reply, approve, snooze. main moved twice before i was out of bed.

no laptop. no terminal. people have email. i have agent mail.

07:14
▮▮▮
needs you · 4main ──quiet
reviewclauseo-v2LAPTOP7h
overnight: the indexer stops lying
tests green. diff attached.
+1,204 118 · 6 commits
questionboxbox-webVM 241m
mid-feature: two read stamps disagree
device A says read, device B says unread. who wins?
permissionclauseo-v2LAPTOP12m
the migration is wedged
$ bunx prisma migrate reset --force
faultcmxLAPTOP3h
the pty test hangs on darwin
i can't prove why yet. three digs, no root cause. parking it with receipts.
not a video. this is the morning from the first paragraph. clear it with your thumb.

the numbers

that inbox adds up. in the last seven days, 233 commits landed across three repos: my coding harness, clauseo's product (the day job), and the mail app itself. that's not counting the model proxy, the search engine, or anything on my personal github.

i typed approximately none of them.

spiderman pointing at spiderman: the guy with 233 commits this week / the guy who typed zero of them

my output, measured honestly, was texts. reading, thinking, replying. the commits are what happens in between. for scale: the mail app's repo is a week old and already has 119 commits. the fleet built its own post office. and the biggest single day i've ever watched was 82 commits, twenty-three thousand lines, one day back in may. i remember that day mostly as a conversation.

the machinery

in february i forked opencode and wrote a post about it. the problem back then: models get dumber as their context window fills, so you architect around attention. fresh sessions, subagents, state on disk. that fork (codemaxxxing) is still the engine. but it stopped being a tool i open. it's a runtime now, a background service on my mac and a couple of cloud servers (one of them belongs to iris, my ai teammate. long story. she has her own sim card.), and agents work whether or not any laptop of mine is open.

everything else grew one annoyance at a time.

agents degraded mid-task, so work got split into waves, with a verifier agent checking results and retrying failures. parallel agents stepped on each other, so every agent works in its own checkout now and main stays clean. ai code was landing with no human in the loop, so review became a declared step: the agent announces it's ready, and main moves only when i tap. different models are good at different jobs, so there's a routing table instead of loyalty: fable 5 orchestrates, opus 5 does the heavy general work, sonnet 5 runs the worker laps, gemini flash is the mule that reads the boring stuff. and i had no way of knowing any of it needed me unless i went and looked, so "needs you" became a push notification. that last one became a whole app.

if you follow this industry, you recognize the list. context management. sandboxed parallel agents. review gates for ai code. model routing. agent inboxes. every line is a product category in 2026, and every line has funded companies with whole teams on it.

i have a folder.

mom can we get cursor / we have cursor at home / cursor at home: the codemaxxxing home screen, july 18

the bug was me

in may i wrote, a little smugly, that my agents did real work while i was at a friend's birthday. true. what i left out: i checked. i stood at a party with terminal panes open on my phone, watching logs scroll.

the agents had stopped needing me to do the work. i had not stopped needing to watch them do it. pull was the bug, and the bug was me.

panik kalm panik: agents do real work while i'm at a party / so i never have to watch them / i watch terminal logs at the party anyway

so, dumbest question available: when an agent needs me, what do i actually need? a screen. a way to answer. the internet. that's the entire list. the computer was habit, code just used to live there. the terminal was habit, agents happened to be born in one. the checking was habit, the tools couldn't come get me. delete every inherited accident and what's left is the actual job: read, decide, reply.

box box

so i built the mail app. it's called boxbox, after the f1 radio call. box box is what the pit wall says when the driver has to come in now.

it's a chat app. that's the honest category. every agent on every machine flows into it, and anything blocked on me (a permission, a question, a branch waiting for review) lands in one ranked inbox that follows me to whatever screen i'm holding. cards on the lock screen. approve, reject, answer, merge. the agents are on track. i'm on the pit wall. the wall doesn't drive the car. it takes the radio calls.

LAPTOP
the macbook · the desk
cmx · the pty dig
clauseo · wave 4/9
VM 1
iris's · own sim card
clauseo · statute ocr
home · fireplace mode
VM 2
always on · serves the inbox
telemetry v2
the deploy watcher
boxbox
one ranked inbox
iphone
in bed
ipad
on the couch
mac
the desk
the fleet, at rest. it never actually rests.

i called it agent mail at the top because mail is the fastest way to explain an inbox to a stranger. but the analogy bugged me for days before i worked out why. mail is where other people's priorities queue up to eat your attention, and you process it to get back to the real work. this inbox is the real work. every card is a live agent mid-flight, holding a decision only i can make. a reply doesn't file something away. a reply lands code.

the boxbox call strip: a permission, an escalated question, a week-old fault, and a review waiting on a merge
the desk, with a demo fleet. the sideways statute pdf is real life at clauseo. swipe sideways on a phone.

i built it native for iphone first. two days, fifty commits, a design doc marked law. then apple's free account physics showed up: no push notifications without a paid developer account, and builds that die every seven days. and underneath that, a deeper problem. my agents write the code, and on the web an agent gets a dev server and a live page it can drive and inspect for free. native taxes every loop. so boxbox became a web app, and the design that was law died twice in the next four days. at one point i shipped a voting page: candidate designs side by side, my taps writing straight into a spec file on the server that the agents read as the verdict. no figma, no meetings, no translation between my thumb and the build. i have picked design direction from the toilet.

the design isn't decreed anymore. it's discovered.

i text for a living

so that's the honest job description. i text. i start threads, i answer threads, i read what came back, think, and reply while three other threads run. some threads are thirty seconds. some run six hours and spawn side threads with agents i never talk to directly.

and texting doesn't care where you sit. i still love my desk. four screens, a split mechanical keyboard with loud clicky switches, still where the deep review sessions happen. but the desk is a choice now, not a requirement. most evenings i'm on the couch with something playing on the tv, answering agents between scenes, more relaxed than work has ever felt. the fastest keyboard i own turned out to be my phone, and half the time i'm not typing at all, i'm dictating. i say what i want, the words land in the thread, the agent gets to work, i go back to the show.

the i-should-buy-a-boat cat, in a robe with a newspaper: i should write some code

texting stays cheap because everything important is written down exactly once. AGENTS.md is law, every agent reads it before touching code. GOTCHAS.md is fifteen thousand words of scars, every trap documented the day it bit, so no agent makes me explain the same mistake twice. there's even a section that teaches them how to read my texts. it says things like "buddy means you were slow."

and one rule holds the whole thing up: claims without verification are worthless. tests green, build green, screenshots actually looked at, or it didn't happen. the commit log reads like incident reports because that's what commits are now, agents telling me what happened while i wasn't looking. an actual title from this week: "preparing is a claim with an expiry."

one user

user count: one.

products are off the rack by necessity, cut for the average of everyone. this is tailored. every default is a decision instead of an inheritance.

i've only ever built one way: watch someone use the thing, listen, close the gap. the loop was always tight. the only distance left in it was between the person complaining and the person shipping the fix. this time that distance is zero, because the complaint goes straight to the agent whose code it is. that's honestly most of what my boxbox threads are: complaints. i complain like a user, point like an engineer, and it's usually fixed before the episode ends.

that loop compounds fast. a week in, i already can't remember the last time i opened a terminal ui for anything except deploying boxbox itself. the thing i built to escape the terminal is the only thing i still use the terminal for. i keep noticing that and it keeps shocking me.

this week the fleet shipped telemetry on me. the commit literally reads "boxbox starts measuring itself." i want to know which parts of the system earn their place, and my own usage is the only benchmark that matters here. same loop, one level up: friction dies, the thread count goes up, the workflow changes, the next friction shows itself. the tool and the way i work are iterating on each other, and the loop never leaves the room.

i've spent my whole life building for other people. drones, a talent agency, a streetwear brand, a payments app, legal research for lawyers. this is the first time i've pointed the loop at myself. one user, fully instrumented, zero gap.

model card for rohan-5: decision-generation, cannot-be-swapped-out. context window 1 item (2 on a good day). fine-tuned on team radio and 15,000 words of scars. deprecation: never.

and under all of it, the simplest thing: i just love building. that's the whole engine. it's a little recursive and a little ridiculous that the thing i love building most right now is the thing i build everything else with. i'm okay with that.

distracted boyfriend: me, looking at building the tool, while the products the tool exists to build looks on furious

the next why

the whys aren't done, because the stack itself is now the loudest annoyance. two repos moving in lockstep that were always one system. a runtime still shaped like opencode underneath, carrying a whole web interface i've never opened and opinions i've spent five months deleting. fork tax compounds quietly. eventually this collapses into one thing you install on every machine you own and open from any screen you're holding. not a product. nothing to sell. but it's my workflow, and once the setup is one command instead of a fork plus a layer plus a runbook, of course i'll want people to try it.

this is fine: five months deleting opencode's opinions / the fork is fine

the fifth model

in february i ended that post with "the tools don't matter. the models don't matter that much either. the context does." then i spent five months on tools, so you'd think i'd have to eat the line.

no. i finally understand what the tools are for. the routing table has four models in it. there's a fifth. it's slow, it's expensive, it gets distracted, it degrades badly when its context fills with junk, and it's the only one that can't be swapped out. every card in the inbox routes to it. the entire system exists to protect that model's context window.

it's me. i'm the fifth model. and for the first time since february, my context is clean.

xkcd 2347 redraw: clauseo, boxbox, 233 commits a week, codemaxxxing, two VMs, iris, five funded product categories, all resting on one thumb, 07:14, one eye open
cat ~/.config/opencode/AGENTS.mdthe routing table · 28 lines, all law
fable-5orchestrator / judgment
design, architecture, final review, multi-hour work · xhigh on hard problems
claude-opus-5senior parallel engineer
specced parallel implementation, hard bounded debugging · medium-high
claude-sonnet-5line worker
fully-specced bounded edits, tests against defined behavior · low / medium only
gemini-3.6-flashbulk / context mule
research fan-outs, log digging, giant reads · minimal thinking
methe one that can't be swapped out
slow. expensive. gets distracted. degrades badly when its context fills with junk. routes here: every card in the inbox · one thumb, half asleep
context
clean
the first four rows are real. that file is prepended to every agent session on every machine. the entire system exists to protect the fifth one's context window.

post-credits scene

there's a dead numpad in my desk drawer. seventeen keys, bought last year, retired a few months ago when i simplified the desk. then work louder and openai shipped the codex micro: agent states on keys, push-to-talk, a dial for how hard the model thinks. it sold out. i saw it and thought, hold my beer.

because here's the thing the codex micro can't do. it watches one product on one machine, through whatever integrations it's allowed to have. i own every layer of mine: the runtime, the brain, the app, and now the firmware. most people run a matching set from someone else's roadmap: claude code plus the claude app, or codex plus the codex app plus the micro. mine is one system growing a new limb, and when the board needs an endpoint the server doesn't have, i don't file a feature request. i text an agent and it exists by dinner. vertical integration, except it's one guy and two cloud vms.

so this weekend i locked the spec: transparent caps with nothing printed on them, an led under every key, a wire straight into the fleet. every agent earns a key and a color. a permission lands, a key goes hot pink, i press it once, and code ships on a server in another city.

instead of typing, i hold a key and talk. instead of waving a cursor around hunting for the right window, i press an agent's key and the screen is already on their thread. every agent in the fleet, one physical press away.

boxbox hardware · instrument 001attract
 
 tap to skip ▸

the firmware already compiles. zero leds have lit outside a browser. when they do, that's the next post.