跳到正文
fomoxx.A PERSONAL CORNER OF THE INTERNET

I Used 1.05 Billion Tokens in Cursor: What a 93.31% Cache Hit Rate Taught Me

AI Agents

中文版

I Used 1.05 Billion Tokens in Cursor: What a 93.31% Cache Hit Rate Taught Me

When Cursor’s per-request pricing period was approaching its end, I exported my Usage Events from March 1 to May 19, 2026 and added them up.

The result was larger than I expected: across this Cursor workflow alone, 80 days accounted for 1,051,066,111 tokens of total throughput.

That was not my total AI usage. I was using other tools during the same period; they are not included here. This dataset only covers what I could see in Cursor’s Usage Events: requests, uncached input, cache writes, cache reads, and output.

The number itself is less interesting than the structure behind it. I wanted to know what sustained large-context coding actually looks like in token terms — and which habits become expensive once consumption matters.

Measurement scope

I merged three Cursor Usage Events tables covering March 1 through May 19, 2026.

MetricValue
Session-event groups627
Sub-request calls1,225
Total token throughput1,051,066,111
Cache-write-related input52,728,641
Uncached input16,064,432
Cache reads975,319,449
Output tokens6,953,589

The striking number is not only the 1.051 billion total. 975 million tokens were cache reads.

That changes how I interpret “large context.” A huge context does not automatically mean paying the full cost of rebuilding that context on every turn. The important question is how much of it gets reused.

Why my contexts were so large

Across the 627 session-event groups, the average context was 2,043,513 tokens, and the median was 1,137,630 tokens.

That came from how I used Cursor. I rarely limited it to isolated prompts like “write this function.” More often, I let Cursor work with codebase indexing and the relevant files while handling cross-module changes, complicated bugs, refactors, and integration work.

The first load is heavy, but the model gets more of the actual system at once: file relationships, interfaces, historical constraints, and the surrounding implementation. For larger projects, that is closer to real software work than repeatedly pasting individual snippets into a chat.

Without effective caching, though, the economics would look very different.

My model choices changed over the period

In March I still mixed Sonnet and Opus. By April, the main Cursor workload had moved almost entirely to Opus.

PeriodModel-call distribution
March 2026Sonnet Medium-Thinking: 118 calls (61.1%); Opus High-Thinking: 75 (38.9%)
April 2026Claude 4.6 Opus High-Thinking: 262 calls (100%)
May 2026 through the 19thClaude 4.6 Opus High-Thinking: 171 calls (100%)

My reason was practical: on a complicated project, one avoided model mistake can save an hour or two of manual debugging.

That does not mean every task deserves the most expensive model. Small edits, isolated scripts, and well-defined low-risk bugs can be handled by cheaper models. The trade-off becomes different when the task spans files, services, legacy behavior, and multiple constraints.

The 93.31% cache hit rate was the real story

The combined cache hit rate was 93.31%.

PeriodCache hit rate
Overall93.31%
March 202690.85%
April 202693.94%
May 202694.38%

That explains why I was willing to work with such large contexts.

My habit was to keep one conversation alive while working on one core goal. I did not constantly start new chats or clear context. I would establish the relevant code, constraints, and goal once, then keep iterating in the same thread for changes, fixes, and tests.

The initial context write could be large. The follow-up work could reuse a lot of it from cache.

Once usage becomes consumption-sensitive, that habit matters even more. This does not mean “never start a new chat.” It means avoid rebuilding the whole project context for every small branch of the same task. When the goal actually changes, start a new context; when it does not, reuse the one you already paid to establish.

The largest single event

The largest event in the dataset happened on May 7, 2026 at 14:46:

  • total context: 20,381,233 tokens
  • cache reads: 19,516,684 tokens
  • cache rate: 95.76%
  • output: 83,968 tokens

The task was a cross-module refactor. The requirement was to change data flow across several core modules without breaking the existing microservice communication protocol. Cursor searched and modified dozens of files and produced nearly 84,000 output tokens in that event.

I could have done the same refactor manually, but it would have been much slower. The value was not merely “typing code faster.” The model could align interfaces, dependencies, historical logic, and the requested change within the same round — provided that I gave it a clear goal and enough context.

What the logs revealed about my work rhythm

The same dataset also exposed my schedule.

Calls were concentrated from Monday through Thursday, with very little activity on Saturday and none on Sunday.

DayCallsPattern
Monday288start and push work forward
Tuesday355busiest day
Wednesday254integration and implementation
Thursday219continued iteration
Friday98wrap-up and checks
Saturday11very little
Sunday0no calls

By hour, two windows dominated:

  • 10:00–12:00: 316 calls, usually problem framing and starting implementation.
  • 14:00–19:00: 741 calls, or 60.49% of the day’s calls, where most refactoring and integration work happened.

For me, AI did not turn software work into a 24-hour activity. It compressed a lot of high-intensity development into a few daytime windows. Keeping evenings and weekends mostly out of the dataset was part of the rhythm, not a sign that the tooling was underused.

What I would do under usage-based pricing

The main change is not “use less AI.” It is waste less context.

I would keep five habits:

  1. Avoid meaningless fresh chats. Keep moving inside the same conversation when the goal is still the same and cache can be reused.
  2. Define the scope before the first large request. Name relevant files, boundaries that should not change, and acceptance criteria.
  3. Ask for a plan before a large edit. Confirm direction before letting the model touch twenty files in the wrong way.
  4. Use cheaper models for small work. A local, explicit, low-risk change does not always need the strongest model.
  5. Still close long conversations when the goal changes. Reuse context for one coherent goal; do not turn one conversation into a dumping ground for unrelated work.

The 1.051 billion tokens did not teach me that “more tokens are better.” It showed me where large-context coding becomes efficient and where it becomes wasteful.

With a high cache hit rate, a large context can be leverage. With an unclear goal, it can simply amplify wasted work.

Scope of this case study

This dataset represents my own projects, model preferences, and workflow during a specific period. It should not be treated as a universal Cursor usage pattern or as a billing forecast for another developer.

What it does provide is a concrete large-context sample: the raw scale, the cache structure, and the workflow decisions that made that scale workable for me.

FAQ

How did I calculate more than one billion Cursor tokens?

I merged local Cursor Usage Events covering March 1 through May 19, 2026. The total includes the Cursor-side request events, cache writes, cache reads, uncached input, and output represented in those logs.

What was the overall Cursor cache hit rate in this dataset?

The combined cache hit rate was 93.31%. It rose from 90.85% in March to 93.94% in April and 94.38% in May through the 19th.

Does a huge context always mean proportionally higher cost?

Not necessarily in this dataset. Large contexts were expensive to write initially, but repeated work inside the same focused conversation reused a very large amount of cached context. The economics depend heavily on cache reuse.

What workflow changes mattered most once usage became consumption-sensitive?

I kept focused long-running conversations for one goal, avoided unnecessary fresh chats, defined scope and acceptance criteria up front, asked for a plan before large edits, and used cheaper models for small low-risk work.

Does this dataset represent a typical Cursor user?

No. It is one developer’s real workload during a specific period, with specific projects, model choices, and a large-context workflow. It is a case study, not a universal billing forecast.