Skip to content

ACP Zed integration: mode switching and session management not working #2015

@Mingholy

Description

@Mingholy

ACP Zed Integration Issues

Problem Summary

When integrating Qwen Code with Zed editor (via ACP protocol), several incompatibilities with @zed-industries/claude-agent-acp's protocol format were discovered, causing the following features to malfunction:

  1. Unable to switch Mode (plan/yolo/auto-edit etc.)
  2. Session list display issues
  3. Session resume functionality not working

Root Causes

Our ACP implementation had the following differences from @zed-industries/claude-agent-acp's protocol format:

1. session/new Response Missing Critical Fields

@zed-industries/claude-agent-acp (expected format):

{
  "sessionId": "xxx",
  "models": { ... },
  "modes": {
    "currentModeId": "default",
    "availableModes": [...]
  },
  "configOptions": [
    {
      "id": "mode",
      "name": "Mode",
      "type": "select",
      "currentValue": "default",
      "options": [...]
    },
    {
      "id": "model",
      "name": "Model",
      "type": "select",
      "currentValue": "default",
      "options": [...]
    }
  ]
}

Qwen Code (actual format):

{
  "sessionId": "xxx",
  "models": { ... }
  // Missing modes and configOptions
}

Impact: Zed client uses configOptions to render Mode/Model switching UI. Without these fields, users cannot switch modes.


2. session/list Response Format Mismatch

@zed-industries/claude-agent-acp (expected format):

{
  "sessions": [
    {
      "sessionId": "...",
      "cwd": "...",
      "title": "(session)",
      "updatedAt": "2026-02-28T02:34:57.639Z"
    }
  ]
}

Qwen Code (actual format):

{
  "items": [...],
  "hasMore": false,
  "nextCursor": 20
}

Issues:

  • Field name mismatch: items should be sessions
  • Missing fields: title, updatedAt
  • Extra fields: hasMore, nextCursor

Additional issue: listSessionsRequestSchema had cwd as required, but Zed sends empty params {}.

Error message:

{
  "code": -32602,
  "message": "Invalid params",
  "data": {
    "details": "{\"_errors\": [], \"cwd\": {\"_errors\": [\"Required\"]}}"
  }
}

3. initialize Response Missing sessionCapabilities

@zed-industries/claude-agent-acp (expected format):

{
  "agentCapabilities": {
    "loadSession": true,
    "promptCapabilities": { ... },
    "sessionCapabilities": {
      "fork": {},
      "list": {},
      "resume": {}
    }
  }
}

Qwen Code (actual format):

{
  "agentCapabilities": {
    "loadSession": true,
    "promptCapabilities": { ... }
    // Missing sessionCapabilities
  }
}

Impact: Zed client cannot discover session list/resume capabilities.


Affected Files

  • packages/cli/src/acp-integration/schema.ts
  • packages/cli/src/acp-integration/acpAgent.ts

Recommendations

  1. Reference Implementation: Consider referencing @zed-industries/claude-agent-acp's ACP implementation to ensure format compatibility.

  2. Test Coverage: Add ACP protocol compatibility tests that compare our responses against @zed-industries/claude-agent-acp's responses.

  3. Documentation: Update ACP integration documentation to describe supported features and known limitations.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions