rdc
Health Warn
- License — License: AGPL-3.0
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Low visibility — Only 8 GitHub stars
Code Fail
- rm -rf — Recursive force deletion command in scripts/macos/make-signing-identity.sh
Permissions Pass
- Permissions — No dangerous permissions requested
No AI report is available for this listing yet.
Remote Desktop Control for AI agents: screenshot, mouse, keyboard and window control of another machine over Tailscale, exposed as MCP tools. Rust, AGPL-3.0.
rdc — Remote Desktop Control for AI agents
Let a coding agent on your laptop see and operate another computer's desktop over your
Tailscale network: take screenshots, move and click the mouse, type, press shortcuts, focus
windows, read and write the clipboard. Works with macOS, Linux and Windows targets and plugs into
Claude Code (or any MCP client) as a set of tools.
Typical use: your agent is fixing something on a headless Mac mini and hits a dialog that needs
a click. Instead of walking over or opening a KVM, the agent takes a screenshot, clicks the
button, and carries on.
your machine machine being controlled
┌─────────────────────────────────┐ ┌──────────────────────────┐
│ Claude Code ── MCP ──► rdc mcp │ Tailscale │ rdc serve │
│ or: rdc -t … ├──── HTTP ────────►│ identifies you via │
│ │ (WireGuard) │ tailscaled whois, then │
└─────────────────────────────────┘ │ screenshots · input │
│ windows · clipboard │
└──────────────────────────┘
- No passwords, tokens or certificates.
rdc servelistens only on the machine's Tailscale
address and asks the localtailscaledwho each caller is. You allow tailnet logins, device
names or tags. Your tailnet is the security boundary. - Scoped access and an audit trail. Each allowed identity can be limited to
view,input
orclipboard, and every request or rejection is written to a JSON-lines audit log. - No shell. rdc is a screen-and-input surface only. Use SSH for commands.
- One binary, written in Rust. The same executable is the daemon, the CLI and the MCP server.
Status
| Target platform | State | Notes |
|---|---|---|
| Linux, Wayland (Hyprland / wlroots) | verified | portal or wlr-screencopy capture, wlr virtual input, hyprctl window control |
| Linux, Wayland (GNOME, KDE) | capture only | screenshots via the portal work; synthetic input needs the RemoteDesktop portal, not wired up yet |
| Linux, X11 | compiles, untested | |
| macOS 15+, Apple silicon | verified | needs Screen Recording + Accessibility, see macOS setup |
| Windows 10/11 | compiles in CI, untested | single monitor only; window focus and service install not implemented yet |
CI builds and tests all three on every push. Tagged releases attach binaries, which are not
code-signed (see Install).
Five-minute start
1. Install rdc on both machines. Download a release archive or cargo install --git https://github.com/bscott/rdc. Details and build dependencies: docs/install.md.
2. On the machine you want to control, write the allowlist into the config file, check
readiness, and start the daemon:
# Linux: ~/.config/rdc/config.toml macOS: ~/Library/Application Support/rdc/config.toml
# Windows: %APPDATA%\rdc\config.toml
[serve]
allow = [
"[email protected]", # full control: tailnet login, device name, or tag
{ who = "monitor-bot", can = "view" }, # optional: limit an identity to screenshots
]
rdc doctor
rdc serve
rdc doctor tells you if a permission or tailscaled is missing. When it works, install it as a
background service so it survives reboots: rdc service install (macOS LaunchAgent or Linux
systemd user service). The service reads the same config file, which is why the allowlist goes
there rather than on the command line. macOS needs two one-time permission grants; follow
docs/setup-macos.md.
3. On your laptop, talk to it by Tailscale hostname:
rdc -t studio-mac whoami # the daemon confirms who you are
rdc -t studio-mac shot --max 1568 -o shot.png # screenshot, downscaled
rdc -t studio-mac click 640 400 # desktop coordinates
rdc -t studio-mac key cmd+q
4. Give it to your agent. Add a target to your own machine's config file (same per-platform
paths as above) and register the MCP server in Claude Code:
[targets.studio-mac]
url = "http://studio-mac.example-tailnet.ts.net:7770"
{ "mcpServers": { "studio-mac": { "command": "rdc", "args": ["mcp", "--target", "studio-mac"] } } }
The agent now has screenshot, click, type, key, focus and friends. It passes pixel
coordinates from the screenshot it just saw; rdc converts them to desktop points. Every action
returns a fresh screenshot so the agent can check its work. Full tool reference:
docs/mcp.md. An Agent Skill is included that teaches
agents how to use rdc well.
Documentation
| Install | release binaries, cargo install, build dependencies per OS |
| Configuration | config.toml, allowlist rules, targets, environment variables |
| CLI reference | every subcommand and flag |
| MCP tools | tool reference, coordinate model, Claude Code setup |
| macOS setup | signing, permissions, LaunchAgent, upgrades |
| Linux setup | Wayland compositors, X11, systemd service |
| Windows | what works today and what doesn't |
| Architecture | how it fits together, wire API, auth flow |
| Troubleshooting | symptoms and fixes |
| Security | threat model and vulnerability reporting |
| Contributing | development, testing, pull requests |
| Changelog | what changed in each release |
How it stays safe
rdc serve refuses to bind anything but a Tailscale address (or 127.0.0.1 with the explicit--dev-loopback testing flag, which disables auth). For each request it checks that the Host
header names this machine, resolves the peer IP through tailscaled's whois, and matches the
login, node name or tags against your grants. Tagged devices are identified by their tags
only, never by the login of whoever created them. An empty allowlist refuses to start. Grants
can be limited to view, input or clipboard, and everything is written to an audit log you
can read with rdc audit. Read SECURITY.md before exposing a machine you care
about.
License
rdc is free software under the GNU Affero General Public License v3.0 or later.
If you modify rdc and let others interact with it over a network, including running a modifiedrdc serve that other people's agents connect to, the AGPL requires you to offer them the
corresponding source.
Reviews (0)
Sign in to leave a review.
Leave a reviewNo results found