Repository navigation
Copilot app: selecting a custom agent in the composer agent picker doesn't apply its model or reasoning-effort #5241
Description
Describe the bug
In the GitHub Copilot desktop app, choosing a custom agent in the composer's agent picker does not apply that agent's model or reasoning-effort frontmatter. The composer's model picker keeps the previously stored model and effort (the user default), and the session runs with those values instead of the agent's.
The same agent files work correctly in the Copilot CLI (copilot --agent <name>), so the runtime parses the frontmatter correctly. The app composer seems to send its own model and effort as explicit values, which win over the agent's. The 1.0.88 changelog says an explicit --reasoning-effort "still wins."
This happens with repository agents (.github/agents/*.agent.md) and plugin agents from an installed marketplace plugin.
Affected version
- Copilot app runtime: 1.0.99-2
- Copilot CLI: 1.0.103 (works correctly)
- OS: Windows 11 x64
Steps to reproduce the behavior
- Set the user default to
"model": "claude-opus-5.5"and"effortLevel": "medium"in~/.copilot/settings.json, or choose them in the app's model picker. - In a repository, add
.github/agents/rust.agent.md:--- name: Rust description: Writes, refactors, debugs, and reviews idiomatic Rust. model: [Claude Sonnet 5.5 (copilot)] reasoning-effort: low tools: ["read", "search", "edit", "execute", "web"] ---
- Open the repository as a project in the Copilot app and start a new session.
- In the composer, open the agent picker and select Rust.
- The composer's model picker does not change. It still shows Claude Opus 5.5 / medium, and sending a prompt runs with those values instead of Claude Sonnet 5.5 / low.
Control (CLI, same agent file):
copilot -p "Reply with just OK." --agent Rust --allow-all-tools
The session events.jsonl shows "agentName":"Rust", "model":"claude-sonnet-5.5", and "reasoningEffort":"low", while selectedModel is claude-opus-5.5. The CLI applies the agent's frontmatter correctly.
Expected behavior
When an agent with model and/or reasoning-effort is selected in the composer's agent picker, the composer's model picker should switch to that agent's model (the first available entry, respecting model-policy) and reasoning effort, as copilot --agent does. The user can then still change them manually. If the user then switches to an agent without these fields, the composer should return to the user's default.
Additional context
- The app logs (
github-app.*.log) show the composer model picker using its stored effort (perf_span model_picker,"surface":"draft","hasStoredEffort":true) when sessions are created for the repository. No agent-model resolution is logged. - Separate minor issue found while debugging: a model list with only a display name, such as
model: [Claude Opus 5.5 (copilot)], producesWarning: Custom agent "go" specifies model "Claude Opus 5.5 (copilot)" which is not available; using "claude-opus-5.5" insteadin the CLI. The 1.0.24 changelog says display names with a vendor suffix are accepted, andClaude Sonnet 5.5 (copilot)resolved without a warning.
Activity
[-]Copilot app: selecting a custom agent ignores its frontmatter model and reasoning-effort (works in CLI)[/-][+]Copilot app: selecting a custom agent in the composer agent picker doesn't apply its model or reasoning-effort[/+]