backpay
v0.0.3
Published
backpay — your AI usage stats, on your terms. counters never content, preview before consent, 50% back.
Downloads
59
Readme
⏚ BACKPAY
My AI tools logged every dollar of my usage. I was paid $0.
The open-source data union for AI dev tools. Counters never content · every byte previewed before consent · 50% of every contract back to members.
backpay.me · the film · privacy
Every AI coding tool you run writes usage logs to your own disk — and most of them also ship that telemetry home, where it gets aggregated and sold as market intelligence to investors, competitors, and analysts. You generate the data. You were never offered a cut.
Backpay inverts it. You run a tiny open-source meter that reads those local logs, submits day-level counters only, and the data union sells k-anonymous aggregates — the live index of which AI tools are actually winning. Half of every euro flows back to members, pro-rata by days contributed.
Quick start
npx backpayThat's the whole install. Here is everything it does, in order:
- Reads your local usage logs (via ccusage, the 16k-star parser your tools' logs already feed).
- Prints the complete payload — every byte that would leave your machine.
- Asks. Nothing is sent before you type
y. The preview is always free. - Submits your backfill, tells you your member number — the first 100 carry permanent founding weight in the revenue share.
- Offers a daily cron tick (~1 second a day). No resident daemon. Nothing runs in the background, ever.
What leaves your machine
One day's payload, in full:
{ "schema_version": 0,
"panelist": "<random uuid — not your name>",
"date": "2026-06-12",
"entries": [ {
"tool": "claude-code", // fixed vocabulary
"model": "claude-opus-4-8", // fixed vocabulary
"input_tokens": 18093021,
"output_tokens": 842117,
"cache_read_tokens": 114230998,
"cache_creation_tokens": 1082211,
"cost_usd_est": 23.91,
"sessions": 4
} ] }What can never leave your machine
| Data | Status | |---|---| | Prompts, completions, code | no field exists — cannot be sent | | File paths, repo / project names | no field exists — cannot be sent | | Your name, email, employer | no field exists — your id is a random UUID | | Machine identifiers, hostnames | no field exists | | Anything finer than the calendar day | no field exists |
Tool and model names are mapped onto a fixed enum — strings from your logs are never copied into payloads. This isn't a privacy promise; it's the shape of the schema. A payload that tried to carry your prompt has nowhere to put it.
The constitution
i. Counters, never content. The schema has no field for prompts, paths or names.
ii. The meter is open source. Every byte previewed before consent. One file, zero dependencies, readable in one coffee.
iii. No one is ever the product alone. No data cell covering fewer than five members is published or sold. Individual rows: never, at any price.
iv. The ledger is public from day zero. Half of every euro, pro-rata by days contributed — or this is just another harvester with better fonts.
v. Paid in money nobody can freeze. Default payout rail: Bitcoin Lightning.
Commands
| Command | What it does |
|---|---|
| npx backpay | first run: full onboarding (preview → consent → backfill → optional cron) |
| npx backpay preview | print exactly what would be sent. sends nothing |
| npx backpay submit [--all] | submit today (or all days) |
| npx backpay status | your days on record + ledger balance |
| npx backpay export <file> | write your payloads to a JSON file |
| npx backpay stop | leave. removes the cron line + local config. one command |
Keep your full history
The meter can only read logs still on your disk. Claude Code auto-deletes transcripts older
than 30 days by default (cleanupPeriodDays), so without this your days silently vanish
before the daily run records them — and deleted days are unrecoverable. Raise it once, per
machine (non-destructive — merges into your existing settings):
node -e 'const f=require("os").homedir()+"/.claude/settings.json",fs=require("fs");const j=fs.existsSync(f)?JSON.parse(fs.readFileSync(f,"utf8")):{};j.cleanupPeriodDays=3650;fs.writeFileSync(f,JSON.stringify(j,null,2));console.log("set cleanupPeriodDays=3650 →",f)'This protects your future days; it can't bring back history already deleted, and it pays nothing for days before you joined.
How you get paid
Buyers (vendors, VCs, funds) license k-anonymous aggregates — the usage-side index that
spend-side data like Ramp's can't see. 50% of every contract accrues to members,
pro-rata by data-days contributed in the contract period. Your balance is visible via
status from day one, before the first contract closes — so you can verify the math
while it's still small enough to check by hand. Default payout rail: a Bitcoin Lightning
address you control.
FAQ
Isn't this spyware with extra steps? Spyware hides what it takes. The meter prints it and asks. The schema can't hold content, the code is one file you can read, there's no daemon, and leaving is one command.
ccusage already exists. What's new? ccusage is the reader — it shows you your own stats, and we build on it with credit. Backpay is the economics: methodology, k-anonymous aggregation, buyers, and a ledger that pays you. Different layer.
Who actually buys this? The same people who pay for spend-side indexes today. Spend tells you who paid; usage tells you who stayed. That retention layer is currently unclaimed.
50% of zero is zero. Correct — today the ledger reads €0.00 and the homepage says so. The data union exists before the first contract; that's what founding weight is for.
What stops someone running 100 fake members to game the 50%? Nothing at the accrual layer — and that's fine, because the gate is at payout, not accrual. When money actually moves, claiming it binds to a real identity (GitHub OAuth) so one human = one payout; sock-puppets accrue nothing they can cash out. The pool itself is auditable on-chain. None of this is built before the first contract — accrual stays open and honest until then.
What about Cursor? No clean local usage log (token data is buried in binary blobs). CLI agents first; Cursor lands when it can be done counters-only, or not at all.
Why should I trust you?
Don't. Read the file. Run preview. The design goal is that trust is structural, not
reputational.
Read the code
The entire meter is collect.js — one file, zero dependencies, standard
library only. If you can read JavaScript, you can audit your own data pipeline in one
coffee. That's not a constraint we suffer; it's the product.
License
MIT. Member №1 is the founder, dogfooding his own meter at backpay.me.
