🐛 Repo `.claude/agents/*/AGENT.md` `model:` field overrides session model for Copilot custom agents, breaking subagent spawns on BYOK providers
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- Shell
- Star
- 11.2k
- Fork
- 1.9k
- Merge trung bình
- 14 giờ 16 phút
- Pull request đã merge (30 ngày)
- 6
Mô tả
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
- Session started with
COPILOT_MODEL=deepseek-v4-flash:cloud(Ollama BYOK) and--model deepseek-v4-flash:cloud. - Repo contains:
.github/agents/developer.md— a Copilot custom agent (nomodel:field)..claude/agents/developer/AGENT.md— a Claude-Code agent withmodel: sonnet.
- Orchestrator (
agent_type: test-orch, tooltask) spawnstask(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: sonnetline →Developer(deepseek-v4-flash:cloud), subagent works. - Removing the whole
.claude/agents/dir → same fix. - User-level
.copilot/agents/developer.md(no.claudecounterpart, nomodel:) → inherits session model, works. - Passing
model: deepseek-v4-flash:cloudexplicitly to thetasktool → overrides the.claudemodel, 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)
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Bắt đầu bằng cách lần theo cách .claude/agents/*/AGENT.md ở cấp repo được phát hiện và cách trường model của nó được ánh xạ tới Copilot custom agents; so sánh với .github/agents/developer.md và ~/.copilot/agents/developer.md. Tái hiện với Ollama BYOK và task(agent_type: developer), sau đó xác minh rằng subagent kế thừa model của phiên và trả về phản hồi khi model Claude không khả dụng.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- ollama, shell
- Lĩnh vực
- ai, cli
- Loại issue
- Lỗi
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Ít trao đổi
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 50/100