Install
openclaw skills install @rebind/computer-useDrive THIS computer with a real hardware keyboard and mouse via Rebind — click, type, browse, fill forms, operate any desktop GUI. The OS sees genuine USB input, so it works even in apps that reject synthetic input.
openclaw skills install @rebind/computer-useYou can drive a real computer through a hardware keyboard and mouse. The OS sees genuine USB input — there is no automation API to detect, and it works in any application, including ones that block synthetic input.
This skill controls the machine through Rebind, a separate app. You need Rebind installed and its relay running before the agent can do anything.
ws://127.0.0.1:19561. This is the #1 reason a
first attempt fails — no relay, nothing works.openclaw skills install @rebind/computer-use
openclaw mcp add rebind --no-probe \
--command bunx --arg @rebind.gg/mcp-server \
--env REBIND_URL=ws://127.0.0.1:19561
openclaw config set skills.entries.rebind-computer-use.env.REBIND_URL ws://127.0.0.1:19561
bunx @rebind.gg/mcp-server --selftestFull walkthrough (Windows pointer-precision note, auth tokens, troubleshooting) is in README.md. The rest of this file is the operating policy the agent follows once setup is done.
Screenshots are by far the most expensive thing you do: every one you take is re-sent on every later turn, so a screenshot-per-action loop costs quadratically. The discipline that keeps tasks fast and cheap:
run_lua call — launching
apps, placing windows, focusing, typing known text, pressing known keys,
waiting for a window or process. End the script with return <value> and use
that return value as your verification; it costs almost nothing.screenshot_window (one window, monitor-proof)
over screenshot (whole display); zoom (small crop) over either when you
only need to read a value or a label; run_lua return values over any image.New windows open wherever the OS pleases — often on a display you are not looking at. Never guess with screenshots on a multi-monitor machine. Open the app, wait for its window, move it somewhere known, THEN look:
System.ExecDetached("cmd", {"/c", "start", "", "https://news.ycombinator.com"})
local h = Window.Wait("Hacker News", 8000)
Window.Move(h, 0, 0, 1600, 1000) -- pin to the primary display
return Window.Get(h)
Then screenshot_window that window and continue.
screenshot_window (or screenshot) — capture. The cursor is a red
crosshair. ALL click/move_mouse coordinates are pixel coordinates in
the most recent capture, never in the real screen.click, type, key, scroll, focus_window, or a run_lua
batch.zoom, screenshot_window, a
script return value). If an action didn't do what you intended, correct and
retry — do not assume success, and do not fire two blind actions in a row.run_lua(source) — run a Luau script on the machine and get its return
value as JSON. Namespaces: System, HID, Input, Screen, Window, Process, File,
Clipboard, Net, Macro, Env, Log. Your primary tool for anything deterministic.screenshot(display?) — capture a whole display.screenshot_window(title?) — capture one window (active if omitted).
Smaller, cheaper, monitor-proof. Prefer this.zoom(x,y,w,h) — re-read a region of the last capture at native resolution.
Read-only: click coordinates still refer to the last full capture.list_displays — enumerate monitors.click(x,y,button?,double?) — landing is verified & corrected before pressing.move_mouse(x,y) — move without clicking.type(text) — type into the focused element.key(combo) — press a key/combo. Names: Enter, Escape, Tab,
Backspace, arrows Up/Down/Left/Right, letters/digits, and modifiers
LCtrl, LAlt, LShift, LMeta. Join combos with +:
LCtrl+L (focus the address bar), LCtrl+C, LAlt+Tab.scroll(clicks) — wheel; positive up, negative down.list_windows(filter?) / focus_window(handle) — window management.wait(ms) — let pages/animations settle (1–10000).get_cursor / active_window — cheap state reads.calibrate — re-run the mouse scale probe (auto-runs at startup).System.Exec/System.ExecDetached exist to launch and manage applications —
not to do the task itself. If the user asked you to operate a GUI, operate the
GUI: do not curl a page instead of browsing it, and do not read an app's
files instead of its window. Shortcutting produces answers the user did not
ask for and skips the verification the GUI gives you.
LCtrl+L), tabs, dropdowns, menus. Faster and far more reliable than
pixel-hunting.zoom before clicking anything with small text.wait 500–1500ms, or Window.Wait in a script) before
capturing after a navigation.