All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.2.0 (2026-07-18)
- add open source release plan and config (61c9449)
- optimize loaders with memory-mapped SQLite and parallel workers, add build.sh automation, and integrate release-please (bdf5b2d)
- update author name in readme (19e2c54)
build.shbuild automation script — versatile build script supporting--release(-ldflags="-s -w" -trimpath),--dev, and--upxmodes, cross-compilation (--targetand--all), and detailed--helpdocumentation explaining build trade-offs and binary sizes.--verbose/-vdiagnostic flag — outputs non-fatal tool loading failures, missing databases, and parsing warnings directly toos.Stderr.thermal upgradecommand — self-upgrade by checking GitHub Releases, downloading the matching binary for your OS/arch, and atomically replacing the running executable.thermal versioncommand — prints version, commit hash, and build date (injected via ldflags at build time).internal/versionpackage — build-time version embedding via-ldflags.- Token Warriors / Activity Hunters split — the leaderboard now separates tools with real token consumption data from tools that only track activity (messages, steps). Tools are auto-categorized based on whether token data is available.
- Cost column in the leaderboard for tools that track cost (OpenCode, MiMoCode, codewhale). Sub-cent formatting shows costs like
$0.0032. - Devin loader — extracts real token metrics from
message_nodes.metadata.metrics(input, output, cache, reasoning tokens), session duration fromsessionstable, and engagement fromprompt_history. Devin moved from Activity Hunters to Token Warriors. - Codex loader rewrite — reads
state_5.sqlite(threads.tokens_used,model,source,reasoning_effort,agent_role, session duration) as the primary source, supplements with rollout JSONL for the input/output/reasoning/cache token breakdown. Codex moved from Activity Hunters to Token Warriors. - codewhale loader rewrite — extracts
metadata.total_tokens,metadata.cost.session_cost_usd,metadata.model,metadata.mode, andmetadata.cumulative_turn_secsfrom session JSON files. codewhale moved from Activity Hunters to Token Warriors. - OpenCode loader rewrite — leverages pre-aggregated
session.tokens_*columns,cost,agent, andsummary_additions/deletions/filesfor faster and more comprehensive data extraction. - MiMoCode loader — aggregates from
message.data.tokensand surfacessession.summary_additions/deletions/filesand agent distribution. - Agy loader rewrite — reads
overview.txtfrom all brain sessions (was only readingtranscript.jsonlfrom 1 of 14 sessions). Now surfaces 304 steps across 14 sessions instead of 57 steps from 1 session. Extracts model info fromtranscript.jsonlUSER_SETTINGS_CHANGE events. - Session duration tracking —
LongestSessionMsfield added to Summary, surfaced in dashboard for all tools that have session timestamps. - Model breakdown —
ModelBreakdownfield shows which models were used per tool (e.g., Codex: gpt-5.4-mini:6, gpt-5.4:1). - Agent/source breakdown —
AgentBreakdownfield shows source distribution (e.g., Codex: cli:7, vscode:3, exec:1). - Lines added/deleted and files touched —
LinesAdded,LinesDeleted,FilesTouchedfields added to Summary for tools that track code diffs (OpenCode, MiMoCode). - Progress bar — new
internal/render/progress.gofor loading indicator, hardened withatomic.Boolandsync.Oncefor thread safety. - Session cache —
internal/loaders/cache.gofor caching loader results. - GitHub Actions release workflow and GoReleaser config for cross-platform binary builds with version injection.
- Devin SQLite database optimization — added incremental delta scanning (
row_id > c.MaxRowID), memory-mapped I/O (PRAGMA mmap_size), and byte-string pre-filtering (chat_message LIKE '%"assistant"%'), reducing query times on large (7GB+) databases from ~11s down to< 2ms. - SQLite memory-mapped I/O across all loaders —
LoadOpenCodeDataandLoadMiMoCodeDatabenefit fromPRAGMA cache_size = -64000andPRAGMA mmap_size = 30GBalongside raw string pre-filters. - Parallel multi-worker loaders —
internal/loaders/agy.go,commandcode.go, andcodex.gouse bounded parallel worker pools (limit of 8 concurrent workers) to scan multi-file directories and JSONL rollouts simultaneously. - Binary size reduction — configured
-trimpathand-ldflags="-s -w"in.goreleaser.ymlandbuild.shto strip DWARF symbol tables and host filepaths, reducing release binaries from ~15MB to ~9.8MB (35% reduction).
- Leaderboard format — now split into two sections (Token Warriors, Activity Hunters) with a Cost column. Old format was a single flat list.
- Tool registry architecture (
DataSubdir) — refactored tool registry path resolution (internal/loaders/registry.go) to use cleanDataSubdirproperty mappings instead of hardcoded switch cases. - README — updated supported tools table, leaderboard example, build instructions (
build.sh), and How It Works section to reflect the new data sources, metrics, and optimizations. .goreleaser.yml— added-trimpathand ldflags (-s -w) to inject version, commit, and date into the binary while minimizing size.
- Daylight Saving Time (DST) streak accuracy — replaced 24-hour time subtraction (
24*time.Hour) in streak logic (internal/thermal/streak.go) with calendar date arithmetic (AddDate(0, 0, 1)) to guarantee accuracy during spring-forward (23h) and fall-back (25h) transitions. Ensured strictly ascending quartile thresholds. - Self-upgrader network and decompression guards — hardened
thermal upgrade(cmd/thermal/upgrade.go) with package-wide 30-second HTTP timeouts, context propagation across requests, exact OS/arch asset checking, andio.LimitReader(tr, 250*1024*1024)decompression limits against disk starvation attacks. - Codex token over-counting (260x) — the old parser summed ALL cumulative
total_token_usagevalues from everytoken_countevent in every rollout file, producing 11.6B instead of the correct 43.9M. The new loader usesstate_5.sqliteas the source of truth and only reads the LASTtoken_countevent per rollout file for the breakdown. - command-code session inflation — the old glob
*.jsonlmatched 115 files (54 sessions + 54 checkpoints + 7 hooks-audit), inflating counts to 61 sessions and 6,303 messages. Now correctly filters to 54 sessions and 5,614 messages. - Agy session under-counting — the old loader only read
transcript.jsonl(1 of 14 sessions = 57 steps). Now readsoverview.txtfrom all 14 sessions (304 steps). - SQLite NULL handling — Codex
state_5.sqlitehas NULL values inmodel,reasoning_effort, andagent_rolecolumns. Switched tosql.NullStringto avoid scan errors.
v0.1.0 - 2026-06-12
- Initial open source release.
- GitHub-style contribution heatmap for AI coding tools: MiMoCode, OpenCode, Codex, Agy, command-code, codewhale.
- Leaderboard mode (
thermal) showing all installed tools ranked by activity. - Per-tool heatmap mode (
thermal --tool <name>). - JSON output (
thermal --json). - Configurable weeks range (
thermal --weeks 26). - Auto-detect mode (
thermal --tool auto). - MIT license.