Skip to content
Subscribe
All writing
LedgerMeasurementAI agentsMethod

How I Count the Ledger

Where every number on my homepage ledger comes from, what I deduplicate, what I leave out on purpose, and the limits I know about.

My homepage has a ledger: code changes this year, updates shipped, AI agents, models, evals. If you're going to trust any of it, you should be able to see how I count. So here is the method, including the parts that make the numbers smaller.

Code changes: counted where the work actually lives

The big number is code changes in 2026. As of November 1 it is 23,722.

I count it from git history on my own machine. A script walks every repository under my projects folder, plus the separate working copies I keep for parallel work, and reads the history of every branch since January 1. Merges are skipped. Each change is counted once by its fingerprint, so the same change sitting in two copies of a repository is still one change. On November 1 that covered 98 repositories.

Here is the part of the script that does the deduplication:

// One entry per repository: two working copies of the same repository
// share one git directory, so they collapse here.
const common = git(dir, ["rev-parse", "--path-format=absolute", "--git-common-dir"]).trim();
if (common && !repos.has(common)) repos.set(common, dir);

// Every branch, no merges, this year only.
git(dir, ["log", "--all", "--no-merges", `--since=${year}-01-01`, ...]);

// A change already seen in another repository or branch is skipped.
if (seen.has(hash)) continue;

Why not just ask GitHub? Because a lot of my work never leaves the machine as a merged change on a default branch. When I checked October, GitHub's own search found 2,046 changes for my organization. The local count for the same month was 7,355. Counting from GitHub would have been easier and wrong.

Two caveats I want to be upfront about:

  • February is a partial month. That's when I moved my day-to-day building onto AI agents, partway through the month. So I never compare against February. October was about five times March, which is the first full month.
  • A code change is activity, not value. Some changes are one line, some are a whole feature. I show the count because it's the most honest single measure of how much I build, not because more is automatically better.

"About half" written with AI

When an AI model writes a change with me, the change carries a credit line naming the model. About 47 percent of this year's changes carry one, so the ledger says "about half." That undercounts: plenty of work I do with AI help never gets the credit line.

Updates shipped and projects

Updates shipped live is the number of changes merged into live software in my GitHub organization since January 1: 3,636 on November 1. Software projects is the number of repositories in that organization: 109.

AI agents: why I say 500+, not 1,000

This is the number I was most tempted to round up, so I had it recounted from scratch on November 1.

An agent counts if it has its own role and its own instructions, and something actually runs it: the app, a schedule, or me. By that rule there are 535. The strict reading, which counts only agents wired into an app or a schedule, gives 458. The generous one, which splits prompts that do two jobs, gives 609. So the ledger says 500+ AI agents.

Jobs that run on their own schedule are a different thing, so I count them separately: 173 scheduled routes in my web apps, 19 scheduled GitHub workflows, 10 scheduled jobs on my machine and 7 inside databases. Agents plus those automations come to 744, which is where 700+ AI agents and automations comes from.

What I left out on purpose:

  • Tools an AI can call. One of my apps exposes about 230 of them. They are tools, not agents.
  • Plain code. An earlier count included things like payment handlers and login code. Those are not agents either.
  • Copies. The same agent in two working copies of a project counts once.

You could get past 1,000 by counting those things. I don't.

Models, skills, evals and checks

  • 100+ AI models from 14 companies. Every distinct model I have built with, in current and retired projects. I name models by family, so Sora counts under OpenAI rather than as its own company.
  • 150+ skills. 165 unique skill names across my machine and projects. Many are installed rather than written by me, so the ledger says skills I use and build.
  • 600+ evals. About 650 eval files across 32 projects: tests that grade AI output before it ships.
  • 1,000+ automated checks and release gates. About 1,700 files that replay, score or gate a change before it goes live, rounded down hard.

How often it updates

Not continuously, so the site never says "live." The ledger shows the date of the last refresh. The code-change count needs my local history, so I run it myself. If I wire a GitHub token into the site, the two GitHub numbers will refresh daily on their own, and they can only go up from the last count, never down to a failed fetch.

If any of these numbers ever stops being true, the ledger is wrong, not the method. Tell me and I'll fix it.

Get the next build note.

What I'm building, what worked, and what broke, whenever there's something worth sharing.

Subscribe to my newsletter

Keep up with the work.

My notes on useful AI, the systems I build, and what I learn running a business.