ACP: expose contextTier as a session config option (parity with interactive /model picker)
Nobody has claimed this yet.
- 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
The interactive CLI lets you change the context window tier mid-session (via the /model context tier picker), but the ACP server does not expose contextTier as a session config option. ACP clients can only set the tier at spawn time with --context <tier>, and have no way to discover or change it once the session is running.
Proposed solution
Expose the context tier over ACP with the same shape already used for reasoning_effort:
- Include a
contextTierentry in theconfigOptionsarray returned bysession/new(andsession/load), oftype: "select", with the eligible values for the current model (default,long_context) and the current value. - Accept
session/set_config_optionwithconfigId: "contextTier"and apply it to the live session, exactly as the/modelpicker does interactively. - Only advertise the option for tiered-pricing models, mirroring the interactive behaviour ("context tier picker appears for eligible models").
This closes a parity gap rather than adding new functionality: the capability already exists in the runtime and is reachable from the interactive UI and from settings.json; it is just not reachable through ACP.
Issue #1994 ("Allow reasoning effort discovery and setting via ACP") is the direct precedent — reasoning_effort is now a first-class ACP config option, and contextTier is the remaining sibling setting that isn't.
Example prompts or workflows
- An ACP client (Zed, or any ACP editor integration) shows a "Context Size" picker next to the model and reasoning-effort pickers, populated from
session/new, instead of having to hardcode the tier list per CLI version. - A user on Claude Opus hits a large refactor mid-conversation and switches from
defaulttolong_contextwithout losing session state — today the client must kill and respawncopilot --acp --context long_contextand resume, or the control is simply hidden. - A client drops back from
long_contexttodefaultafter the large task is done, to avoid the surcharge for the rest of the conversation. - A client reads the current tier from
session/loadwhen reconnecting to an existing session, so the UI reflects reality instead of guessing.
Additional context
Reproduced against GitHub Copilot CLI 1.0.75.
The interactive CLI supports hot changes — from copilot help config:
contextTier: context window tier for tiered-pricing models (e.g., "default" or "long_context").
- Can also be set with --context flag (overrides persisted setting)
- Can be changed with /model command (context tier picker appears for eligible models)
ACP does not. Minimal probe over copilot --acp (initialize → session/new → session/set_config_option):
configOptions ids: ["mode","model","reasoning_effort","allow_all"]
contextTier -> {"code":-32602,"message":"Unknown config option 'contextTier'."}
context -> {"code":-32602,"message":"Unknown config option 'context'."}
contextSize -> {"code":-32602,"message":"Unknown config option 'contextSize'."}
So reasoning_effort is exposed but contextTier is not, even though both are per-session model settings adjustable from the interactive /model flow.
Current workaround and why it's poor. The tier can only be pinned at spawn time via --context <tier>. Changing it for a running conversation requires terminating the agent process and respawning it with a different flag, then reloading the session — an intrusive lifecycle operation for what is a per-request setting, and one that ACP clients cannot make feel like the interactive picker.
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.
Research direction
Start with the existing reasoning_effort ACP config option as the precedent, then trace session/new and session/load advertisement and session/set_config_option handling. Compare those paths with the interactive /model picker and --context behavior. Done means eligible models expose the current contextTier and clients can change it during a live session without restarting.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- shell
- Domain
- api, cli
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 65/100