A developer who once spent two days on a migration now spends half a day directing Claude Code through it and checking the result. The client gets the same migration sooner. What should the invoice say?
There is no single right answer, but there are four common ones, and the wrong choice is usually the one made by accident: billing only the developer's half day on an hourly contract and quietly giving the agent's work away, or billing two days that nobody worked.
Separate three numbers first
Before choosing a model, record three things separately:
- The person's own time: briefing the agent, reviewing its work, fixing what it got wrong, talking to the client.
- The agent's working time: how long the agent was actually working, summed over its turns, not how long the session was open.
- What the tool cost: a subscription seat, API usage, or both.
Mixing any two of them makes every later decision harder. If agent hours are logged as the developer's hours, utilization and capacity become meaningless. If tool cost is billed as if it were labor, the client is paying a markup they did not agree to.
Option 1: include it in the fee
On fixed-fee and value-priced work, the client buys an outcome. How much of it a coding agent did is your business, not theirs, as long as the quality and the agreed scope hold.
This is the simplest option and often the right one. You should still record the agent time, marked not billable, because otherwise you cannot tell whether the next fixed-fee quote is too high or too low.
Option 2: bill agent hours at an agent rate
On hourly work, the cleanest approach is to bill agent time as its own line, at its own rate. The client sees human hours at human rates and agent hours at a lower agent rate, and can judge both.
This is what agent rates in Time Trakkr are for. An admin sets an hourly bill rate and cost rate for agent time, for the whole workspace or for one client or project. Accepted agent time is billed at that rate, never at the person's own rate, and appears on the invoice on lines labeled (agent time), apart from the people's lines.
Option 3: pass through the tool cost
Some clients prefer to pay for the tools directly: the human hours as usual, plus the agent's usage at cost or with an agreed handling fee. This suits clients who want to see the cost structure and teams whose agent spend varies a lot from project to project.
Use the actual bill from the vendor for this, entered as an expense. Do not use an estimate. Time Trakkr shows an estimated token cost for each session, at list price, but it is never put on an invoice: it ignores subscriptions and discounts, and is not what anybody was charged.
Option 4: change the price, not the line items
If agents have changed how long a kind of work takes, the honest long-term answer may be to reprice the service rather than itemize the agent. That is a conversation for the next agreement, informed by the agent and human hours you have been recording.
A worked example
A consultancy bills human time at $160 an hour and agent time at $50. It rounds invoice lines to 15 minutes. A data migration for a client took:
- 4.5 hours of the developer's own time, briefing, reviewing and fixing;
- 5.75 hours of agent time, from three Claude Code sessions;
- about $38 of API usage, from the vendor's bill.
| Model | Invoice | What the client sees |
|---|---|---|
| Hourly, people only | $720 | 4.5 h at $160 |
| Hourly, with agent rate | $1,007.50 | 4.5 h at $160, 5.75 h at $50 |
| Hourly, plus tool cost | $758 | 4.5 h at $160, $38 expense |
| Fixed fee, agreed beforehand | $1,500 | One line |
The "people only" row is the accidental one: the agent's work went unbilled on an hourly contract. The fixed-fee row is fine if the scope and the fee were agreed, and the recorded hours tell you what margin the job made.
Decide who looks at it, and when
Some sessions are false starts, and some run on the wrong branch. Whichever model you choose, decide whether agent time is checked before it can be billed.
In Time Trakkr, sessions from repositories an admin has mapped are accepted automatically once the day ends, unless an admin turns that off. Nobody reviews them first. People can reduce, move or delete those entries until they are invoiced, after which they are locked. With automatic accepting off, each session is held for review in its person's pending list: they accept it, move it to the right project, or discard it. A firm that wants every agent hour seen before billing should turn automatic accepting off.
Put it in the agreement
Whatever you choose, write it down before the invoice arrives:
- whether agent time is billed, and at what rate;
- whether tool costs are passed through, and how;
- what the client sees on the invoice.
A client who learns about agent billing from an invoice line will ask about it. A client who agreed to it will not.
What this will not do
Agent time in Time Trakkr covers Claude Code and the Codex CLI on a developer's own machine. Agents that run in the cloud are not recorded, and Cursor is untested. Agent time is never added by hand, so a chat with an assistant is your own time, logged as usual. And the agent rate is yours to set: nothing here tells you what a client will accept.
Common questions
Is it legitimate to bill a client for an AI agent's time?
It is legitimate when the client has agreed to it. The problem cases are billing agent hours as if a person worked them, and billing them without saying so. A separate, labeled line at an agreed rate avoids both.
Should the agent rate be a percentage of the human rate?
That is one way to set it, but it is easier to defend a rate built from cost: what the tooling costs you per agent hour, plus the margin you want. The post on agent rates works through one.
Can the token cost estimate go on the invoice?
No. It is an estimate at list price, shown so you can see roughly what a session used. Pass through the vendor's actual bill as an expense instead.
What if the agent's session ran on the wrong project?
Change its project and task before accepting it, or move the entry afterwards. A moved entry is re-priced at the agent rate for where it lands, and if no agent rate applies there, the move is refused until an admin sets one.
