Description
Since Cursor 3.9.16, AI model requests are handled by the always-local-singleton utility process. This process does not honor the IDE’s http.proxy or http.proxySupport settings — it makes direct connections using Node.js native http2.connect() / https.request() without a proxy agent.
Additionally, even when cursor.general.disableHttp2 is explicitly set to true, a server-side value (lastServerHttp2DisabledValue) can silently override it back to false, forcing HTTP/2 connections that have no proxy support at all.
Environment
- Cursor 3.9.16, macOS (likely affects all platforms)
- Corporate network requiring outbound traffic through a proxy
{
"cursor.general.disableHttp2": true,
"http.proxy": "http://127.0.0.1:7890",
"http.proxyStrictSSL": false,
"http.proxySupport": "override"
}
Steps to Reproduce
- Configure
http.proxyin Cursor settings - Set
cursor.general.disableHttp2totrue - Use any Claude model in Chat or Agent mode
- Observe “Model not available — This model provider is not supported in your region”
The Two Issues
1. Singleton process ignores http.proxy
The always-local-singleton process calls https.request(url, options) without passing an agent. Unlike the main Electron process, it does not read or respect the proxy configuration. All requests go direct.
Verified via lsof: the singleton establishes TCP connections directly to Cursor API servers (Cloudflare IPs), bypassing the configured local proxy entirely.
2. Server overrides user’s disableHttp2 setting
In alwaysLocalSingletonMain.js, when the server returns lastServerHttp2DisabledValue of 2 or 4, the code evaluates to false (HTTP/2 enabled) — ignoring the user’s explicit true setting. Since http2.connect() has zero proxy support in Node.js, this makes the proxy bypass unavoidable even for users who correctly configured both proxy and HTTP/1.1.
Expected Behavior
- The
always-local-singletonprocess should honorhttp.proxyandhttp.proxySupport, consistent with how the main Electron process handles proxy settings cursor.general.disableHttp2: trueshould not be overridden by a server-side value