pub enum SandboxPolicy {
ReadOnly {
network_access: bool,
network_allowlist: Vec<NetworkAllowlistEntry>,
},
WorkspaceWrite {
writable_roots: Vec<WritableRoot>,
network_access: bool,
network_allowlist: Vec<NetworkAllowlistEntry>,
sensitive_paths: Option<Vec<SensitivePath>>,
resource_limits: ResourceLimits,
seccomp_profile: SeccompProfile,
exclude_tmpdir_env_var: bool,
exclude_slash_tmp: bool,
},
DangerFullAccess,
ExternalSandbox {
description: String,
},
}Expand description
Sandbox policy determining what operations are permitted during execution.
This follows the Codex sandboxing model with three main variants:
- ReadOnly: Only read operations allowed (safe for viewing files)
- WorkspaceWrite: Can write within specified directories
- DangerFullAccess: No restrictions (dangerous, requires explicit approval)
The field guide’s three-question model:
- What is shared between this code and the host? (boundary)
- What can the code touch? (policy - this enum)
- What survives between runs? (lifecycle)
Variants§
ReadOnly
No write access to the filesystem; network access may be restricted or allowlisted.
Fields
network_allowlist: Vec<NetworkAllowlistEntry>Domain-based network egress allowlist.
WorkspaceWrite
Write access limited to the specified roots; network controlled by allowlist.
Fields
writable_roots: Vec<WritableRoot>Directories where write access is permitted.
network_access: boolWhether network access is allowed (legacy boolean, use network_allowlist for fine-grained control).
network_allowlist: Vec<NetworkAllowlistEntry>Domain-based network egress allowlist. When non-empty, only connections to these destinations are permitted. Following field guide: “Default-deny outbound network, then allowlist.”
sensitive_paths: Option<Vec<SensitivePath>>Sensitive paths to block (credentials, SSH keys, cloud configs). Following field guide: prevents “policy leakage” of credentials. Defaults to DEFAULT_SENSITIVE_PATHS if None.
resource_limits: ResourceLimitsResource limits (memory, PIDs, disk, CPU). Following field guide: prevents fork bombs, memory exhaustion.
seccomp_profile: SeccompProfileSeccomp-BPF profile for Linux syscall filtering. Following field guide: “Landlock + seccomp is the recommended Linux pattern.”
DangerFullAccess
Full access - no sandbox restrictions applied. Use with extreme caution.
ExternalSandbox
External sandbox - the caller is responsible for sandbox setup.
Implementations§
Source§impl SandboxPolicy
impl SandboxPolicy
Sourcepub fn new_read_only_policy() -> Self
pub fn new_read_only_policy() -> Self
Create a new read-only policy (alias for backwards compatibility).
Sourcepub fn read_only_with_network(
network_allowlist: Vec<NetworkAllowlistEntry>,
) -> Self
pub fn read_only_with_network( network_allowlist: Vec<NetworkAllowlistEntry>, ) -> Self
Create a read-only policy with a network allowlist.
Sourcepub fn read_only_with_full_network() -> Self
pub fn read_only_with_full_network() -> Self
Create a read-only policy with full network access.
Sourcepub fn workspace_write(writable_roots: Vec<PathBuf>) -> Self
pub fn workspace_write(writable_roots: Vec<PathBuf>) -> Self
Create a workspace-write policy with specified roots. Uses default sensitive path blocking and strict seccomp profile.
Sourcepub fn workspace_write_with_network(
writable_roots: Vec<PathBuf>,
network_allowlist: Vec<NetworkAllowlistEntry>,
) -> Self
pub fn workspace_write_with_network( writable_roots: Vec<PathBuf>, network_allowlist: Vec<NetworkAllowlistEntry>, ) -> Self
Create a workspace-write policy with network allowlist.
Sourcepub fn workspace_write_with_sensitive_paths(
writable_roots: Vec<PathBuf>,
sensitive_paths: Vec<SensitivePath>,
) -> Self
pub fn workspace_write_with_sensitive_paths( writable_roots: Vec<PathBuf>, sensitive_paths: Vec<SensitivePath>, ) -> Self
Create a workspace-write policy with custom sensitive path settings.
Sourcepub fn workspace_write_no_sensitive_blocking(
writable_roots: Vec<PathBuf>,
) -> Self
pub fn workspace_write_no_sensitive_blocking( writable_roots: Vec<PathBuf>, ) -> Self
Create a workspace-write policy without sensitive path blocking (dangerous).
Sourcepub fn workspace_write_with_limits(
writable_roots: Vec<PathBuf>,
resource_limits: ResourceLimits,
) -> Self
pub fn workspace_write_with_limits( writable_roots: Vec<PathBuf>, resource_limits: ResourceLimits, ) -> Self
Create a workspace-write policy with resource limits. Useful for untrusted code that needs containment.
Sourcepub fn workspace_write_full(
writable_roots: Vec<PathBuf>,
network_allowlist: Vec<NetworkAllowlistEntry>,
sensitive_paths: Option<Vec<SensitivePath>>,
resource_limits: ResourceLimits,
seccomp_profile: SeccompProfile,
) -> Self
pub fn workspace_write_full( writable_roots: Vec<PathBuf>, network_allowlist: Vec<NetworkAllowlistEntry>, sensitive_paths: Option<Vec<SensitivePath>>, resource_limits: ResourceLimits, seccomp_profile: SeccompProfile, ) -> Self
Create a fully-configured workspace-write policy.
Sourcepub fn full_access() -> Self
pub fn full_access() -> Self
Create a full-access policy (dangerous).
Sourcepub fn has_full_network_access(&self) -> bool
pub fn has_full_network_access(&self) -> bool
Check if the policy allows full network access (unrestricted).
Sourcepub fn has_network_allowlist(&self) -> bool
pub fn has_network_allowlist(&self) -> bool
Check if the policy has a network allowlist (domain-restricted access).
Sourcepub fn network_allowlist(&self) -> &[NetworkAllowlistEntry]
pub fn network_allowlist(&self) -> &[NetworkAllowlistEntry]
Get the network allowlist entries, if any.
Sourcepub fn is_network_allowed(&self, domain: &str, port: u16) -> bool
pub fn is_network_allowed(&self, domain: &str, port: u16) -> bool
Check if network access to a specific domain:port is allowed.
Sourcepub fn sensitive_paths(&self) -> Vec<SensitivePath>
pub fn sensitive_paths(&self) -> Vec<SensitivePath>
Get the effective sensitive paths to block. Returns default paths if not explicitly configured.
Sourcepub fn sensitive_paths_for_execution(&self, cwd: &Path) -> Vec<SensitivePath>
pub fn sensitive_paths_for_execution(&self, cwd: &Path) -> Vec<SensitivePath>
Get sensitive paths including write-only protected directories for writable roots.
Sourcepub fn is_sensitive_path(&self, path: &Path) -> bool
pub fn is_sensitive_path(&self, path: &Path) -> bool
Check if a path is a sensitive location that should be blocked.
Sourcepub fn is_path_write_blocked(&self, path: &Path, cwd: &Path) -> bool
pub fn is_path_write_blocked(&self, path: &Path, cwd: &Path) -> bool
Check if write access to a path is blocked under this policy.
Sourcepub fn is_path_readable(&self, path: &Path) -> bool
pub fn is_path_readable(&self, path: &Path) -> bool
Check if read access to a path is allowed under this policy.
Sourcepub fn resource_limits(&self) -> ResourceLimits
pub fn resource_limits(&self) -> ResourceLimits
Get the resource limits for this policy.
Sourcepub fn seccomp_profile(&self) -> SeccompProfile
pub fn seccomp_profile(&self) -> SeccompProfile
Get the seccomp profile for this policy (Linux only).
Sourcepub fn has_full_disk_write_access(&self) -> bool
pub fn has_full_disk_write_access(&self) -> bool
Check if the policy allows full disk write access.
Sourcepub fn has_full_disk_read_access(&self) -> bool
pub fn has_full_disk_read_access(&self) -> bool
Check if the policy allows full disk read access.
Sourcepub fn get_writable_roots_with_cwd(&self, cwd: &Path) -> Vec<WritableRoot>
pub fn get_writable_roots_with_cwd(&self, cwd: &Path) -> Vec<WritableRoot>
Get the list of writable roots including the current working directory.
Sourcepub fn is_path_writable(&self, path: &Path, cwd: &Path) -> bool
pub fn is_path_writable(&self, path: &Path, cwd: &Path) -> bool
Check if a path is writable under this policy.
Sourcepub fn can_set(&self, new_policy: &SandboxPolicy) -> Result<()>
pub fn can_set(&self, new_policy: &SandboxPolicy) -> Result<()>
Validate that another policy can be set from this one. Used to enforce policy escalation restrictions.
Sourcepub fn description(&self) -> &'static str
pub fn description(&self) -> &'static str
Get a human-readable description of the policy.
Trait Implementations§
Source§impl Clone for SandboxPolicy
impl Clone for SandboxPolicy
Source§fn clone(&self) -> SandboxPolicy
fn clone(&self) -> SandboxPolicy
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for SandboxPolicy
impl Debug for SandboxPolicy
Source§impl Default for SandboxPolicy
impl Default for SandboxPolicy
Source§impl<'de> Deserialize<'de> for SandboxPolicy
impl<'de> Deserialize<'de> for SandboxPolicy
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl Eq for SandboxPolicy
Source§impl PartialEq for SandboxPolicy
impl PartialEq for SandboxPolicy
Source§fn eq(&self, other: &SandboxPolicy) -> bool
fn eq(&self, other: &SandboxPolicy) -> bool
self and other values to be equal, and is used by ==.Source§impl Serialize for SandboxPolicy
impl Serialize for SandboxPolicy
impl StructuralPartialEq for SandboxPolicy
Auto Trait Implementations§
impl Freeze for SandboxPolicy
impl RefUnwindSafe for SandboxPolicy
impl Send for SandboxPolicy
impl Sync for SandboxPolicy
impl Unpin for SandboxPolicy
impl UnsafeUnpin for SandboxPolicy
impl UnwindSafe for SandboxPolicy
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<T> CacheValue for T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<D> OwoColorize for D
impl<D> OwoColorize for D
Source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg or
a color-specific method, such as OwoColorize::green, Read moreSource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg or
a color-specific method, such as OwoColorize::on_yellow, Read more