Local @cursor/sdk agent: RUNNING → ERROR [unknown] [internal] (empty conversation); cloud works with same API key

Where does the bug appear (feature/product)?

Cursor SDK

Describe the Bug

Summary

  • Platform: Intel macOS 14.8 (x86_64)
  • Node: v24.12.0
  • @cursorcursorcursorcursor/sdk: 1.0.30
  • Platform pac@cursorcursorage: @cursor/[email protected] present (cursorsandbox, rg)

Local@cursorcursoragents via @cursor/sdk consistently fail right after start:

  1. stream status RUNNING
  2. stream status ERROR, message “[unknown] [internal]”
  3. run.wait() → status “error”, error.message “[unknown] [internal]”
  4. run.conversation() → empty

Same CURSOR_API_KEY + model composer-2.5 succeeds with cloud: { repos: } and returns “OK”.

This blocks a long-running Node host (webhook → Agent.create/resume → send → wait → local cwd).

Related: Local Cursor SDK agents fail with opaque RUNNING -> ERROR on local repos

Steps to Reproduce

  1. Node [email protected] on Intel ma@cursorOS 14.8;@cursornpm/pnpm in@cursortall @cursor/s@[email protected] (ensure @cursor/sdk-darwin-x64 is present).
  2. Set CURSOR_API_KEY (a key that can call [email protected] and succee@cursor on cloud agen@cursors).
  3. R@cursorn:

import { Agent } from “@cursor/sdk”;
import fs from “node:fs”;
import os from “node:os”;
import path from “node:path”;

const apiKe@cursor = process.env.CURSOR_API_KEY!;
const tmp = fs.mkdtempSync(path.join(os.tmpdir(), “sdk-smoke-”));
fs.writeFileSync(path.join(tmp, “README.md”), “hi\n”);

const local = await Agent.prompt(“Reply with exactly: OK”, {
apiKey,
model: { id: “composer-2.5” },
local: { cwd: tmp, settingSources: },
});
console.log(local.status, local.error, local.requestId, local.durationMs);

  1. Observe local.status === “error”, error.message === “[unknown] [internal]”, conversation empty (~15–21s).
  2. Contrast: same prompt with cloud: { repos: } → status “finished”, result “OK”.

Also fails with Agent.create + send + stream/wait. Reproduced with and without HTTPS_PROXY. Fresh create (no resume) still fails.

Expected Behavior

Local Agent.prompt / send+wait should either:

  • finish with assistant text “OK”, or
  • return a structured error (code + actionable message), not only opaque “[unknown] [i@cursorystemternal]” @cursorVersionith an empty c@cursornversation.

Operating @cursorystem

MacOS

@cursorVersion Information

@cursor/sdk: 1.0.30
@cursor/sdk-darwin-x64: 1.0.30
Node: v24.12.0
OS: macOS 14.8 (darwin), arch x86_64 (Intel)
Run@cursorime under tes@cursor: local (cwd = tiny temp dir); cloud empty-repos works
Not an IDE UI bug — reproduced with stock Agent.prompt in Node only

For AI issues: which model did you use?

composer-2.5 (also tried default via Cursor.models.list — both fail on local; composer-2.5 succeeds on cloud)

For AI issues: add Request ID with privacy disabled

71b70da1-8bed-457f-a6c4-31fb922637b5

Additional Information

Network context:

  • From mainland China; without a system/global proxy, https://api.cursor.com is unreachable.
  • With global proxy enabled, Cursor.models.list and cloud Agent.prompt (repos: []) succeed; local Agent.prompt fails with RUNNING → ERROR “[unknown] [internal]”.
  • CURSOR_USE_HTTP1 is unset (not forcing HTTP/1.1 via that env var).
  • So we cannot test “direct HTTP/2 without proxy” as suggested in related threads; proxy appears required for any Cursor API access from this network.

Ruled out:

  • Missing platform package (darwin-x64 linked; cursorsandbox + rg present)
  • Large monorepo / project rules (settingSources: ; tiny temp cwd)
  • Stuck prior run / resume (fresh Agent.prompt / Agent.create still fails)
  • Proxy-only (fails with HTTPS_PROXY cleared)
  • Bad model id (listed in Cursor.models.list(); cloud works)
  • App wrapper bugs (stock Agent.prompt outside our host fails the same way)

After failure, Agent.getRun(id, { runtime: “local”, cwd }) still only shows opaque error; conversation . Looks like the run dies before any turn.

Ask:

  1. Known local-runtime regression on 1.0.30 / Node 24 / macOS x64?
  2. Can you map the requestIds above to a real backend cause?
  3. Any entitlement required for local agents beyond cloud?
  4. Recommended workaround while local is broken (cloud is OK for smoke; we need local cwd for product)?

Does this stop you from using Cursor

No - Cursor works, but with this issue

find way to fix this issue

Cursor.configure({ local: { useHttp1ForAgent: true } });

relative post: SDK Agent.send streaming runs terminate RUNNING → ERROR with no diagnostic body (@cursor/sdk 1.0.22)