ScreenPilot Desktop Automation

VerifiedCaution

ScreenPilot automates desktop apps using an Observe-Think-Act loop. Select windows, observe labeled UI elements, and execute clicks, typing, scrolling, or key presses via CLI.

Sby Skills Guide Bot
DevelopmentIntermediate
107/23/2026
Claude Code
#desktop-automation#gui-automation#visual-testing#screen-pilot

Recommended for

Our review

Automates desktop applications through an observe-think-act loop using the ScreenPilot helper app for visual GUI control.

Strengths

  • Direct desktop GUI automation without API dependencies
  • Visual observation with annotated element IDs
  • Self-installing and configuring helper app on macOS
  • Supports vision reasoning to select targets

Limitations

  • macOS only; requires Accessibility permission
  • Element IDs change after layout changes, requiring re-observation
  • Unsigned helper app may need manual approval on first launch
When to use it

When you need to automate a desktop application that lacks a programmatic API.

When not to use it

For web-based applications where Playwright, Selenium, or similar tools are available.

Security analysis

Caution
Quality score88/100

The skill instructs downloading and executing a third-party desktop automation tool. While the skill itself is not inherently destructive, the reliance on an external binary and granting of Accessibility permissions poses a moderate risk if the binary is compromised or if the automation is misused.

Findings
  • Downloads an external unsigned binary from a third-party GitHub repository, which could be malicious.
  • Requires granting Accessibility permissions to an unsigned app, which can control the entire GUI.

Examples

Select and lock a window
Use ScreenPilot to list all open windows and lock the one titled 'WeChat'.
Observe UI and click an element
Observe the locked window with ScreenPilot, read the annotated screenshot, then click on the element with ID 15.
Type text into a target
After observing the window, type 'Hello, world!' into target element ID 12.

name: screen-pilot description: Use ScreenPilot for visual desktop GUI automation. Trigger when an agent needs to select a desktop window, observe labeled UI elements, reason over a screenshot, click/type/scroll/key-press by visual target id, or install/start the local ScreenPilot helper app. license: MIT compatibility: macOS with Accessibility permission; ScreenPilot local helper app allowed-tools: run_command metadata: author: DDM Team version: 2.1.0

ScreenPilot

ScreenPilot automates desktop apps through an Observe-Think-Act loop:

  1. Select a target window.
  2. Observe a screenshot annotated with numeric UI element IDs.
  3. Choose the intended element ID, optionally with vision reasoning.
  4. Execute click, type, scroll, key press, or wait instructions.

The CLI auto-checks the local helper app at http://127.0.0.1:8080/api/health. If ScreenPilot is not running, it starts an installed app. If the app is missing on macOS, it downloads the latest ScreenPilot-macos-arm64.zip release from zhouchangui/bgwndsvr, installs it to ~/Applications/ScreenPilot.app, and starts it.

Commands

Run commands from this skill directory.

# List windows
node scripts/query.mjs --mode select

# Lock a window by title or process name
node scripts/query.mjs --mode select --query "WeChat"

# Capture an annotated screenshot for the locked window
node scripts/query.mjs --mode observe

# Ask a vision model which element to use
node scripts/query.mjs --mode think --query "Find the message input box"

# Click, type, scroll, key press, or run a JSON sequence
node scripts/query.mjs --mode act --target 15 --action click
node scripts/query.mjs --mode act --target 12 --action type_text --text "Hello"
node scripts/query.mjs --mode act --json '[{"type":"wait","duration":1000},{"type":"key_press","keys":["Enter"]}]'

observe writes the latest annotated image to temp/latest_observe.jpg. Read that image before choosing a target_id.

Configuration

  • SCREENPILOT_BASE_URL: defaults to http://127.0.0.1:8080
  • SCREENPILOT_TOKEN: overrides the local token file
  • SCREENPILOT_RELEASE_REPO: defaults to zhouchangui/bgwndsvr
  • SCREENPILOT_APP_PATH: overrides the app path used for startup
  • OPENROUTER_API_KEY: required only for think mode
  • OPENROUTER_MODEL: optional model override for think

Without SCREENPILOT_TOKEN, the CLI reads macOS token candidates under ~/Library/Application Support/.../token.conf, then falls back to the current dev token.

Actions

| Action | Parameters | Description | | :--- | :--- | :--- | | click | target_id | Single left click | | double_click | target_id | Double left click | | type_text | target_id, text | Click target and type text | | scroll | target_id, direction, amount | Scroll up or down | | key_press | keys | Key list such as ["Enter"] or ["Meta+v"] | | wait | duration | Wait milliseconds |

Operating Notes

  • On first macOS launch, the unsigned helper app may require manual approval in Privacy & Security.
  • Window enumeration and input simulation require ScreenPilot to have Accessibility permission.
  • Element IDs change after layout changes; run observe again after navigation, animation, or refresh.
  • If an action fails, first re-run observe; if focus is wrong, click a neutral area or re-select the window.
Related skills