Skip to main content

Action

Enum Action 

Source
pub enum Action {
Show 17 variants Screenshot, CursorPosition, MouseMove { x: i32, y: i32, }, LeftClick, RightClick, MiddleClick, DoubleClick, LeftClickDrag { x: i32, y: i32, }, Type { text: String, }, Key { keys: String, }, Scroll { x: i32, y: i32, direction: ScrollDirection, amount: i32, }, Wait { ms: u64, }, Exec { command: String, }, ExecCapture { command: String, timeout_ms: Option<u64>, }, Navigate { url: String, }, SetClipboard { text: String, }, GetClipboard,
}
Expand description

A single computer-use action sent host → guest. Serialized as the JSON header of a request frame (no payload). Variants mirror the Anthropic computer-use tool so the MCP layer maps 1:1.

Variants§

§

Screenshot

Capture the framebuffer; response carries a PNG payload. The PNG’s pixel dimensions are the coordinate space every pointer action targets (top-left origin), so a caller can map a downscaled rendering back to true coordinates.

§

CursorPosition

Report the current pointer position in the response header (x,y).

§

MouseMove

Absolute pointer move to (x, y). The response header echoes the resulting pointer position (x,y) — a window manager can constrain the pointer, so the echo is the ground truth of where it landed.

Fields

§

LeftClick

Left button click at the current pointer position. The response header echoes the pointer position the click fired at (x,y).

§

RightClick

Right button click at the current pointer position. The response header echoes the pointer position the click fired at (x,y).

§

MiddleClick

Middle button click at the current pointer position. The response header echoes the pointer position the click fired at (x,y).

§

DoubleClick

Double left click at the current pointer position. The response header echoes the pointer position the click fired at (x,y).

§

LeftClickDrag

Press-move-release: drag from the current position to (x, y). The response header echoes the resulting pointer position (x,y).

Fields

§

Type

Type a UTF-8 string via synthetic key events.

Fields

§text: String
§

Key

Press a key chord, e.g. "ctrl+c", "Return", "alt+Tab".

Fields

§keys: String
§

Scroll

Scroll amount clicks in direction at (x, y). The response header echoes the resulting pointer position (x,y).

Fields

§amount: i32
§

Wait

Sleep ms milliseconds guest-side (lets UI settle).

Fields

§ms: u64
§

Exec

Launch a shell command in the desktop session (e.g. "chromium &").

Fields

§command: String
§

ExecCapture

Run command (via /bin/sh -c) to completion synchronously, returning its combined stdout/stderr as the response payload (UTF-8) and its exit status in the header’s exit_code (None ⇒ it did not exit cleanly — killed by the timeout_ms guard or a signal). Stdin is /dev/null. The in-guest agent is single-threaded, so a long command blocks every other action until it returns — intended for short, terminating commands (read a file, run a probe), not GUI apps (use Action::Exec/Action::Navigate for those). timeout_ms defaults guest-side and is clamped below the host vsock read timeout.

Fields

§command: String
§timeout_ms: Option<u64>
§

Navigate

Open url in the desktop’s browser. The guest hands the URL to a fixed launcher (vmette-open) without a shell, so the URL is never word-split or interpreted — a deterministic, injection-safe alternative to driving the address bar with synthetic keystrokes. Fire-and-forget: returns a bare ok once the launcher is spawned, not when the page loads (pair with a settle screenshot to wait for paint).

Fields

§

SetClipboard

Replace the X clipboard (the CLIPBOARD and PRIMARY selections) with text, so a subsequent paste (Ctrl+V in GUI apps, Shift+Insert / middle-click in terminals) inserts it. Pairs with Action::Key.

Fields

§text: String
§

GetClipboard

Read the X CLIPBOARD selection; the text is returned as the response payload (UTF-8), not in the header — so arbitrary content needs no JSON escaping. Empty when the clipboard is unset.

Trait Implementations§

Source§

impl Clone for Action

Source§

fn clone(&self) -> Action

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

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

Performs copy-assignment from source. Read more
Source§

impl Debug for Action

Source§

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

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

impl<'de> Deserialize<'de> for Action

Source§

fn deserialize<__D>( __deserializer: __D, ) -> Result<Action, <__D as Deserializer<'de>>::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for Action

Source§

fn eq(&self, other: &Action) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Serialize for Action

Source§

fn serialize<__S>( &self, __serializer: __S, ) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl StructuralPartialEq for Action

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> AutoreleaseSafe for T
where T: ?Sized,

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

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

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> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

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

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

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> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

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.
Source§

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

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

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

fn with_current_subscriber(self) -> WithDispatch<Self>

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