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.