diff --git a/codex-rs/cli/src/infty/args.rs b/codex-rs/cli/src/infty/args.rs index 6b0b6915de..636da8c3a3 100644 --- a/codex-rs/cli/src/infty/args.rs +++ b/codex-rs/cli/src/infty/args.rs @@ -4,6 +4,7 @@ use anyhow::Result; use clap::Parser; use clap::Subcommand; use codex_common::CliConfigOverrides; +use codex_protocol::config_types::ReasoningEffort; use super::commands; @@ -48,6 +49,18 @@ pub(crate) struct CreateArgs { /// Timeout in seconds when waiting for the solver reply to --objective. #[arg(long = "timeout-secs", default_value_t = super::commands::DEFAULT_TIMEOUT_SECS)] pub timeout_secs: u64, + + /// Override only the Director's model (solver and verifiers keep defaults). + #[arg(long = "director-model", value_name = "MODEL")] + pub director_model: Option, + + /// Override only the Director's reasoning effort (minimal|low|medium|high). + #[arg( + long = "director-effort", + value_name = "LEVEL", + value_parser = parse_reasoning_effort + )] + pub director_effort: Option, } #[derive(Debug, Parser)] @@ -106,3 +119,15 @@ impl InftyCli { Ok(()) } } + +fn parse_reasoning_effort(s: &str) -> Result { + match s.trim().to_ascii_lowercase().as_str() { + "minimal" => Ok(ReasoningEffort::Minimal), + "low" => Ok(ReasoningEffort::Low), + "medium" => Ok(ReasoningEffort::Medium), + "high" => Ok(ReasoningEffort::High), + _ => Err(format!( + "invalid reasoning effort: {s}. Expected one of: minimal|low|medium|high" + )), + } +} diff --git a/codex-rs/cli/src/infty/commands.rs b/codex-rs/cli/src/infty/commands.rs index 5cab37f9c6..46a3f9880d 100644 --- a/codex-rs/cli/src/infty/commands.rs +++ b/codex-rs/cli/src/infty/commands.rs @@ -78,11 +78,18 @@ pub(crate) async fn run_create( .iter() .map(|role| RoleConfig::new(role.to_string(), config.clone())) .collect(); + let mut director_config = config.clone(); + if let Some(model) = args.director_model.as_deref() { + director_config.model = model.to_string(); + } + if let Some(effort) = args.director_effort { + director_config.model_reasoning_effort = Some(effort); + } let run_params = RunParams { run_id: run_id.clone(), run_root: Some(run_path.clone()), solver: RoleConfig::new("solver", config.clone()), - director: RoleConfig::new("director", config.clone()), + director: RoleConfig::new("director", director_config), verifiers, };