Where does the bug appear (feature/product)?
Cursor IDE
Describe the Bug
Title: Integrated terminal / agent shell bootstrap can hang forever on snap=$(command cat <&3) — child cat blocks on read(fd 3), parent zsh blocks on readoutput; user command never executes
Environment: macOS 26.3.1 (arm64), Cursor (extension host spawning zsh wrapper).
Symptom: Terminal jobs that should finish in milliseconds run indefinitely. User sees a stuck shell; the actual command (e.g. zqk object update …) never starts.
Evidence (sample stacks):
Child /bin/cat: all samples in read() — blocked reading stdin (fd 3 in cat <&3).
Parent /bin/zsh: all samples in readoutput → read() — blocked collecting command-substitution output from the cat child.
Parent process is Cursor Helper (Plugin) — consistent with the sandbox/bootstrap wrapper.
Root cause (inferred): The file descriptor passed as fd 3 for the “environment snapshot” (or equivalent) never reaches EOF and may never deliver a complete payload, so cat never terminates and zsh never leaves command substitution. There is no timeout on this handshake, so the hang is unbounded.
Suggested fixes:
Hard timeout on the snapshot read phase (e.g. 2–5s wall clock): if cat <&3 does not complete, kill the child, close fds, and surface a clear error (“sandbox snapshot handshake timed out”) instead of hanging forever.
Guarantee writer-side closure: Ensure the extension host always closes the write end of fd 3 on success and on all error/cancel paths (crash-safe teardown), so read() cannot block forever waiting for EOF.
Size / chunk contract: If the snapshot is large, document a finite length prefix or framed messages so the reader knows when to stop without relying on a stuck peer.
Telemetry: Log time-to-first-byte and time-to-EOF on fd 3; flag runs where TTFB > threshold or EOF never arrives (this bug).
UX: If the handshake fails or times out, do not leave the terminal session wedged; reset or offer “Retry terminal bootstrap.”
Severity: High — data loss of user time, blocked automation, false impression that user tools (e.g. CLI) are broken when they never ran.
-------------- process sample ------------------------------
Analysis of sampling cat (pid 92093) every 1 millisecond
Process: cat [92093]
Path: /bin/cat
Load Address: 0x1024bc000
Identifier: cat
Version: 197
Code Type: ARM64E
Platform: macOS
Parent Process: zsh [92092]
Target Type: live task
Date/Time: 2026-04-07 20:58:38.598 -0700
Launch Time: 2026-04-07 20:30:45.886 -0700
OS Version: macOS 26.3.1 (25D2128)
Report Version: 7
Analysis Tool: /usr/bin/sample
Physical footprint: 1025K
Physical footprint (peak): 1025K
Idle exit: untracked
Call graph:
2601 Thread_1142245 DispatchQueue_1: com.apple.main-thread (serial)
2601 start (in dyld) + 7184 [0x18035dd54]
2601 ??? (in cat) load address 0x1024bc000 + 0x738 [0x1024bc738]
2601 ??? (in cat) load address 0x1024bc000 + 0xae8 [0x1024bcae8]
2601 read (in libsystem_kernel.dylib) + 8 [0x1806e5908]
Total number in stack (recursive counted multiple, when >=5):
Sort by top of stack, same collapsed (when >= 5):
read (in libsystem_kernel.dylib) 2601
Binary Images:
0x1024bc000 - 0x1024bd24f +cat (197) <77AA0C70-FE80-3990-B58A-0200FC65E3F2> /bin/cat
0x1802d0000 - 0x1803234bb libobjc.A.dylib (951.1) <9E66CFF2-3EBD-3242-8166-D5D0C204755B> /usr/lib/libobjc.A.dylib
0x180324000 - 0x180354bcb libdyld.dylib (1340) /usr/lib/system/libdyld.dylib
0x180355000 - 0x1803f4713 dyld (1.0.0 - 1340) <044CD67E-3A0A-3CA4-8BB3-A9687D5328FE> /usr/lib/dyld
0x1803f5000 - 0x1803f81d0 libsystem_blocks.dylib (96) /usr/lib/system/libsystem_blocks.dylib
0x1803f9000 - 0x18044e07f libxpc.dylib (3089.80.10) <3B264F68-2825-3790-8796-4B49581D6425> /usr/lib/system/libxpc.dylib
0x18044f000 - 0x18046f95f libsystem_trace.dylib (1815.80.2) <2CE5667A-97C5-35F3-8124-BB48185D0D3D> /usr/lib/system/libsystem_trace.dylib
0x180470000 - 0x18051cccf libcorecrypto.dylib (1922.80.7) /usr/lib/system/libcorecrypto.dylib
0x18051d000 - 0x180568c67 libsystem_malloc.dylib (792.80.2) <102061AD-AC62-30E9-A960-0CC2E38A2D5D> /usr/lib/system/libsystem_malloc.dylib
0x180569000 - 0x1805afe5f libdispatch.dylib (1542.0.4) <4C58AB31-F363-3E75-A8F8-302105812DBF> /usr/lib/system/libdispatch.dylib
0x1805b0000 - 0x1805b2feb libsystem_featureflags.dylib (101) <36BE75BA-0B53-3ACA-ABAF-C639D711C90B> /usr/lib/system/libsystem_featureflags.dylib
0x1805b3000 - 0x180635047 libsystem_c.dylib (1725.40.4) /usr/lib/system/libsystem_c.dylib
0x180636000 - 0x1806c8ea3 libc++.1.dylib (2000.67) <652836CA-32B1-3388-A72A-D6B90DDDA958> /usr/lib/libc++.1.dylib
0x1806c9000 - 0x1806e392f libc++abi.dylib (2000.67) <580BCE60-F6A6-3764-BFE9-57A0DB800C54> /usr/lib/libc++abi.dylib
0x1806e4000 - 0x18072049f libsystem_kernel.dylib (12377.91.3) <78EC33A6-6330-3836-8900-EB90836936E8> /usr/lib/system/libsystem_kernel.dylib
0x180721000 - 0x18072dacb libsystem_pthread.dylib (539.80.3) <0596A7B6-BCE2-3F06-A2E8-3EAAB5371ED8> /usr/lib/system/libsystem_pthread.dylib
0x18072e000 - 0x1807364af libsystem_platform.dylib (359.80.2) <62C9CD37-272D-3D2D-9A1C-6F4EF24F7EC7> /usr/lib/system/libsystem_platform.dylib
0x180737000 - 0x180766e23 libsystem_info.dylib (600) <05CCB208-0B54-38D8-B736-6C7043F446AA> /usr/lib/system/libsystem_info.dylib
0x1846e1000 - 0x1846eb397 libsystem_darwin.dylib (1725.40.4) /usr/lib/system/libsystem_darwin.dylib
0x184b52000 - 0x184b63ff3 libsystem_notify.dylib (344.0.1) <73D7BFA7-9433-3ECD-929F-06220C37F214> /usr/lib/system/libsystem_notify.dylib
0x186e2e000 - 0x186e48fdb libsystem_networkextension.dylib (2205.81.1) <645A9697-79B5-3E35-A642-5FFDD53CB6A7> /usr/lib/system/libsystem_networkextension.dylib
0x186ecc000 - 0x186ee3ff3 libsystem_asl.dylib (406) <2A30FE38-5014-334B-941B-579054EA8C1E> /usr/lib/system/libsystem_asl.dylib
0x188aa8000 - 0x188ab03b7 libsystem_symptoms.dylib (2158.80.11) /usr/lib/system/libsystem_symptoms.dylib
0x18ca72000 - 0x18caaa2bb libsystem_containermanager.dylib (725.80.5) <1DDF96F6-6A8A-33F5-8691-8D3356620687> /usr/lib/system/libsystem_containermanager.dylib
0x18dec8000 - 0x18decc66f libsystem_configuration.dylib (1385.80.4) /usr/lib/system/libsystem_configuration.dylib
0x18decd000 - 0x18ded36a7 libsystem_sandbox.dylib (2680.80.20) <8875D51A-D22D-3A6B-9A17-8D565C96262C> /usr/lib/system/libsystem_sandbox.dylib
0x18f466000 - 0x18f4691fb libquarantine.dylib (196.40.3) <84049E82-ACDC-39F3-A2D7-6ECB912B825A> /usr/lib/system/libquarantine.dylib
0x18fbf6000 - 0x18fbfd00b libsystem_coreservices.dylib (191.3.3) <94151A03-8600-3318-8719-103E2D5E83A5> /usr/lib/system/libsystem_coreservices.dylib
0x190150000 - 0x19018d8b7 libsystem_m.dylib (3309) <9B88F30F-0BEF-391B-A358-8D1E2B08CCBE> /usr/lib/system/libsystem_m.dylib
0x19018f000 - 0x190192537 libmacho.dylib (1030.6.3) /usr/lib/system/libmacho.dylib
0x1901ac000 - 0x1901b961f libcommonCrypto.dylib (600035) <04C03765-D34A-311F-AE1E-CFBB1E627E54> /usr/lib/system/libcommonCrypto.dylib
0x1901ba000 - 0x1901c3b0b libunwind.dylib (1900.125) /usr/lib/system/libunwind.dylib
0x1901cc000 - 0x1901d66ff libcopyfile.dylib (230.0.1.0.1) <4EBDFB06-9F51-3FEF-A4D8-B1AFB9D0E823> /usr/lib/system/libcopyfile.dylib
0x1901d7000 - 0x1901da95f libcompiler_rt.dylib (103.3) <55AFEF28-E352-38B8-ACD6-60B67AA83B68> /usr/lib/system/libcompiler_rt.dylib
0x1901db000 - 0x1901dfa1b libsystem_collections.dylib (1725.40.4) <17BD45DA-1D82-3A90-9F18-5D569A5693B5> /usr/lib/system/libsystem_collections.dylib
0x1901e0000 - 0x1901e34bf libsystem_secinit.dylib (168.40.2) <0928D7E4-5DB0-3B75-9DF5-08EC8E9C033B> /usr/lib/system/libsystem_secinit.dylib
0x1901e4000 - 0x1901e6b57 libremovefile.dylib (84) /usr/lib/system/libremovefile.dylib
0x1901e7000 - 0x1901e7f27 libkeymgr.dylib (31) <18ED97A3-6DD7-3EC2-AB38-E16A862BE1A7> /usr/lib/system/libkeymgr.dylib
0x1901e8000 - 0x1901f0f8f libsystem_dnssd.dylib (2881.80.4.0.1) /usr/lib/system/libsystem_dnssd.dylib
0x1901f1000 - 0x1901f60b3 libcache.dylib (95) /usr/lib/system/libcache.dylib
0x1901f7000 - 0x1901f8cf3 libSystem.B.dylib (1356) <44B9EC51-9AC9-3D3B-A7F8-DEB02133130A> /usr/lib/libSystem.B.dylib
0x27e771000 - 0x27e778319 libRosetta.dylib (367.3) <5315C55D-09E5-394B-A9E5-672B23847BF7> /usr/lib/libRosetta.dylib
0x27fe81000 - 0x27fe84deb libsystem_darwindirectory.dylib (122) <9AD833C7-D009-39FF-8D04-D57C937D9EAC> /usr/lib/system/libsystem_darwindirectory.dylib
0x27fe85000 - 0x27fe8e34b libsystem_eligibility.dylib (289.80.56) <0E973CB5-A124-3716-9841-1EA67809AF06> /usr/lib/system/libsystem_eligibility.dylib
0x27fe8f000 - 0x27fe96873 libsystem_sanitizers.dylib (25) <90C45178-3954-3108-9F2F-44E528DF5E44> /usr/lib/system/libsystem_sanitizers.dylib
0x27fe97000 - 0x27fe97bb7 libsystem_trial.dylib (474.2.0.5.2) /usr/lib/system/libsystem_trial.dylib
--------------------------- process sample ------------------------------
Analysis of sampling zsh (pid 92092) every 1 millisecond
Process: zsh [92092]
Path: /bin/zsh
Load Address: 0x104f84000
Identifier: zsh
Version: 113.40.1
Code Type: ARM64E
Platform: macOS
Parent Process: Cursor Helper (Plugin) [1008]
Target Type: live task
Date/Time: 2026-04-07 20:57:48.116 -0700
Launch Time: 2026-04-07 20:30:45.882 -0700
OS Version: macOS 26.3.1 (25D2128)
Report Version: 7
Analysis Tool: /usr/bin/sample
Physical footprint: 1857K
Physical footprint (peak): 1857K
Idle exit: untracked
Call graph:
2571 Thread_1142243 DispatchQueue_1: com.apple.main-thread (serial)
2571 start (in dyld) + 7184 [0x18035dd54]
2571 zsh_main (in zsh) + 1276 [0x104fb4c58]
2571 init_misc (in zsh) + 152 [0x104fb4060]
2571 execstring (in zsh) + 132 [0x104f96ea8]
2571 execode (in zsh) + 196 [0x104f96f90]
2571 execlist (in zsh) + 676 [0x104f97260]
2571 ??? (in zsh) load address 0x104f84000 + 0x139f8 [0x104f979f8]
2571 ??? (in zsh) load address 0x104f84000 + 0x17d80 [0x104f9bd80]
2571 prefork (in zsh) + 460 [0x104fe7d14]
2571 ??? (in zsh) load address 0x104f84000 + 0x646c0 [0x104fe86c0]
2571 getoutput (in zsh) + 716 [0x104f992e0]
2571 readoutput (in zsh) + 284 [0x104f994ec]
2571 read (in libsystem_kernel.dylib) + 8 [0x1806e5908]
Total number in stack (recursive counted multiple, when >=5):
Sort by top of stack, same collapsed (when >= 5):
read (in libsystem_kernel.dylib) 2571
Binary Images:
0x104f84000 - 0x1050090e7 +zsh (113.40.1) <9DBCB17C-8EDD-3708-890F-A1C89F8A6C16> /bin/zsh
0x1802d0000 - 0x1803234bb libobjc.A.dylib (951.1) <9E66CFF2-3EBD-3242-8166-D5D0C204755B> /usr/lib/libobjc.A.dylib
0x180324000 - 0x180354bcb libdyld.dylib (1340) /usr/lib/system/libdyld.dylib
0x180355000 - 0x1803f4713 dyld (1.0.0 - 1340) <044CD67E-3A0A-3CA4-8BB3-A9687D5328FE> /usr/lib/dyld
0x1803f5000 - 0x1803f81d0 libsystem_blocks.dylib (96) /usr/lib/system/libsystem_blocks.dylib
0x1803f9000 - 0x18044e07f libxpc.dylib (3089.80.10) <3B264F68-2825-3790-8796-4B49581D6425> /usr/lib/system/libxpc.dylib
0x18044f000 - 0x18046f95f libsystem_trace.dylib (1815.80.2) <2CE5667A-97C5-35F3-8124-BB48185D0D3D> /usr/lib/system/libsystem_trace.dylib
0x180470000 - 0x18051cccf libcorecrypto.dylib (1922.80.7) /usr/lib/system/libcorecrypto.dylib
0x18051d000 - 0x180568c67 libsystem_malloc.dylib (792.80.2) <102061AD-AC62-30E9-A960-0CC2E38A2D5D> /usr/lib/system/libsystem_malloc.dylib
0x180569000 - 0x1805afe5f libdispatch.dylib (1542.0.4) <4C58AB31-F363-3E75-A8F8-302105812DBF> /usr/lib/system/libdispatch.dylib
0x1805b0000 - 0x1805b2feb libsystem_featureflags.dylib (101) <36BE75BA-0B53-3ACA-ABAF-C639D711C90B> /usr/lib/system/libsystem_featureflags.dylib
0x1805b3000 - 0x180635047 libsystem_c.dylib (1725.40.4) /usr/lib/system/libsystem_c.dylib
0x180636000 - 0x1806c8ea3 libc++.1.dylib (2000.67) <652836CA-32B1-3388-A72A-D6B90DDDA958> /usr/lib/libc++.1.dylib
0x1806c9000 - 0x1806e392f libc++abi.dylib (2000.67) <580BCE60-F6A6-3764-BFE9-57A0DB800C54> /usr/lib/libc++abi.dylib
0x1806e4000 - 0x18072049f libsystem_kernel.dylib (12377.91.3) <78EC33A6-6330-3836-8900-EB90836936E8> /usr/lib/system/libsystem_kernel.dylib
0x180721000 - 0x18072dacb libsystem_pthread.dylib (539.80.3) <0596A7B6-BCE2-3F06-A2E8-3EAAB5371ED8> /usr/lib/system/libsystem_pthread.dylib
0x18072e000 - 0x1807364af libsystem_platform.dylib (359.80.2) <62C9CD37-272D-3D2D-9A1C-6F4EF24F7EC7> /usr/lib/system/libsystem_platform.dylib
0x180737000 - 0x180766e23 libsystem_info.dylib (600) <05CCB208-0B54-38D8-B736-6C7043F446AA> /usr/lib/system/libsystem_info.dylib
0x1846e1000 - 0x1846eb397 libsystem_darwin.dylib (1725.40.4) /usr/lib/system/libsystem_darwin.dylib
0x184b52000 - 0x184b63ff3 libsystem_notify.dylib (344.0.1) <73D7BFA7-9433-3ECD-929F-06220C37F214> /usr/lib/system/libsystem_notify.dylib
0x186e2e000 - 0x186e48fdb libsystem_networkextension.dylib (2205.81.1) <645A9697-79B5-3E35-A642-5FFDD53CB6A7> /usr/lib/system/libsystem_networkextension.dylib
0x186ecc000 - 0x186ee3ff3 libsystem_asl.dylib (406) <2A30FE38-5014-334B-941B-579054EA8C1E> /usr/lib/system/libsystem_asl.dylib
0x188aa8000 - 0x188ab03b7 libsystem_symptoms.dylib (2158.80.11) /usr/lib/system/libsystem_symptoms.dylib
0x18ca72000 - 0x18caaa2bb libsystem_containermanager.dylib (725.80.5) <1DDF96F6-6A8A-33F5-8691-8D3356620687> /usr/lib/system/libsystem_containermanager.dylib
0x18dec8000 - 0x18decc66f libsystem_configuration.dylib (1385.80.4) /usr/lib/system/libsystem_configuration.dylib
0x18decd000 - 0x18ded36a7 libsystem_sandbox.dylib (2680.80.20) <8875D51A-D22D-3A6B-9A17-8D565C96262C> /usr/lib/system/libsystem_sandbox.dylib
0x18f466000 - 0x18f4691fb libquarantine.dylib (196.40.3) <84049E82-ACDC-39F3-A2D7-6ECB912B825A> /usr/lib/system/libquarantine.dylib
0x18fbf6000 - 0x18fbfd00b libsystem_coreservices.dylib (191.3.3) <94151A03-8600-3318-8719-103E2D5E83A5> /usr/lib/system/libsystem_coreservices.dylib
0x190150000 - 0x19018d8b7 libsystem_m.dylib (3309) <9B88F30F-0BEF-391B-A358-8D1E2B08CCBE> /usr/lib/system/libsystem_m.dylib
0x19018e000 - 0x19018ec9b libcharset.1.dylib (113) /usr/lib/libcharset.1.dylib
0x19018f000 - 0x190192537 libmacho.dylib (1030.6.3) /usr/lib/system/libmacho.dylib
0x1901ac000 - 0x1901b961f libcommonCrypto.dylib (600035) <04C03765-D34A-311F-AE1E-CFBB1E627E54> /usr/lib/system/libcommonCrypto.dylib
0x1901ba000 - 0x1901c3b0b libunwind.dylib (1900.125) /usr/lib/system/libunwind.dylib
0x1901cc000 - 0x1901d66ff libcopyfile.dylib (230.0.1.0.1) <4EBDFB06-9F51-3FEF-A4D8-B1AFB9D0E823> /usr/lib/system/libcopyfile.dylib
0x1901d7000 - 0x1901da95f libcompiler_rt.dylib (103.3) <55AFEF28-E352-38B8-ACD6-60B67AA83B68> /usr/lib/system/libcompiler_rt.dylib
0x1901db000 - 0x1901dfa1b libsystem_collections.dylib (1725.40.4) <17BD45DA-1D82-3A90-9F18-5D569A5693B5> /usr/lib/system/libsystem_collections.dylib
0x1901e0000 - 0x1901e34bf libsystem_secinit.dylib (168.40.2) <0928D7E4-5DB0-3B75-9DF5-08EC8E9C033B> /usr/lib/system/libsystem_secinit.dylib
0x1901e4000 - 0x1901e6b57 libremovefile.dylib (84) /usr/lib/system/libremovefile.dylib
0x1901e7000 - 0x1901e7f27 libkeymgr.dylib (31) <18ED97A3-6DD7-3EC2-AB38-E16A862BE1A7> /usr/lib/system/libkeymgr.dylib
0x1901e8000 - 0x1901f0f8f libsystem_dnssd.dylib (2881.80.4.0.1) /usr/lib/system/libsystem_dnssd.dylib
0x1901f1000 - 0x1901f60b3 libcache.dylib (95) /usr/lib/system/libcache.dylib
0x1901f7000 - 0x1901f8cf3 libSystem.B.dylib (1356) <44B9EC51-9AC9-3D3B-A7F8-DEB02133130A> /usr/lib/libSystem.B.dylib
0x190232000 - 0x1902391bb libiconv.2.dylib (113) <91928A6D-E098-3B69-B8BB-024C1AED3F71> /usr/lib/libiconv.2.dylib
0x198666000 - 0x19869b573 libpcre.0.dylib (21) <0305CDF1-06A2-3D61-A6F8-6C0F1207E75E> /usr/lib/libpcre.0.dylib
0x1b225d000 - 0x1b2299407 libncurses.5.4.dylib (79) <071DBDFA-3CF3-3310-AF0A-BD03F7D21C00> /usr/lib/libncurses.5.4.dylib
0x27e771000 - 0x27e778319 libRosetta.dylib (367.3) <5315C55D-09E5-394B-A9E5-672B23847BF7> /usr/lib/libRosetta.dylib
0x27fe81000 - 0x27fe84deb libsystem_darwindirectory.dylib (122) <9AD833C7-D009-39FF-8D04-D57C937D9EAC> /usr/lib/system/libsystem_darwindirectory.dylib
0x27fe85000 - 0x27fe8e34b libsystem_eligibility.dylib (289.80.56) <0E973CB5-A124-3716-9841-1EA67809AF06> /usr/lib/system/libsystem_eligibility.dylib
0x27fe8f000 - 0x27fe96873 libsystem_sanitizers.dylib (25) <90C45178-3954-3108-9F2F-44E528DF5E44> /usr/lib/system/libsystem_sanitizers.dylib
0x27fe97000 - 0x27fe97bb7 libsystem_trial.dylib (474.2.0.5.2) /usr/lib/system/libsystem_trial.dylib
Steps to Reproduce
ask the cursor agent to run some background process, eventually you’ll see it hang
Expected Behavior
it shouldn’t hang indefinitely
Operating System
MacOS
Version Information
Version: 3.0.12 (Universal)
VSCode Version: 1.105.1
Commit: a80ff7dfcaa45d7750f6e30be457261379c29b00
Date: 2026-04-04T00:13:18.452Z
Layout: editor
Build Type: Stable
Release Track: Default
Electron: 39.8.1
Chromium: 142.0.7444.265
Node.js: 22.22.1
V8: 14.2.231.22-electron.0
OS: Darwin arm64 25.3.0
For AI issues: which model did you use?
Auto
Does this stop you from using Cursor
No - Cursor works, but with this issue