diff --git a/codex-rs/core/src/context/environment_context.rs b/codex-rs/core/src/context/environment_context.rs
index ca1ac5f2f..272e3c617 100644
--- a/codex-rs/core/src/context/environment_context.rs
+++ b/codex-rs/core/src/context/environment_context.rs
@@ -96,6 +96,24 @@ impl NetworkContext {
denied_domains,
}
}
+
+ fn render(&self) -> String {
+ let mut rendered = "".to_string();
+ Self::push_rendered_domain_element(&mut rendered, "allowed", &self.allowed_domains);
+ Self::push_rendered_domain_element(&mut rendered, "denied", &self.denied_domains);
+ rendered.push_str("");
+ rendered
+ }
+
+ fn push_rendered_domain_element(rendered_network: &mut String, name: &str, domains: &[String]) {
+ if domains.is_empty() {
+ return;
+ }
+
+ rendered_network.push_str(&format!("<{name}>"));
+ rendered_network.push_str(&domains.join(","));
+ rendered_network.push_str(&format!("{name}>"));
+ }
}
impl EnvironmentContext {
@@ -288,14 +306,7 @@ impl ContextualUserFragment for EnvironmentContext {
}
match &self.network {
Some(network) => {
- lines.push(" ".to_string());
- for allowed in &network.allowed_domains {
- lines.push(format!(" {allowed}"));
- }
- for denied in &network.denied_domains {
- lines.push(format!(" {denied}"));
- }
- lines.push(" ".to_string());
+ lines.push(format!(" {}", network.render()));
}
None => {
// TODO(mbolin): Include this line if it helps the model.
diff --git a/codex-rs/core/src/context/environment_context_tests.rs b/codex-rs/core/src/context/environment_context_tests.rs
index bc0a17ca5..68ff7c9d4 100644
--- a/codex-rs/core/src/context/environment_context_tests.rs
+++ b/codex-rs/core/src/context/environment_context_tests.rs
@@ -71,11 +71,7 @@ fn serialize_environment_context_with_network() {
bash
2026-02-26
America/Los_Angeles
-
- api.example.com
- *.openai.com
- blocked.example.com
-
+ api.example.com,*.openai.comblocked.example.com
"#,
test_path_buf("/repo").display()
);
diff --git a/codex-rs/core/src/session/tests.rs b/codex-rs/core/src/session/tests.rs
index 0cb433c3e..6a5b08c12 100644
--- a/codex-rs/core/src/session/tests.rs
+++ b/codex-rs/core/src/session/tests.rs
@@ -5896,9 +5896,9 @@ async fn build_settings_update_items_emits_environment_item_for_network_changes(
.into_iter()
.find(|text| text.contains(""))
.expect("environment update item should be emitted");
- assert!(environment_update.contains(""));
- assert!(environment_update.contains("api.example.com"));
- assert!(environment_update.contains("blocked.example.com"));
+ assert!(environment_update.contains(
+ "api.example.comblocked.example.com"
+ ));
}
#[tokio::test]