From 73430c462f57389b5c7b76648ae0e30e0a8519e8 Mon Sep 17 00:00:00 2001 From: viyatb-oai Date: Fri, 19 Dec 2025 15:47:50 -0800 Subject: [PATCH] some more improvements --- codex-rs/core/src/network_proxy.rs | 12 ++++++------ codex-rs/core/src/tasks/user_shell.rs | 5 ++--- codex-rs/network-proxy/src/config.rs | 8 ++++---- docs/config.md | 8 ++++---- docs/example-config.md | 8 ++++---- docs/network-proxy-design.md | 2 +- docs/network-proxy-quickstart.md | 4 ++-- 7 files changed, 23 insertions(+), 24 deletions(-) diff --git a/codex-rs/core/src/network_proxy.rs b/codex-rs/core/src/network_proxy.rs index dcacf9ed90..ef61cc7ee2 100644 --- a/codex-rs/core/src/network_proxy.rs +++ b/codex-rs/core/src/network_proxy.rs @@ -23,8 +23,8 @@ use wildmatch::WildMatchPattern; const NETWORK_PROXY_TABLE: &str = "network_proxy"; const NETWORK_PROXY_POLICY_TABLE: &str = "policy"; -const ALLOWED_DOMAINS_KEY: &str = "allowedDomains"; -const DENIED_DOMAINS_KEY: &str = "deniedDomains"; +const ALLOWED_DOMAINS_KEY: &str = "allowed_domains"; +const DENIED_DOMAINS_KEY: &str = "denied_domains"; #[derive(Debug, Clone, Deserialize)] pub struct NetworkProxyBlockedRequest { @@ -421,13 +421,13 @@ struct NetworkProxySection { #[derive(Default, Deserialize)] pub(crate) struct NetworkPolicy { - #[serde(default, rename = "allowedDomains")] + #[serde(default, rename = "allowed_domains", alias = "allowedDomains")] allowed_domains: Vec, - #[serde(default, rename = "deniedDomains")] + #[serde(default, rename = "denied_domains", alias = "deniedDomains")] denied_domains: Vec, - #[serde(default, rename = "allowUnixSockets")] + #[serde(default, rename = "allow_unix_sockets", alias = "allowUnixSockets")] pub(crate) allow_unix_sockets: Vec, - #[serde(default, rename = "allowLocalBinding")] + #[serde(default, rename = "allow_local_binding", alias = "allowLocalBinding")] pub(crate) allow_local_binding: bool, } diff --git a/codex-rs/core/src/tasks/user_shell.rs b/codex-rs/core/src/tasks/user_shell.rs index 84823e87b8..db8c15d459 100644 --- a/codex-rs/core/src/tasks/user_shell.rs +++ b/codex-rs/core/src/tasks/user_shell.rs @@ -93,13 +93,12 @@ impl SessionTask for UserShellCommandTask { ) .await; - let sandbox_policy = SandboxPolicy::DangerFullAccess; let exec_env = ExecEnv { command: command.clone(), cwd: cwd.clone(), env: create_env( &turn_context.shell_environment_policy, - &sandbox_policy, + &turn_context.sandbox_policy, &turn_context.network_proxy, ), expiration: USER_SHELL_TIMEOUT_MS.into(), @@ -115,7 +114,7 @@ impl SessionTask for UserShellCommandTask { tx_event: session.get_tx_event(), }); - let exec_result = execute_exec_env(exec_env, &sandbox_policy, stdout_stream) + let exec_result = execute_exec_env(exec_env, &turn_context.sandbox_policy, stdout_stream) .or_cancel(&cancellation_token) .await; diff --git a/codex-rs/network-proxy/src/config.rs b/codex-rs/network-proxy/src/config.rs index 924fb00ff6..200c544e98 100644 --- a/codex-rs/network-proxy/src/config.rs +++ b/codex-rs/network-proxy/src/config.rs @@ -52,13 +52,13 @@ impl Default for NetworkProxyConfig { #[derive(Debug, Clone, Serialize, Deserialize)] pub struct NetworkPolicy { - #[serde(default, rename = "allowedDomains")] + #[serde(default, rename = "allowed_domains", alias = "allowedDomains")] pub allowed_domains: Vec, - #[serde(default, rename = "deniedDomains")] + #[serde(default, rename = "denied_domains", alias = "deniedDomains")] pub denied_domains: Vec, - #[serde(default, rename = "allowUnixSockets")] + #[serde(default, rename = "allow_unix_sockets", alias = "allowUnixSockets")] pub allow_unix_sockets: Vec, - #[serde(default, rename = "allowLocalBinding")] + #[serde(default, rename = "allow_local_binding", alias = "allowLocalBinding")] pub allow_local_binding: bool, } diff --git a/docs/config.md b/docs/config.md index 629712b678..547260bbee 100644 --- a/docs/config.md +++ b/docs/config.md @@ -981,10 +981,10 @@ Valid values: | `network_proxy.no_proxy` | array | Hosts/IPs that bypass the proxy (default includes localhost + private network ranges). | | `network_proxy.prompt_on_block` | boolean | Poll `/blocked` and prompt on denied requests (default: true). | | `network_proxy.poll_interval_ms` | number | Admin poll interval in ms (default: 1000). | -| `network_proxy.policy.allowedDomains` | array | Allowlist of domain patterns (denylist takes precedence). | -| `network_proxy.policy.deniedDomains` | array | Denylist of domain patterns (takes precedence over allowlist). | -| `network_proxy.policy.allowLocalBinding` | boolean | Allow localhost binding when proxy-restricted (macOS only, default: false). | -| `network_proxy.policy.allowUnixSockets` | array | Allow specific Unix socket paths when proxy-restricted (macOS only, default: []). | +| `network_proxy.policy.allowed_domains` | array | Allowlist of domain patterns (denylist takes precedence). | +| `network_proxy.policy.denied_domains` | array | Denylist of domain patterns (takes precedence over allowlist). | +| `network_proxy.policy.allow_local_binding` | boolean | Allow localhost binding when proxy-restricted (macOS only, default: false). | +| `network_proxy.policy.allow_unix_sockets` | array | Allow specific Unix socket paths when proxy-restricted (macOS only, default: []). | | `network_proxy.mitm.enabled` | boolean | Enable HTTPS MITM for read-only enforcement in limited mode (default: false). | | `network_proxy.mitm.inspect` | boolean | Enable body inspection in MITM mode (default: false). | | `network_proxy.mitm.max_body_bytes` | number | Max body bytes to buffer when inspection is enabled (default: 4096). | diff --git a/docs/example-config.md b/docs/example-config.md index 57fa660d49..7964a03c0d 100644 --- a/docs/example-config.md +++ b/docs/example-config.md @@ -131,12 +131,12 @@ poll_interval_ms = 1000 [network_proxy.policy] # Allow localhost binds inside the sandbox (macOS only). Default: false -allowLocalBinding = false +allow_local_binding = false # Allow Unix socket paths inside the sandbox (macOS only). Default: [] -allowUnixSockets = [] +allow_unix_sockets = [] # Optional domain allow/deny lists (denylist wins) -allowedDomains = [] -deniedDomains = [] +allowed_domains = [] +denied_domains = [] ################################################################################ # Shell Environment Policy for spawned processes diff --git a/docs/network-proxy-design.md b/docs/network-proxy-design.md index 1966febbf4..77bf005347 100644 --- a/docs/network-proxy-design.md +++ b/docs/network-proxy-design.md @@ -45,7 +45,7 @@ flowchart LR The proxy reads `~/.codex/config.toml`: - `[network_proxy]` for endpoints, mode, and toggles. -- `[network_proxy.policy]` for `allowedDomains` / `deniedDomains`. +- `[network_proxy.policy]` for `allowed_domains` / `denied_domains`. - `[network_proxy.mitm]` for MITM CA paths and inspection settings. Codex is the source of truth. Approval actions update the config and trigger a proxy reload. diff --git a/docs/network-proxy-quickstart.md b/docs/network-proxy-quickstart.md index 09bfa229eb..eb1d312d65 100644 --- a/docs/network-proxy-quickstart.md +++ b/docs/network-proxy-quickstart.md @@ -31,8 +31,8 @@ prompt_on_block = true poll_interval_ms = 1000 [network_proxy.policy] -allowedDomains = ["example.com", "*.github.com"] -deniedDomains = ["metadata.google.internal", "169.254.*"] +allowed_domains = ["example.com", "*.github.com"] +denied_domains = ["metadata.google.internal", "169.254.*"] [network_proxy.mitm] enabled = false