Developer analytics
AtoAxis turns editor heartbeats into total time, daily averages and breakdowns by project, language, editor, operating system and branch. It also reports keystrokes, characters and AI-attributed lines.
Metrics available
Time
- Total time for today, 7 days, 30 days or a custom range
- Daily average, active days and best day
- Today’s running total and duration blocks
Breakdowns
- Project, programming language, editor, operating system and branch
Activity volume
- Keystrokes, characters added/deleted, active days and raw heartbeat counts
AI attribution
- AI lines by agent, AI heartbeat share and daily AI versus human series
Ranges and what counts as a day
Every metric is asked for over a range. Four named ranges exist alongside an explicit start and end date, and a day is a calendar day in the timezone the client sends, falling back to UTC when it sends none, so a session that runs past midnight lands where you expect it.
- today, last_7_days, last_30_days and all_time
- An explicit start and end date for anything else
- All time is bounded by your first recorded heartbeat, not by a retention window
- Ranges apply to breakdowns and daily series alike, so totals and charts always agree
How the numbers are produced
Heartbeats are rolled into daily aggregates in ClickHouse. Consecutive heartbeats form duration blocks; a long gap ends one and idle gaps are excluded.
Why the total is lower than wall-clock time
A heartbeat is produced by an edit, a save or a file switch. Time spent reading, in a meeting or away from the keyboard produces none, so the gap closes the current block instead of extending it. The number is time spent changing code, which is the only quantity the editor can observe honestly.
Per-project analytics
Every metric above also exists scoped to a single project, which is where most questions actually get answered: not how long you coded, but how long that project took.
- A daily time series for one project across the selected range
- The files touched inside the project, with their own totals
- The AI versus human split for that project alone
- Regex project rules and manual merges, so two checkouts of one repository stop counting as two projects
Attribution and coverage
Line changes resolve to one of three classes, and coverage is reported as a percentage rather than being hidden. A metric that cannot be established is null with the reason attached; it is never rendered as a confident zero.
- AI: lines a hook or client explicitly attributed to a named agent
- Human: keystrokes and characters the editor observed you type
- Unattributed: changes that arrived without proof of either, kept separate rather than guessed
Numbers you can re-derive
Aggregates are a projection of the raw heartbeats, not the record itself, so they can be rebuilt. A rebuilt projection is published only once it reconciles, and each response carries the version it was built from.
- A day can be reprocessed from raw history without deleting anything
- A reconciliation that fails leaves the previous version readable instead of publishing a broken one
- Responses report the data version they were produced from, so a stale read is detectable
What is not measured
No productivity score, ranking or quality estimate is produced. There is no team rollup and activity outside a connected editor is not inferred.
- No single number claims to represent how productive a day was
- No comparison against other developers or accounts
- No judgement of the code itself: lines changed is a volume, not a quality signal
- Nothing is inferred from typing speed or code shape to fill a gap in attribution
Related pages
Developer analytics FAQ
- How is coding activity measured?
- Editor activity is recorded and grouped into sessions instead of inferred from commits.
- How is coding time calculated?
- Close heartbeats form a duration block and idle gaps are excluded.
- What ranges are available?
- Today, 7 days, 30 days, all time and explicit start/end dates.
- Can I see language usage?
- Yes. Each heartbeat carries a detected language and aggregate totals.
- Are keystrokes counted?
- Yes. Keystrokes and characters are aggregated by project and day.