Developers
Give your agent real hands.
Your agent sees the screen, moves the mouse, presses keys, and runs Luau. Drive the same input from TypeScript, Python, and Rust over a local WebSocket.
Field demo
One prompt. Safari opens.
One prompt, start to finish. An agent opens Safari, reads Hacker News, and returns three AI stories as JSON. No browser framework. No scraping API.
The whole instruction: open Safari, go to Hacker News, return the first three AI stories as JSON. Rebind tools only.
The model picks its own tools: screenshot the desktop, open Safari, navigate, read the screen.
Real clicks and keystrokes open Safari and load the Hacker News front page.
Three AI stories as JSON: title, URL, points. Read off the screen, returned as data.
Connect an agent
One command per client.
One command wires Rebind into Claude Code, Codex, or Cursor. Start the Remote Control script in the app and your agent has a desktop.
npx add-mcp "bunx @rebind.gg/mcp-server" --name rebind -g -a claude-codeThen restart the client. Check the link with bunx @rebind.gg/mcp-server --selftest
GitHub(opens in a new tab)npm package(opens in a new tab)Documentation(opens in a new tab)
The whole desktop, in six groups.
One job per tool. Coordinates come back in the pixel space of the last screenshot, so the model never rescales.
perception
See before acting
screenshotscreenshot_windowzoomread_page
pointer
Clicks that land
clickmove_mousescroll
keyboard
Keys and text
typekey
windows
Windows and displays
list_windowsfocus_windowposition_windowactive_windowlist_displays
scripting
Program a sequence
run_lualua_docs
control
Timing and calibration
get_cursorwaitcalibrate
Drive Rebind from your own code.
Remote Control listens on port 19561 by default. TypeScript, Python, and Rust clients move the mouse, type, and read pixels.
import { RebindRemote } from "@rebind.gg/client-ts"; const r = new RebindRemote("ws://127.0.0.1:19561"); await r.connect(); r.hidMove(30, -5); r.hidPress("Mouse1", 20); r.hidType("hello"); const { x, y } = await r.systemMouse(); const px = await r.screenPixel(x, y); r.close();
npm install @rebind.gg/client-tsTypeScript docs(opens in a new tab)