Repository navigation
Description
Before submitting
- I searched existing issues and did not find a duplicate.
- I included enough detail to reproduce or investigate the problem.
Area
apps/server
Steps to reproduce
- Start a thread on the Cursor provider (seen with
claude-opus-5-5, Medium) with Follow-up behavior set to Steer. - Send:
can you write me a 1000 word story about a dog? - While it is working, send:
no wait a pig please.
Reproduced twice: once in a thread with no project, once in a git project.
Expected behavior
The replacement run still has the original request and adjusts it, for example a 1000-word story about a pig.
Actual behavior
The replacement run has only the steer message. The original prompt is gone:
- No project: the agent replied "I don't have your earlier message… I can't tell whether you wanted a poem, a story, code, or a drawing" and wrote a short pig poem.
- In a project: the agent generated a pig image, with no mention of a story.
Diagnosis (likely cause)
Confirmed from the logs:
- T3 implements a Cursor steer as cancel and restart on the same agent. The provider log shows
run.cancelon the first run, thenrun.starton the sameagentIdwith only the steer text as the prompt. This matches the adapter, which declaressupportsActiveSteering: falseandsupportsSteeringByInterruptRestart: true(packages/provider-cursor/src/server/adapter.ts). - Cursor drops a cancelled run from the agent's conversation. Cursor's own transcript for each agent (
~/.cursor/projects/<workspace>/agent-transcripts/<agentId>/<agentId>.jsonl) starts with the steer message. The interrupted run's user prompt and its partial reply are missing, even though T3's log shows that prompt was sent to the sameagentId. In the no-project thread, the agent read that transcript looking for the earlier request and found nothing. This happened both when the cancelled run had streamed only thinking and when it had already streamed reply text.
Inferred, not verified in code:
- Interrupt-restart steering assumes the provider keeps the interrupted turn. The orchestration-v2 capability doc describes it as interrupting the active turn and "starting a replacement attempt". That only preserves the user's request if the provider keeps the cancelled turn in its history. Cursor doesn't, and T3 doesn't appear to resend the interrupted message. So the replacement run starts with only the steer.
A possible fix is for the replacement prompt on Cursor to carry the interrupted user message, and ideally the partial reply, ahead of the steer text. A provider-level way to keep cancelled runs in the conversation would also work. It's also worth checking whether other adapters that use interrupt-restart steering behave the same way.
Related: #14585 (Cursor steer changed to interrupt and restart), #21040 (a steered Cursor message lost when the replacement run stalls; a different failure), #27014 (Grok: steer without interrupting).
Impact
Major degradation or frequent failure
Version or commit
0.1.8-nightly.20261106.4288
Environment
macOS 26.7.1, T3 Code (Nightly) desktop, Cursor provider via cursor-agent-sdk.local (cursor-agent 2026.10.22-27dcf5f), model claude-opus-5-5
Logs or stack traces
# Provider protocol events (Cursor), project thread. Prompts truncated.
18:01:10.657 outgoing agent.open operation=create
18:01:14.013 incoming agent.opened agentId=agent-41c7eb03-…
18:01:14.104 outgoing run.start msg="can you write me a 1000 word story about a dog? …"
18:01:14.676 incoming run.started runId=run-f4bc0f2e-…
18:01:17.143 incoming interaction.update (thinking-delta, text-delta streamed)
18:01:19.050 outgoing run.cancel runId=run-f4bc0f2e-…
18:01:19.052 incoming run.completed status=cancelled
18:01:19.084 outgoing run.start msg="no wait a pig please …" # same agentId, steer text only
18:01:19.150 incoming run.started runId=run-c931cc92-…
18:01:39.558 incoming run.completed status=finished result="I made you a pig: …"
# Same sequence in the no-project thread:
17:59:02.249 outgoing run.start msg="can you write me a story about a dog, 1000 words? …"
17:59:25.962 outgoing run.cancel runId=run-3c15f216-…
17:59:25.964 incoming run.completed status=cancelled
17:59:25.996 outgoing run.start msg="No sorry wait a pig …" # same agentId
17:59:41.329 incoming run.completed status=finished result="I don't have your earlier message. …"Screenshots, recordings, or supporting files
No project: the steer "No sorry wait a pig" gets "I don't have your earlier message".
In a git project: the steer "no wait a pig please" gets a pig image, and the story request is gone.
Workaround
Use Queue instead of Steer on Cursor threads, or restate the full request in the steer message.
Activity
MathieuLalonde commentedon Nov 8, 2026
Been having the same problem and, combined with #28617, it makes T3 unusable with cursor as trying to stop duplicate responses means it will never have history of the previous response.