Good catch on the details. I’ll correct myself here so I don’t mislead anyone.
First, the exact terminology. The top-level bucket in the report is called Conversation, and per the official description it includes: “your messages, the agent’s replies and thinking, tool calls and their results, file contents it read, search results, images”. The “User Message ~1768” you see is not a separate bucket. It’s an item inside the breakdown of a single turn (User Message / Agent / Tool). System prompt, Tools, Rules, Skills, MCP, Subagents, Summarized conversation are separate buckets, and they are not duplicated inside Conversation. The full mapping table is here: Context Usage Breakdown - #20 by Colin
One important detail about Rules from that same table: always-on rules are counted in the Rules bucket, but agent-requestable rules only contribute their description to Rules. The body of the rule goes into Conversation only when the agent actually reads it. So some of what you intuitively think of as “rules” can in practice be counted under Conversation.
Now, honestly about your question “why does extra content stick to the user turn if the system prompt has its own bucket”. I need to add a caveat: Cursor does not publicly document, at that level of detail, exactly what gets sent together with the user message. The general LLM mechanics are: the model is stateless, so the full context is rebuilt on every request, and it’s convenient for the provider to cache a static prefix (system prompt plus tool definitions) on their side (KV cache). For caching to work, the prefix needs to stay stable between requests, so session-varying pieces (environment, current date, etc.) are likely placed closer to the user turn, not inside the cached prefix. But to be clear, that’s a plausible explanation of the general mechanism, not documented Cursor behavior, so don’t treat it as final truth.
What we can say for sure: the numbers in the report are estimates (roughly characters divided by 4), they’re especially inaccurate for Chinese, there’s no double counting between buckets, and a noticeable part of the first turn is auto-context, not just the text you typed.