ACP: No conversation history is restored when loading an existing session

,

Where does the bug appear (feature/product)?

Cursor CLI

Describe the Bug

Currently, no conversation history can be restored when loading an existing session.
It happens because no session/update notifications with user_message_chunk / agent_message_chunk are sent back upon session/load call.
However, these notifications must be sent in the response according to the ACP docs:


Example

stdin

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "session/load",
  "params": {
    "sessionId": "f620b8c7-dd60-45bd-b849-b3f171174f97",
    "cwd": "/home/username/Projects/my_project",
    "mcpServers": []
  }
}

stdout

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "modes": {
      "currentModeId": "ask",
      "availableModes": [
        {
          "id": "agent",
          "name": "Agent",
          "description": "Full agent capabilities with tool access"
        },
        {
          "id": "plan",
          "name": "Plan",
          "description": "Read-only mode for planning and designing before implementation"
        },
        {
          "id": "ask",
          "name": "Ask",
          "description": "Q&A mode - no edits or command execution"
        }
      ]
    },
    "models": {
      "currentModelId": "default[]",
      "availableModels": [
        {
          "modelId": "default[]",
          "name": "Auto"
        },
        {
          "modelId": "composer-2[fast=true]",
          "name": "composer-2"
        },
        {
          "modelId": "composer-1.5[]",
          "name": "composer-1.5"
        },
        {
          "modelId": "claude-opus-4-7[thinking=true,context=200k,effort=high]",
          "name": "claude-opus-4-7"
        },
        {
          "modelId": "gpt-5.3-codex[reasoning=medium,fast=false]",
          "name": "gpt-5.3-codex"
        },
        {
          "modelId": "gpt-5.4[reasoning=medium,context=272k,fast=false]",
          "name": "gpt-5.4"
        },
        {
          "modelId": "claude-sonnet-4-6[thinking=true,context=200k,effort=medium]",
          "name": "claude-sonnet-4-6"
        },
        {
          "modelId": "claude-opus-4-6[thinking=true,context=200k,effort=high,fast=false]",
          "name": "claude-opus-4-6"
        },
        {
          "modelId": "claude-opus-4-5[thinking=true]",
          "name": "claude-opus-4-5"
        },
        {
          "modelId": "gpt-5.2[reasoning=medium,fast=false]",
          "name": "gpt-5.2"
        },
        {
          "modelId": "gemini-3.1-pro[]",
          "name": "gemini-3.1-pro"
        },
        {
          "modelId": "gpt-5.4-mini[reasoning=medium]",
          "name": "gpt-5.4-mini"
        },
        {
          "modelId": "gpt-5.4-nano[reasoning=medium]",
          "name": "gpt-5.4-nano"
        },
        {
          "modelId": "claude-haiku-4-5[thinking=true]",
          "name": "claude-haiku-4-5"
        },
        {
          "modelId": "gpt-5.3-codex-spark[reasoning=medium]",
          "name": "gpt-5.3-codex-spark"
        },
        {
          "modelId": "grok-4-20[thinking=true]",
          "name": "grok-4-20"
        },
        {
          "modelId": "claude-sonnet-4-5[thinking=true,context=200k]",
          "name": "claude-sonnet-4-5"
        },
        {
          "modelId": "gpt-5.2-codex[reasoning=medium,fast=false]",
          "name": "gpt-5.2-codex"
        },
        {
          "modelId": "gpt-5.1-codex-max[reasoning=medium,fast=false]",
          "name": "gpt-5.1-codex-max"
        },
        {
          "modelId": "gpt-5.1[reasoning=medium]",
          "name": "gpt-5.1"
        },
        {
          "modelId": "gemini-3-flash[]",
          "name": "gemini-3-flash"
        },
        {
          "modelId": "gpt-5.1-codex-mini[reasoning=medium]",
          "name": "gpt-5.1-codex-mini"
        },
        {
          "modelId": "claude-sonnet-4[thinking=false,context=200k]",
          "name": "claude-sonnet-4"
        },
        {
          "modelId": "gpt-5-mini[]",
          "name": "gpt-5-mini"
        },
        {
          "modelId": "gemini-2.5-flash[]",
          "name": "gemini-2.5-flash"
        },
        {
          "modelId": "kimi-k2.5[]",
          "name": "kimi-k2.5"
        }
      ]
    },
    "configOptions": [
      {
        "id": "mode",
        "name": "Mode",
        "description": "Controls how the agent executes tasks",
        "category": "mode",
        "type": "select",
        "currentValue": "ask",
        "options": [
          {
            "value": "agent",
            "name": "Agent",
            "description": "Full agent capabilities with tool access"
          },
          {
            "value": "plan",
            "name": "Plan",
            "description": "Read-only mode for planning and designing before implementation"
          },
          {
            "value": "ask",
            "name": "Ask",
            "description": "Q&A mode - no edits or command execution"
          }
        ]
      },
      {
        "id": "model",
        "name": "Model",
        "description": "Controls which model variant is used for responses",
        "category": "model",
        "type": "select",
        "currentValue": "default[]",
        "options": [
          {
            "value": "default[]",
            "name": "Auto"
          },
          {
            "value": "composer-2[fast=true]",
            "name": "composer-2"
          },
          {
            "value": "composer-1.5[]",
            "name": "composer-1.5"
          },
          {
            "value": "claude-opus-4-7[thinking=true,context=200k,effort=high]",
            "name": "claude-opus-4-7"
          },
          {
            "value": "gpt-5.3-codex[reasoning=medium,fast=false]",
            "name": "gpt-5.3-codex"
          },
          {
            "value": "gpt-5.4[reasoning=medium,context=272k,fast=false]",
            "name": "gpt-5.4"
          },
          {
            "value": "claude-sonnet-4-6[thinking=true,context=200k,effort=medium]",
            "name": "claude-sonnet-4-6"
          },
          {
            "value": "claude-opus-4-6[thinking=true,context=200k,effort=high,fast=false]",
            "name": "claude-opus-4-6"
          },
          {
            "value": "claude-opus-4-5[thinking=true]",
            "name": "claude-opus-4-5"
          },
          {
            "value": "gpt-5.2[reasoning=medium,fast=false]",
            "name": "gpt-5.2"
          },
          {
            "value": "gemini-3.1-pro[]",
            "name": "gemini-3.1-pro"
          },
          {
            "value": "gpt-5.4-mini[reasoning=medium]",
            "name": "gpt-5.4-mini"
          },
          {
            "value": "gpt-5.4-nano[reasoning=medium]",
            "name": "gpt-5.4-nano"
          },
          {
            "value": "claude-haiku-4-5[thinking=true]",
            "name": "claude-haiku-4-5"
          },
          {
            "value": "gpt-5.3-codex-spark[reasoning=medium]",
            "name": "gpt-5.3-codex-spark"
          },
          {
            "value": "grok-4-20[thinking=true]",
            "name": "grok-4-20"
          },
          {
            "value": "claude-sonnet-4-5[thinking=true,context=200k]",
            "name": "claude-sonnet-4-5"
          },
          {
            "value": "gpt-5.2-codex[reasoning=medium,fast=false]",
            "name": "gpt-5.2-codex"
          },
          {
            "value": "gpt-5.1-codex-max[reasoning=medium,fast=false]",
            "name": "gpt-5.1-codex-max"
          },
          {
            "value": "gpt-5.1[reasoning=medium]",
            "name": "gpt-5.1"
          },
          {
            "value": "gemini-3-flash[]",
            "name": "gemini-3-flash"
          },
          {
            "value": "gpt-5.1-codex-mini[reasoning=medium]",
            "name": "gpt-5.1-codex-mini"
          },
          {
            "value": "claude-sonnet-4[thinking=false,context=200k]",
            "name": "claude-sonnet-4"
          },
          {
            "value": "gpt-5-mini[]",
            "name": "gpt-5-mini"
          },
          {
            "value": "gemini-2.5-flash[]",
            "name": "gemini-2.5-flash"
          },
          {
            "value": "kimi-k2.5[]",
            "name": "kimi-k2.5"
          }
        ]
      }
    ]
  }
}
{
  "jsonrpc": "2.0",
  "method": "session/update",
  "params": {
    "sessionId": "f620b8c7-dd60-45bd-b849-b3f171174f97",
    "update": {
      "sessionUpdate": "available_commands_update",
      "availableCommands": [
        {
          "name": "copy-request-id",
          "description": "Copy the last request ID to clipboard"
        },
        {
          "name": "simplify",
          "description": "Find low-info comments, one-off helpers, perf issues, and reuse opportunities. (global)"
        },
        {
          "name": "worktree",
          "description": "Create a detached-head git worktree (optional `branch=<name>` to start from a specific ref); after `/worktree`, keep using each repo's mapped path for the rest of the chat (multi-root: one shared table, first-touch create per repo). Merge with `/apply-worktree`; remove with `/delete-worktree`. (global)"
        },
        {
          "name": "best-of-n",
          "description": "Fan out one task across multiple models and compare results only. Do not apply any run to main. Example: \"/best-of-n opus,codex <task>\". (global)"
        },
        {
          "name": "babysit",
          "description": "Keep a PR merge-ready by triaging comments, resolving clear conflicts, and fixing CI in a loop. (builtin skill)"
        },
        {
          "name": "create-hook",
          "description": "Create Cursor hooks. Use when you want to create a hook, write hooks.json, add hook scripts, or automate behavior around agent events. (builtin skill)"
        },
        {
          "name": "create-rule",
          "description": "Create Cursor rules for persistent AI guidance. Use when you want to create a rule, add coding standards, set up project conventions, configure file-specific patterns, create RULE.md files, or asks about .cursor/rules/ or AGENTS.md. (builtin skill)"
        },
        {
          "name": "create-skill",
          "description": "Guides users through creating effective Agent Skills for Cursor. Use when you want to create, write, or author a new skill, or asks about skill structure, best practices, or SKILL.md format. (builtin skill)"
        },
        {
          "name": "create-subagent",
          "description": "Create custom subagents for specialized AI tasks. Use when you want to create a new type of subagent, set up task-specific agents, configure code reviewers, debuggers, or domain-specific assistants with custom prompts. (builtin skill)"
        },
        {
          "name": "migrate-to-skills",
          "description": "Convert 'Applied intelligently' Cursor rules (.cursor/rules/*.mdc) and slash commands (.cursor/commands/*.md) to Agent Skills format (.cursor/skills/). Use when you want to migrate rules or commands to skills, convert .mdc rules to SKILL.md format, or consolidate commands into the skills directory. (builtin skill)"
        },
        {
          "name": "shell",
          "description": "Runs the rest of a /shell request as a literal shell command. Use only when the user explicitly invokes /shell and wants the following text executed directly in the terminal. (builtin skill)"
        },
        {
          "name": "statusline",
          "description": "Configure a custom status line in the CLI. Use when the user mentions status line, statusline, statusLine, CLI status bar, prompt footer customization, or wants to add session context above the prompt. (builtin skill)"
        },
        {
          "name": "update-cli-config",
          "description": "View and modify Cursor CLI configuration settings in ~/.cursor/cli-config.json. Use when the user wants to change CLI settings, configure permissions, switch approval mode, enable vim mode, toggle display options, configure sandbox, or manage any CLI preferences. (builtin skill)"
        }
      ]
    }
  }
}

^ As you can see only these 2 notifications are sent in the response.


Steps to Reproduce

  1. Make a session/load call.

no session/update notifications with user_message_chunk / agent_message_chunk are sent back.

Expected Behavior

session/update notifications with user_message_chunk / agent_message_chunk are sent back upon session/load call.

Operating System (if it applies)

Linux

Version Information

CLI Version 2026.04.17-479fd04
Model Auto
Subscription Tier Free
OS linux (x64)
Terminal ghostty
Shell zsh

Does this stop you from using Cursor?

No - Cursor works, but with this issue

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!

I run into this using Zed, the Cursor ACP never restores the chat session across IDE restarts. The session does exist, and I can resume it from the CLI, but the replay never happens back to Zed.

Latest (2026.05.16-0338208) cursor-cli still does not support this.