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.
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.
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:
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
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.