What does a session in Cursor (beta) look like as a trace?
Rius turns each Cursor (beta) agent chat into one trace, with the session as the root and each turn, model call, tool call and subagent as spans beneath it. Every span carries timing, status and names such as the model or the tool. Prompts, answers and tool output appear only when you enable a folder with content. The spans carry no token counts or cost.
How it works
The plugin turns the hook events from a Cursor (beta) chat into a tree of spans. The tree looks like this:
AGENT cursor session
└─ CHAIN a turn: one prompt and everything it caused
└─ LLM the answer, with its model
└─ TOOL a tool call. A shell command that exits non-zero is an error.
└─ AGENT a subagent, under the Task call that started itWhat is on each span:
- The session (root). One agent span for the whole chat. On the Agents page the chat appears under an agent named
cursor. - Each turn. A span for one prompt and everything it caused.
- Each model call. A span for the answer, with the model name. With content on, it also holds your prompt and the agent’s answer.
- Each tool call. A span with the tool name and, on failure, the error type. A shell command that exits non-zero is marked as an error. With content on, it also holds the tool’s input and output.
- Each subagent. An agent span nested under the Task call that started it, with its own spans below.
Every span has timing and status. The times are when Cursor reported each step, not when the model call started.
The trace fills in while you work. Spans arrive when the chat starts, after each answer, and every 20 tool calls. The trace closes when Cursor ends the session. If Cursor never says so, your next chat closes it once it has been idle for 12 hours.
With plugin 0.6.2 or later, every span carries user.id, set to the email you signed in with. A chat sent with a key you stored yourself carries no user and lands in the anonymous row on the Users page.
Set it up
- Install the plugin. In Cursor’s plugin settings, choose Import from Repo and enter
glassflow/rius-coding-agents. Installing sends nothing, and tracing stays off until you enable a folder. The plugin needs version 0.6.0 or later for Cursor (beta), Python 3.9 or later on yourPATH, and macOS or Linux. - Sign in and enable a folder. In the agent chat, type each command yourself, because the agent never starts one on its own. Run
/rius-login, pick a workspace in the browser and click Connect. Then run/rius-enable-herein the repo and check it with/rius-status.
/rius-login
/rius-enable-here
/rius-status- Choose how much to send.
/rius-enable-heresends structure only: the span tree, models, timing, tool names and error types, with no prompts, answers or tool output. To see what the agent said and what each tool received and returned, run/rius-enable-content-hereinstead. The plugin replaces the secrets it recognizes with a marker and caps each value at 32 KB. This is best effort, so a secret in an unfamiliar format is sent./rius-disable-herestops a folder, and a disabled folder wins over any enabled parent. - Work as usual, then open the chat in the trace list at
console.rius-glassflow.com.
The Cursor guide covers older cursor-agent versions, using a key from the console, the settings variables and uninstalling.
What you get
- One trace per chat. The waterfall in the trace list shows every turn, model call, tool call and subagent in order. A failed shell command is marked as an error, so you can go from a bad chat to the exact step.
- Who sent it. The Sent by column in the trace list shows whose key sent each chat, and the Users page groups chats by developer.
- An agent view. The
cursoragent on the Agents page counts a chat once its trace is closed. The plugin sends no heartbeat, so chats do not appear under Instances. - Questions in plain language. The plugin registers the Rius MCP server as
rius. After a second sign-in you can ask Cursor (beta) to show your last failed chat and which tool call went wrong. - A local record you control. Each event is first written to a file under
~/.cursor/rius/spool/, readable only by you. With content off, no content is written there.
What the spans do not have: token counts and cost. Cursor’s hooks do not report usage, so a Cursor (beta) trace shows the full tree, timing, models, tools and errors, but no token usage and no cost. Cursor’s cloud and background agents and Tab completions are not traced.
Cursor support is in beta. It is tested against hook payloads from real cursor-agent sessions, mostly headless runs. Tool calls in an interactive cursor-agent session, the agent in the editor and Import from Repo are not tested yet, so some details may change.
When something else fits
- If you need token counts and cost per model call, trace Claude Code or Codex (beta) with the same plugin, because both report usage. Track Claude Code usage and cost across a team shows what those sessions record.
- To compare all four supported coding agents side by side, see Coding agents.