Count the work. Not the waiting.
One kwh is sixty seconds of active agent work: two vCPU lit, tokens in flight. Waiting counts zero. The runtime makes the power. kwh is the meter anyone installs.
Compute is lit.
CPU, token generation, tools and external effects add to active time.
Silence is zero.
Queue, approval, user wait and idle wall-clock time never inflate the count.
The count is signed.
Events, durations, source class and formula version travel with every record.
kwh = (t_active / 60) × c c = 1 waiting → 0 · strength rides along, never changes the number
Run the work. Watch it count.
Pick what the agent is doing, then move the clock. The wall clock takes every second. The meter takes only the lit ones. Close the run to seal the record.
| # | state | seconds | counts |
|---|
close the run to hash it locally.
Two sources. One run.
When a first-party runtime runs the work, the count comes from signed runtime events and reads VERIFIED. When the events come from someone else's stream, it reads COUNTED. Put them side by side and see where they part.
| interval | what happened | verified | counted | match |
|---|
strength rides along with the number. it never changes it. every interval that differs is named with its reason.
They part. You hear.
For runs with both a VERIFIED and a COUNTED source, kwh compares them interval by interval. When they disagree by more than the gap you set, it sends strength.differs with the interval and the reason.
| run | gap | alert | verified | counted |
|---|
example · not live yet · strength rides along with the number, it never changes it
Every count carries its proof.
A meter record lists the events, the durations, the source class and the formula version. Its hash is computed in this tab. Change one second and the hash stops matching.
press check the hash to recompute it.
example · not live yet · signatures not shown
Same run. Two clocks.
Pick a run. The wall clock counts every second it was open. kwh counts only the lit ones: tool calls, tokens in flight, external effects. Queues, approvals and idle time read zero.
| # | state | seconds | counts |
|---|
example · not live yet · 1 kwh = 60 lit seconds · waiting counts zero
The brand is a unit.
kwh is not a name with a font. It is a unit, with variables and a formula. Define work once and every system counts the same thing.
| state | counts | why |
|---|---|---|
| tool call | active | compute is lit |
| tokens in flight | active | generation is work |
| external effect | active | the agent is acting |
| queue | 0 | nothing is lit |
| waiting on approval | 0 | a person is deciding |
| idle | 0 | wall clock is not work |
Example meters.
| meter | agent | kwh | strength |
|---|
tap a meter.
example · not live yet · prices are on the pricing page
How hard is it working right now.
E is the count. P is the burn rate: kwh per minute across every lit agent. Start and park agents and watch P move. Parked agents read zero, because waiting is free.
| agent | doing | P · kwh/min | E · kwh |
|---|
example · not live yet · one lit agent burns at most 1 kwh per minute under kwh.v1, c = 1
Every kwh counted. Priced at launch.
kwh prices counting, not compute. Any free allowance is set at launch. The line on the meter is an example · not live yet. Past it, counting is metered and each one is signed. Price set at launch. Tap a monthly volume on the meter.
| part | job |
|---|---|
| kwh | counts the work and signs that the count is true |
| your billing tool | turns the signed count into an invoice |
| your payment rail | moves the money |
| line | price |
|---|---|
| Free allowanceCounted kwh each month that carry no charge. Counting, not compute. | set at launch |
| Counting above the allowanceEach counted kwh past the free allowance, with its signed receipt. | price set at launch |
| TracingEvery run traced, kept 7 days. | price set at launch |
| Longer retentionKeep traces and records past 7 days. | price set at launch |
| WaitingAn agent that is parked or waiting counts zero kwh. | 0 kwh |
example · not live yet
Count the watching too.
Product-facing media analytics lives on kwh: the same discipline applied to what people watch and listen to. Counted from signed playback events, never from a guess. Waiting and buffering count zero here too.
example · not live yet
kwh counts. Others bill and pay.
kwh defines the unit and signs the count. Billing turns usage into invoices. The payment rail moves the money. Follow one record through the handoff.
example · not live yet · nothing is billed
press next step.
| source | how it arrives | strength |
|---|---|---|
| first-party runtime | signed runtime events | verified |
| your own runtime | events you send to the kwh api | counted |
| another platform's stream | forwarded event stream | counted |
example · not live yet · kwh never holds or moves money
Install the meter.
example · not live yet
Each span. Lit or not.
Open a run and read it as spans. Each span says what the agent was doing and whether it was lit. The kwh on the run is the sum of the lit spans, and nothing else.
example · not live yet · 1 kwh = 60 lit seconds · waiting counts zero
Install the meter.
example · not live yet · nothing is sent · already metering? sign in
Show your customers the count.
One count for the customer. Work that ran is lit. Waiting stays at zero. The statement travels with its method, source and period.
| run | source | active | waiting | counted |
|---|
Follow every second.
Every run carries its source and the seconds that count. The excluded time stays visible beside it.
From event to kwh.
A run arrives from a first-party runtime or an external event stream. Each interval takes a state. Active seconds enter the count. Waiting never does.
140 s
generation is work
Count up to the line.
Set a local usage cap. Move through active and waiting intervals from the example run. Only active seconds move the count; the cap is a comparison, not an enforced stop.