ACP: expose the model list as a category:model config option (session/new returns only mode and allow_all)
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 52/100
Research direction
Start at the copilot --acp entry point and trace the session/new, session/load, and session/set_config_option handlers; the issue names no source files or tests. Compare their behavior with the interactive /model picker. Done means model options and the active value are exposed, model changes emit updates, and unknown --model values no longer silently fall back.
Written by the indexing model from the issue text.
Description
Describe the feature or problem you'd like to solve
Over copilot --acp, a client has no way to list the models available to the signed-in account or to pick one for a session.
Measured on GitHub Copilot CLI 1.0.85 (macOS arm64):
session/newreturnssessionId,modesandconfigOptionsonly.configOptionsholds exactly twoselectoptions,modeandallow_all. There is no option withcategory: "model".session/loadreturns the same set.- Sending
/modelas a prompt answers: "The model-picker dialog is only available in the interactive CLI." --model <id>accepts any string.copilot --acp --model=not_a_real_model_xyzstarts, creates a session and completes a prompt with no error, no stderr, and nothing on the wire reports which model actually ran.
So an ACP client (an editor or a desktop app embedding Copilot) can only offer a single "Copilot default" row. It cannot show the models the user's plan allows, and if it hard-codes ids it cannot tell when one silently fell back.
Proposed solution
Advertise the model list the way the ACP spec already provides for it:
- Include a
SessionConfigOptionwithtype: "select"andcategory: "model"insession/newandsession/loadresponses, listing the ids the account can use andcurrentValueset to the active model. Grouping by vendor viaSessionConfigSelectGroupis fine. - Accept
session/set_config_optionfor that option and emitconfig_option_updateon change, so a client can switch models mid-session without respawning. - Ideally, reject an unknown
--modelvalue (or at least log it to stderr) instead of silently running the default.
This is the same shape the interactive /model picker already has; it just needs to be exposed on the ACP surface.
Example prompts or workflows
An ACP client starts copilot --acp, calls session/new, reads the model config option, shows its values in a picker, and calls session/set_config_option with the user's choice. Today step 3 yields nothing to show.
Additional context
Minimal reproduction (Node 24):
import { spawn } from 'node:child_process'
const c = spawn('copilot', ['--acp', '--no-auto-update'], { stdio: ['pipe', 'pipe', 'inherit'] })
const send = (o) => c.stdin.write(JSON.stringify(o) + '\n')
let buf = ''
c.stdout.on('data', (d) => {
buf += d
for (const line of buf.split('\n').slice(0, -1)) {
const m = JSON.parse(line)
if (m.id === 1) send({ jsonrpc: '2.0', id: 2, method: 'session/new', params: { cwd: process.cwd(), mcpServers: [] } })
if (m.id === 2) { console.log(Object.keys(m.result), m.result.configOptions.map((o) => o.id)); c.kill() }
}
buf = buf.slice(buf.lastIndexOf('\n') + 1)
})
send({ jsonrpc: '2.0', id: 1, method: 'initialize', params: { protocolVersion: 1, clientCapabilities: { fs: { readTextFile: false, writeTextFile: false } }, clientInfo: { name: 'probe', version: '0' } } })
Prints [ 'sessionId', 'modes', 'configOptions' ] [ 'mode', 'allow_all' ].
Version: GitHub Copilot CLI 1.0.85. ACP SDK used by the client: @agentclientprotocol/sdk 1.4.0.
- Dominant language
- Shell
- Stars
- 11.2k
- Forks
- 1.9k
- Avg merge
- 14h 16m
- Merged PRs (30d)
- 6
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from github/copilot-cli
-
triage
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
github/copilot-cli#4932 ·
-
triage
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
github/copilot-cli#4909 ·
-
triage
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
github/copilot-cli#4906 ·
-
triage
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
github/copilot-cli#4848 ·
-
area:agents area:mcp
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
github/copilot-cli#4729 ·
All issues in github/copilot-cli
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
elastic/gradle-plugins#156 ·
-
Priority/High ready-for-agent Severity/Major Type/Bug
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
-
comp/cli P3 type/docs
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
NousResearch/hermes-agent#119756 · 1 comment ·
-
comp: build/pipeline type: bug version: current (v17+)
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
angular/angularfire#3766 ·
-
out-of-date
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
CachyOS/CachyOS-PKGBUILDS#1903 ·