I wanted to see if I can use Cursor for work and did a bit of vetting. Under no circumstances are we allowed to send work related code to third-parties, unless explicitly greenlit by compliance and security. OpenAI is greenlit so the “bring your own API key” option sounded great with “local mode”
Was surprised to see that “local mode” isn’t local at all.
Asking anything about code will upload the code to *.api.cursor.sh
, including my openai key in the form of {"modelName":"gpt-3.5-turbo","apiKey":"xxx","azureState":{}},
together with stuff like
{"relativeWorkspacePath":"testappTests/testappTests.swift","range":{"startPosition":{"line":1,"column":1},"endPosition":{"line":27,"column":6}},"contents":"//\n// testappTests.swift\n// testappTests\n//\n//.\n//\n\nimport XCTest\n@testable import testapp\n\nfinal class testappTests: XCTestCase {\n\n override func setUpWithError() throws {\n // Put setup code here. This method is called before the invocation of each test method in the class.\n }\n\n override func tearDownWithError() throws {\n // Put teardown code here. This method is called after the invocation of each test method in the class.\n }\n\n func testExample() throws {\n // This is an example of a functional test case.\n // Use XCTAssert and related functions to verify your tests produce the correct results.\n // Any test you write for XCTest can be annotated as throws and async.\n // Mark your test throws to produce an unexpected failure when your test encounters an uncaught error.\n // Mark your test async to allow awaiting for asynchronous code to complete. Check the results with assertions afterwards.\n }"},"score":0.711380124}
Asking about the codebase will result in all files of the codebase to be uploaded to the cursor.sh apis, which then I guess pings the openai API
I read through the forums and understand that cursor needs to store the index in the form of a vector database on it’s servers, but sending code and api key to those servers when “local mode” is explicitly enabled with an openai key is misleading and needs to be clearly stated.
Can’t the data vectors be computed locally? Why does code need to leave my machine, and why can’t my machine directly use the openai APIs when I already specified my key?
While cursor looks great, IMHO the current data aggregation is a bit much and could never pass a corporate compliance review. It also makes me a little uncomfortable using it for my private projects since I have no idea what happens on cursor’s servers, how data is stored (or not stored) and how logging is handled. It’s all just “we don’t store it” currently without further details
So what exactly is “local mode” when it still communicates everything to the cursor servers?