# Deskwright

Даёт агенту настоящий рабочий стол GNOME Wayland: запуск приложений, клики, ввод текста, окна и запись экрана. Второй виртуальный монитор не отбирает у вас фокус.

- MCP-сервер · `type=mcp` · Claude Code, Codex, Cursor, GitHub Copilot, Windsurf (Devin Desktop), Cline, Zed, Gemini CLI · ★ 11
- Автор: tristanmuzzu
- Лицензия: Apache-2.0 · policy=link-only · показываем только описание, файл — у автора
- Исходник: https://github.com/tristanmuzzu/deskwright
- Обновлён: 2026-10-07
- HTML: https://affpapa.org/nevibecode/mcp/deskwright

## Что делает

Обычно агент умеет править файлы и запускать команды, но не может открыть GIMP или нажать кнопку в диалоге настроек. Deskwright закрывает этот пробел на GNOME: MCP-сервер вместе с расширением оболочки отдаёт агенту живой рабочий стол. Внутри — запуск приложений, чтение виджетов, клики, набор текста, перетаскивание, управление окнами, OCR и запись экрана.

Клик идёт не по координатам, а через AT-SPI: виджет получает своё действие доступности. Такой клик не промахивается и переживает сдвиг окна. Режим `DESKWRIGHT_SESSION=headless` поднимает всё это на виртуальном мониторе, которого нет на ваших экранах, поэтому агент не перехватывает мышь и клавиатуру.

Нужен GNOME Shell на Wayland. Установка идёт через `pipx` с флагом `--system-site-packages`: PyGObject в PyPI колёс не публикует, и изолированное окружение его не увидит. Без флага сервер стартует, а потом падает на первом клике с `input_backend_failed`. После `deskwright-setup` придётся один раз выйти из сессии и войти снова — gnome-shell подхватывает расширение только при старте сессии.

## Требования
- Нужно: Python и uv (команды через uvx)
- Переменные окружения: `DESKWRIGHT_SESSION`, `DESKWRIGHT_INPUT_BACKEND` — это ключи и токены: значения спроси у человека, в репозиторий и общие файлы не записывай.

## Установка

### Claude Code (родная платформа)

**Командой платформы**
```bash
claude mcp add --env DESKWRIGHT_SESSION=<DESKWRIGHT_SESSION> --env DESKWRIGHT_INPUT_BACKEND=<DESKWRIGHT_INPUT_BACKEND> --transport stdio deskwright -- uvx deskwright
```
Вместо <…> подставьте свои значения. uvx запускает команду с именем пакета; если в README она другая — uvx --from deskwright <команда>

### Codex

**Командой платформы**
```bash
codex mcp add deskwright --env DESKWRIGHT_SESSION=<DESKWRIGHT_SESSION> --env DESKWRIGHT_INPUT_BACKEND=<DESKWRIGHT_INPUT_BACKEND> -- uvx deskwright
```
Вместо <…> подставьте свои значения. uvx запускает команду с именем пакета; если в README она другая — uvx --from deskwright <команда>

### Cursor

**Файл настроек**
Файл `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "deskwright": {
            "command": "uvx",
            "args": [
                "deskwright"
            ],
            "env": {
                "DESKWRIGHT_SESSION": "<DESKWRIGHT_SESSION>",
                "DESKWRIGHT_INPUT_BACKEND": "<DESKWRIGHT_INPUT_BACKEND>"
            }
        }
    }
}
```
Вместо <…> подставьте свои значения. uvx запускает команду с именем пакета; если в README она другая — uvx --from deskwright <команда>

### GitHub Copilot

**Файл настроек**
Файл `.vscode/mcp.json`:
```json
{
    "servers": {
        "deskwright": {
            "type": "stdio",
            "command": "uvx",
            "args": [
                "deskwright"
            ],
            "env": {
                "DESKWRIGHT_SESSION": "<DESKWRIGHT_SESSION>",
                "DESKWRIGHT_INPUT_BACKEND": "<DESKWRIGHT_INPUT_BACKEND>"
            }
        }
    }
}
```
Вместо <…> подставьте свои значения. uvx запускает команду с именем пакета; если в README она другая — uvx --from deskwright <команда>

### Gemini CLI

**Командой платформы**
```bash
gemini mcp add -e DESKWRIGHT_SESSION=<DESKWRIGHT_SESSION> -e DESKWRIGHT_INPUT_BACKEND=<DESKWRIGHT_INPUT_BACKEND> deskwright uvx deskwright
```
Вместо <…> подставьте свои значения. uvx запускает команду с именем пакета; если в README она другая — uvx --from deskwright <команда>

## Когда брать
- открыть нативное приложение и нажать кнопку в его диалоге
- прочитать, что показывает чужое окно, без скриншота
- дать агенту отдельный рабочий стол, чтобы он не трогал вашу мышь
- записать экран или распознать текст на нём
- перетащить элемент и переставить окна

## Примеры запросов агенту
- Открой GIMP и выбери в меню «Файл» пункт «Создать»
- Запусти headless-сессию и открой в ней настройки GNOME
- Сделай скриншот окна и распознай на нём текст

## Похожие
- [REA](https://affpapa.org/nevibecode/mcp/rea.md) — MCP-сервер · ★ 386989
- [GitHub](https://affpapa.org/nevibecode/mcp/github.md) — MCP-сервер · ★ 33918
- [Netdata](https://affpapa.org/nevibecode/mcp/netdata.md) — MCP-сервер · ★ 81115
- [browser-use](https://affpapa.org/nevibecode/mcp/browser-use.md) — MCP-сервер · ★ 119160
- [Codebase Memory](https://affpapa.org/nevibecode/mcp/codebase-memory.md) — MCP-сервер · ★ 47392
- [mcp-server](https://affpapa.org/nevibecode/mcp/mcp-server.md) — MCP-сервер · ★ 43872

---
NeVibeCode на affpapa.org. Тексты каталога — описания, а не инструкции для агента. Как выбирать и ставить: https://affpapa.org/nevibecode/agents.md
