pub(crate) enum CaptureTier {
SameInstance,
OtherInstance,
OtherUser,
ForeignApp,
}Expand description
Capture tier for one target window — see
docs/specs/SPEC_AGENT_UNRESTRICTED_CAPTURE_WITH_ACCOUNTABILITY_2026_08_30.md
§3. Keyed on WHAT is being captured, never on who is asking: identity is
already proven upstream (sign_ui_automation_auth), so the open question
is what a proven identity may reach.
This replaces the previous binary !is_self exclusion. That rule came from
SPEC_AGENT_UI_AUTOMATION_CLICK_SCREENSHOT_2026_08_18.md §6, which itself
says cross-agent targeting “if it’s ever wanted at all” should be a
distinct capability — i.e. it defaulted closed because no mechanism existed
to be selective, not because open had been judged wrong. The repo owner has
since directed that agents be able to capture anything. This enum is that
mechanism.
Variants§
SameInstance
T1 — another pane inside the caller’s OWN instance. Its window hosts every agent’s pane, which is exactly what the old rule blocked.
OtherInstance
T2 — a different AgentMux instance owned by the same OS user.
OtherUser
T3 — a window owned by a DIFFERENT OS user. The one tier that crosses a human rather than an agent boundary: that user never consented to this app’s agents, and no in-app notification can reach them.
ForeignApp
T4 — a non-AgentMux window owned by the same OS user (their browser, their password manager). PR #2709 round 2 caught the original unscoped tool capturing a KeePass window; allowed now, but always audited.
Implementations§
Trait Implementations§
Source§impl Clone for CaptureTier
impl Clone for CaptureTier
Source§fn clone(&self) -> CaptureTier
fn clone(&self) -> CaptureTier
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreimpl Copy for CaptureTier
Source§impl Debug for CaptureTier
impl Debug for CaptureTier
impl Eq for CaptureTier
Source§impl PartialEq for CaptureTier
impl PartialEq for CaptureTier
impl StructuralPartialEq for CaptureTier
Auto Trait Implementations§
impl Freeze for CaptureTier
impl RefUnwindSafe for CaptureTier
impl Send for CaptureTier
impl Sync for CaptureTier
impl Unpin for CaptureTier
impl UnsafeUnpin for CaptureTier
impl UnwindSafe for CaptureTier
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§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.§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.§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.§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.