Skip to main content

SecurityPolicy

Struct SecurityPolicy 

pub struct SecurityPolicy {
Show 26 fields pub autonomy: AutonomyLevel, pub risk_profile_name: String, pub delegation_policy: DelegationPolicy, pub workspace_dir: PathBuf, pub config_path: Option<PathBuf>, pub data_dir: Option<PathBuf>, pub workspace_only: bool, pub allowed_commands: Vec<String>, pub forbidden_paths: Vec<String>, pub allowed_roots: Vec<PathBuf>, pub allowed_roots_read_only: Vec<PathBuf>, pub allowed_roots_write_only: Vec<PathBuf>, pub max_actions_per_hour: u32, pub max_cost_per_day_cents: u32, pub require_approval_for_medium_risk: bool, pub block_high_risk_commands: bool, pub shell_env_passthrough: Vec<String>, pub shell_timeout_secs: u64, pub allowed_tools: Option<Vec<String>>, pub excluded_tools: Option<Vec<String>>, pub auto_approve: Vec<String>, pub always_ask: Vec<String>, pub sandbox_enabled: Option<bool>, pub sandbox_backend: Option<String>, pub firejail_args: Vec<String>, pub tracker: PerSenderTracker,
}

Fields§

§autonomy: AutonomyLevel§risk_profile_name: String

Name of the risk profile this policy was built from. Used to gate delegation: a Delegate may only target an agent sharing the caller’s risk profile. Empty when constructed outside the profile path.

§delegation_policy: DelegationPolicy

Whether and to which agents this profile may delegate.

§workspace_dir: PathBuf§config_path: Option<PathBuf>§data_dir: Option<PathBuf>§workspace_only: bool§allowed_commands: Vec<String>§forbidden_paths: Vec<String>§allowed_roots: Vec<PathBuf>

Directories the agent can read AND write under. Includes RiskProfileConfig.allowed_roots plus any cross-agent AccessMode::ReadWrite grants resolved from agent.workspace.access at policy construction time.

§allowed_roots_read_only: Vec<PathBuf>

Directories the agent can read but NOT write under. Populated from cross-agent AccessMode::Read grants at policy construction time. Empty when no read-only cross-agent access is configured.

§allowed_roots_write_only: Vec<PathBuf>

Directories the agent can write but NOT read under. Populated from cross-agent AccessMode::Write grants; read-side tools ignore this list.

§max_actions_per_hour: u32§max_cost_per_day_cents: u32§require_approval_for_medium_risk: bool§block_high_risk_commands: bool§shell_env_passthrough: Vec<String>§shell_timeout_secs: u64§allowed_tools: Option<Vec<String>>

Tool name allowlist. None is unrestricted (default for agents without an explicit risk_profile.allowed_tools setting). Some(vec![]) denies every tool. Some(list) admits only the listed names. Enforced at the agent loop’s tool-dispatch site.

§excluded_tools: Option<Vec<String>>

Tool name denylist. Subtracts from the allowed set (whether the allowed set comes from allowed_tools or from the unrestricted default). None and Some(vec![]) both mean “exclude nothing”.

§auto_approve: Vec<String>

Tools that never require approval in this profile. Mirrors RiskProfileConfig.auto_approve.

§always_ask: Vec<String>

Tools that always require approval in this profile. Mirrors RiskProfileConfig.always_ask.

§sandbox_enabled: Option<bool>

Whether the sandbox is enabled for this profile. None inherits the global default at the call site.

§sandbox_backend: Option<String>

Sandbox backend identifier (e.g. "firejail", "landlock"). None inherits the global default.

§firejail_args: Vec<String>

Extra arguments forwarded to firejail when sandbox_backend resolves to "firejail".

§tracker: PerSenderTracker

Implementations§

Source§

impl SecurityPolicy

Source

pub fn is_tool_allowed(&self, name: &str) -> bool

True when name is admissible under the current policy. allowed_tools = None is unrestricted; Some(list) is the allowlist. excluded_tools always subtracts.

Source

pub fn is_tool_excluded(&self, name: &str) -> bool

Source§

impl SecurityPolicy

Source

pub fn command_risk_level(&self, command: &str) -> CommandRiskLevel

Classify command risk. Any high-risk segment marks the whole command high.

Source

pub fn validate_command_execution( &self, command: &str, approved: bool, ) -> Result<CommandRiskLevel, String>

Validate full command execution policy (allowlist + risk gate).

Source

pub fn is_command_allowed(&self, command: &str) -> bool

Source

pub fn forbidden_path_argument(&self, command: &str) -> Option<String>

Return the first path-like argument blocked by path policy. This is best-effort token parsing for shell commands and is intended as a safety gate before command execution.

Source

pub fn is_path_allowed(&self, path: &str) -> bool

Check if a file path is allowed (no path traversal, within workspace)

Source

pub fn is_resolved_path_readable(&self, resolved: &Path) -> bool

Source

pub fn is_resolved_path_allowed(&self, resolved: &Path) -> bool

Source

pub fn is_runtime_config_path(&self, resolved: &Path) -> bool

Source

pub fn runtime_config_violation_message(&self, resolved: &Path) -> String

Source

pub fn resolved_path_violation_message(&self, resolved: &Path) -> String

Source

pub fn can_act(&self) -> bool

Check if autonomy level permits any action at all

Source

pub fn enforce_tool_operation( &self, operation: ToolOperation, operation_name: &str, ) -> Result<(), String>

Enforce policy for a tool operation. Read operations are always allowed by autonomy/rate gates. Act operations require non-readonly autonomy and available action budget.

Source

pub fn record_action(&self) -> bool

Record an action for the current sender and check if rate-limited. Returns true if allowed, false if budget exhausted.

Source

pub fn is_rate_limited(&self) -> bool

Check if the current sender would be rate-limited without recording.

Source

pub fn resolve_tool_path(&self, path: &str) -> PathBuf

Source

pub fn is_under_allowed_root(&self, path: &str) -> bool

Source

pub fn is_under_read_only_allowed_root(&self, path: &str) -> bool

Source

pub fn is_under_any_allowed_root(&self, path: &str) -> bool

Union of all three root tiers; directionality is enforced later by the resolved-path checks.

Source

pub fn ensure_no_escalation_beyond( &self, parent: &SecurityPolicy, ) -> Result<(), EscalationViolation>

Source

pub fn from_risk_profile( risk_profile: &RiskProfileConfig, workspace_dir: &Path, ) -> SecurityPolicy

Source

pub fn from_profiles( risk_profile: &RiskProfileConfig, runtime_profile: Option<&RuntimeProfileConfig>, workspace_dir: &Path, ) -> SecurityPolicy

Source

pub fn for_agent( config: &Config, agent_alias: &str, ) -> Result<SecurityPolicy, Error>

Source

pub fn prompt_summary(&self) -> String

Trait Implementations§

Source§

impl Clone for SecurityPolicy

Source§

fn clone(&self) -> SecurityPolicy

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · §

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for SecurityPolicy

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl Default for SecurityPolicy

Source§

fn default() -> SecurityPolicy

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
§

impl<T> PolicyExt for T
where T: ?Sized,

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,