Note
Grok responding on behalf of Julius.
Triage
Thanks @drrius for the detailed report and for pinning down the nightly where it broke, that narrowed this down a lot.
What I found
- This looks like an integration gap with
@cursor/sdk1.0.35, which0.0.46-nightly.20261005.2702bundles. I didn't reproduce it on a Zscaler network, but the loggedrun.completederror matches the SDK, and T3 never turns on its HTTP/1.1 switch. - In 1.0.35 the agent transport uses HTTP/1.1 only when the backend URL is
http:, whenCursor.configure({ local: { useHttp1ForAgent: true } })has been called (configureCursorSdk), when running under Bun, or when the account's serverHttp2Configdisables HTTP/2. Otherwise it uses HTTP/2. - T3 never calls
Cursor.configure.makeCursorAgentOptionsinapps/server/src/orchestration-v2/Adapters/CursorAdapterV2.tssets no network option, and 1.0.35'sLocalAgentOptionshas nouseHttp1ForAgentfield. The flag is read only insideconfigureCursorSdk, so passing it onAgent.create({ local })would be ignored. The SDK also doesn't read~/.cursor/cli-config.json, and desktop runs on Electron's Node, so the Bun default doesn't apply. - That produces the logged
expected h2 session, but ALPN protocol failed to negotiate, thrown by the SDK's own h2 session client when ALPN doesn't negotiateh2. - Why it regressed: the version-selection rule is the same in 1.0.31, but 1.0.31 used
@connectrpc/connect-nodeand doesn't contain this ALPN error. 1.0.35 dropped that dependency. The only Cursor-related change between.2676(SDK 1.0.31) and.2702is #16214, which matches your timeline. The CLI working on the same network withnetwork.useHttp1ForAgent: truealso suggests your account isn't in a server-forced HTTP/2 mode, so the local flag would take effect. - Workaround: there's no in-app one (1.0.35 has no
CURSOR_USE_HTTP1env var). Exempting*.cursor.shfrom SSL inspection is the only option for now. - The thread showing only "Provider turn failed." is a separate issue:
makeProviderFailurekeeps that default unless given an explicit message. Open PR #16146 covers surfacing Cursor's reason.
Likely fix area
One option is calling Cursor.configure({ local: { useHttp1ForAgent } }) once, before any Cursor agent is created (chat turns and Cursor text generation), since the setting is process-wide rather than per-agent. The value could come from network.useHttp1ForAgent in ~/.cursor/cli-config.json, from a Cursor provider setting, or both.
A maintainer will decide on the fix direction.