Coding-agent economics

Every line your agents ship, priced to the session that wrote it.

The most precise measure of coding-agent cost and performance.

src/checkout/coupons.tsClaude Code · Opus 5
41
42
43
44
45
46
47
48
49
50
51
52
Opus 5Sonnet 5Human
Session cost
$0.00
0 tokens · 9 lines committed · $— per line
Show your work · line 47

“Exclusive coupons apply before stackable ones so the discount base is right.”

Agent Sorted by exclusivity before reduce; kept dedupe; added a mixed-case test.

Cost per retained line · by workflow
Explore first$0.067
Edit first$0.138
Plan, then edit$0.091
Promoted to 42 engineers
Meet Joyride

Line-level attribution, session-level cost, and the context behind every change, from the first prompt to the merged pull request.

Every API request is priced and charged to the agent that made it, then followed through the commit to the pull request. You see cost per PR, cost per merged PR, and what each model's lines cost to keep. Discarded attempts are counted, and labelled.

How cost is computed →

Select any chunk of code and see the exact prompt, reasoning, and tool calls that produced it, one message, not a transcript. Ask the session why it made a decision and get an answer grounded in what it actually read.

What stays on your machine →

Joyride finds the sessions that ship the most durable code per dollar, then promotes the instruction files, skills, and harness settings behind them so every engineer starts where your best one already is.

See it for teams →
Cost per merged PR · by modellast 30 days
Opus 5
$52.30
Sonnet 5
$23.10
GPT-5.6 Sol
$31.40
GPT-5.6 Terra
$15.80
Cost per retained lineafter 30 days
Opus 5
$0.089
Sonnet 5
$0.067
GPT-5.6 Sol
$0.096
GPT-5.6 Terra
$0.108

Retained means the line is still present on main. Unknown usage is never counted as zero.

src/checkout/coupons.tsselect a line
41export function stackCoupons(cart: Cart, codes: string[]) {
42 const applied = dedupe(codes).filter(isActive);
43 const ordered = sortByExclusivity(applied);
44 return ordered.reduce(applyCoupon, cart);
45}
Prompt · Priya · Claude Code / Opus 5session s1042

"Exclusive coupons should always apply before stackable ones so the discount base is right. Keep the existing dedupe."

Agent · 14 s laterread 3 files · 1 test run

Sorted by exclusivity before reduce so exclusive codes set the base price; kept dedupe as requested and added a test for the mixed case.

Which instruction files earn their keep90 days
rules/testing.md
91% kept
CLAUDE.md
86% kept
rules/api-style.md
79% kept
CONTRIBUTING.md
74% kept
Best runPriya · Opus 5$0.067 / retained line
What made ittesting.md · Explore subagent firstread-before-edit 100%
PromotedSkill: test-first-editto 42 engineers

Promotions are suggestions with the evidence attached. Nothing changes a repo without a reviewed pull request.

010203

How to get started with Joyride

01
Install once

One command per clone. Joyride hooks into Claude Code and Codex and prices every request. Nothing leaves your machine until you push.

$joyride install .
Hooks: Claude Code ✓ Codex ✓
Collector: 127.0.0.1:4318 ✓
Worktrees provisioned: 2
$joyride status → enabled
02
Work normally

Use your agents and commit as usual. Each edit is captured around the tool call that made it, and each commit gets a note.

feature/coupon-stacking · task
├─ Claude Code / Opus 5 implementation $41.20
│ ├─ Explore subagent 41 reads · 8 searches
│ └─ general-purpose draft release notes
└─ Codex / GPT-5.6 Sol review $6.90
3 commits · 412 lines attributed · 0 unknown
03
Read the pull request

Push, and the PR carries the agents, the cost, and a link to the full report with line-level attribution.

What a report shows

Every pull request, accounted for.

Four views, one source of truth. The same numbers appear in the PR footer, the terminal, and the hosted report, and unknown values are shown as unknown.

Line-level attribution

Every committed line is owned by the session that wrote it.

10CENT = Decimal("0.01")
11
12def prorate(seat_change: SeatChange, cycle: Cycle) -> Decimal:
13 """Charge only the days a seat change is live in this cycle."""
14 days_left = (cycle.end - seat_change.at).days
15 if days_left <= 0:
16 return Decimal(0)
17 ratio = Decimal(days_left) / Decimal(cycle.length)
18 amount = seat_change.delta * cycle.unit_price * ratio
19 return amount.quantize(CENT, rounding=ROUND_HALF_EVEN)
20
21def test_prorate_mid_cycle():
22 assert prorate(SeatChange(+2, DAY_15), CYCLE) == Decimal("26.67")
Opus 5 · Claude CodeSol · Codex (revised Opus)Sonnet 5 · CursorHuman

Session-level cost

Matched from real request usage, summed per task. Discarded attempts included and labelled.

$0.00 estimated
SourceSessionsTokensCostShare
Opus 5 / Claude Code21.9M$34.6072%
GPT-5.6 Sol / Codex1640k$8.7018%
Explore subagents ×33410k$4.8010%
Manual1Unknown
Kept code $27.90 · discarded $13.00 · no code $7.20

Landed and retained

Landed means the commit reached main. Retained means the line is still there.

84% retained
Opus 5
87%
Sonnet 5
81%
GPT-5.6 Sol
79%
Human
93%
Who rewrites whom · Opus→Sonnet 41 · Sonnet→Opus 12 · Sonnet→human 33

How this was built

Who orchestrated, which subagents ran, and what each cost.

Claude Code / Opus 5 orchestrator 3 prompts · 412 lines · $34.60
├─ 2 Explore subagents 41 reads · 8 searches · no lines
Did: find where the receivers classify tools
├─ 1 general-purpose 12 reads · 22 lines
Did: draft the release notes
└─ Codex / GPT-5.6 Sol review 1 prompt · 0 lines · $8.70
Loaded · CLAUDE.md · rules/testing.md · 14 reads · 2 compactions
Compared

Precise where others estimate.

Provenance tools show you who wrote a line. Engineering-intelligence platforms show you spend by seat. Joyride is the only one that connects the two, in the pull request.

CapabilityJoyrideGit-notes provenance toolsEngineering-intelligence platforms
Line-level attribution to agent and modelYesYesNo, PR-level trailers
Cost per session, matched from real usageYes, per requestTokens only, or dashboard-onlyEstimated from seat and admin APIs
Cost per merged PR in the pull request itselfYesNoNo
Retained lines and model-to-model reworkYes, re-measured over timeSnapshot at commitRework rate, not per model
Subagent tree and what each agent loadedYesSubagent tokensNo
Prompt and trajectory behind a chunk of codeOpt-in, stays local, chat with itStored in the repoNo
Promotes the workflows that ship durable codeYesNoNo
Two friendly computers dueling with wooden swords on a flowered hill

Want to find your favorite coding tool?Put two agents on the same task and pick the winner.

Open Agent Arena