Reproduction steps
Cursor ACP in Zed: Composer 2.5 Fast Mode Issue
Date: 2026-05-23
Summary
When using Cursor as an external ACP agent inside Zed, selecting Composer 2.5 still produced Cursor dashboard usage entries marked as fast. The local Cursor config also repeatedly reverted to:
{
"selectedModel": {
"modelId": "composer-2.5",
"parameters": [{ "id": "fast", "value": "true" }]
}
}
The working fix was to run Cursor through a local wrapper that patches the ACP initialize request so Cursor exposes parameterized model options to Zed. With that enabled, Zed can set:
{
"model": "composer-2.5",
"fast": "false"
}
Symptoms
- Zed launched Cursor ACP successfully.
~/.cursor/cli-config.json kept being rewritten to Composer 2.5 Fast.
- Cursor dashboard usage at
https://cursor.com/dashboard/usage reported fast after new Zed agent requests.
- Passing
--model composer-2.5[fast=false] acp to cursor-agent was not enough once Zed connected to the ACP server.
Attempts That Did Not Work
Launch arg only
Zed settings:
{
"agent_servers": {
"cursor": {
"type": "custom",
"command": "/path/to/cursor-agent",
"args": ["--model", "composer-2.5[fast=false]", "acp"]
}
}
}
Result: the process argv was correct, but after the ACP session was created Cursor rewrote its selected model to fast=true.
Zed default model as base model
"default_config_options": {
"model": "composer-2.5",
"fast": "false"
}
Zed log:
WARN [agent_servers::acp] `composer-2.5` is not a valid value for config option `model` in cursor
Zed default model as variant string
"default_config_options": {
"model": "composer-2.5[fast=false]"
}
Zed log:
WARN [agent_servers::acp] `composer-2.5[fast=false]` is not a valid value for config option `model` in cursor
Root Cause
Cursor ACP has two model-picker modes.
Without parameterized model picker
When the ACP client does not advertise:
{
"_meta": {
"parameterizedModelPicker": true
}
}
Cursor returns a single model config option whose valid values are exploded variant strings. In this mode, the Composer 2.5 entry advertised by Cursor was:
{
"value": "composer-2.5[fast=true]",
"name": "composer-2.5"
}
There was no advertised composer-2.5[fast=false] entry for Composer 2.5 in this list. That explains both Zed validation failures:
composer-2.5 is invalid in variant-list mode.
composer-2.5[fast=false] is also invalid because Cursor does not advertise it in that mode.
With parameterized model picker
When the client advertises:
{
"_meta": {
"parameterizedModelPicker": true
}
}
Cursor returns:
{
"id": "model",
"currentValue": "composer-2.5",
"options": [{ "value": "composer-2.5", "name": "Composer 2.5" }]
}
and separately:
{
"id": "fast",
"currentValue": "false",
"options": [
{ "value": "false", "name": "Off" },
{ "value": "true", "name": "Fast" }
]
}
In this mode, model=composer-2.5 plus fast=false is valid and works.
Local Workaround
Created this wrapper:
~/.local/bin/cursor-agent-zed-nonfast
The wrapper:
- Starts the real Cursor agent with
--model composer-2.5[fast=false] acp.
- Proxies newline-delimited ACP JSON between Zed and Cursor.
- Patches the client-to-agent
initialize request to add:
{
"clientCapabilities": {
"_meta": {
"parameterizedModelPicker": true
}
}
}
- Forces
~/.cursor/cli-config.json back to composer-2.5 with fast=false before start and after exit.
Zed settings now point at the wrapper:
{
"agent_servers": {
"cursor": {
"type": "custom",
"command": "/Users/johndoe/.local/bin/cursor-agent-zed-nonfast",
"args": [],
"default_config_options": {
"model": "composer-2.5",
"fast": "false"
}
}
}
}
Verification
Direct ACP probe against the wrapper returned:
{
"models": {
"currentModelId": "composer-2.5"
},
"configOptions": [
{
"id": "model",
"currentValue": "composer-2.5"
},
{
"id": "fast",
"currentValue": "false"
}
]
}
After using Zed, the wrapper log showed Zed invoking the wrapper and the wrapper patching the initialize capabilities:
{
"event": "initialize.patched",
"payload": {
"fs": { "readTextFile": true, "writeTextFile": true },
"terminal": true,
"auth": { "terminal": true },
"_meta": {
"terminal_output": true,
"terminal-auth": true,
"parameterizedModelPicker": true
}
}
}
Cursor dashboard usage then stopped reporting Composer 2.5 requests as fast.
Suggested Fix For Zed
For ACP agents, Zed should consider advertising parameterized model picker support in clientCapabilities._meta when initializing the agent:
{
"clientCapabilities": {
"_meta": {
"parameterizedModelPicker": true
}
}
}
At least for Cursor ACP, this is required for model parameters such as Composer's fast flag to be represented as separate config options. Without it, Cursor falls back to an exploded variant list where composer-2.5[fast=false] is not advertised, so Zed cannot select the non-fast Composer 2.5 configuration.
Files Changed Locally
/Users/johndoe/.config/zed/settings.json
/Users/johndoe/.local/bin/cursor-agent-zed-nonfast
~/.cursor/cli-config.json
~/.cursor/acp-config.json
Current vs. Expected behavior
Set to off instead of fast

Zed version and system specs
Zed: v1.3.6
OS: Mac 26.5
Memory: 36GB
Attach Zed log file
Zed.log
Relevant Zed settings
settings.json
Relevant Keymap
keymap.json
(for AI issues) Model provider details
No response
If you are using WSL on Windows, what flavor of Linux are you using?
None
Reproduction steps
Cursor ACP in Zed: Composer 2.5 Fast Mode Issue
Date: 2026-05-23
Summary
When using Cursor as an external ACP agent inside Zed, selecting Composer 2.5 still produced Cursor dashboard usage entries marked as
fast. The local Cursor config also repeatedly reverted to:{ "selectedModel": { "modelId": "composer-2.5", "parameters": [{ "id": "fast", "value": "true" }] } }The working fix was to run Cursor through a local wrapper that patches the ACP
initializerequest so Cursor exposes parameterized model options to Zed. With that enabled, Zed can set:{ "model": "composer-2.5", "fast": "false" }Symptoms
~/.cursor/cli-config.jsonkept being rewritten toComposer 2.5 Fast.https://cursor.com/dashboard/usagereportedfastafter new Zed agent requests.--model composer-2.5[fast=false] acptocursor-agentwas not enough once Zed connected to the ACP server.Attempts That Did Not Work
Launch arg only
Zed settings:
{ "agent_servers": { "cursor": { "type": "custom", "command": "/path/to/cursor-agent", "args": ["--model", "composer-2.5[fast=false]", "acp"] } } }Result: the process argv was correct, but after the ACP session was created Cursor rewrote its selected model to
fast=true.Zed default model as base model
Zed log:
Zed default model as variant string
Zed log:
Root Cause
Cursor ACP has two model-picker modes.
Without parameterized model picker
When the ACP client does not advertise:
{ "_meta": { "parameterizedModelPicker": true } }Cursor returns a single
modelconfig option whose valid values are exploded variant strings. In this mode, the Composer 2.5 entry advertised by Cursor was:{ "value": "composer-2.5[fast=true]", "name": "composer-2.5" }There was no advertised
composer-2.5[fast=false]entry for Composer 2.5 in this list. That explains both Zed validation failures:composer-2.5is invalid in variant-list mode.composer-2.5[fast=false]is also invalid because Cursor does not advertise it in that mode.With parameterized model picker
When the client advertises:
{ "_meta": { "parameterizedModelPicker": true } }Cursor returns:
{ "id": "model", "currentValue": "composer-2.5", "options": [{ "value": "composer-2.5", "name": "Composer 2.5" }] }and separately:
{ "id": "fast", "currentValue": "false", "options": [ { "value": "false", "name": "Off" }, { "value": "true", "name": "Fast" } ] }In this mode,
model=composer-2.5plusfast=falseis valid and works.Local Workaround
Created this wrapper:
The wrapper:
--model composer-2.5[fast=false] acp.initializerequest to add:{ "clientCapabilities": { "_meta": { "parameterizedModelPicker": true } } }~/.cursor/cli-config.jsonback tocomposer-2.5withfast=falsebefore start and after exit.Zed settings now point at the wrapper:
{ "agent_servers": { "cursor": { "type": "custom", "command": "/Users/johndoe/.local/bin/cursor-agent-zed-nonfast", "args": [], "default_config_options": { "model": "composer-2.5", "fast": "false" } } } }Verification
Direct ACP probe against the wrapper returned:
{ "models": { "currentModelId": "composer-2.5" }, "configOptions": [ { "id": "model", "currentValue": "composer-2.5" }, { "id": "fast", "currentValue": "false" } ] }After using Zed, the wrapper log showed Zed invoking the wrapper and the wrapper patching the initialize capabilities:
{ "event": "initialize.patched", "payload": { "fs": { "readTextFile": true, "writeTextFile": true }, "terminal": true, "auth": { "terminal": true }, "_meta": { "terminal_output": true, "terminal-auth": true, "parameterizedModelPicker": true } } }Cursor dashboard usage then stopped reporting Composer 2.5 requests as
fast.Suggested Fix For Zed
For ACP agents, Zed should consider advertising parameterized model picker support in
clientCapabilities._metawhen initializing the agent:{ "clientCapabilities": { "_meta": { "parameterizedModelPicker": true } } }At least for Cursor ACP, this is required for model parameters such as Composer's
fastflag to be represented as separate config options. Without it, Cursor falls back to an exploded variant list wherecomposer-2.5[fast=false]is not advertised, so Zed cannot select the non-fast Composer 2.5 configuration.Files Changed Locally
/Users/johndoe/.config/zed/settings.json/Users/johndoe/.local/bin/cursor-agent-zed-nonfast~/.cursor/cli-config.json~/.cursor/acp-config.jsonCurrent vs. Expected behavior
Set to

offinstead offastZed version and system specs
Zed: v1.3.6
OS: Mac 26.5
Memory: 36GB
Attach Zed log file
Zed.log
Relevant Zed settings
settings.json
Relevant Keymap
keymap.json
(for AI issues) Model provider details
No response
If you are using WSL on Windows, what flavor of Linux are you using?
None