diff --git a/hermes_cli/tools_config.py b/hermes_cli/tools_config.py index 1e3d316eddb..8cfb8198a46 100644 --- a/hermes_cli/tools_config.py +++ b/hermes_cli/tools_config.py @@ -516,9 +516,10 @@ TOOL_CATEGORIES = { ], }, "computer_use": { - "name": "Computer Use (macOS/Windows)", + "name": "Computer Use (macOS/Windows/Linux)", "icon": "🖱️", - # Runtime backends ship for macOS + Windows today; Linux is alpha. + # Runtime backends ship for macOS, Windows, and Linux (X11 today, + # Wayland via XWayland). Per-host gaps surface via `computer-use doctor`. "platform_gate": ["darwin", "win32", "linux"], "providers": [ { diff --git a/tools/computer_use/cua_backend.py b/tools/computer_use/cua_backend.py index c45f5d4d9a0..bca732eb86e 100644 --- a/tools/computer_use/cua_backend.py +++ b/tools/computer_use/cua_backend.py @@ -1,4 +1,4 @@ -"""Cua-driver backend (macOS + Windows). +"""Cua-driver backend (macOS, Windows, Linux). Speaks MCP over stdio to `cua-driver`. The Python `mcp` SDK is async, so we run a dedicated asyncio event loop on a background thread and marshal sync @@ -6,14 +6,16 @@ calls through it. The same `cua-driver call ` surface (click, type_text, hotkey, drag, scroll, screenshot, launch_app, list_apps, list_windows, get_window_state, -move_cursor, wait) works identically across macOS + Windows — cua-driver's -PARITY matrix marks every action tool VERIFIED on Windows in the -cross-platform Rust port (`cua-driver-rs`). +move_cursor, wait) works identically across macOS, Windows, and Linux — +cua-driver's PARITY matrix marks the action tools VERIFIED on macOS and +Windows in the cross-platform Rust port (`cua-driver-rs`). -Linux support exists in cua-driver-rs but is alpha today — Linux PARITY -rows are mostly OPEN, not VERIFIED — so it's gated off in -`check_computer_use_requirements` until that flips upstream. The plumbing -in this file is OS-agnostic, so flipping that gate later is one-line. +Linux is the most recent runtime (X11 today, Wayland via XWayland; pure- +Wayland progress tracked upstream). It is enabled in +`check_computer_use_requirements` alongside macOS and Windows. The plumbing +in this file is OS-agnostic; per-host gaps (no DISPLAY, missing AT-SPI, +etc.) surface as specific blocked checks via `hermes computer-use doctor` +rather than failing silently. Install: - **macOS**: diff --git a/tools/computer_use/tool.py b/tools/computer_use/tool.py index 34142242113..6d690216916 100644 --- a/tools/computer_use/tool.py +++ b/tools/computer_use/tool.py @@ -1,12 +1,15 @@ """Entry point for the `computer_use` tool. -Universal (any-model) desktop control across macOS + Windows via +Universal (any-model) desktop control across macOS, Windows, and Linux via cua-driver's background computer-use primitive. Replaces #4562's Anthropic-native `computer_20251124` approach — the schema here is standard OpenAI function-calling so every tool-capable model can drive it. -Linux support exists in cua-driver-rs (alpha — PARITY rows are mostly -OPEN today, not VERIFIED) and is gated off here until it flips upstream. +Linux is the most recent runtime (X11 + Wayland, via cua-driver-rs's +AT-SPI tree path); it is enabled here alongside macOS and Windows. When a +host's display server or accessibility stack isn't reachable, cua-driver's +`health_report` (surfaced by `hermes computer-use doctor`) reports the +exact blocked check rather than the toolset silently failing. Return contract --------------- diff --git a/toolsets.py b/toolsets.py index 28feb95f69c..14ec3ccbd7c 100644 --- a/toolsets.py +++ b/toolsets.py @@ -142,7 +142,7 @@ TOOLSETS = { "computer_use": { "description": ( - "Background desktop control via cua-driver (macOS/Windows) — " + "Background desktop control via cua-driver (macOS/Windows/Linux) — " "screenshots, mouse, keyboard, scroll, drag. Does NOT steal the " "user's cursor or keyboard focus. Works with any tool-capable model." ),