Paperclip

Paperclip stops calling 822 million subscription tokens free

A Paperclip cost-ledger patch says one instance recorded 822,597,919 subscription tokens as a confirmed $0. It adds a separate notional rate-card column, while related work attributes usage to the actual model and redacts unsupported auth-shaped headers before they reach logs.

← Back to homeOriginal source ↗

paperclipai/paperclip PR #10544 is the inspected primary source: “fix(costs): price subscription runs from a rate card instead of booking $0 as reported.” The related records below were inspected as supporting context rather than independent confirmation.

The facts

- paperclipai/paperclip PR #10544 was created 2026-07-31T06:29:41Z and was open at inspection; its title is “fix(costs): price subscription runs from a rate card instead of booking $0 as reported.” - paperclipai/paperclip PR #10789 was created 2026-08-04T00:01:02Z and was open at inspection; its title is “fix(acpx): attribute all tokens to actual model, eliminate model=unknown rows.” - paperclipai/paperclip PR #10784 was created 2026-08-03T22:10:31Z and was open at inspection; its title is “fix(logger): redact credentials sent in unsupported auth headers.” - The repository reported 75527 stars, 5031 open issues, default branch master, and last push 2026-08-04T00:06:55Z. - The latest tagged-release baseline checked was v2026.722.0 published 2026-07-22T23:05:41Z.

What changed

paperclipai/paperclip PR #10544 reports: Thinking Path - Paperclip is the open source app people use to manage AI agents for work - The cost ledger is part of that. It writes one cost_events row per run, and the Costs dashboard, the per-agent spend comparison, and the budget guard all read from it - Many adapters now run against a flat-rate subscription instead of a metered API key. The Claude Code CLI reports total_cost_usd: 0 on those runs, because no API call was billed - The ledger accepted that 0 as a measured fact. Its guard tested the type of the value, not whether the value was credible - The result is worse than a missing number. A gap shows as a gap. A cost_status='reported' zero shows as a confirmed

paperclipai/paperclip PR #10789 reports: Summary **Root cause**: prepared.requestedModel is always null for claude-local agents (model is set via ANTHROPIC_MODEL env var, not config.model). Both the success and error return paths fell back to prepared.requestedModel || null, storing model=null which the cost pipeline labels as unknown. This caused ~1/3 of token usage to be unattributed. **Success path fix**: now reads postTurnStatus?.models?.currentModelId || lastKnownModelId || prepared.requestedModel || null — the actual model reported by the runtime after the turn. **Error/catch path fix**: now reads lastKnownModelId || prepared.requestedModel || null — the pre-turn model snapshot captured before the turn started. The lastKnownModelId variable was already declared with a comment saying "Track the last known model id so error-path returns can attribute tokens to the correct model" but was never referenced in either

paperclipai/paperclip PR #10784 reports: Thinking Path - Paperclip is the open source app people use to manage AI agents for work - The server logs every HTTP request through pino-http, and HTTP_LOG_REDACT_PATHS (server/src/middleware/http-log-redaction.ts) is the single place that says which headers must never reach the log - That list covers authorization, cookie, the CSRF pair and x-api-key — but not api-key and not x-auth-token - Neither of those is accepted as a credential, so a request carrying one is never authenticated; but the HTTP logger writes request headers regardless of the response status, so a caller who reaches for the wrong header name has their credential persisted to the request log in clear text - This is a plain gap in an existing allow-list, not a behaviour change: the

Why it matters

A false zero is worse than a missing price because dashboards and budget reviews interpret it as measured truth. Separating cash cost from notional list price preserves accounting semantics while making subscription consumption visible. The operator test is whether persisted state, execution authority and the visible user outcome describe the same event after retries, restarts or delegation.

Current

The primary record was open when captured on 2026-08-04. The release baseline was v2026.722.0 published 2026-07-22T23:05:41Z. Repository metadata, pull requests, issues, release records, Google News discovery, Hacker News discovery, Lobsters, Metamesh and the rendered ClawCharts row were checked. ClawCharts selected the subject; it did not prove the claim.

Evidence

The primary URL is https://github.com/paperclipai/paperclip/pull/10544. Supporting records are https://github.com/paperclipai/paperclip/pull/10789 and https://github.com/paperclipai/paperclip/pull/10784. Source bodies, timestamps and states are preserved in the daily evidence bundle. Test counts, reproductions and deployment observations remain attributed to their authors unless explicitly identified as independently rerun.

Source boundary

Open work is described as open, closed work as closed, and operator reports as reports. A pull request is evidence of proposed or reviewed direction, not proof of a shipped release. Search residue, package mirrors and historically published source spines were excluded.

Operator take

Backfill visibly, label derived cost as notional, keep it out of hard budget enforcement, and verify model attribution before trusting per-model spend charts. Preserve a before-state receipt, make the smallest reversible change, and verify the original failure independently after intervention.

Caveat

Public project records are mutable. Status, scope and evidence can change after publication. This brief records the inspected state and does not authorize changes to a reader’s deployment.

Source inspected; source state, environment and release boundary remain explicit.