device-computer-automation — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited device-computer-automation (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
This skill turns the device:operator agent into a desktop-UI driver. It activates when the user talks about controlling their local computer (macOS, Linux, Windows) at the GUI layer and brings in the device-computer capability — the desktop-automation MCP server, RobotJS-backed — so the agent has tools to move and click the mouse, type keys, and capture the screen.
The agent already carries the universal discipline (snapshot → locate → act → verify → record, run.json schema, checkpoint policy, secret redaction, output directory layout). This skill carries only what is desktop-specific: which tools exist on desktop-automation, how to target without a semantic UI tree, how to live within the response-size cap, how to handle OS permissions and multi-monitor setups, and which desktop-specific safety boundaries cannot be crossed.
A desktop is the opposite of a mobile device in two important ways. First, there is no semantic UI tree — RobotJS sees pixels and reports cursor positions; it does not enumerate buttons by accessibility id. Second, "the screen" is huge, often multi-monitor, and shared with whatever else the user has running. You target visually, you capture small regions, and you confirm window focus before every keystroke.
Three immovable invariants on the desktop:
osascript (scriptable apps, or System Events UI scripting through the Accessibility API) and shortcuts run; on Windows, PowerShell and UI Automation; on Linux, D-Bus, AT-SPI, or xdotool under X11. The GUI layer is slow, fragile, and hard to verify; reserve it for apps that genuinely have no automation API.screen_capture returns the whole primary display; the server's MCP response cap is about 1 MB, and its author reports only ~800×600 as reliably under it. On Retina / 4K displays a capture can fail outright — treat that as a tool failure, never click from memory.The desktop-automation server (pinned 0.1.6) exposes six tools. There is no semantic UI tree and no region capture; every action is coordinate-based.
| Tool | Arguments | Notes |
|---|---|---|
get_screen_size | none | Logical screen size in points — the coordinate space mouse_move uses |
screen_capture | none | Full primary display, returned inline and kept as a screenshot://<id> resource; it cannot write a file |
mouse_move | x, y | Origin top-left of the primary display |
mouse_click | button (left/right/middle), double | Clicks wherever the pointer is — always mouse_move first |
keyboard_type | text | Types at the current focus |
keyboard_press | key, modifiers (command, control, shift, alt) | Lowercase key names (enter, tab, escape, s) |
Call get_screen_size once at run start and record it in run.json.target.screen. On HiDPI displays the screenshot is in physical pixels (2× on Retina) while mouse_move takes logical points: divide screenshot coordinates by the ratio of image width to get_screen_size width before moving. Checkpoint evidence is the capture id, since the tool cannot save PNGs.
You cannot ask the OS "where is the Save button". You can only screenshot, recognize it visually (or by known fixed offset), and click. Rules:
Cmd+S is a thousand times more reliable than locating a "Save" toolbar icon).When a keyboard shortcut exists for the action, use it instead of a mouse click. Cmd+W to close a tab, Cmd+F to open find, Cmd+S to save — these bypass the pixel-anchor problem entirely.
The response-size cap is the dominant constraint on this skill. Strategies:
capture_too_large or the error and stop. Do not click based on what you "expected" to see.Before any keyboard_type or shortcut press, you must have confirmed in the last action that the target window is foregrounded. On macOS / Windows, foreground is owned by the window manager — you can confirm by screenshotting the title bar (active windows have distinct chrome). When in doubt, ask the user to click into the target window first; do not "click to focus" yourself unless the user authorized it.
Multi-monitor setups:
screen_capture shows only the primary display, so you cannot verify anything on a secondary one. Ask the user to move the target window to the primary display before the run.The skill's device-computer capability brings in desktop-automation automatically. The host needs OS permissions for the process running the MCP server (typically Terminal, iTerm, or the IDE that launched the agent).
macOS:
System Settings → Privacy & Security → Accessibility — toggle on for the process.System Settings → Privacy & Security → Screen & System Audio Recording — toggle on for the process. Since macOS Sequoia the system re-asks for this periodically ("Allow For One Month"); a capture that suddenly fails mid-project is usually that prompt waiting for the user.Input Monitoring.Linux:
Windows:
If a tool call fails with what looks like a permission error, stop and tell the user the exact toggle to flip. Do not retry blindly — the next attempt will fail the same way.
The agent's failures[] reason enum extends with these on desktop:
reason | What it means |
|---|---|
anchor_not_found | A fresh screen capture didn't contain the expected anchor |
window_focus_lost | A keystroke was about to land in a different window than intended; aborted |
capture_too_large | screen_capture failed or came back truncated at the current resolution; ask the user to lower it |
permission_denied | OS accessibility / screen-recording permission missing for the host process |
wayland_unsupported | The host is on Wayland and the tool cannot drive it; escalate |
wrong_display | The target window is on a non-primary display and coordinates cannot be reliably addressed |
unexpected_modal | An OS / app dialog appeared that the user did not authorize |
Use these strings precisely. Generic reasons make the run unreviewable.
Hard "no" — never attempt, even on request:
Soft "stop and confirm" — these need explicit user confirmation in this turn:
If a destructive shortcut is even possible in the focused window (Cmd+Shift+Delete, Ctrl+W with unsaved work, Cmd+Q on an editor), confirm with the user before pressing it.
Refuse and route when:
device-mobile-automation skill should be active instead.get_screen_size was called and host info recorded in run.json.targetmouse_moverun.json~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.