For dev agencies and consultancies using Claude Code or Codex

Stop eating your clients' AI costs.

Tallyhook reads the session logs Claude Code and Codex already write, tags every session with the client it was for, and gives you an invoice line. One command per laptop. Nothing else changes.

$49 a month flat. No card to start. Only metadata leaves the laptop, never code or transcripts.

Tallyhook · invoice line
Northwind · September
github.com/
northwind/storefront
printing…
0 sessions, list price$0.00
Your markup, 20%$0.00
Bill to client$0.00
new sessions print as developers work
1 / 3

See cost per client, not per seat.

Every session lands under the client whose repo it ran in. Developer, model, tokens and list price, for any date range.

2 / 3

Bill it back, with markup.

Export invoice lines as CSV, per client, per month, with the markup you set. Drops into Xero, QuickBooks or a spreadsheet.

3 / 3

Catch the $480 session today.

A loop that ran 23 hours shows up as one row with a price on it, the same day, not on next month's statement.

The gap

Your vendor dashboards count by user and by model. Never by client.

On a subscription seat there is not even a dollar figure. So the cost gets absorbed, or guessed, or billed as a flat fee that is wrong in both directions.

Claude Team analytics
Per user, per model, one to two days late. No repo, no project, no dollars.
Cursor
Audit log on the Enterprise plan only. Nothing per repo for a five-person shop.
Codex CLI
Token counts sit in ~/.codex with no roll-up at all.
One Max seat, 3 weeks
$2,803 of list-price usage across 376 sessions. The dashboard could not say what any of it was for.
How it works

Three steps. After that it runs on its own.

  1. 01

    Run one command on each laptop

    It registers a Claude Code hook and reads the session logs Claude Code and Codex already keep. History uploads on the spot, so you see real numbers before you finish reading this page.

    Terminal
    $
    # output
    tallyhook: installed to ~/.tallyhook/tallyhook.js
     Claude Code hooks registered (SessionEnd, Stop)
     uploaded 312 sessions as maya@agency.dev
  2. 02

    Pick a client for each repo, once

    Sessions arrive tagged with their git remote. Choose the client from a dropdown and every past and future session from that repo follows.

    Repos without a client
    github.com/northwind/storefront
    → Northwind
    github.com/acme/patient-portal
    → Acme Health
    github.com/bluebird/ios
    Pick a client

    Choosing a client saves instantly and re-tags every earlier session from that repo.

  3. 03

    Export the invoice line

    Cost by client, developer and model for any month, with your markup applied. A CSV that drops into whatever you invoice from.

    northwind-invoice-2026-09.csv
    LineSessionsListBillable
    maya@agency.dev38$412.30$494.76
    tomas@agency.dev21$188.12$225.74
    Claude Sonnet 51,204$551.02$661.22
    AI agent usage, September59$600.42$720.50
Privacy

Session metadata leaves the laptop. The work never does.

Uploaded, per session
  • Tokens by model, cache reads and writes split
  • Start and end time, tool and version
  • Git remote and branch
  • Developer identity from git config
  • Turn count and tool-call counts
  • Paths of files edited
  • First 160 characters of the first prompt (optional)
Stays on disk
  • Transcripts and every later prompt
  • Code, diffs, file contents
  • Tool output and command results
  • Environment variables and secrets

The collector is one dependency-free file, about 300 lines. Read it before you run it: tallyhook.js.

Pricing

Flat per workspace. Pays for itself on the first invoice.

Unlimited clients, repos and sessions on both plans. Fourteen days free, no card until you decide.

TeamAgency
Per month$49$149
Developersup to 5up to 20
CollectorsClaude Code, CodexClaude Code, Codex
ExportsInvoice and session CSVInvoice and session CSV
Price overridesYesYes
Start freeStart free

Costs are list-price equivalents from each vendor's public API pricing. On a subscription (Claude Max, Team, ChatGPT Pro) that is the value of what your team used, not a bill you received. The app says so wherever a number appears.

Questions

Is this just ccusage with a login?+

ccusage was the reference for token counting and it is excellent for one machine. Tallyhook is the team layer: every developer's sessions in one place, mapped to clients, with invoice output. If you are solo, ccusage is enough.

How accurate is the cost?+

Tokens come from the vendor's own session logs, deduplicated per message. Prices are the public API rates per model, including cache reads and one-hour cache writes at twice input. You can override any model's price for negotiated rates.

Does the hook slow Claude Code down?+

The Stop hook runs at most once every ten minutes, times out after eight seconds and always exits cleanly, so an unreachable API never blocks a turn.

What about Cursor?+

Cursor keeps no local session log the collector can read, so it needs a small proxy. It is next on the list; tell us if you would use it.

Can I turn off the prompt snippet?+

Yes. Set privacy to true in ~/.tallyhook/config.json and only counts and identifiers are sent.