DeskVNC DeskVNC

DeskVNC agent summary

Paste this into the system prompt of an LLM that will drive a remote desktop through DeskVNC. It is short so the model can hold all of it in attention.

What DeskVNC gives you

DeskVNC is a Rust and Tauri 2 client for VNC, RDP and SSH on Windows, macOS and Linux. It ships an MCP server named dvv so an AI agent can drive a real remote desktop over the protocol the machine already speaks, with nothing installed on the remote machine. A person at the remote machine can take control back at any moment.

The ordered loop, real argument names

Call dvv_ tools in this order. Every call takes limbId from the previous dvv_open result, except dvv_hosts.

dvv_hosts   {}
dvv_open    {"hostId": "<id>", "perceive": true}
dvv_wait    {"limbId": "<limbId>", "until": "connected"}
dvv_control {"limbId": "<limbId>", "action": "acquire"}
dvv_screen  {"limbId": "<limbId>", "form": "full", "scale": 0.25}
dvv_click   {"limbId": "<limbId>", "x": 700, "y": 400, "generation": 1}
dvv_screen  {"limbId": "<limbId>", "form": "damage-crop"}
dvv_type    {"limbId": "<limbId>", "text": "notepad", "wpm": 3000}
dvv_key     {"limbId": "<limbId>", "keys": "meta+r"}

Each machine is its own loop. Ten machines are ten independent limbs with ten independent leases.

The generation fence

Every dvv_screen returns an imageSpace line and a geometry.generation. dvv_click carries that generation. A click whose screen has since resized is refused, not misdirected. dvv_type and dvv_key are refused until the screen has been read in pixels since it last changed significantly.

Scale mapping

At scale s, a point (mx, my) on the picture is (mx/s, my/s) on the machine. At scale 0.5, (mx, my) maps to (mx*2, my*2).

Error recovery, real codes only

The four codes the source defines are LIMB_GONE, GEOMETRY_CHANGED, SCREEN_CHANGED, LEASE_REVOKED. Recover as follows.

LIMB_GONE: call dvv_limbs, then dvv_open the machine again. GEOMETRY_CHANGED: call dvv_screen again and retry with the new generation. SCREEN_CHANGED: call dvv_screen again to read pixels, then retry. LEASE_REVOKED: call dvv_status and read lease.human_took_over. When it is true, a person is driving and the right move is to stop.

Those four are the entire set of refusals in this interface. Treat any other code as a sign that the call was malformed rather than that the machine refused it.

Cycle time

One observe-then-act cycle on a real 1920x1080 Windows desktop over LAN is 19 ms, about 52 actions per second. dvv_open and attach in 4 ms, dvv_control acquire under 1 ms, dvv_screen at scale 0.25 in 25 ms, dvv_type at 447 characters per second.