Start sharing a machine
remotedev up --broker {this broker's URL}
Prints one share link. Open it in any browser for the screen, terminal,
files, clipboard and management tabs. The slug in the link is the only
credential — keep the link private.
HTTP endpoints (per share link)
Everything below hangs off /s/<slug>.
| endpoint | what it does |
| GET /status | liveness: online, ended, name, width,
height, os, viewers, host_version |
| GET /shot | one fresh JPEG frame (screenshot on demand,
no-store) |
| GET /thumb | last cached frame (cheap preview) |
| GET /stream | MJPEG stream of pushed frames |
| POST /input | queue one input event; acks
{ok, queued, t, fx, fy} |
| POST /rpc | run any host command (see below); JSON
{"cmd": ..., ...args} |
| GET /activity | recent command names + outcomes |
| GET|POST /port/<n> | HTTP tunnel to
localhost:<n> on the host |
| POST /sendto | machine-to-machine file copy |
| POST /end | end the session |
Input events
POST /s/<slug>/input
{"type":"click","fx":0.5,"fy":0.5,"button":"left"}
Types: move, click, mouse_down, mouse_up, scroll, text, key,
clipboard. Coordinates are fractional (fx, fy in 0–1),
so they survive resolution changes.
RPC commands
POST /s/<slug>/rpc
{"cmd":"state"}
Observability
| cmd | returns |
| state | focused window {id, title}, screen size,
platform, backend, control owner |
| info | platform, hostname, screen size, version |
| screenshot | PNG/JPEG as base64, optional
region, scale, quality, if_hash |
| list_windows / monitors / capabilities | windows, displays,
what this backend can do |
| cursor_position | current pointer x, y |
Browser (CDP bridge)
Works against a browser started with
--remote-debugging-port=9222 (override the base with a
"cdp" field or REMOTEDEV_CDP).
| cmd | what it does |
| page | active tab {url, title, ready_state} —
confirms a navigation actually landed |
| dom | interactive elements with CSS selectors + on-screen
boxes |
| dom_click | {"selector": "#save"} —
scrollIntoView + click, returns the element's center |
| dom_eval | {"js": "..."} — evaluate and return a
JSON value |
| cdp | {"method": "Page.navigate", "params": ...}
— raw DevTools passthrough |
Control
| cmd | what it does |
| exec | run a shell command, capture output |
| launch / open_url | start an app / open a link in the default
browser |
| type / key / click / move / scroll | raw input by pixel
coordinates |
| click_text / click_image | OCR / template-match a target, then
click it |
| keepawake | {"on": true} — inhibit screensaver
and display power-off for the session |
| wake_display / wol | wake a blanked display / send
Wake-on-LAN to a sibling machine |
| clipboard_get / clipboard_set | text (and image) clipboard
both ways |
Files, processes & more
| cmd | what it does |
| ls / read_file / write_file / mkdirs / rm / mv | filesystem,
chunked transfers for big files |
| ps / kill_proc / proc_output | process list, kill, captured
output |
| sched_add / sched_delete / sched_pause | recurring commands on
the host |
| record_start / record_stop | screen recording on the
host |
| self_update | update the host package and restart on the same
link |
Everything is curl-able
# what is on screen right now?
curl -s $BASE/s/$SLUG/shot -o now.jpg
# what has focus?
curl -s -X POST $BASE/s/$SLUG/rpc -d '{"cmd":"state"}'
# click a button by selector instead of pixels
curl -s -X POST $BASE/s/$SLUG/rpc \
-d '{"cmd":"dom_click","selector":"button.submit"}'