Cursor SDK 1.0.31 Adds Live Agent Steering and Background Subagent Results
The latest Cursor SDK release adds live steering for local TypeScript agents, returns background subagent results to the parent run, and adds custom system prompts and MCP tool annotations. The new controls have language and runtime limits worth checking before you adopt them.
The latest Cursor SDK release adds controls for agents that are already running: you can steer a local TypeScript run, and background subagent results now return to the parent run instead of being dropped at the end of the parent turn. The same release adds replaceable system prompts and MCP annotations for custom tools. Cursor's SDK changelog provides the implementation details and runtime limits for each addition (Cursor on X, follow-up, follow-up, follow-up, follow-up).
The useful headline for developers building with the Cursor SDK is that runs can now accept input while work is in progress, while delegated work can finish in the background and still report back through the original run. The new behavior is not uniform across runtimes, so check the language and local-versus-cloud limits before changing an integration.
Steering a Running Agent
The TypeScript SDK adds run.steer(text). Cursor says the method can steer an agent while it runs; the changelog specifies that the message is injected into the turn in flight. If a subagent is running when you steer, it moves to the background and continues working. This feature is for local TypeScript runs. A cloud run returns revert_to_followup, indicating that the message should be sent as a normal follow-up instead (Cursor SDK changelog; Cursor's announcement).
That gives a local integration a way to redirect active work without cancelling the whole run. The response value matters: code should handle revert_to_followup rather than assume that every steering message was delivered into the active turn.
Background Subagents Return Their Results
Previously, a parent turn could finish while a subagent continued in the background. With this release, the subagent's result returns to the parent as a follow-up turn on the same run. run.stream() keeps yielding through those turns, and run.wait() resolves after them. Cursor lists this behavior for local agents in both TypeScript and Python (Cursor SDK changelog; Cursor on X).
For developers, this makes background delegation easier to consume through the run's existing stream or wait path: the child result becomes part of the parent run's completion rather than a separate result channel.
Custom Prompts and MCP Tool Annotations
Two additional changes give developers more control over a local agent's setup:
- Replace the system prompt. TypeScript agents can set
systemPromptonAgent.create()to replace Cursor's built-in prompt for the main agent loop. Rules, skills, and tool schemas still load, and subagents retain their own prompts. The override is local-only, must be passed again toAgent.resume(), and is being enabled account by account (Cursor SDK changelog; Cursor on X). - Pass MCP annotations to custom tools. A TypeScript
local.customToolsentry can includeannotations, includingtitle,readOnlyHint,destructiveHint,idempotentHint, andopenWorldHint. Cursor says these are descriptive hints passed to the model; the SDK does not enforce them (Cursor SDK changelog; Cursor on X).
The practical caveat: steering and prompt replacement are limited to local TypeScript agents, while background results are supported for local TypeScript and Python agents. Tool annotations are not a security boundary. Treat them as model-facing descriptions, and keep actual authorization and safety checks in the host application.
What to Check Before Updating
| Capability | Runtime and language in the changelog | Important limit |
|---|---|---|
run.steer() | Local TypeScript | Cloud runs return revert_to_followup |
| Background subagent results | Local TypeScript and Python | Results return as follow-up turns on the same run |
Custom systemPrompt | Local TypeScript | Pass it again on Agent.resume(); access is enabled per account |
| MCP annotations on custom tools | TypeScript | Descriptive hints only; not enforced by the SDK |
If your integration is already on the Cursor SDK, the most actionable first step is to check the changelog, then add explicit handling for steering fallback and for the extra follow-up turns produced by background subagents.
Sources
- Cursor, SDK changelog: https://cursor.com/docs/sdk/changelog
- Cursor on X, agent steering announcement: https://x.com/cursor_ai/status/2107141004482793827
- Cursor on X, background subagent results: https://x.com/cursor_ai/status/2107141021947904430
- Cursor on X, MCP annotations: https://x.com/cursor_ai/status/2107141038427308473
- Cursor on X, custom system prompts: https://x.com/cursor_ai/status/2107141054071968154
- Cursor on X, TypeScript and Python support details: https://x.com/cursor_ai/status/2107141066403275081
Frequently Asked Questions
What did Cursor add to the SDK?
The release adds live steering for local TypeScript runs, background subagent results that return to the parent run, replaceable system prompts for local TypeScript agents, and MCP annotations for custom tools in TypeScript.
Can I steer a Cursor SDK cloud run?
No. Cursor's SDK changelog says run.steer() is for local TypeScript runs; cloud runs resolve with revert_to_followup instead.
Do MCP annotations enforce permissions?
No. Cursor describes them as descriptive hints passed to the model. The SDK does not enforce them.