Skip to content

Repository files navigation

tokenchit

License: MIT npm CI Node GitHub last commit Visitors

Turn your local AI coding agent logs into a stat card you commit to your README.

tokenchit — @iyashjayesh AI coding agent usage

That card is this repository's own, generated by the command below and committed as a file. It is not a screenshot and not a hosted image — which is the whole point.

npx -y @tokenchit/cli@latest generate

One command: it finds your agents, shows your stats, writes the card, and puts you on the board. Running it often? npm i -g @tokenchit/cli, then tokenchit generate.

  ┃ [1/3]  DETECT AGENTS
  ┃   ● claude-code   ~/.claude*/projects/**/*.jsonl
  ┃ ✓ 3 agents, written to .tokenchit.json
  ────────────────────────────────────────────────────────────

  ┃ [2/3]  YOUR STATS
  ┃   ~16.7B   $7,392        27d      51
  ┃   TOKENS   EQUIV. COST   STREAK   ACTIVE DAYS
  ┃
  ┃   30d  ▁··▄▆▆▆▅▁▃▅█▃▂▄▂▁▅█▆▂█▇█▅▄█▇▆▃  3.07B in 7d
  ┃ ✓ wrote tokenchit.svg
  ────────────────────────────────────────────────────────────

  ┃ [3/3]  THE BOARD
  ┃ ✓ published as @iyashjayesh — tier: verified

Why this one

  • The card is a file, not a URL. Comparable tools serve cards from a hosted endpoint, so your README depends on someone else's uptime and rate limits. A committed SVG has none of that — GitHub serves it directly, and it keeps working if this site goes away.
  • Nothing leaves your machine unless you ask. sync and recap make no network request. publish is the only command that uploads, and --dry-run prints the exact bytes.
  • Honest about what it cannot see. Logs get rotated, prices change, and some models have no public price. Where a number is incomplete, the tool says so.
npx -y @tokenchit/cli@latest recap    # the year in review, a second committable SVG

tokenchit recap

What it reads

agent source
Claude Code ~/.claude*/projects/**/*.jsonl — every profile directory, not just the default
Codex ~/.codex/sessions/**/rollout-*.jsonl
OpenCode ~/.local/share/opencode/opencode.db

Copilot CLI and Gemini CLI are detected and reported as unsupported: Copilot records only a live context gauge, and Gemini's transcripts carry no token counts.

Your numbers will not match Claude Code's Stats panel. It counts an API call once per streaming rewrite, so it reads roughly twice as high. sync prints both figures and the gap.

Equivalent cost is not what you paid — it is what these tokens would cost at list API rates. Most agent usage runs under a subscription. See docs/internals.md.

Commands

tokenchit generate       detect agents, write the card, join the board
  --no-publish           stop after the card

tokenchit init           detect agents, write .tokenchit.json
tokenchit sync           read your logs, show your stats, write the card
tokenchit publish        put your row on the public board
tokenchit recap          year in review, as a second committable SVG
tokenchit ledger         show the local history bank, or rebuild it
tokenchit schedule       print a cron or launchd entry; installs nothing
tokenchit login          prove your GitHub handle (device flow, no password)
tokenchit logout         forget this machine
tokenchit whoami         who this machine is signed in as

tokenchit help <command> explains one command. NO_COLOR=1 drops colour and animation. Common flags: --out, --theme auto|light|dark, --layout default|compact, --json, --dry-run.

Privacy

sync and recap make no network request at all.

publish is the only command that uploads anything. It sends daily token totals per agent, model names, and your handle — never prompts, replies, file paths, branch names, or repository names. --dry-run prints the exact bytes so you can check rather than take our word.

Five tests in packages/cli/test/privacy.test.js enforce this on every push, including one that fails if any file outside net.ts can open a socket.

The board

Opt-in, and only publish puts you there. Verified rows rank above unverified ones: signing in is the only thing that ties a row to a GitHub account. An unverified row still appears.

Submissions are self-reported, so two bands guard them — rejected for the arithmetically impossible, and held for review for the possible but far outside anything seen. A held row is stored and returned to you, and kept off the board until a person looks. Both thresholds have been raised after real users were refused; the reasoning is in docs/internals.md.

Development

npm install
npm run build     # core, then cli, then site
npm test          # core, cli and site suites
npm run dev       # the site at http://localhost:3000

Node 22 or newer — OpenCode support uses the built-in node:sqlite. The site and the CLI render through the same buildCardSvg(), so they cannot drift.

Licence

MIT.

About

Read your local AI coding agent logs and render a stat card into your repo.

Topics

Resources

Stars

15 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages