AI coding activity tracking

AtoAxis records AI-assisted work alongside ordinary coding. Agent names and AI line counts are supplied by a hook or client and aggregated per agent and day; unproven activity remains Unattributed rather than being guessed as human.

Why time alone is incomplete

Elapsed editor time cannot distinguish a hand-typed function from a large accepted AI suggestion. Attribution keeps both signals visible.

How AtoAxis tracks AI work

A client posts explicit AI metadata with the heartbeat.

POST /api/v1/heartbeats.bulk
{
  "is_ai_generated": true,
  "ai_agent": "your-agent-name",
  "ai_lines_added": 42,
  "ai_lines_deleted": 3
}

The server aggregates line counts, human keystrokes, agent totals and daily series.

Supported AI tools

Bundled hooks cover Claude Code, Codex CLI and Gemini CLI. Cursor and Copilot need provider-specific adapters.

How fields are populated

  • Verified bundled hooks post an event id and provider metadata
  • Your own wrapper can post the AI fields directly
  • WakaTime imports with an AI category remain AI-attributed

AI, human and unattributed

Every line change lands in one of three classes, and the third one is the point. A tool that only has "AI" and "human" has to guess when it cannot tell, and a guess in a metric you will use to make decisions is worse than an admission.

  • AI: a hook or client named the agent that made the change
  • Human: the editor observed the keystrokes and characters
  • Unattributed: the change arrived without proof of either, and is reported as its own quantity

Unattributed is normal, not an error. Pasting from a browser, a refactor run by a tool without a hook, or a merge all produce real work that nothing can honestly attribute. Its share is visible so you can decide whether it is small enough to ignore.

Agents that edit outside the editor

A terminal agent has no editor events to hook. When Claude Code rewrites six files while VS Code is closed, an editor plugin sees nothing, so a per-user agent reads each tool’s own local transcript instead and turns new events into AI-attributed heartbeats.

  • The agent runs as a per-user service and checks active transcripts on a short interval
  • It reads local transcript files only, and sends identifiers and line counts from them
  • Work done with the editor closed is still recorded, with the same attribution
  • A saved cursor tracks what has been read, so restarting it does not re-send events

Turning it on

The VS Code setup flow detects which agents are installed and registers hooks for them. It never edits another tool’s configuration without asking first.

VS Code
Command Palette: AtoAxis: Show AI Tracking Status
Command Palette: AtoAxis: Set Up AI Tracking
Command Palette: AtoAxis: Repair AI Integrations

The same state is readable, and the same work is doable, from the terminal.

Terminal
wakaclock-cli ai status              # what each agent looks like right now
wakaclock-cli ai sync --dry-run      # parse without sending or advancing anything
wakaclock-cli agent status           # is the always-on transcript service running

AI metrics and coverage

Token usage and estimated cost are not invented. They appear only when provider-reported tokens and a versioned effective price are available; subscription activity without authoritative pricing is null with coverage metadata.

What coverage means here

  • Token totals separate input, output and cache reads and writes when the provider reports them
  • Estimated spend needs both the usage and a price that was in effect at the time
  • Each of attribution, tokens and cost carries its own coverage percentage
  • A missing value is null with its coverage, never a zero that reads like a measurement

What is recorded

  • AI flag, agent name and AI lines added/deleted
  • Human keystrokes and character counts
  • Project, branch, language, file path and timestamps

What is never recorded

  • Prompts or model responses
  • Source file contents, patches or transcripts

Privacy

AI attribution uses the same metadata-only pipeline as ordinary heartbeats. No conversation body is stored.

Related pages

AI tracking FAQ

What is AI coding activity tracking?
It separates AI-attributed lines from duration and human keystrokes using client-supplied metadata.
Does AtoAxis support Claude Code, Codex and Gemini?
Bundled hooks support all three; Cursor and Copilot require adapters.
Are prompts or responses stored?
No. Only identifiers and counts are accepted.
Are token and cost metrics available?
Only with provider-reported usage and a known effective price; otherwise they are unknown.
What happens to unproven activity?
It is classified as Unattributed rather than guessed as Human.
Can I import WakaTime AI activity?
Yes. Heartbeats with an AI category keep their attribution.