github / github/copilot-cli

🐛 Repo `.claude/agents/*/AGENT.md` `model:` field overrides session model for Copilot custom agents, breaking subagent spawns on BYOK providers

Aperta
#4,437 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

area:agents area:models
Lingua principale
Shell
Stelle
11.2k
Fork
1.9k
Merge medio
14h 16m
PR unite (30g)
6

Descrizione

Describe the bug

When a repository ships a Claude-Code agent definition in .claude/agents/<name>/AGENT.md with a model: field, the GitHub Copilot CLI honors that model: value as the default model for the Copilot custom agent of the same name — even when the agent is launched from .github/agents/<name>.md and even when the session runs on a different model.

On a BYOK provider (e.g. Ollama) where that model (sonnet, opus, …) is not served, spawning the agent as a task-tool subagent silently fails: the orchestrator reports Agent completed but produced no response. (or a Model '...' not found on provider ... (HTTP 404)), with no error surfaced to the caller.

Repro

  1. Session started with COPILOT_MODEL=deepseek-v4-flash:cloud (Ollama BYOK) and --model deepseek-v4-flash:cloud.
  2. Repo contains:
    • .github/agents/developer.md — a Copilot custom agent (no model: field).
    • .claude/agents/developer/AGENT.md — a Claude-Code agent with model: sonnet.
  3. Orchestrator (agent_type: test-orch, tool task) spawns task(agent_type: developer, mode: sync, ...).

Result: subagent fails / displays as Developer(sonnet), no response. Removing the model: sonnet line from .claude/agents/developer/AGENT.md, or moving the agent to user scope ~/.copilot/agents/, makes it inherit the session model and work.

Evidence (local bisect)

  • With .claude/agents/developer/AGENT.md (model: sonnet) present → Developer(sonnet), subagent fails.
  • Removing only the model: sonnet line → Developer(deepseek-v4-flash:cloud), subagent works.
  • Removing the whole .claude/agents/ dir → same fix.
  • User-level .copilot/agents/developer.md (no .claude counterpart, no model:) → inherits session model, works.
  • Passing model: deepseek-v4-flash:cloud explicitly to the task tool → overrides the .claude model, works.

The changelog confirms repo-level .claude/agents are intentionally discovered as custom agents, but honoring their Claude-specific model: hint for Copilot agents appears unintended and is the trigger.

Expected behaviour

Option A: .claude/agents/*/AGENT.md model: is treated as a Claude-Code-only hint and is ignored by the Copilot CLI (agents inherit the session model like .github/agents/*.md do).

Option B: a configuration flag/setting to ignore .claude models or force session-model inheritance for subagents.

Environment

  • Copilot CLI 1.0.79, macOS.
  • Provider: Ollama BYOK via COPILOT_PROVIDER_BASE_URL, COPILOT_PROVIDER_WIRE_API=responses, COPILOT_MODEL.

Related

  • #3266 (background task agents silently substitute requested model)
  • #2758 (opt-out for the cost-multiplier guard that clamps subagent model to session model)

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia tracciando come viene individuato .claude/agents/*/AGENT.md a livello di repository e come il relativo campo model viene mappato sui Copilot custom agents; confrontalo con .github/agents/developer.md e ~/.copilot/agents/developer.md. Riproducilo con Ollama BYOK e task(agent_type: developer), quindi verifica che il sottoagente erediti il modello della sessione e restituisca una risposta quando il modello Claude non è disponibile.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
ollama, shell
Ambito
ai, cli
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Tranquilla
Chiarezza
Abbastanza chiara
Idoneità per principianti
50/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.