Labsco
coe0718 logo

Deskbrid

โ˜… 28

from coe0718

Linux desktop HAL for AI agents.

๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅโœ“ VerifiedFreeAdvanced setup

deskbrid

deskbrid logo

MCP Badge

๐Ÿ“– Docs

mcp-name: io.github.coe0718/deskbrid

๐Ÿ“– Documentation | API Reference | Architecture | v1.0.0 Release Notes


The HAL your Linux desktop agents are missing.

Deskbrid is a single Rust binary that auto-detects your desktop environment and wraps it into a JSON-over-Unix-socket protocol. GNOME, Hyprland, KDE, COSMIC, Sway, Niri, Wayfire, Labwc, Cinnamon, MATE โ€” one daemon, one protocol, one binary.

# Human
deskbrid windows list
deskbrid clipboard read

# Agent (same socket)
{"action": "windows.list"}  โ†’  [{"title": "VS Code", "app_id": "code", ...}]

Table of Contents

Why Deskbrid

Every major AI lab is racing to ship desktop agents. AppleScript gives macOS agents native control. Windows has UI Automation. Linux has xdotool โ€” which breaks on Wayland, the default display protocol for every major distro.

Deskbrid fills that gap. It auto-detects your compositor and loads the right backend โ€” GNOME (Mutter RemoteDesktop DBus), Hyprland (hyprctl + ydotool + grim), KDE (KWin D-Bus + ydotool + spectacle), wlroots-style compositors, or shared X11. Same binary, same protocol, same socket.

Demo: agent focuses VS Code window and types a command via deskbrid

Dashboard

Deskbrid ships with a built-in web dashboard at localhost:20129 โ€” system info, monitors, windows, network, audio, clipboard, and an audit log of agent actions, all live:

๐Ÿ”ด Live Demo โ†’

Deskbrid Dashboard โ€” Hyprland, system overview with SSE-connected live data

Supported Desktops

DesktopSessionStatusBackend
GNOME 46โ€“50Waylandโœ… CoreMutter RemoteDesktop + Shell Extension
KDE PlasmaWaylandโœ… CoreKWin D-Bus + ydotool + spectacle
HyprlandWaylandโœ… Corehyprctl + ydotool + grim
SwayWaylandโœ… Coreswaymsg + ydotool + grim
LabwcWaylandโš ๏ธ Partialwlrctl + ydotool + grim + wlr-randr
COSMICWaylandโš ๏ธ Partialcosmic-helper + cosmic-randr + ydotool + grim
NiriWayland๐Ÿ”ฒ Untestedniri msg + ydotool + grim + wlr-randr
WayfireWayland๐Ÿ”ฒ Untestedwf-ipc + ydotool + grim + wlr-randr
CinnamonX11๐Ÿ”ฒ Untestedxdotool + wmctrl + xclip + import
MATEX11๐Ÿ”ฒ Untestedxdotool + wmctrl + xclip + import
X11 (generic)X11๐Ÿ”ฒ Untestedxdotool + wmctrl + xclip + import

Honest coverage: Deskbrid works well on GNOME, KDE, Hyprland, and Sway โ€” tested on real hardware (Turtle, a 2014 Haswell laptop). The other seven backends have code but zero runtime verification. Even within core backends, support is uneven: Hyprland lacks windows.minimize and monitor.set_primary, COSMIC lacks window move/resize and tiling, Labwc lacks move/resize, minimize, tile, and primary monitor control. Stubbed actions (ui.tree.get, ui.element.click, bluetooth.pair) return "not supported." This is broad but partial Linux desktop automation, not universal cross-desktop control. See the full DE Test Matrix for per-action, per-compositor detail.

Features

Windows & Workspaces

ActionDescription
windows.listList all open windows
windows.focusFocus a window by app_id or title
windows.getGet details for a specific window
windows.closeRequest window close
windows.minimize/maximizeWindow state control
windows.move_resizeMove and resize windows
windows.tileTile to screen regions
windows.activate_or_launchFocus or launch app
workspaces.*Workspace management
layout_profiles.*Save/restore layouts

Input & Clipboard

ActionDescription
input.keyboard typeType text
input.keyboard keySend keypress
input.keyboard comboSend key combinations
input.mouse.*Mouse control
clipboard.read/writeClipboard access
clipboard.historyClipboard history

Screenshots & Media

ActionDescription
screenshotScreen capture
screenshot.ocrExtract text via Tesseract
screenshot.diffCompare screenshots
mpris.*Media player control
color.pickSample pixel colors

System & Services

ActionDescription
system.infoDesktop information
system.batteryBattery status
system.idleIdle detection
system.powerPower management
service.*systemd units
journal.queryLog inspection
terminal.*PTY sessions
monitor.*Display control

Network & Bluetooth

ActionDescription
network.*WiFi status/connect
bluetooth.*Device pairing/control

Protocol

Deskbrid uses JSON-over-Unix-socket. See PROTOCOL.md for the complete specification.

โ†’ {"action": "windows.list"}
โ† {"type": "response", "status": "ok", "data": [{"title": "VS Code", ...}]}

โ†’ {"action": "windows.focus", "window_id": "code"}
โ† {"type": "response", "status": "ok"}

Events

Subscribe to real-time updates:

{"action": "subscribe", "events": ["file.*"]}

Python Client

from deskbrid import Deskbrid

client = Deskbrid()

# List and focus VS Code
windows = client.windows_list()
code_window = next((w for w in windows if w.app_id == 'code'), None)
if code_window:
    client.focus_window(app_id='code')
    client.type_text("Fixed the bug!\n")

# Subscribe to events
@client.on("file.*")
def on_file_change(event):
    print(f"File changed: {event['path']}")

MCP Integration

Deskbrid exposes a full Model Context Protocol server for AI coding tools:

deskbrid mcp

Hermes Agent (built-in skill)

Deskbrid ships with a Hermes skill for one-command setup. In any Hermes session:

/deskbrid-hermes-mcp

Or from the terminal:

hermes mcp add deskbrid --command "deskbrid mcp"
hermes mcp test deskbrid
# โ†’ โœ“ deskbrid: connected

After a session restart (/reset), the agent gains 100+ Linux desktop control tools.

Claude Desktop

~/.config/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "deskbrid": {
      "command": "/usr/local/bin/deskbrid",
      "args": ["mcp"]
    }
  }
}

Codex / Cursor / any MCP client

Configure the MCP server with command deskbrid mcp โ€” the protocol is standard JSON-RPC over stdio.

Available MCP tools (100+ across 20 categories): windows, input, clipboard, screenshots, system, AT-SPI accessibility, terminal PTY, files, audio, network, MPRIS, print, notifications, keyring, rules, confirmation, agent messaging, search, macros, capabilities.

Compared to Alternatives

ToolWaylandAgent-nativeJSONWindowsInputClipboardScreenshotBluetoothAudio
deskbridโœ…โœ…โœ…โœ…โœ…โœ…โœ…โœ…โœ…
xdotoolโŒโŒโŒโœ…โœ…โŒโŒโŒโŒ
ydotoolโœ…โŒโŒโŒโœ…โŒโŒโŒโŒ
grimโœ…โŒโŒโŒโŒโŒโœ…โŒโŒ
wl-clipboardโœ…โŒโŒโŒโŒโœ…โŒโŒโŒ

How This Started

Deskbrid began with Tuck โ€” an autonomous agent that needed to control a real Linux desktop. When the community asked for Hyprland support, Tuck asked Jeremy for a bare Arch Linux box with SSH and sudo. He installed Hyprland himself and built the backend from inside the environment he just configured.

The first working demo was a Telegram message: Tuck focused a window and typed "Hello from the other side" in under 60 seconds. That moment โ€” an agent controlling a real desktop through a Unix socket โ€” became Deskbrid. It's built for agents first: same protocol for humans on the CLI, same socket for AIs, one binary that works everywhere.