diff --git a/codex-rs/cli/src/main.rs b/codex-rs/cli/src/main.rs index 10e2621533..7ac988d94e 100644 --- a/codex-rs/cli/src/main.rs +++ b/codex-rs/cli/src/main.rs @@ -432,6 +432,9 @@ fn merge_resume_cli_flags(interactive: &mut TuiCli, resume_cli: TuiCli) { if resume_cli.web_search { interactive.web_search = true; } + if resume_cli.disable_auto_compaction { + interactive.disable_auto_compaction = true; + } if !resume_cli.images.is_empty() { interactive.images = resume_cli.images; } @@ -567,6 +570,7 @@ mod tests { "--oss", "--full-auto", "--search", + "--disable-auto-compaction", "--sandbox", "workspace-write", "--ask-for-approval", @@ -609,6 +613,18 @@ mod tests { .iter() .any(|p| p == std::path::Path::new("/tmp/b.png")); assert!(has_a && has_b); + assert!(interactive.disable_auto_compaction); + assert!(!interactive.resume_picker); + assert!(!interactive.resume_last); + assert_eq!(interactive.resume_session_id.as_deref(), Some("sid")); + } + + #[test] + fn resume_disable_auto_compaction_flag_merges() { + let interactive = + finalize_from_args(["codex", "resume", "sid", "--disable-auto-compaction"].as_ref()); + + assert!(interactive.disable_auto_compaction); assert!(!interactive.resume_picker); assert!(!interactive.resume_last); assert_eq!(interactive.resume_session_id.as_deref(), Some("sid")); diff --git a/codex-rs/tui/src/cli.rs b/codex-rs/tui/src/cli.rs index f0630a34c5..1bebaf8f79 100644 --- a/codex-rs/tui/src/cli.rs +++ b/codex-rs/tui/src/cli.rs @@ -72,6 +72,10 @@ pub struct Cli { #[arg(long = "search", default_value_t = false)] pub web_search: bool, + /// Disable automatic conversation history compaction triggered near the model token limit. + #[arg(long = "disable-auto-compaction", default_value_t = false)] + pub disable_auto_compaction: bool, + #[clap(skip)] pub config_overrides: CliConfigOverrides, } diff --git a/codex-rs/tui/src/lib.rs b/codex-rs/tui/src/lib.rs index 8130d64796..07c7b1262b 100644 --- a/codex-rs/tui/src/lib.rs +++ b/codex-rs/tui/src/lib.rs @@ -170,6 +170,10 @@ pub async fn run_main( } }; + if cli.disable_auto_compaction { + config.model_auto_compact_token_limit = None; + } + // we load config.toml here to determine project state. #[allow(clippy::print_stderr)] let config_toml = {