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
- Make a
session/loadcall.
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