Mitch (@mitchcomardo) header
Mitch (@mitchcomardo) profile picture

CTO & open-source builder. AI-native engineering systems, agent workflows, and developer tools. Building in public.

Colorado
Joined June 2009
Photo by Mitch (@mitchcomardo)Photo by Mitch (@mitchcomardo)Photo by Mitch (@mitchcomardo)Photo by Mitch (@mitchcomardo)Photo by Mitch (@mitchcomardo)Photo by Mitch (@mitchcomardo)Photo by Mitch (@mitchcomardo)Photo by Mitch (@mitchcomardo)Photo by Mitch (@mitchcomardo)Photo by Mitch (@mitchcomardo)
1/ Back in June I built agent-pipeline to take a GitHub issue to a PR without me writing the code. Over the summer it turned into a CLI that kept breaking on edge cases every time an issue showed up in a different "shape" than I'd built it for.
I'm releasing agent-pipeline: a label-driven state machine that takes a GitHub issue from ready → ready-to-deploy with no human writing the code. It's built itself for the last ~380 PRs. Every feature, bug fix, and review round below went through the machine you're looking at.
1
3
520
A few people asked how jev-router (my local proxy that picks a model per turn for Claude Code and Codex) decides a turn is boring enough for a lighter model. Every route is a plain-English description that Jev classifies each new turn against, and this is the boring one as it stands now: Quick chat, formatting, simple lookups, simple tool calls and short well-scoped edits. Not for sustained judgment, long tool chains or ambiguous requests. If Jev is unsure the turn stays on the default, and every pick gets logged so I can label what should have happened.
Most turns in a coding session don't need the biggest model, but Claude Code and Codex send every turn to whatever model the session started on. So I built jev-router, a small local proxy in Rust that sits between the harness and the model providers. On each new turn it asks Jev (a classifier on OpenRouter) which model fits, based on route descriptions I write in plain English, then holds that pick for the whole tool loop so I don't throw away the prompt cache mid-turn. If Jev is slow or unsure the turn falls back to a default, and I can force a model with @route:opus when I know better. Every decision gets logged so I can label what should have happened, and I'm not trusting any savings number until I have 150 labeled turns.
1
3
165
Mitch retweeted
Had one of my bots go back through my chats with the others and flag where I kept getting frustrated. Twice it was me saying "This is all gibberish to me" or "hard to understand your word salad" about stuff relayed from my coding agent, so now they have to lead with the pick and one line of why.
1
1
280
Mitch retweeted
Since v0.0.7 every Foreman PR gets a low / medium / high risk tier pinned to the head SHA, and diff size doesn't set it. For example a PR was 3 files, +10/-4 and came out high because it touched a security-scope file, so it couldn't go ready until the PR had a walkthrough for that head saying what the checks miss.
1
283
Most turns in a coding session don't need the biggest model, but Claude Code and Codex send every turn to whatever model the session started on. So I built jev-router, a small local proxy in Rust that sits between the harness and the model providers. On each new turn it asks Jev (a classifier on OpenRouter) which model fits, based on route descriptions I write in plain English, then holds that pick for the whole tool loop so I don't throw away the prompt cache mid-turn. If Jev is slow or unsure the turn falls back to a default, and I can force a model with @route:opus when I know better. Every decision gets logged so I can label what should have happened, and I'm not trusting any savings number until I have 150 labeled turns.
7
1
4
418
We've really be focusing on cutting down CI time lately. And no, we didn't delete tests.
1
201
The last AI system I was asked to review came with zip files and status emails full of great numbers, and no way to check any of them. So the review starts with a clean environment and rerunning every test they say they ran, and I hold off on architecture opinions until the numbers reproduce, or don't. If you're paying for AI work, ask for the repo with history and one command that runs the eval.
149
Mitch retweeted
JENSEN! THATS NOT WHAT WE MEANT BY CHINESE MODELS!!!!!!!
594
8,127
699
122,748
2,673,744
I haven’t touched an excel spreadsheet, word document or PowerPoint in at least 3 months at this point.
3
202
I'd dump a long instruction on a bot and it would start acting before I'd finished clarifying what I meant. Now any long or multi-part ask gets restated back to me in 2 to 5 lines first, what it'll do and anything it's unsure of, and it only moves after I say OK. Short single-step asks skip it.
2
1
204
I used to clean up leftover Docker data and stale checkouts when a disk actually filled. Now a home lab bot proposes a cleanup list every week and I approve it on Saturdays. One approved pass freed about 50 GB on one machine, and it still changes nothing without my OK for that specific change.
1
176
Agent PRs started coming faster than I could review them line by line. So I write a spec before the model writes the code, it updates the spec if implementation changes the approach, and then I read the spec, not the diff. Same review time, different artifact.
2
129
Meta buying Conductor (the app for running a bunch of coding agents in parallel) and shutting down its cloud this month is one more reason my agent runs live on machines in my home lab and not inside any one app. Claude Code, Codex CLI and Grok Build run there and T3 Code is just the window I start and watch them from, so if a tool gets bought or dies I swap the window and the branches and history stay put.
10
1
249
I used to only check on my home lab when something felt off. Now a Grok Bot runs a health check every morning, but it keeps a baseline of what's already broken and only pings me when something is new or worse. Monday broken smart home devices jumped from 113 to 124 overnight, it traced that to one phone's app sensors all dropping in the same minute and reset the baseline as low urgency so it doesn't nag me about it every day.
1
1
270
Turns out I'd asked my bots some version of "how is the eval progressing?" about 25 times across three of them before I made it a rule. Now any job they expect to take over 15 minutes, an eval or a coding agent run, has to post an ETA when it starts and flag itself if it goes 30 minutes past it with the reason and a new ETA.
3
3
273
Big issues used to come out of Foreman as one oversized PR. IN v0.1.0 if the plan splits into two or more separable groups, it files a child issue per group in dependency order and ends the parent run, and each child gets its own plan, review & PR.
114
T3 Code adding managed policies is basically what I've been doing by hand in a rules file. My bots can start agent runs through it, but only Foreman coordinator runs get full access and everything else has to ask first. Merges never happen inside T3 at all.
Day 32/ Sorry unemployed folks, this one's not for you. T3 Code now supports managed policies, allowing it teams to configure how T3 Code operates across an organization. We've had some really awesome advocates pushing us at big companies. Doing our best to support them 🙏
139
Had one of my bots go back through my chats with the others and flag where I kept getting frustrated. Twice it was me saying "This is all gibberish to me" or "hard to understand your word salad" about stuff relayed from my coding agent, so now they have to lead with the pick and one line of why.
1
1
280
Since v0.0.7 every Foreman PR gets a low / medium / high risk tier pinned to the head SHA, and diff size doesn't set it. For example a PR was 3 files, +10/-4 and came out high because it touched a security-scope file, so it couldn't go ready until the PR had a walkthrough for that head saying what the checks miss.
1
283