Deskbrid
Linux desktop HAL for AI agents. One daemon, one socket, every desktop action. GNOME, KDE, Hyprland, X11. Ships in one command.
README
deskbrid
<p align="center"> <img src="docs/assets/logo.png" alt="deskbrid logo" width="280"> </p>
<p align="center"> <a href="https://github.com/coe0718/deskbrid/actions"><img src="https://github.com/coe0718/deskbrid/actions/workflows/ci.yml/badge.svg" alt="CI"></a> <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="License: MIT"></a> <a href="https://www.rust-lang.org"><img src="https://img.shields.io/badge/rust-2024%20edition-orange.svg" alt="Rust 2024"></a> <a href="https://github.com/coe0718/deskbrid/releases"><img src="https://img.shields.io/github/v/release/coe0718/deskbrid?color=06b6d4" alt="Release"></a> <a href="https://discord.gg/Hs4ryPwEs"><img src="https://img.shields.io/badge/discord-join%20server-5865F2?logo=discord&logoColor=white" alt="Discord"></a> <a href="https://nicklaunches.com/products/deskbrid/"><img src="https://img.shields.io/badge/Nick%20Launches-featured-8b5cf6" alt="Nick Launches"></a> </p>
<p align="center"> <a href="https://deskbrid.patchhive.dev"><strong>deskbrid.patchhive.dev</strong></a> </p>
mcp-name: io.github.coe0718/deskbrid
📖 Documentation | API Reference | Architecture
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
- Supported Desktops
- Installation
- Quick Start
- Features
- Protocol
- Python Client
- MCP Integration
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.

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:

Supported Desktops
| Desktop | Session | Status | Backend |
|---|---|---|---|
| GNOME 46–50 | Wayland | ✅ Supported | Mutter RemoteDesktop + Shell Extension |
| Hyprland | Wayland | ✅ Supported (v0.3.0) | hyprctl + ydotool + grim |
| KDE Plasma | Wayland | ✅ Supported (v0.4.0) | KWin D-Bus + ydotool + spectacle |
| COSMIC | Wayland | ⚠️ Partial | cosmic-helper + cosmic-randr + ydotool + grim |
| Sway | Wayland | ✅ Supported | swaymsg + ydotool + grim |
| Niri | Wayland | ✅ Partial | niri msg + ydotool + grim + wlr-randr |
| Wayfire | Wayland | ✅ Supported (no move/resize) | wf-ipc + ydotool + grim + wlr-randr |
| Labwc | Wayland | ✅ Supported (no move/resize) | wlrctl + ydotool + grim + wlr-randr |
| Cinnamon | X11 | ✅ Supported (shared X11) | xdotool + wmctrl + xclip + import |
| MATE | X11 | ✅ Supported (shared X11) | xdotool + wmctrl + xclip + import |
| X11 (generic) | X11 | ✅ Supported (shared X11) | xdotool + wmctrl + xclip + import |
Deskbrid auto-detects your desktop at startup ($XDG_CURRENT_DESKTOP → process scan → GNOME fallback). No config files, no flags.
See DE Test Matrix for per-action compatibility across all desktops — every action, every compositor, tested on real hardware.
Installation
One-liner install (recommended):
bash <(curl -fsSL https://deskbrid.patchhive.dev/install.sh)
Auto-detects your distro and desktop environment, installs dependencies, sets up uinput, and downloads the binary.
Manual installation:
Download the latest release binary from the releases page:
curl -LO https://github.com/coe0718/deskbrid/releases/latest/download/deskbrid
chmod +x deskbrid
sudo mv deskbrid /usr/local/bin/
Or build from source:
git clone https://github.com/coe0718/deskbrid
cd deskbrid
cargo build --release
sudo cp target/release/deskbrid /usr/local/bin/
Desktop Setup
GNOME:
sudo apt install -y grim wl-clipboard python3-gi gstreamer1.0-tools gstreamer1.0-pipewire
deskbrid setup
Hyprland (and other standalone Wayland compositors — Sway, Niri, Wayfire, Labwc):
sudo pacman -S grim wl-clipboard ydotool
echo 'KERNEL=="uinput", GROUP="input", MODE="0660"' | sudo tee /etc/udev/rules.d/99-input.rules
sudo usermod -aG input $USER
⚠️ Standalone Wayland compositors don't ship a notification daemon. Deskbrid's
notify sendwill hang without one. Install dunst, mako, or swaync and add it to your compositor's autostart.
KDE Plasma:
sudo apt install spectacle imagemagick wl-clipboard ydotool
Quick Start
deskbrid daemon &
deskbrid windows list # List open windows
deskbrid clipboard read # Read clipboard
deskbrid screenshot # Take screenshot
deskbrid system info # Get system info
deskbrid windows focus --app code # Focus VS Code
deskbrid input keyboard type "Hello!" # Type text
Features
Windows & Workspaces
| Action | Description |
|---|---|
windows.list |
List all open windows |
windows.focus |
Focus a window by app_id or title |
windows.get |
Get details for a specific window |
windows.close |
Request window close |
windows.minimize/maximize |
Window state control |
windows.move_resize |
Move and resize windows |
windows.tile |
Tile to screen regions |
windows.activate_or_launch |
Focus or launch app |
workspaces.* |
Workspace management |
layout_profiles.* |
Save/restore layouts |
Input & Clipboard
| Action | Description |
|---|---|
input.keyboard type |
Type text |
input.keyboard key |
Send keypress |
input.keyboard combo |
Send key combinations |
input.mouse.* |
Mouse control |
clipboard.read/write |
Clipboard access |
clipboard.history |
Clipboard history |
Screenshots & Media
| Action | Description |
|---|---|
screenshot |
Screen capture |
screenshot.ocr |
Extract text via Tesseract |
screenshot.diff |
Compare screenshots |
mpris.* |
Media player control |
color.pick |
Sample pixel colors |
System & Services
| Action | Description |
|---|---|
system.info |
Desktop information |
system.battery |
Battery status |
system.idle |
Idle detection |
system.power |
Power management |
service.* |
systemd units |
journal.query |
Log inspection |
terminal.* |
PTY sessions |
monitor.* |
Display control |
Network & Bluetooth
| Action | Description |
|---|---|
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
Claude Desktop (~/.config/Claude/claude_desktop_config.json):
{
"mcpServers": {
"deskbrid": {
"command": "/usr/local/bin/deskbrid",
"args": ["mcp"]
}
}
}
Available MCP tools (20+):
list_windows,focus_windowtype_text,press_keys,mouse_move,mouse_clickscreenshot,clipboard_read,clipboard_writelist_apps,get_accessibility_treeperform_action,set_element_value,get_element_text,click_elementdoctor,setup_accessibility,capabilities
Compared to Alternatives
| Tool | Wayland | Agent-native | JSON | Windows | Input | Clipboard | Screenshot | Bluetooth | Audio |
|---|---|---|---|---|---|---|---|---|---|
| deskbrid | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| xdotool | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
| ydotool | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| grim | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ |
| wl-clipboard | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ |
License
MIT
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.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。