diff --git a/container/agent-runner/src/config.ts b/container/agent-runner/src/config.ts index 3a022ab..1546011 100644 --- a/container/agent-runner/src/config.ts +++ b/container/agent-runner/src/config.ts @@ -16,6 +16,8 @@ export interface RunnerConfig { agentGroupId: string; maxMessagesPerPrompt: number; mcpServers: Record }>; + model?: string; + effort?: string; } const DEFAULT_MAX_MESSAGES = 10; @@ -43,6 +45,8 @@ export function loadConfig(): RunnerConfig { agentGroupId: (raw.agentGroupId as string) || '', maxMessagesPerPrompt: (raw.maxMessagesPerPrompt as number) || DEFAULT_MAX_MESSAGES, mcpServers: (raw.mcpServers as RunnerConfig['mcpServers']) || {}, + model: (raw.model as string) || undefined, + effort: (raw.effort as string) || undefined, }; return _config; diff --git a/container/agent-runner/src/index.ts b/container/agent-runner/src/index.ts index 90c690f..d579592 100644 --- a/container/agent-runner/src/index.ts +++ b/container/agent-runner/src/index.ts @@ -91,6 +91,8 @@ async function main(): Promise { mcpServers, env: { ...process.env }, additionalDirectories: additionalDirectories.length > 0 ? additionalDirectories : undefined, + model: config.model, + effort: config.effort, }); await runPollLoop({ diff --git a/container/agent-runner/src/providers/claude.ts b/container/agent-runner/src/providers/claude.ts index 6850e51..d8e78dd 100644 --- a/container/agent-runner/src/providers/claude.ts +++ b/container/agent-runner/src/providers/claude.ts @@ -257,11 +257,15 @@ export class ClaudeProvider implements AgentProvider { private mcpServers: Record; private env: Record; private additionalDirectories?: string[]; + private model?: string; + private effort?: string; constructor(options: ProviderOptions = {}) { this.assistantName = options.assistantName; this.mcpServers = options.mcpServers ?? {}; this.additionalDirectories = options.additionalDirectories; + this.model = options.model; + this.effort = options.effort; this.env = { ...(options.env ?? {}), CLAUDE_CODE_AUTO_COMPACT_WINDOW, @@ -293,6 +297,9 @@ export class ClaudeProvider implements AgentProvider { ], disallowedTools: SDK_DISALLOWED_TOOLS, env: this.env, + model: this.model, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + effort: this.effort as any, permissionMode: 'bypassPermissions', allowDangerouslySkipPermissions: true, settingSources: ['project', 'user'], diff --git a/container/agent-runner/src/providers/types.ts b/container/agent-runner/src/providers/types.ts index b4b1fc8..c679dbe 100644 --- a/container/agent-runner/src/providers/types.ts +++ b/container/agent-runner/src/providers/types.ts @@ -25,6 +25,16 @@ export interface ProviderOptions { mcpServers?: Record; env?: Record; additionalDirectories?: string[]; + /** + * Model alias (`sonnet`, `opus`, `haiku`) or full model ID. Passed through + * to the underlying SDK. If omitted, the SDK default is used. + */ + model?: string; + /** + * Reasoning effort (`'low' | 'medium' | 'high' | 'xhigh' | 'max'`). Passed + * through to the underlying SDK. If omitted, the SDK default is used. + */ + effort?: string; } export interface QueryInput {