Cursor-agent acp never reports token usage over ACP, though -p --output-format json does

,

Where does the bug appear (feature/product)?

Cursor CLI

Describe the Bug

cursor-agent in ACP mode never reports token usage, while the exact same binary reports it fine on the --print path. This makes it impossible for ACP clients to account for spend.

Version: 2026.09.15-d2fe57e (also reproduced on 2026.09.08-6caf4ff), macOS arm64

Steps to Reproduce

$ cursor-agent acp    # minimal ACP client: initialize -> session/new -> session/prompt
session/prompt response:  {"stopReason":"end_turn"}

Expected Behavior

Token usage reported as per ACP spec: https://unpkg.com/@agentclientprotocol/[email protected]/dist/schema/types.gen.d.ts).

Either:

  • Emit usage_update — this is the stable part of ACP, documented as something the Agent MAY send (spec), and it carries cost.
  • Populate usage on the session/prompt response — currently experimental (schema), and the natural home for per-turn token counts.

I understand this is marked “experimental” in the ACP spec, but other providers already support it, and the capability already exists in terminal calls with -p, so hopefully easy to port to ACP:

$ cursor-agent -p --force --output-format json "Reply with exactly: PONG"
{"type":"result",...,"usage":{"inputTokens":3,"outputTokens":6, "cacheReadTokens":12635,"cacheWriteTokens":3136}}

Operating System

MacOS
Linux

Version Information

cursor-agent 2026.09.15

Does this stop you from using Cursor

Sometimes - I can sometimes use Cursor

The same-binary comparison is helpful. For your ACP client, would an explicit “usage unavailable” signal be enough as a first step, or do you need the per-turn counts to enforce a budget? I’d be wary of treating the missing field as zero when the run itself completed.

A flag would be good until available (-1 or null maybe?). Long-term, I personally need this for tracking and measuring usage by various CI/CD processes, and would guess many others do as well. Trying to export CSVs from the usage panel and then correlate them to specific automated pipelines is nonviable.

Hey @peckjon, thanks - the same-binary contrast makes it clear. You’ve got it right: the ACP session/prompt response only carries stopReason today, and the per-turn usage that -p --output-format json reports isn’t surfaced over ACP. That’s on our side, not your setup, and it’s an issue we’re tracking with your report added.

Agree with you and @joinwell52 that a missing field shouldn’t read as zero - I’ve passed along both the explicit “unavailable” flag idea and the per-turn counts for CI/CD accounting. No ETA yet, but I’ll post here when there’s an update. For spend today, -p --output-format json is the only place the CLI reports per-turn usage.