The number on my homepage says 4,100+ commits in the trailing twelve months. I put it there in September. This week I went back and counted properly, repository by repository, and it’s already wrong.
The real number is 5,378.
That’s every commit attributed to me on the main branch of 50 repositories between November 10, 2025 and November 10, 2026. No engineering team. No contractors. One laptop, Claude Code open in more terminal windows than I’d like to admit, and a rotating cast of AI agents that all commit under my name.
I’m leaving the old number in the headline. Being out of date in the right direction is a nice problem to have.
What the Log Actually Shows
A commit count on its own is a vanity metric. So I pulled the whole log apart to see what’s underneath it.
The curve matters more than the total. January had 7 commits. October alone had 1,625, close to a third of the entire year. Nothing about my talent changed between those two months. What changed was how many agents I could keep pointed at real work at the same time, and how well I learned to tell them what “done” looks like.
That’s the job now. I don’t type most of the code. I decide what gets built, I write the rules, I read the diffs, and I own whatever happens when they’re wrong. Thirty years of writing software still matters, mostly because it lets me spot the thing that looks right and isn’t.
What Broke at 3 a.m.
A quarter of your commits landing between midnight and 5 a.m. sounds like a sleep problem. Some of it is. A lot of it is agents I leave running overnight on review branches while I’m out cold. Either way, the hour tells you something. Nobody is watching in real time, so the system has to be honest on its own.
It isn’t always.
Obsidian, my quant system, trades a paper account through Alpaca. On August 6, at 3:21 in the morning, I committed a fix for something that should have been caught much earlier. One layer of the strategy bought with a plain market order and relied on a loop that checked every three minutes whether a stop had been hit. Between checks, nothing protected the position. Across 48 exits, fills came in an average of 1.55% below the intended stop, and the worst came in 10.06% below it. The documented 2.5% stop was never the stop the account actually ran.
The fix put real stop orders at the broker. The next night, at 2:43 a.m., I was fixing the fix. The stops had come unhooked from the code that managed them, and all 11 open positions showed zero shares available to sell. The root cause was one small act of misplaced trust. When you modify an order at the broker, you get back a brand-new order ID, and the code threw it away. The tests passed because the fake broker in the test suite, the mock, behaved more politely than the real one. The commit message put it better than I can.
“A mock kinder than the real API tests nothing.”
No real dollars were lost, because it’s paper money. That’s exactly what the paper account is for.
It wasn’t the only one. In September the research pipeline turned out to be rejecting hypotheses for failing a cost test that had never run; an empty result was being read as a failure. It was the identical bug we’d fixed a week earlier for a different check, sitting one line below that fix. On August 10, a research sweep across the full stock universe ate the server’s memory and repeatedly knocked the public dashboard offline. And on September 28, one AI session ran git reset --hard to tidy up a stale branch and wiped another session’s uncommitted work. Gone, with no way to recover it. A near miss with the exact same command had been written up three weeks earlier, and it happened anyway.
None of these are exotic. Every software team ships bugs like them. The difference is that a team has somebody in the next chair who asks, “Wait, what does that call actually return?” I don’t. So every incident becomes a written rule that the next agent reads before it touches anything.
What I Still Won’t Let a Model Touch
Those rule files are the real output of this year. Every repository has one, and nearly every line in them exists because something broke or came close. A few of the rules are absolute.
The research loop can reject an idea. It can never promote one. Obsidian’s autonomous research can kill hypotheses all day long, but moving one toward the live strategy takes a human, and the files that control trading are fingerprinted so that any run finding them changed simply stops. I wrote about why in The Discipline of the Pre-Registered Bet. The short version: a machine allowed to approve its own ideas will eventually approve a bad one with total confidence.
Production is mine. Agents can build, test and open drafts all night. Anything that touches the production environment, DNS or the database waits until I say yes. The overnight agents commit to review branches and are told in plain language never to push, merge or deploy.
Secrets stay invisible. No agent reads an environment file or prints a credential. Not once, not for debugging, not because it would be faster.
Anything that speaks to a person on my behalf waits for me. Outreach, changes to live investor records, signing up for a new paid service: an agent can prepare all of it, and none of it goes out on its own.
And then there’s the rule I’m least proud of needing. The most repeated correction in my entire setup isn’t about money or security. It’s font size. My own rule file records that I’ve corrected text size and color more than thirty times. These agents will rework a trading engine at 3 a.m. without blinking and then ship body copy you need reading glasses for. So the minimum size is now written into every project before the first line of code.
The Bottleneck Moved
Typing was never the hard part of software. It was the slow part, and the slow part set the pace. Now code is cheap and fast, and the pace is set by judgment: what to build, what “done” means, which outputs to distrust, and which decisions never leave a human’s hands.
That’s why “no engineering team” is less of a brag than it sounds. Agents don’t replace engineering discipline. They make the lack of it more expensive, faster. Run five agents without rules and you get five times the commits and five times the 3 a.m. surprises.
The engineering team didn’t disappear. It turned into a stack of rule files, a test suite that has to be meaner than the real world, and one person who reads the diffs.
- Commit figures come from the GitHub history of my own repositories (most are private), counted on November 10, 2026: commits on each repository’s default branch dated November 10, 2025 through November 10, 2026 and attributed to me. AI co-authorship is counted from “Co-Authored-By” lines in commit messages; hours are converted to U.S. Eastern time.
- Incident details (dates, the 48-exit slippage measurement, the stop-order and cost-check bugs, the memory outage and the lost working tree) come from the commit messages and incident notes in those repositories.
- Obsidian trades a paper account, not live capital. Its performance page is public.
The largest codebase I worked in this year is DEALITHIC, the operating infrastructure for private capital formation. Shape the company, build the raise, match it across 93,000+ funds, family offices and angels, and run it afterwards with an AI business partner. And if you want to watch the quant side work in public, Obsidian Quant publishes its paper account.