The IDE pointlessly re-draws the entire screen every keypress, so when you’ve got 2 or 3 lines of text, it’s so much redrawing, that it hasn’t finished before you type the next character, which then gets dropped or inserted at the wrong place.
This gets progressively worse and worse, until after about 5 or 6 lines of text, the console is totally unusable for typing into.
Hee is an example of arinlth tI type ifaste th bug kicks in.
Steps to Reproduce
Type long line
I type: Here is an example of an input line that I typed in after the bug kicks in.
I get: Hee is an example of arinlth tI type ifaste th bug kicks in.
Expected Behavior
Typing should work properly.
needless entire-screen and entire-line clear-and-redraw process needs to be removed - use the text drawing toolkit you have properly, or better still - get rid of it and switch to something that works and is stable.
Operating System
Linux
Current Cursor Version (Menu → About Cursor → Copy)
2026.01.17-d239e66 (from bash)
Additional Information
Adding a non-fancy mode would be better - if we want crazy things redrawing all over the place, we can use the IDE - the CLI should limit the redraw madness to bare minimum.
This makes the CLI unusable - every prompt I type is long, and it messes them all up every time.
I’ve tested this on many different distros - same everywhere.
Even more trivial way to reproduce this once its been triggered, you can simply hold down delete on a line with 10 or so words and watch it garble everything as it deletes random characters.
Reproduced with alacritty and xterm.
For example:I pasted the first sentence of this comment into the CLI, held delete for a bit and got this:
If you type fast enough (e.g. voice typing) after you’ve got >3 lines or so of text, the latest version also blows its own brains out:-
ERROR Minified React error #185; visit https://react.dev/errors/185 for the full message or use the non-minified dev environment for full errors and additional helpful warnings.
/home/cnd/.local/share/cursor-agent/versions/2026.01.28-fd13201/96.index.js:48:521515
45: ))?
46: | (?<qBase>${fe})(?<qMod>[?+]?)(?<invalidQ>[?*+\{]?)
47: | \\?.
4 `.replace(/\s+/g,""),"gsu");RegExp;const ge=String.raw,he=ge`\\g<(?<gRNameOrNum>[^>&]+)&R=(?<gRDepth>[^>]+)>`,me=ge`\(\?R=(?<rDepth>[^\)]+)\)|${he}`,ye=ge`\(\?<(?![=!])(?<captureName>[^>]+)>`,Ee=ge`${ye}|(?<unnamed>\()(?!\?)`,Ie=new
8RegExp(ge`${ye}|${me}|\(\?|\\?.`,"gsu"),Ce="Cannot use multiple overlapping recursions";function ve(e){const t=`Max depth must be integer between 2 and 100; used ${e}`;if(!/^[1-9]\d*$/.test(e))throw new Error(t);if((e=+e)<2||e>100)throw new Error(t)}function
:be(e,t,n,r,o,i,s){const a=new Set;r&&ue(e+t,ye,(({groups:{captureName:e}})=>{a.add(e)}),ae.DEFAULT);const l=[n,r?a:null,o,i,s];return`${e}${Be(`(?:${e}`,"forward",...l)}(?:)${Be(`${t})`,"backward",...l)}${t}`}function Be(e,t,n,r,o,i,s){const
a=e=>"forward"===t?e+2:n-e+2-1;let l="";for(let t=0;t<n;t++){const n=a(t);l+=le(e,ge`${Ee}|