Summary
Allow custom subagents defined via CustomAgentConfig to specify their own model and reasoning effort independent of the orchestrator session's settings. The Claude Agent SDK supports both via model and effort fields on AgentDefinition. copilot-sdk's CustomAgentConfig exposes neither, so both knobs are fixed at session level and apply uniformly to every subagent dispatch.
The two fields share the same architectural shape — both live on AgentDefinition in Claude's SDK, both fall back to the session value when omitted, and both are blocked on the same SDK-side change. Landing them together avoids two churns through the same type, the YAML loader, and the CLI surface.
Current state
CustomAgentConfig (copilot-sdk types.d.ts, lines 847–886) has no model or reasoningEffort field:
export interface CustomAgentConfig {
name: string;
displayName?: string;
description?: string;
tools?: string[] | null;
prompt: string;
mcpServers?: Record<string, MCPServerConfig>;
infer?: boolean;
skills?: string[];
}
Session-level model and reasoningEffort on SessionConfig (types.d.ts ~lines 943–949) apply uniformly to every subagent dispatch:
export interface SessionConfig {
...
model?: string;
reasoningEffort?: ReasoningEffort; // "low" | "medium" | "high" | "xhigh"
...
}
There is a related gap in reasoning-event visibility. Today, GPT-based subagents emit no content that can surface as reasoning output, while Claude-based subagents happen to produce tool-assistant messages that can be repurposed as reasoning — though this is not a supported pattern. A dedicated message type (e.g., a subagentReasoning event) would let consumers reliably identify and group reasoning output regardless of the underlying model.
Proposed
Add two optional fields to CustomAgentConfig:
export interface CustomAgentConfig {
// ...existing fields...
/**
* Model override for this agent. Accepts a full model ID, or `"inherit"`
* to explicitly defer to the session model. Falls back to the session
* model when omitted.
*/
model?: string;
/**
* Reasoning effort override for this agent. Only valid when the resolved
* model supports `capabilities.supports.reasoningEffort`. Falls back to
* the session `reasoningEffort` when omitted.
*/
reasoningEffort?: ReasoningEffort; // existing "low" | "medium" | "high" | "xhigh"
}
Precedent
Claude Agent SDK's AgentDefinition exposes both fields on the same type:
▎ model string — Model override for this agent. Accepts an alias such as 'sonnet', 'opus', 'haiku', 'inherit', or a full mod if omitted.
▎ effort 'low' | 'medium' | 'high' | 'xhigh' | 'max' | number — Reasoning effort level for this agent.
https://code.claude.com/docs/en/agent-sdk/subagents (AgentDefinition configuration table)
Summary
Allow custom subagents defined via CustomAgentConfig to specify their own model and reasoning effort independent of the orchestrator session's settings. The Claude Agent SDK supports both via model and effort fields on AgentDefinition. copilot-sdk's CustomAgentConfig exposes neither, so both knobs are fixed at session level and apply uniformly to every subagent dispatch.
The two fields share the same architectural shape — both live on AgentDefinition in Claude's SDK, both fall back to the session value when omitted, and both are blocked on the same SDK-side change. Landing them together avoids two churns through the same type, the YAML loader, and the CLI surface.
Current state
CustomAgentConfig (copilot-sdk types.d.ts, lines 847–886) has no model or reasoningEffort field:
export interface CustomAgentConfig {
name: string;
displayName?: string;
description?: string;
tools?: string[] | null;
prompt: string;
mcpServers?: Record<string, MCPServerConfig>;
infer?: boolean;
skills?: string[];
}
Session-level model and reasoningEffort on SessionConfig (types.d.ts ~lines 943–949) apply uniformly to every subagent dispatch:
There is a related gap in reasoning-event visibility. Today, GPT-based subagents emit no content that can surface as reasoning output, while Claude-based subagents happen to produce tool-assistant messages that can be repurposed as reasoning — though this is not a supported pattern. A dedicated message type (e.g., a subagentReasoning event) would let consumers reliably identify and group reasoning output regardless of the underlying model.
Proposed
Add two optional fields to CustomAgentConfig:
Precedent
Claude Agent SDK's AgentDefinition exposes both fields on the same type:
▎ model string — Model override for this agent. Accepts an alias such as 'sonnet', 'opus', 'haiku', 'inherit', or a full mod if omitted.
▎ effort 'low' | 'medium' | 'high' | 'xhigh' | 'max' | number — Reasoning effort level for this agent.
https://code.claude.com/docs/en/agent-sdk/subagents (AgentDefinition configuration table)