Skip to content

Honest labelling

wattop marks every figure that is an estimate, and never shows a zero where it has no data.

  • Claude context-fill is an estimate (dashed bar edge); Codex’s is exact from rate_limits (solid edge).
  • Costs are estimates from the pricing table and ignore subscription plans (Claude Pro/Max, ChatGPT/Codex) entirely.
  • An unpriced model renders $—, never $0.00. Those mean different things.
  • Per-session GPU is measured as ms/sec; the derived percent is a rescale and never the default sort key.
  • Bandwidth renders — only where no source exists; a channel that resolves and reads zero renders 0.0. On this chip no DRAM byte counter resolves at all, so DRAM shows one power-derived total, marked as an estimate (Total ~14.3 GB/s), with no read/write split.
  • The temperature row shows the three semantic sensors (CPU, GPU, SOC) and omits any that did not resolve, rather than every raw SMC key the chip exposes.
  • $/hr counts only spend wattop watched happen. Cost already on disk when it starts is baselined, so a fresh launch reads $0.00/hr rather than extrapolating hours of history into a rate.
  • Token rates are 60-second transcript averages, not instantaneous model generation speed. Unknown usage is —; observed inactivity is 0.0.

“This chip” is the M5 Max wattop has been tested on. wattop doctor shows which channels resolve on yours.

See limitations for the full list with evidence, and the manual QA checklist this release was verified against.

Measured over a 75-second --json run on an M5 Max watching 12 Claude/Codex sessions with 1,293 subagents: Snapshot.self_cpu_pct settles to mean 5.19% (max 6.94%) in steady state. The first ~5 samples after startup read 95-304% while wattop catches up on existing transcripts (and, on M5-class chips, calibrates DRAM bandwidth); see limitations and docs/manual-qa.md item 11. A monitor that distorts what it measures must be accountable for its own overhead; this is that accounting.