Skip to content
Agentic Control Plane

Cursor Cost Tracking — What the Hook Sees, What the Proxy Can't Reach, and What Cursor Itself Shows

David Crowe David Crowe · · Updated · 10 min read
cursor cost tokens reference
Share X HN LinkedIn

The honest limit, first. ACP's Cursor hook sees tool calls — file edits, shell commands, MCP calls — not tokens, on every configuration. And the ACP proxy can only price models you've added to Cursor with your own API key. Cursor's bundled subscription models (Composer, Grok, the included pool) are built and routed by Cursor's own backend; no base URL you set reaches them, and no outside tool — ACP included — can meter what Cursor's backend never exposes.

What ACP adds on top of that limit: a full tool-call audit log for every Composer session, regardless of which models you use, plus per-call token pricing for any model you've pointed at the proxy with your own key.

Most cost-tracking pages lead with a number. This one leads with a boundary, because the honest answer for Cursor has one and it matters more than any figure would: what you can meter from outside Cursor depends entirely on whether the model call is yours to route. Cursor’s own included models never leave Cursor’s backend. Models you bring yourself, with your own key, do — and that’s the only door a proxy has.

What Cursor itself shows

Cursor’s Spending tab shows real-time usage for two pools — Cursor Models (Composer, Grok, and the rest of what’s included in your plan) and Other Models (third-party models drawing from the same allowance) — plus remaining allowance, any on-demand charges, and the reset date for your billing cycle.

Worth knowing if you’ve used Cursor for a while: as of a July 2026 change, self-serve individual and Teams plans stopped showing a dollar figure per request or per model. Rows covered by your plan now show the word “Included” instead of a price; the per-day dollar graph and the cost column in usage CSVs went with it, and Cursor staff confirmed the zeroing was retroactive on historical records, not just new ones — “because this is applied when records are read, historical results are affected, too.” The stated rationale: showing a dollar amount on plan-covered usage was confusing, since that figure — computed at API rates — was often higher than what customers actually paid. Dollar amounts weren’t removed everywhere: on-demand spending still shows in dollars, the CSV Cost column still carries dollars for on-demand rows, and Enterprise plans kept the full per-model breakdown throughout.

For a team, the admin dashboard and Admin API go further — spend and token consumption broken down by model, token type, and developer — but that’s an Enterprise-tier surface, and it’s still Cursor’s own view of Cursor’s own traffic. None of it is a tool-call ledger: what ran, what a hook decided, what got denied. That’s a different question than what the model calls cost.

Bring your own key: the door that actually opens

Cursor lets you add your own API key for OpenAI, Anthropic, Google, Azure, or AWS Bedrock models under Settings → Models. Cursor’s own docs are specific about the boundary: “Custom API keys only work with chat models. Tab completion continues using Cursor’s built-in models.” Even with a key you supply, a request is still “routed through Cursor’s servers for final prompt building” before it reaches the provider — your key travels with the request, it isn’t a straight pass-through to an endpoint you fully control by default.

That’s the model class the ACP proxy can reach. Cursor’s model settings include a custom endpoint field — an OpenAI-compatible base URL override — that applies to a model you’ve configured with your own key. Point it at https://api.agenticcontrolplane.com/v1, authenticate with your ACP workspace key, and every call to that model is priced from the usage fields the response carries back: model, tokens, cached share, dollars.

curl -sf https://agenticcontrolplane.com/install.sh | bash
# Cursor Settings -> Models -> your BYOK model -> API Base URL:
#   https://api.agenticcontrolplane.com/v1
# Auth: your ACP workspace key (gsk_...)

What this doesn’t reach: Composer, Grok, and every other model in Cursor’s included pool. Those calls are built and dispatched by Cursor’s own backend as part of your subscription — there’s no base-URL field for them because there’s no outbound request that field could redirect. If your Cursor usage is mostly the bundled models — which, for most Pro and Team seats, it is — the proxy has nothing to meter, and no tool outside Cursor changes that, ACP included.

Bring your own key, priced

An ACP session trace: each model call priced with its token and cached-token counts, interleaved with the tool calls it drove — the cost X-ray for one run

This is the BYOK path: a session trace for a Cursor model you’ve added with your own key and pointed at the ACP proxy, priced call by call. It’s the same trace shape ACP shows for every harness — but for Cursor, it only exists for models routed through the proxy, never for Composer or Grok on the included pool.

What the hook sees regardless

Separately from any model-metering question, the ACP hook for Cursor registers on preToolUse and postToolUse and logs every Composer tool call — file edits, shell commands, MCP invocations — with policy decisions, whichever models produced them. That log doesn’t need BYOK, doesn’t need the proxy, and doesn’t care whether a call came from Composer, Grok, or a custom model: it’s watching the tool-call plane, and tokens live on a different plane entirely.

What ACP adds, honestly

  • Full tool-call audit, every configuration. File edits, shell, MCP calls, and policy decisions on each — this is the hook, and it doesn’t depend on which models you use.
  • Per-call token pricing, BYOK models only. Model, input/output/cached tokens, and dollars at list rates, for any model you’ve added with your own key and pointed at the proxy.
  • Nothing for the bundled pool. Composer, Grok, and the rest of Cursor’s included models aren’t reachable by a base URL, so no per-call price is possible for them from outside Cursor. Cursor’s own Spending tab — pool totals, remaining allowance, on-demand dollars — is the source for that traffic, and as of July it no longer breaks included usage down by request or model even there.

Known limitations

  • The proxy only prices BYOK. If your Cursor plan doesn’t use custom-key models, there is no per-call cost surface to add — full stop. Say so before anyone sets an expectation the account can’t meet.
  • The hook sees tool calls, not tokens, on every configuration — BYOK or bundled. Cost and tool-call control are separate planes here the same way they are in every other harness.
  • Tab completion is out of reach entirely. It always uses Cursor’s built-in models, so BYOK and the proxy setting don’t apply to it under any configuration.
  • Cursor’s own per-model dollar breakdown is gone for self-serve plans. If you need that level of detail on Cursor’s own traffic and you’re not on Enterprise, the token-only Usage page and the still-dollar on-demand page are what’s left natively.

Comparing to Claude Code cost tracking

Claude Code’s cost story is the opposite shape: every session, subscription or API key, is priced because the ACP hook reads the transcript Claude Code already writes — no proxy required, no BYOK gate. Cursor’s architecture doesn’t hand an outside hook that transcript, so metering here depends on whether the model call is one you can route yourself. Two different harnesses, two different places the cost data actually lives.

Frequently asked questions

Can ACP show what a Cursor session costs in tokens or dollars?

Only for models you’ve added with your own API key (BYOK) and pointed at the ACP proxy’s base URL. Cursor’s bundled, subscription-covered models — Composer, Grok, and the rest of the included pool — route through Cursor’s own backend regardless of any base URL you set, so no outside tool, ACP included, can meter them. The ACP hook itself sees tool calls, not tokens, on every configuration.

Does the ACP hook for Cursor see token usage?

No. The hook registers on preToolUse and postToolUse, which see tool calls — file edits, shell commands, MCP invocations — and their results. Token counts and per-call price live on the model request path, which the hook never touches. That’s true for every model Cursor uses, BYOK or bundled.

What does Cursor's own Spending tab show today?

Real-time usage across two pools (Cursor Models and Other Models), remaining allowance, and any on-demand charges, with the reset date for the billing cycle. As of a July 2026 change, self-serve individual and Teams plans no longer show a dollar figure per request or per model — those rows display ‘Included’ instead of a price, and even historical records were retroactively zeroed. On-demand spending still shows dollar amounts. Enterprise plans kept the dollar breakdown.

Why can't the ACP proxy meter Cursor's Composer or Grok usage?

Because those are Cursor’s own included models, not ones you’ve configured with a custom API key — a subscription-covered model call is built and routed by Cursor’s backend, never passed through a base URL you control. The proxy setting in Cursor’s model settings only takes effect for a model you’ve added yourself with your own key; Tab completion, and the bundled chat models, aren’t reachable by that setting at all.

Where to read more

Share X HN LinkedIn
Get the next data drop
What agents actually cost, new tool-surface captures, and the occasional incident post-mortem — sent when we publish something worth your inbox, not on a schedule. Unsubscribe anytime.
Share: Twitter LinkedIn
Related posts

← back to blog