TimeSplitter
One command turns a week of AI-assisted work into an honest timesheet.
The question I was chasing
How long did that actually take? When I build with Claude and Codex all day, the honest answer is that I do not know.
The work is real but it scatters. Some of it is commits. Some of it is an hour steering an agent through a refactor that lands as one line of git history. Some of it is a coding session, a pull request, a ticket moving across a board. I bill for this work and I need a number I can stand behind. A stopwatch was never going to produce one: nobody stops a timer every time they switch between thinking, prompting and reviewing. So the hours went quietly missing.
The constraints
Whatever it read had to already exist. I was not going to change how I work to feed a tool, and the evidence is source code and coding-agent transcripts, so it had to stay on my machine.
No two projects use the same set of tools. A version that needed git, Linear, GitHub and two agent runtimes would work on one project and nothing else.
The number ends up on an invoice, so a human has to be able to check it. An estimate nobody can audit is worse than no estimate.
The decisions that mattered
Reconstruct the day, do not measure it. Every commit, session, pull request and ticket already carries a timestamp. The trail exists; nobody reads it back. TimeSplitter treats each event as a point, groups the points that cluster, and calls that a work block.
Call it an estimate and say so. A reconstruction can only see work that left a timestamp, so thinking time with the laptop shut is invisible to it. That is the trade I took: a number with a method I can explain, over a precise-looking one I cannot defend.
Skip missing sources rather than demand them. It reads git across every clone and worktree, Claude Code and Codex sessions, GitHub pull requests and Linear activity, and quietly drops whatever is not there. A tool that refuses to run without your whole stack does not get run.
Three outputs, and the readable one is the source of truth. A markdown worklog you can check line by line, an interactive dashboard for the shape of the week, and a CSV that drops into whatever you invoice from.
Built with: Claude Code skills, git, GitHub CLI, Linear, shadcn UI
Where it landed
It runs as one command, /timesplitter, and it is free and open source on GitHub. The first pass rebuilds a whole project in minutes; every run after that catches up in seconds, so the record stays current without being rebuilt from scratch. Everything stays on the machine it runs on. I built it for my own invoices, and the worklog is what I actually read.
Part of the Rolling Waves work archive.