Cursor ACP: session/load fails with Session "<id>" not found, breaking persistent sessions (acpx/OpenClaw ACP runtime)

,

Where does the bug appear (feature/product)?

  • Cursor CLI(specifically Cursor CLI’s ACP server: cursor-agent acp / agent acp

Describe the Bug

  • When using Cursor CLI’s ACP server for persistent ACP sessions, session/load fails with Invalid paramsSession "<id>" not found, even though the session was just created (via acpx ... sessions new/ensure).

  • This breaks orchestrators like acpx/OpenClaw ACP runtime, causing stalls and eventually acpx exited with code 1 / ACP_TURN_FAILED.

  • One-shot mode (acpx cursor exec ...) works.

Steps to Reproduce

  1. Start / ensure Cursor ACP server is available (Cursor CLI installed & logged in):
  • cursor-agent login (if needed)

  • ACP server is launched implicitly by acpx/OpenClaw; or run cursor-agent acp to verify it starts.

  1. Create a persistent session with acpx:
  • acpx cursor sessions new --name test-session
  1. Prompt the session (or run via stdin):
  • echo 'Reply with exactly CURSOR_PROMPT_OK' | acpx --format json --json-strict --cwd <any> cursor prompt --session test-session --file -
  1. Observe failure: acpx sends session/load with the returned sessionId, but Cursor ACP responds Session "<id>" not found. acpx exits non-zero.

Expected Behavior

  • After creating/ensuring a session, session/load should successfully load that session and allow subsequent prompt calls to continue the conversation (multi-turn persistence), without errors or stalling.

Screenshots / Screen Recordings

  • Not required; attaching logs is more useful.

  • Attach: acpx NDJSON stream showing the JSON-RPC exchange and the session/load failure (I have a zip bundle with *.stream.ndjson, plus OpenClaw error snippet).
    cursor-acp-sessionload-fail-20260322.zip (5.9 KB)

Operating System

  • Linux

Version Information

CLI:

  • Cursor CLI / cursor-agent version: 2026.03.20-44cb435 (cursor-agent --version)

  • (Optional context) OpenClaw: 2026.3.13

  • acpx: 0.1.16

For AI issues: which model did you use?

  • N/A (protocol/session management issue, not model-specific)

Additional Information

  • acpx cursor exec "..." (one-shot) works reliably because it uses session/new and does not depend on session/load.

  • The failing path is persistent session management requiring session/load.

  • Attached logs show initialize succeeds and advertises loadSession: true, but session/load fails for the returned sessionId.

Does this stop you from using Cursor?

  • Sometimes — Cursor CLI works for one-shot, but ACP persistent sessions (and tools relying on them, e.g. OpenClaw /acp spawn cursor) are not usable.

Questions

  1. Is Cursor’s ACP implementation expected to support session/load for sessions created via ACP?
  2. If so, what is the correct session id to use (agent session id vs acpx record id)? Right now the id returned by acpx cursor sessions new cannot be loaded.
  3. Any known minimum Cursor version that fixes this?
1 Like

Hi there!

We detected that this may be a bug report, so we’ve moved your post to the Bug Reports category.

To help us investigate and fix this faster, could you edit your original post to include the details from the template below?

Bug Report Template - Click to expand

Where does the bug appear (feature/product)?

  • Cursor IDE
  • Cursor CLI
  • Background Agent (GitHub, Slack, Web, Linear)
  • BugBot
  • Somewhere else…

Describe the Bug
A clear and concise description of what the bug is.


Steps to Reproduce
How can you reproduce this bug? We have a much better chance at fixing issues if we can reproduce them!


Expected Behavior
What is meant to happen here that isn’t working correctly?


Screenshots / Screen Recordings
If applicable, attach images or videos (.jpg, .png, .gif, .mp4, .mov)


Operating System

  • Windows 10/11
  • MacOS
  • Linux

Version Information

  • For Cursor IDE: Menu → About Cursor → Copy
  • For Cursor CLI: Run agent about in your terminal
IDE:
Version: 2.xx.x
VSCode Version: 1.105.1
Commit: ......

CLI:
CLI Version 2026.01.17-d239e66

For AI issues: which model did you use?
Model name (e.g., Sonnet 4, Tab…)


For AI issues: add Request ID with privacy disabled
Request ID: f9a7046a-279b-47e5-ab48-6e8dc12daba1
For Background Agent issues, also post the ID: bc-…


Additional Information
Add any other context about the problem here.


Does this stop you from using Cursor?

  • Yes - Cursor is unusable
  • Sometimes - I can sometimes use Cursor
  • No - Cursor works, but with this issue

The more details you provide, the easier it is for us to reproduce and fix the issue. Thanks!

Hey, thanks for the detailed bug report. The logs and repro steps are super helpful.

I’ve flagged this with the team. session/load returning “Session not found” right after a successful session/new does look like a bug on our side, especially since the server reports loadSession: true during initialize.

A couple quick questions that’ll help us debug faster:

  1. In the NDJSON logs, is the sessionId you pass to session/load the same one you got back from session/new? I just want to rule out any ID mapping issue between acpx and the ACP server.
  2. Have you tried calling session/load directly using raw JSON-RPC, without acpx, to confirm it’s not acpx-specific?

For now, one-shot mode via exec is the workaround like you mentioned. No ETA on a fix yet, but your report helps us prioritize this. I’ll post an update here if there’s news.

Hi, update — I’ve reproduced the issue with raw JSON-RPC (no acpx involved).

Root cause: The session/load call fails immediately after session/new returns a valid sessionId.

Test script:

# Initialize
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":1}}' | cursor-agent acp

# Create session (capture first line only, skip subsequent notifications)
SESSION_ID=$(echo '{"jsonrpc":"2.0","id":2,"method":"session/new","params":{"cwd":"'$PWD'","mcpServers":[]}}' | cursor-agent acp | head -n1 | jq -r '.result.sessionId')
# Returns: "13631a3d-b19f-4fad-b3ef-4f65732113d5"

# Load session immediately (same ID)
echo '{"jsonrpc":"2.0","id":3,"method":"session/load","params":{"sessionId":"'$SESSION_ID'","cwd":"'$PWD'","mcpServers":[]}}' | cursor-agent acp
# Returns: Session "13631a3d-b19f-4fad-b3ef-4f65732113d5" not found

Answers to your questions:

  1. :white_check_mark: Yes, sessionId passed to session/load is exactly the same one returned from session/new
  2. :white_check_mark: Raw JSON-RPC confirms: This is a Cursor ACP server bug. The session becomes “not found” immediately after creation, even when called in the same shell pipeline (<100ms apart).

Additional finding: session/new emits a follow-up session/update notification. If you’re parsing the output, make sure to only process the first JSON line for the response.

Let me know if you want me to test anything else!

Any progress? I’m using the Cursor ACP agent in Discord and ran into the same issue.

Hi, any update on this issue? Would be grateful if this is fixed soon so that I can work with Cursor and any ACP agents.

Hey, unfortunately there’s no concrete update on the fix yet. The bug is on our radar and the team is aware, but we don’t have an ETA.

Your repro with raw JSON-RPC was super helpful. It clearly confirmed the issue is on our ACP server side, not in acpx. That helps us prioritize it.

For now, the only workaround is using one-shot mode via exec, like you mentioned. I’ll update the thread when there’s news.

Are you guys also looking at making Cursor chat and agent compatible with ACP as its own client? That would allow us to do fully-detached IDE which would be quite useful for offline work, everything would run on server e.g. through SSH or tunnel

It would require upon reconnecting that it resyncs the UI with the current state, but I can’t imagine this would be difficult to do internally since you guys have access to the codebase, it would mainly just have to save states in the SQL3 DB wherever the ACP is running and a local copy and sync, with agent←>environment communication done over ACP

Basically, make Cursor chat and agent in the IDE full ACP-compatible clients with your guys’ own internal features and have a host, client DB that syncs based on host state, if you guys use Yjs CRDT it should handle conflicts

Hey @Eduard, interesting idea, but it’s basically a separate feature request and not related to the session/load bug in this thread. I’d recommend starting a new topic in the Feature Requests category Feature Requests - Cursor - Community Forum and describing your use case so the team will definitely see it and can prioritize it.

On the main bug session/load returning “Session not found”, sadly there’s no news yet. The team is aware, but there’s no ETA. I’ll update the thread if anything changes.

Hey, did so Fully host-served or ACP IDE something like this would resolve this thread too