diff --git a/codex-rs/tui/src/app/tests/session_lifecycle_requests.rs b/codex-rs/tui/src/app/tests/session_lifecycle_requests.rs
index 8d2fdd1893..e3b8d37d50 100644
--- a/codex-rs/tui/src/app/tests/session_lifecycle_requests.rs
+++ b/codex-rs/tui/src/app/tests/session_lifecycle_requests.rs
@@ -3276,6 +3276,7 @@ async fn check_dynamic_tool_requests(
serde_json::json!({
"name": "create_thread",
"namespace": "codex_tui",
+ "retain": true,
"output": format!(
"\n {creation_source}\n Check <main> & report\n"
)
@@ -3361,6 +3362,7 @@ async fn check_dynamic_tool_requests(
serde_json::json!({
"name": "send_message_to_thread",
"namespace": "codex_tui",
+ "retain": true,
"output": format!(
"\n {thread_id}\n Follow <up> & report\n"
)
diff --git a/codex-rs/tui/src/dynamic_tools.rs b/codex-rs/tui/src/dynamic_tools.rs
index c294d4a9dd..065c9d3622 100644
--- a/codex-rs/tui/src/dynamic_tools.rs
+++ b/codex-rs/tui/src/dynamic_tools.rs
@@ -1271,7 +1271,7 @@ async fn start_turn(
// Older app-server/TUI versions are intentionally unsupported:
// preserving tool authority takes precedence over legacy fallback.
tool_output: Some(Box::new(TurnToolOutput {
- retain: false,
+ retain: true,
name: tool.to_string(),
namespace: Some(NAMESPACE.to_string()),
output: FunctionCallOutputBody::Text(prompt),