github / github/copilot-cli

Configurable LSP `workspace/configuration` and `didChangeConfiguration` Support in Copilot CLI

Open
#3,402 0 comments 0 reactions 0 assignees View on GitHub
area:configuration area:tools
Dominant language
Shell
Stars
11.2k
Forks
1.9k
Avg merge
14h 16m
Merged PRs (30d)
6

Description

### Describe the feature or problem you'd like to solve

Add support for configuring arbitrary Language Server Protocol (LSP) configuration payloads in Copilot CLI.

### Proposed solution

Currently, Copilot CLI can launch LSP servers, but there is no way to control what is sent through the following LSP methods:

* `workspace/didChangeConfiguration`
* `workspace/configuration`

This makes many language servers partially unusable because critical settings cannot be provided to the server.

## Problem

Many LSP servers rely heavily on runtime configuration delivered through LSP configuration requests instead of command-line arguments or environment variables.

For example, `intelephense` requires configuration for:

* excluded file patterns
* storage/indexing behavior
* diagnostics
* stubs
* file size limits

Without support for configuration payloads:

* large monorepos become slow or unusable
* excluded/vendor/generated files cannot be filtered
* indexing behavior cannot be tuned
* workspace-specific settings cannot be applied

At the moment, Copilot CLI appears to start the server successfully but provides no mechanism for forwarding user-defined configuration objects to the LSP server. The option `initializationOptions` does not solve this problem either because many LSP servers - including Intelephense - expect runtime settings to be delivered specifically through the standard LSP configuration flow (`workspace/didChangeConfiguration` and `workspace/configuration`).

## Proposed Solution

Allow arbitrary configuration blocks to be defined per language server and forwarded via:

* `workspace/didChangeConfiguration`
* responses to `workspace/configuration`

Example configuration:

```json
{
"php": {
"command": "intelephense",
"args": [
"--stdio"
],
"fileExtensions": {
".php": "php"
},
"configuration": {
"intelephense": {
"files": {
"exclude": [
"**/vendor/**",
"**/var/cache/**",
"**/node_modules/**"
]
},
"environment": {
"phpVersion": "8.5"
},
"diagnostics": {
"undefinedTypes": false
}
}
}
}
}
```

## Expected Behavior

Copilot CLI should:

1. Send the provided configuration object through `workspace/didChangeConfiguration`
2. Respond to `workspace/configuration` requests using the configured values
3. Support arbitrary nested JSON structures

### Example prompts or workflows

_No response_

### Additional context

_No response_

Contributor guide

Open the contributing guide

Research direction

The issue identifies the LSP methods workspace/didChangeConfiguration and workspace/configuration as the relevant entry points; begin by tracing how Copilot CLI launches LSP servers and routes these messages. Done means each language server can receive arbitrary nested configuration through both methods, including the example Intelephense settings.

Written by the indexing model from the issue text.

Assessment

Tech stack
shell
Domain
cli, tooling
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
55/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.