Cursor planning mode crash

Where does the bug appear (feature/product)?

Cursor IDE

Describe the Bug

The cursor planning mode tool times out when you ask it to edit a plan.

Steps to Reproduce

1 - Request a plan
2 - Ask to edit the plan

Expected Behavior

Plan is edited

Screenshots / Screen Recordings

Operating System

Linux

Current Cursor Version (Menu → About Cursor → Copy)

Version: 2.1.36
VSCode Version: 1.105.1
Commit: 9cd7c8b6cebcbccc1242df211dee45a4b6fe15e0
Date: 2025-11-26T03:43:48.079Z
Electron: 37.7.0
Chromium: 138.0.7204.251
Node.js: 22.20.0
V8: 13.8.258.32-electron.0
OS: Linux x64 6.8.0-88-generic

Additional Information

I only sent one print, but this has been happening for at least 1 or 2 weeks. It does not matter which model I’m using. The work around is to copy the markdown of the plan and open a new agent window and paste it there, asking for a new plan following the pasted one.

Does this stop you from using Cursor

No - Cursor works, but with this issue

Hey, thanks for the report. This seems similar to other agent planning timeout issues we’re tracking. Let’s gather some diagnostics:

Please share:

  • Request ID: In the stuck chat, go to the context menu (top right) → Copy Request ID
  • Console errors: Help → Toggle Developer Tools → Console tab (screenshot any errors when timeout occurs)
  • Extensions: Try launching with cursor --disable-extensions from terminal and check if editing plans works

Your workaround (copying markdown to a new agent window) is a good temporary solution. The diagnostic information above will help us determine if this needs escalation to engineering.

Let me know what you find!

1 Like

Request ID: 390e952a-09c0-4594-a8cc-b13bcdba5ace

Context of the request: Asked to plan a change on my cards. When hvoer, show detaisl about the equipments they are showing. THen, asked to change the plan to, instead of showing on card horver, add a “i” icon on the card, and show when hovering the icon.

It seems it times out after it fails with this too may times:

image

Funny enough, on this request, it worked, that’s why I’m sending it. If the tool calling fails more than 3 times, a timeout occurs. If the tool calling works before it with 3 or less calls, it does not timeout.

Copy paste of the Error:

[ToolV2Service] Error executing tool 43 (createPlanParams): {toolCallId: ‘tool_58a6b550-a10d-4147-be68-8c7e143058a’, name: ‘create_plan’, isStreaming: true, error: {…}}error: message: "Attempted to use old_str/new_str for plan with an invalid string to replace"name: "Error"stack: “Error: Attempted to use old_str/new_str for plan with an invalid string to replace\n at lps.finishStream (vscode-file://vscode-app/opt/Cursor/usr/share/cursor/resources/app/out/vs/workbench/workbench.desktop.main.js:2957:2678)\n at lps.call (vscode-file://vscode-app/opt/Cursor/usr/share/cursor/resources/app/out/vs/workbench/workbench.desktop.main.js:2957:5135)\n at vscode-file://vscode-app/opt/Cursor/usr/share/cursor/resources/app/out/vs/workbench/workbench.desktop.main.js:2974:24715\n at kps.runTool (vscode-file://vscode-app/opt/Cursor/usr/share/cursor/resources/app/out/vs/workbench/workbench.desktop.main.js:2974:25389)\n at kps.toolWrappedStream (vscode-file://vscode-app/opt/Cursor/usr/share/cursor/resources/app/out/vs/workbench/workbench.desktop.main.js:2974:30882)\n at async vscode-file://vscode-app/opt/Cursor/usr/share/cursor/resources/app/out/vs/workbench/workbench.desktop.main.js:4064:10092\n at async JL.handleStreamComposer (vscode-file://vscode-app/opt/Cursor/usr/share/cursor/resources/app/out/vs/workbench/workbench.desktop.main.js:2786:993)\n at async jro.streamResponse (vscode-file://vscode-app/opt/Cursor/usr/share/cursor/resources/app/out/vs/workbench/workbench.desktop.main.js:6996:12141)\n at async sao. (vscode-file://vscode-app/opt/Cursor/usr/share/cursor/resources/app/out/vs/workbench/workbench.desktop.main.js:7143:8433)\n at async rao. (vscode-file://vscode-app/opt/Cursor/usr/share/cursor/resources/app/out/vs/workbench/workbench.desktop.main.js:7145:2281)\n at async zoo. (vscode-file://vscode-app/opt/Cursor/usr/share/cursor/resources/app/out/vs/workbench/workbench.desktop.main.js:7139:1113)\n at async Koo. (vscode-file://vscode-app/opt/Cursor/usr/share/cursor/resources/app/out/vs/workbench/workbench.desktop.main.js:7139:34444)\n at async Qoo. (vscode-file://vscode-app/opt/Cursor/usr/share/cursor/resources/app/out/vs/workbench/workbench.desktop.main.js:7139:48849)\n at async sFe. (vscode-file://vscode-app/opt/Cursor/usr/share/cursor/resources/app/out/vs/workbench/workbench.desktop.main.js:2974:45620)\n at async nao. (vscode-file://vscode-app/opt/Cursor/usr/share/cursor/resources/app/out/vs/workbench/workbench.desktop.main.js:7143:7461)\n at async gse.processCodeBlocks (vscode-file://vscode-app/opt/Cursor/usr/share/cursor/resources/app/out/vs/workbench/workbench.desktop.main.js:2900:3418)\n at async Pj.submitChatMaybeAbortCurrent (vscode-file://vscode-app/opt/Cursor/usr/share/cursor/resources/app/out/vs/workbench/workbench.desktop.main.js:4064:13781)\n at async To (vscode-file://vscode-app/opt/Cursor/usr/share/cursor/resources/app/out/vs/workbench/workbench.desktop.main.js:6208:3514)”[[Prototype]]: Objectconstructor: ƒ Object()hasOwnProperty: ƒ hasOwnProperty()length: 1name: "hasOwnProperty"arguments: (…)caller: (…)[[Prototype]]: ƒ ()[[Scopes]]: Scopes[0]isPrototypeOf: ƒ isPrototypeOf()propertyIsEnumerable: ƒ propertyIsEnumerable()toLocaleString: ƒ toLocaleString()toString: ƒ toString()valueOf: ƒ valueOf()defineGetter: ƒ defineGetter()defineSetter: ƒ defineSetter()lookupGetter: ƒ lookupGetter()lookupSetter: ƒ lookupSetter()proto: (…)get proto: ƒ proto()set proto: ƒ proto()isStreaming: truename: "create_plan"toolCallId: “tool_58a6b550-a10d-4147-be68-8c7e143058a”[[Prototype]]: Objectconstructor: ƒ Object()hasOwnProperty: ƒ hasOwnProperty()isPrototypeOf: ƒ isPrototypeOf()propertyIsEnumerable: ƒ propertyIsEnumerable()toLocaleString: ƒ toLocaleString()toString: ƒ toString()valueOf: ƒ valueOf()defineGetter: ƒ defineGetter()defineSetter: ƒ defineSetter()lookupGetter: ƒ lookupGetter()lookupSetter: ƒ lookupSetter()proto: (…)get proto: ƒ proto()set proto: ƒ proto()
toolWrappedStream @ workbench.desktop.main.js:2974
await in toolWrappedStream
(anonymous) @ workbench.desktop.main.js:4064
handleStreamComposer @ workbench.desktop.main.js:2786
streamResponse @ workbench.desktop.main.js:6996
(anonymous) @ workbench.desktop.main.js:7143
(anonymous) @ workbench.desktop.main.js:7145
(anonymous) @ workbench.desktop.main.js:7139
(anonymous) @ workbench.desktop.main.js:7139
(anonymous) @ workbench.desktop.main.js:7139
(anonymous) @ workbench.desktop.main.js:2974
(anonymous) @ workbench.desktop.main.js:7143
processCodeBlocks @ workbench.desktop.main.js:2900
submitChatMaybeAbortCurrent @ workbench.desktop.main.js:4064
await in submitChatMaybeAbortCurrent
(anonymous) @ workbench.desktop.main.js:52
Rrr @ workbench.desktop.main.js:52
W6d @ workbench.desktop.main.js:52
n.value @ workbench.desktop.main.js:52
To @ workbench.desktop.main.js:6208
await in To
onSubmit @ workbench.desktop.main.js:6208
de @ workbench.desktop.main.js:6135
onSubmit @ workbench.desktop.main.js:6135
handleSubmit @ workbench.desktop.main.js:6029
(anonymous) @ workbench.desktop.main.js:6029
Fal @ workbench.desktop.main.js:444
(anonymous) @ workbench.desktop.main.js:444
Bal @ workbench.desktop.main.js:444
_X @ workbench.desktop.main.js:444
update @ workbench.desktop.main.js:446
Fal @ workbench.desktop.main.js:444
du @ workbench.desktop.main.js:444
ljd @ workbench.desktop.main.js:444
(anonymous) @ workbench.desktop.main.js:444
workbench.desktop.main.js:2974 [ToolV2Service] ToolCallError details: {clientMessage: ‘Received invalid string to replace in plan’, modelMessage: ‘Received invalid string to replace in plan. The cu…sible and works on both desktop and touch devices’, actualError: ‘Attempted to use old_str/new_str for plan with an invalid string to replace’}actualError: "Attempted to use old_str/new_str for plan with an invalid string to replace"clientMessage: "Received invalid string to replace in plan"modelMessage: “Received invalid string to replace in plan. The current contents are: # Add Hover Tooltip to Equipment Cards\n\n## Overview\n\nAdd a hover tooltip to equipment cards in the remote access portal that displays equipment details when users hover over the cards.\n\n## Implementation Steps\n\n### 1. Create Tooltip Component\n\n- Create remote-access-portal/src/components/ui/tooltip.tsx using Radix UI’s @radix-ui/react-tooltip (already installed)\n- Follow the same pattern as the tooltip component in scheduling-platform/src/components/ui/tooltip.tsx\n- Include TooltipProvider, Tooltip, TooltipTrigger, and TooltipContent components\n\n### 2. Update EquipmentCard Component\n\n- Modify remote-access-portal/src/components/ui/equipment-card.tsx to:\n- Accept additional equipment details in props (connection type, setup description, connection params)\n- Wrap the card in a Tooltip component\n- Display equipment details in the tooltip content:\n - Equipment name\n - Connection type/protocol\n - Setup description (if available)\n - Connection parameters (hostname, port, username - excluding sensitive data like passwords)\n\n### 3. Update EquipmentsList Component\n\n- Modify remote-access-portal/src/pages/access-reservations/components/equipments-list.tsx to:\n- Extract full equipment object data from reservations (including params)\n- Pass complete equipment details to EquipmentCard component\n- Update the Equipment interface to include params if needed\n\n### 4. Styling\n\n- Style the tooltip to match the existing design system\n- Ensure proper positioning and z-index to appear above other elements\n- Add appropriate spacing and formatting for the equipment details display\n\n## Files to Modify\n\n- remote-access-portal/src/components/ui/equipment-card.tsx - Add tooltip wrapper and display logic\n- remote-access-portal/src/pages/access-reservations/components/equipments-list.tsx - Pass full equipment data\n- Create: remote-access-portal/src/components/ui/tooltip.tsx - New tooltip component\n\n## Technical Details\n\n- Use Radix UI Tooltip primitives (already installed: @radix-ui/react-tooltip)\n- Tooltip should appear on hover with a small delay for better UX\n- Display connection parameters in a readable format (key-value pairs)\n- Exclude sensitive information like passwords from the tooltip display\n- Ensure tooltip is accessible and works on both desktop and touch devices”[[Prototype]]: Object
toolWrappedStream @ workbench.desktop.main.js:2974
await in toolWrappedStream
(anonymous) @ workbench.desktop.main.js:4064
handleStreamComposer @ workbench.desktop.main.js:2786
streamResponse @ workbench.desktop.main.js:6996
(anonymous) @ workbench.desktop.main.js:7143
(anonymous) @ workbench.desktop.main.js:7145
(anonymous) @ workbench.desktop.main.js:7139
(anonymous) @ workbench.desktop.main.js:7139
(anonymous) @ workbench.desktop.main.js:7139
(anonymous) @ workbench.desktop.main.js:2974
(anonymous) @ workbench.desktop.main.js:7143
processCodeBlocks @ workbench.desktop.main.js:2900
submitChatMaybeAbortCurrent @ workbench.desktop.main.js:4064
await in submitChatMaybeAbortCurrent
(anonymous) @ workbench.desktop.main.js:52
Rrr @ workbench.desktop.main.js:52
W6d @ workbench.desktop.main.js:52
n.value @ workbench.desktop.main.js:52
To @ workbench.desktop.main.js:6208
await in To
onSubmit @ workbench.desktop.main.js:6208
de @ workbench.desktop.main.js:6135
onSubmit @ workbench.desktop.main.js:6135
handleSubmit @ workbench.desktop.main.js:6029
(anonymous) @ workbench.desktop.main.js:6029
Fal @ workbench.desktop.main.js:444
(anonymous) @ workbench.desktop.main.js:444
Bal @ workbench.desktop.main.js:444
_X @ workbench.desktop.main.js:444
update @ workbench.desktop.main.js:446
Fal @ workbench.desktop.main.js:444
du @ workbench.desktop.main.js:444
ljd @ workbench.desktop.main.js:444
(anonymous) @ workbench.desktop.main.js:444
workbench.desktop.main.js:55 ERR Attempted to use old_str/new_str for plan with an invalid string to replace: Error: Attempted to use old_str/new_str for plan with an invalid string to replace

Disabling extensions made no difference.

Thanks for the report and for providing full diagnostics!

Based on your Request ID and error stack trace, this looks like a bug in the create_plan tool - when it can’t find valid strings to replace in the plan after several failed attempts, a timeout occurs.

Temporary solution - copy the markdown of the plan into a new agent window and continue there.

1 Like

Thanks for the feedback. Will keep on doing the temporary solution until fixes are launched.