Morgan Lunt
3b93169856
receipts: count only work that can be checked
...
The first cut measured the agent's activity and reported it as the
developer's. Rewrites the attribution so every number is one you could
defend to someone who pushed back on it.
What a number now means:
- Projects resolve to a git root, or to the directory the work happened
in when there isn't one. Not basename(cwd), which turned a home
directory into a 49% "project" and split one repo across several rows.
- A session's spend follows the files it touched, reads included, split
across projects. Subagents share their parent's session, so their work
lands on the same project with no special case.
- Claude Code's own machinery — scratchpad, tool-results, ~/.claude, and
this report's own past output — is excluded. It was 82% of the reported
line count.
- Commits are joined against git: authored under the identity git uses in
that repo, AND touching a file Claude Code touched. The old identity
grep counted a snapshot cron's 2,209 commits and claimed the developer
committed on every active day they worked.
- Work with no project — web search, chat tools, dashboards — is named as
research rather than filed under whatever directory the shell sat in.
What's gone, and why:
- The activity/spend breakdown. A turn's cost is ~90% context handling,
half of it re-reading what earlier turns added, so charging it to
whichever tool fired is a modeling choice rather than a measurement —
and the choice decides the answer. On one real month three defensible
weightings put web search at 11%, 28% or 51%. Per-project spend
survives the same test and stays.
- The `git commit` counter. A Bash call carries no working directory, so
a commit in a throwaway fixture repo can't be told from a real one.
Measured 33 against 4.
Also: local calendar arithmetic (active days could exceed the window),
paths normalized so Windows doesn't silently count the scratchpad as the
user's work, HTML written 0600 and refusing symlinks, a CSV export with
formula injection neutralized, print output that stays vector text, and
perforated edges.
The report says which columns sum and which don't, and distinguishes "no
commits" from "git couldn't be read" — unknown is not zero.
2026-07-17 11:47:45 -07:00
Morgan Lunt
78cb97b3e6
Add receipts plugin
...
A personal Claude Code impact report built from the session transcripts
already on disk at ~/.claude/projects, for the conversation where a dev
has to explain what their usage bought. Produces a markdown report and a
self-contained HTML receipt in the home directory.
Complements session-report, which reads the same transcripts to drive
usage down; this reads them to explain what the usage produced, and
cross-references local git history to tie spend to shipped work.
Two design rules the report is built around: no dollar figures, since a
cost inferred from local token counts won't match anyone's real bill and
inviting "that can't be right" discredits everything next to it; and no
invented "hours saved", since there's no baseline in local data to derive
a counterfactual from.
Mining is local — file I/O and git, no network. Tool calls are grouped
into five activity categories during mining so raw tool names, which
enumerate the dev's connected MCP servers, never leave the script. The
report is published nowhere unless the user asks.
2026-07-16 11:22:16 -07:00
github-actions[bot]
a0d18a01d4
bump(astronomer-data-agents): 6163ddc1 → 5432198c ( #4140 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-16 12:37:55 -05:00
github-actions[bot]
1c500ba91e
bump(carta-cap-table): 3c8a5d9f → 1f99da85 ( #4142 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-16 12:37:33 -05:00
github-actions[bot]
75b5da0b8e
bump(crowdstrike-falcon-foundry): 1695c448 → fad171a8 ( #4144 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-16 12:37:09 -05:00
github-actions[bot]
b02ed2bdd3
bump(zyte-web-data): adb02df6 → 8b2d640f ( #4155 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-16 12:36:45 -05:00
github-actions[bot]
e975879e03
bump(aws-agents): 8ea76325 → 851e0346 ( #4141 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-16 12:36:21 -05:00
github-actions[bot]
928ceed0ba
bump(carta-investors): 1db768d1 → 1f99da85 ( #4143 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-16 12:35:55 -05:00
github-actions[bot]
fd964fb93c
bump(data-engineering): 6163ddc1 → 5432198c ( #4147 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-16 12:35:28 -05:00
github-actions[bot]
9467663ac3
bump(qdrant-skills): 5ea598de → db1dde70 ( #4151 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-16 12:34:58 -05:00
github-actions[bot]
1734fc49cb
bump(dash0): 77c9130b → 539977ef ( #4145 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-16 12:34:30 -05:00
github-actions[bot]
43afb7f8d5
bump(data): 6163ddc1 → 5432198c ( #4146 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-16 12:34:02 -05:00
github-actions[bot]
90ca69cefb
bump(databricks): 5bc462d4 → 3d798146 ( #4148 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-16 12:33:33 -05:00
github-actions[bot]
4e6d8424ec
bump(expo): 9eb5ab06 → dba2a34f ( #4149 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-16 12:33:03 -05:00
github-actions[bot]
5c1603dfc1
bump(hyperframes): c2764e08 → b0bb4688 ( #4150 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-16 12:32:50 -05:00
github-actions[bot]
39914c9a4c
bump(stripe): 423788e0 → e238b951 ( #4153 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-16 12:30:59 -05:00
github-actions[bot]
f56f23ab6b
bump(wix): 7fd67c8c → c5424178 ( #4154 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-16 12:18:48 -05:00
github-actions[bot]
d9c8f35fd6
bump(sonarqube): 824e4f39 → 5e89beac ( #4152 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-16 09:16:04 -05:00
github-actions[bot]
b5eddebc64
bump(carta-cap-table): 1db768d1 → 3c8a5d9f ( #4129 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-15 19:11:27 -05:00
github-actions[bot]
30a27cef09
bump(crowdstrike-falcon-foundry): 82740a4f → 1695c448 ( #4131 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-15 19:11:05 -05:00
github-actions[bot]
162ac3eefa
bump(convex): 67e8e750 → b11a1bf5 ( #4130 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-15 19:10:43 -05:00
github-actions[bot]
3bec117d57
bump(hyperframes): c8d13af9 → c2764e08 ( #4134 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-15 19:10:19 -05:00
github-actions[bot]
15b1b7f3f0
bump(remember): 31626fd2 → 7db78669 ( #4135 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-15 19:09:55 -05:00
github-actions[bot]
28fc983dca
bump(resend): cad68a4e → 8a977503 ( #4136 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-15 19:09:31 -05:00
github-actions[bot]
bb6f8a7e89
bump(langfuse): b8471e0c → 02636d5b ( #4138 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-15 19:09:06 -05:00
github-actions[bot]
0699f1d2ac
bump(dataverse): 9b23d74e → 2e651c72 ( #4132 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-15 19:08:43 -05:00
github-actions[bot]
268dcbdb89
bump(snowflake-cortex-code): 0c2d99fb → 86333729 ( #4137 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-15 19:08:18 -05:00
github-actions[bot]
779f83c537
bump(huggingface-skills): 52d32494 → 9c8c3e1c ( #4133 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-15 19:07:51 -05:00
github-actions[bot]
bb5fa34a27
bump(carta-investors): 7285fefd → 1db768d1 ( #4110 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-15 19:06:54 -05:00
github-actions[bot]
cdc948d480
bump(sonarqube): feb8d784 → 824e4f39 ( #3883 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-15 19:06:27 -05:00
github-actions[bot]
7379588761
bump(wix): afe99e49 → 7fd67c8c ( #3884 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-15 19:06:14 -05:00
github-actions[bot]
52c1459b71
bump(snowflake-cortex-code): 6ecc0939 → 0c2d99fb ( #4125 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-15 13:18:55 -05:00
github-actions[bot]
d4ecd0d52c
bump(vibe-prospecting): 9a16bada → fcbbd20c ( #4126 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-15 13:18:31 -05:00
github-actions[bot]
9f8b8fd66d
bump(auth0): ce813504 → ec605c39 ( #4107 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-15 13:18:07 -05:00
github-actions[bot]
dcd05021d5
bump(hunter): 9d0de1d5 → e56a94b2 ( #4117 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-15 13:17:40 -05:00
github-actions[bot]
0ff5ebccbb
bump(carta-cap-table): 60f8c4e4 → 1db768d1 ( #4109 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-15 13:16:58 -05:00
github-actions[bot]
9e6b599df7
bump(chrome-devtools-mcp): 2d944f9f → 9a7e04da ( #4111 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-15 13:16:32 -05:00
github-actions[bot]
29d75dff78
bump(crowdstrike-falcon-foundry): ae1f81f8 → 82740a4f ( #4113 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-15 13:16:05 -05:00
github-actions[bot]
8eb0364e44
bump(hyperframes): 10b33519 → c8d13af9 ( #4118 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-15 13:15:38 -05:00
github-actions[bot]
73083c73b4
bump(sap-fiori-mcp-server): c9963b01 → c288dadb ( #4123 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-15 13:15:31 -05:00
github-actions[bot]
8dd9a77043
bump(aws-agents): 7e471bf7 → 8ea76325 ( #4108 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-15 13:15:16 -05:00
github-actions[bot]
59b66c2aa2
bump(exa): 8823cbea → 685aaa99 ( #4116 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-15 13:15:10 -05:00
github-actions[bot]
ef3f5ebb2f
bump(knowledge-catalog): b662eb35 → 6d8a1ad0 ( #4119 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-15 13:14:41 -05:00
github-actions[bot]
a931c25d31
bump(codspeed): 58d994aa → 705245d4 ( #4112 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-15 13:14:33 -05:00
github-actions[bot]
5e23828a80
bump(dash0): 9796547e → 77c9130b ( #4114 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-15 13:14:02 -05:00
github-actions[bot]
81c86a609e
bump(deepeval): 11375f81 → b11bd0e1 ( #4115 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-15 13:13:31 -05:00
github-actions[bot]
f237553129
bump(mergify): 0ee93629 → 50b7c343 ( #4120 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-15 13:13:22 -05:00
github-actions[bot]
61acd6aaaa
bump(pinecone): e29f1843 → f36dec67 ( #4121 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-15 13:12:49 -05:00
github-actions[bot]
dc2452685d
bump(posthog): 90ae7137 → ffbb2531 ( #4122 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-15 13:12:16 -05:00
github-actions[bot]
11e226502e
bump(sentry): 24e4b98c → 003aaa8a ( #4124 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-15 13:11:42 -05:00