diff --git a/codex-rs/app-server/src/lib.rs b/codex-rs/app-server/src/lib.rs index c6d943ae4..b92e18266 100644 --- a/codex-rs/app-server/src/lib.rs +++ b/codex-rs/app-server/src/lib.rs @@ -134,7 +134,7 @@ fn project_config_warning(config: &Config) -> Option .disabled_reason .as_ref() .map(ToString::to_string) - .unwrap_or_else(|| "Config folder disabled.".to_string()), + .unwrap_or_else(|| "config.toml is disabled.".to_string()), )); } } @@ -143,7 +143,11 @@ fn project_config_warning(config: &Config) -> Option return None; } - let mut message = "The following config folders are disabled:\n".to_string(); + let mut message = concat!( + "Project config.toml files are disabled in the following folders. ", + "Settings in those files are ignored, but skills and exec policies still load.\n", + ) + .to_string(); for (index, (folder, reason)) in disabled_folders.iter().enumerate() { let display_index = index + 1; message.push_str(&format!(" {display_index}. {folder}\n")); diff --git a/codex-rs/core/src/config_loader/mod.rs b/codex-rs/core/src/config_loader/mod.rs index 6d85a7936..ae56c384e 100644 --- a/codex-rs/core/src/config_loader/mod.rs +++ b/codex-rs/core/src/config_loader/mod.rs @@ -512,10 +512,10 @@ impl ProjectTrustContext { let user_config_file = self.user_config_file.as_path().display(); match decision.trust_level { Some(TrustLevel::Untrusted) => Some(format!( - "{trust_key} is marked as untrusted in {user_config_file}. Mark it trusted to enable project config folders." + "{trust_key} is marked as untrusted in {user_config_file}. To load config.toml, mark it trusted." )), _ => Some(format!( - "Add {trust_key} as a trusted project in {user_config_file}." + "To load config.toml, add {trust_key} as a trusted project in {user_config_file}." )), } } @@ -526,21 +526,16 @@ fn project_layer_entry( dot_codex_folder: &AbsolutePathBuf, layer_dir: &AbsolutePathBuf, config: TomlValue, + config_toml_exists: bool, ) -> ConfigLayerEntry { - match trust_context.disabled_reason_for_dir(layer_dir) { - Some(reason) => ConfigLayerEntry::new_disabled( - ConfigLayerSource::Project { - dot_codex_folder: dot_codex_folder.clone(), - }, - config, - reason, - ), - None => ConfigLayerEntry::new( - ConfigLayerSource::Project { - dot_codex_folder: dot_codex_folder.clone(), - }, - config, - ), + let source = ConfigLayerSource::Project { + dot_codex_folder: dot_codex_folder.clone(), + }; + + if config_toml_exists && let Some(reason) = trust_context.disabled_reason_for_dir(layer_dir) { + ConfigLayerEntry::new_disabled(source, config, reason) + } else { + ConfigLayerEntry::new(source, config) } } @@ -715,13 +710,15 @@ async fn load_project_layers( &dot_codex_abs, &layer_dir, TomlValue::Table(toml::map::Map::new()), + true, )); continue; } }; let config = resolve_relative_paths_in_config_toml(config, dot_codex_abs.as_path())?; - let entry = project_layer_entry(trust_context, &dot_codex_abs, &layer_dir, config); + let entry = + project_layer_entry(trust_context, &dot_codex_abs, &layer_dir, config, true); layers.push(entry); } Err(err) => { @@ -734,6 +731,7 @@ async fn load_project_layers( &dot_codex_abs, &layer_dir, TomlValue::Table(toml::map::Map::new()), + false, )); } else { let config_file_display = config_file.as_path().display(); diff --git a/codex-rs/tui/src/app.rs b/codex-rs/tui/src/app.rs index d3185adf3..bc006a292 100644 --- a/codex-rs/tui/src/app.rs +++ b/codex-rs/tui/src/app.rs @@ -201,7 +201,7 @@ fn emit_project_config_warnings(app_event_tx: &AppEventSender, config: &Config) .disabled_reason .as_ref() .map(ToString::to_string) - .unwrap_or_else(|| "Config folder disabled.".to_string()), + .unwrap_or_else(|| "config.toml is disabled.".to_string()), )); } @@ -209,7 +209,11 @@ fn emit_project_config_warnings(app_event_tx: &AppEventSender, config: &Config) return; } - let mut message = "The following config folders are disabled:\n".to_string(); + let mut message = concat!( + "Project config.toml files are disabled in the following folders. ", + "Settings in those files are ignored, but skills and exec policies still load.\n", + ) + .to_string(); for (index, (folder, reason)) in disabled_folders.iter().enumerate() { let display_index = index + 1; message.push_str(&format!(" {display_index}. {folder}\n"));