by YV17labs (community) Docker, Linux, Claude Desktop, Claude Code, OpenCode
MCP-сервер, дающий AI-агенту полноценный виртуальный Linux-рабочий стол в Docker-контейнере: видит экран, двигает мышь, печатает, запускает любые приложения — браузеры, легаси-софт, внутренние инструменты — без единой строчки интеграционного кода.
MCP-сервер, дающий AI-агентам полный контроль над Windows: навигация по файлам, запуск приложений, взаимодействие с UI-элементами, автотестирование. …
MCP-сервер от Dagger: позволяет AI-агентам запускать код в изолированных контейнерах, монтировать файловые системы и управлять docker-окружениями.
Коллекция 38 MCP-серверов для offensive security от FuzzingLabs. Nmap (сканирование сетей), Nuclei (поиск уязвимостей), SQLMap (SQL-инъекции), …
MCP-сервер для управления Docker: контейнерами, образами, томами и сетями. Позволяет AI запускать, останавливать, инспектировать контейнеры и …
# Claude Desktop — claude_desktop_config.json (после запуска контейнера GhostDesk, transport http):
{ "mcpServers": { "ghostdesk": { "url": "http://localhost:3000/mcp" } } }
# Claude Code (CLI):
claude mcp add --transport http ghostdesk http://localhost:3000/mcp
# OpenCode — ~/.config/opencode/opencode.json:
{ "mcp": { "ghostdesk": { "type": "remote", "url": "http://localhost:3000/mcp" } } }
Дайте вашему ИИ-агенту глаза, руки и полноценный Linux-десктоп.
MCP-сервер, который позволяет LLM-агентам видеть экран, двигать мышь, печатать на клавиатуре, запускать приложения и выполнять shell-команды — всё внутри изолированного виртуального рабочего стола.
Если человек может сделать это на рабочем столе, ваш агент тоже сможет.
Ваш браузер не поддерживает тег video.Демонстрация GhostDesk — из одного запроса ("открой браузер, зайди на Google News и расскажи мне последние заголовки в разделе Technology") агент запускает Firefox, переходит на Google News, переключается на раздел Technology и сообщает последние новости.
Инструменты автоматизации браузера (Playwright, Puppeteer, Selenium…) создавались для инженеров по тестированию, которые управляют браузером с помощью селекторов. Они делают одну вещь, и делают её хорошо — внутри браузера.
GhostDesk построен с другой стороны: для ИИ-агентов, управляющих всем, что работает на рабочем столе. Браузеры, нативные приложения, IDE, терминалы, офисные пакеты, устаревшее ПО, внутренние инструменты. Если что-то отображает пиксели на экране, ваш агент может это видеть и использовать — в одном диалоге, в разных приложениях, без единой строки клеящего кода.
Вам не нужно писать селекторы. Вы пишете запрос:
"Открой CRM, экспортируй лиды за прошлый месяц в CSV, открой LibreOffice Calc, построй сводную таблицу, сделай скриншот диаграммы и отправь её команде по электронной почте."
Агент открывает браузер, входит в систему, скачивает файл, переключается на LibreOffice, обрабатывает данные, сохраняет результат, составляет письмо, отправляет его. Один запрос, несколько приложений, полная автономность — без клеящего кода, без скрейпера для каждого сайта, без хрупких цепочек селекторов.
Вот так выглядит использование рабочего стола агентами.
Управление рабочим столом должно быть быстрым — агент, которому нужно двенадцать секунд, чтобы решить, куда кликнуть, бесполезен. GhostDesk настроен так, чтобы vision-language модели семейства Qwen, работающие на одной GPU рабочей станции, были полноценной целью, а не второстепенным дополнением. Никаких счетов за API, никаких скриншотов вашего рабочего стола, покидающих вашу сеть.
Пограничные модели (Claude, GPT-4o, Gemini) тоже работают и остаются самым гладким путём — но они не являются планкой. См. Требования к моделям для поддерживаемых стеков и единственной настройки координатного пространства, которая имеет значение.
GhostDesk запускает виртуальный Linux-десктоп внутри Docker и предоставляет его как MCP-сервер. Ваш агент получает изолированный рабочий стол с панелью задач, часами и предустановленными приложениями — эквивалент того, что человек видит на своём экране.
Агент воспринимает экран, вызывая screen_shot(), который захватывает весь рабочий стол в нативном разрешении и возвращает его в формате WebP (или PNG). Необязательный аргумент region= позволяет обрезать до подпрямоугольника, когда агент явно хочет сузить фокус.
Это работает с любым приложением — веб-приложениями, нативными приложениями, устаревшим ПО, Canvas, WebGL.
Одна команда, обычный HTTP, без пароля. Подходит для быстрого тестирования на доверенном ноутбуке — не подходит ни для чего больше. Готовы усилить защиту? Перейдите к Безопасный локальный запуск.
docker run -d --name ghostdesk-demo \
--shm-size 2g \
-p 3000:3000 \
-p 6080:6080 \
ghcr.io/yv17labs/ghostdesk:latest
Образ latest поставляется с Firefox, терминалом foot, mousepad (текстовый редактор), galculator и sudo без пароля для пользователя agent — достаточно для демонстрации рабочего процесса просмотра и заметок из коробки. Нужен другой набор приложений? Создайте свой поверх base — см. Пользовательский образ.
Контейнер запускается в dev-режиме: обычный HTTP на обоих портах, все проверки аутентификации намеренно отключены. В логах вы увидите предупреждения об этом — они исчезнут, как только вы перейдёте на защищённый путь ниже.
GhostDesk говорит на MCP через транспорт Streamable HTTP — любой MCP-совместимый клиент может им управлять. Укажите вашему клиенту адрес http://localhost:3000/mcp:
Claude Desktop / Claude Code
{
"mcpServers": {
"ghostdesk": {
"type": "http",
"url": "http://localhost:3000/mcp"
}
}
}
Любой другой MCP-совместимый клиент — тот же URL, без заголовков и без аутентификации. Это и есть вся демонстрационная конфигурация.
Откройте http://localhost:6080/ в браузере, чтобы видеть виртуальный рабочий стол в реальном времени. Запрос пароля не появится — dev-режим пропускает его.
| Сервис | URL |
|---|---|
| MCP-сервер | http://localhost:3000/mcp |
| noVNC (браузер) | http://localhost:6080/ |
Дайте агенту первую команду, чтобы убедиться, что всё работает:
«Сделай скриншот рабочего стола, перечисли установленные приложения, затем открой Firefox и перейди на wikipedia.org».
Вы должны увидеть, как Firefox запускается во вкладке noVNC, заполняется адресная строка и загружается страница — всё под управлением вашего агента.
docker stop ghostdesk-demo && docker rm ghostdesk-demo
Демонстрационный запуск не создаёт именованный том, так что после него ничего не остаётся.
В кратком руководстве выше опущены все проверки, чтобы вы могли быстро опробовать инструмент за тридцать секунд. Как только вы захотите открыть доступ к чему-то большему, чем ваш собственный ноутбук — другой машине в локальной сети, пробросу портов devcontainer в недоверенной сети, браузеру коллеги — переключайтесь на защищённый режим: настоящий TLS + аутентификация по bearer-токену на MCP + запрос пароля на noVNC.
GhostDesk связывает TLS и аутентификацию: подключите сертификат — и получите wss:// + bearer-токен на MCP + запрос одного пароля на noVNC (см. Безопасность → Auth ≡ TLS). mkcert выпускает доверенный браузером сертификат для localhost двумя командами:
# Issue a locally-trusted cert (first time only — installs a local CA in your trust store)
mkcert -install
mkdir -p tls
mkcert -cert-file tls/server.crt -key-file tls/server.key localhost 127.0.0.1 ::1
# Generate the MCP and VNC secrets
export GHOSTDESK_AUTH_TOKEN=$(openssl rand -hex 32)
export GHOSTDESK_VNC_PASSWORD=$(openssl rand -hex 16)
Выберите имя контейнера, соответствующее роли агента — sales-agent, research-agent, accounting-agent… Ниже мы используем my-agent как заполнитель; замените его везде в команде.
# Run the container — cert mounted, TLS + auth enabled everywhere
docker run -d --name ghostdesk-my-agent \
--restart unless-stopped \
--cap-add SYS_ADMIN \
--shm-size 2g \
-p 3000:3000 \
-p 6080:6080 \
-v ghostdesk-my-agent-home:/home/agent \
-v "$PWD/tls/server.crt:/etc/ghostdesk/tls/server.crt:ro" \
-v "$PWD/tls/server.key:/etc/ghostdesk/tls/server.key:ro" \
-e GHOSTDESK_AUTH_TOKEN \
-e GHOSTDESK_VNC_PASSWORD \
-e TZ=America/New_York \
-e LANG=en_US.UTF-8 \
ghcr.io/yv17labs/ghostdesk:latest
echo "MCP token: $GHOSTDESK_AUTH_TOKEN"
echo "VNC password: $GHOSTDESK_VNC_PASSWORD"
Когда контейнер запущен, обновите конфигурацию вашего MCP-клиента — та же форма, что и в демо, но теперь через https:// с bearer-токеном:
Claude Desktop / Claude Code
{
"mcpServers": {
"ghostdesk": {
"type": "http",
"url": "https://localhost:3000/mcp",
"headers": {
"Authorization": "Bearer <paste $GHOSTDESK_AUTH_TOKEN here>"
}
}
}
}
Любой другой MCP-совместимый клиент — тот же URL, плюс заголовок Authorization: Bearer <token> в том виде, который принимает ваш клиент.
Затем откройте https://localhost:6080/ в браузере — центр сертификации mkcert, установленный командой mkcert -install, уже находится в вашем хранилище доверия, поэтому браузер принимает сертификат без предупреждения. noVNC запросит $GHOSTDESK_VNC_PASSWORD.
Готовитесь к продакшену? Замените самоподписанный сертификат
mkcertна настоящий, получайте оба секрета из менеджера секретов и поставьте перед портом 6080 прокси с учётом идентификации — полный контракт описан в SECURITY.md.
--cap-add SYS_ADMIN— требуется для приложений на Electron (VS Code, Slack и др.) и других программ, которым нужны пользовательские пространства имён Linux для работы песочницы. Можно безопасно удалить, если они не нужны.
Именованный том сохраняет домашний каталог агента между перезапусками — пароли браузера, закладки, cookie, загрузки и настройки рабочего стола сохраняются. При первом запуске Docker автоматически заполняет том конфигурацией по умолчанию из образа.
13 инструментов под рукой у вашего агента, сгруппированных по назначению (именование verb_noun):
| Инструмент | Описание |
|---|---|
screen_shot |
Сделать снимок экрана в формате WebP (передайте format="png" для без потерь). Передайте region=, чтобы обрезать до подпрямоугольника в исходном разрешении. Настройте quality= (1-100, по умолчанию 50 — незаметно для UI-контента, примерно на 50% меньше, чем 80; повышайте для мелких шрифтов или дизайнерских поверхностей). Установите stabilize=False, чтобы пропустить проверки стабилизации страницы (по умолчанию: True, ждёт до 5 секунд, пока страница стабилизируется) |
| Инструмент | Описание |
|---|---|
mouse_move |
Переместить курсор в координаты без клика — открывает меню, появляющиеся при наведении, всплывающие подсказки и состояния CSS :hover (например, панель действий Gmail) |
mouse_click |
Клик по координатам |
mouse_double_click |
Двойной клик по координатам |
mouse_drag |
Перетаскивание из одной позиции в другую |
mouse_scroll |
Прокрутка в любом направлении (вверх/вниз/влево/вправо) |
| Инструмент | Описание |
|---|---|
key_type |
Ввод текста с реалистичными задержками между символами |
key_press |
Нажатие клавиш или комбинаций (ctrl+c, alt+F4, Return...) |
| ### Буфер обмена |
| Инструмент | Описание |
|---|---|
clipboard_get |
Чтение содержимого буфера обмена |
clipboard_set |
Запись в буфер обмена |
| Инструмент | Описание |
|---|---|
app_list |
Список GUI-приложений, установленных на рабочем столе |
app_running |
Список окон приложений, открытых в данный момент — вызывайте перед app_launch, чтобы не запускать повторно уже работающее приложение |
app_launch |
Запуск GUI-приложения по имени |
app_status |
Проверка, запущено ли приложение, и чтение его журналов |
Ваш стек вывода должен покрывать четыре возможности — все четыре обязательны:
GhostDesk-Model-SpaceПо умолчанию заголовок не нужен: Claude и другие ведущие frontier LLM работают из коробки. Qwen3.x требуют, чтобы клиент отправлял GhostDesk-Model-Space: 1000 в каждом запросе MCP.
Пример конфигурации MCP-клиента:
{
"mcpServers": {
"ghostdesk": {
"url": "https://localhost:3000/mcp",
"headers": {
"GhostDesk-Model-Space": "1000"
}
}
}
}
Для самостоятельного хостинга вывода мы используем и рекомендуем наш форк llama.cpp, который добавляет декодирование WebP и турбо-квантизацию поверх апстрима: YV17labs/llama-cpp-turboquant-webp, ветка feature/turboquant-webp. Когда WebP появится в апстриме, мы заархивируем форк и перейдём на него напрямую.
Пользователям macOS: используйте llama.cpp, а не mlx-vlm (по состоянию на 01.04.2026). Стек mlx-vlm в настоящее время даёт неточные координаты для тех же моделей, которые корректно работают под llama.cpp. Это вызвано ошибкой в апстриме зависимости Apple, а не самой модели. Пока исправление не выйдет, llama.cpp — рекомендуемый бэкенд на всех платформах, включая Mac на Apple Silicon.
Запускайте любую локальную модель, какую хотите. Четыре из семейства Qwen vision, которые я использовал и которые хорошо работают для управления рабочим столом:
Точная команда, которую я запускаю для тестов Qwen3.6-35B-A3B, используя указанный выше форк (--cache-type-v turbo3 — это его турбо-квантованный KV-кэш):
build/bin/llama-server \
--model models/Qwen3.6-35B-A3B-Q5_K_M.gguf \
--mmproj models/Qwen3.6-35B-A3B-mmproj-F16.gguf \
--alias 'Qwen3-6-35B-A3B' \
--ctx-size 32768 \
--host 127.0.0.1 \
--port 8080 \
--cache-type-k q8_0 \
--cache-type-v turbo3 \
--reasoning on \
--reasoning-format deepseek
llama-server предоставляет OpenAI-совместимый эндпоинт на http://127.0.0.1:8080; укажите его как бэкенд вывода вашего MCP-хоста и не забудьте заголовок GhostDesk-Model-Space: 1000 для семейства Qwen.
Каждый экземпляр GhostDesk — это контейнер. Запустите один, десять или сто — каждый агент получает свой изолированный рабочий стол, свои приложения, свою роль. Думайте об этом как о найме команды цифровых сотрудников, у каждого из которых своё рабочее место.
# docker-compose.yml — 3 specialized agents, one command
#
# Prerequisites: the TLS cert + key at ./tls and the two secrets
# (GHOSTDESK_AUTH_TOKEN, GHOSTDESK_VNC_PASSWORD) in your environment or a
# .env file. Generate both exactly as shown in the Secure local run
# section above. See SECURITY.md for the production secret-handling
# contract.
x-ghostdesk-defaults: &ghostdesk-defaults
image: ghcr.io/yv17labs/ghostdesk:latest
restart: unless-stopped
cap_add: [SYS_ADMIN]
shm_size: 2g
environment:
- GHOSTDESK_AUTH_TOKEN
- GHOSTDESK_VNC_PASSWORD
- TZ=America/New_York
- LANG=en_US.UTF-8
services:
sales-agent:
<<: *ghostdesk-defaults
container_name: ghostdesk-sales-agent
ports: ["3001:3000", "6081:6080"]
volumes:
- ghostdesk-sales-agent-home:/home/agent
- ./tls/server.crt:/etc/ghostdesk/tls/server.crt:ro
- ./tls/server.key:/etc/ghostdesk/tls/server.key:ro
research-agent:
<<: *ghostdesk-defaults
container_name: ghostdesk-research-agent
ports: ["3002:3000", "6082:6080"]
volumes:
- ghostdesk-research-agent-home:/home/agent
- ./tls/server.crt:/etc/ghostdesk/tls/server.crt:ro
- ./tls/server.key:/etc/ghostdesk/tls/server.key:ro
accounting-agent:
<<: *ghostdesk-defaults
container_name: ghostdesk-accounting-agent
ports: ["3003:3000", "6083:6080"]
volumes:
- ghostdesk-accounting-agent-home:/home/agent
- ./tls/server.crt:/etc/ghostdesk/tls/server.crt:ro
- ./tls/server.key:/etc/ghostdesk/tls/server.key:ro
volumes:
ghostdesk-sales-agent-home:
ghostdesk-research-agent-home:
ghostdesk-accounting-agent-home:
docker compose up -d # Your workforce is ready
Каждый агент работает параллельно, независимо, на своём рабочем столе. Подключите каждого к разным LLM, дайте каждому свой системный промпт, установите разные приложения — полная специализация.
Каждый агент изолирован в своём контейнере. Нет доступа к хост-машине. Нет доступа к другим агентам. Сетевая, файловая и процессная изоляция предоставляются бесплатно благодаря Docker.
Это делает GhostDesk естественным выбором для предприятий:
| Проблема | Как GhostDesk её решает |
|---|---|
| Изоляция данных | Каждый агент живёт в своём контейнере — нет общей файловой системы, нет общей памяти |
| Контроль доступа | Ограничьте сетевой доступ для каждого агента с помощью Docker-сетей. Агент с доступом к CRM не видит финансовые инструменты |
| Аудируемость | Наблюдайте за любым агентом в реальном времени через VNC, записывайте сессии, просматривайте скриншоты |
| Радиус поражения | Если агент работает неправильно, убейте контейнер. Ничто другое не затрагивается |
| Соответствие требованиям | Никакие данные не касаются вашего хоста. Контейнеры могут работать в изолированных средах (air-gapped) |
Дайте каждому агенту роль, как новому сотруднику:
Каждый агент получает собственный системный промпт, определяющий его миссию, собственные установленные приложения и собственные сетевые разрешения. Управляйте AI-агентами как сотрудниками — у каждого свой рабочий стол, свои инструменты и свой уровень допуска.
Каждый агент предоставляет конечную точку VNC/noVNC. Откройте вкладку браузера и наблюдайте за работой агента — или откройте десять вкладок и мониторьте весь свой персонал. Вмешивайтесь в любой момент: перехватывайте мышь, корректируйте курс или общайтесь с оркестрирующей LLM.
Каждая переменная, которую читает GhostDesk, имеет пространство имён GHOSTDESK_*. Стандартные POSIX-переменные (TZ, LANG) остаются как есть, чтобы существующая Unix-экосистема продолжала работать.
| Переменная | Описание |
|---|---|
GHOSTDESK_AUTH_TOKEN |
Bearer-токен, обязательный для каждого MCP-запроса. Сгенерируйте с помощью openssl rand -hex 32. |
GHOSTDESK_VNC_PASSWORD |
Пароль для wayvnc (имя пользователя — agent в продакшн-образе). Сгенерируйте с помощью openssl rand -hex 16. |
Обе — обычные переменные окружения. Подключайте их из вашего хранилища секретов (secretKeyRef в Kubernetes, Docker secrets / Vault / AWS SM в compose) — полный контракт см. в SECURITY.md.
| Переменная | По умолчанию | Описание |
|---|---|---|
GHOSTDESK_PORT |
3000 |
Порт прослушивания MCP-сервера |
GHOSTDESK_HOST |
127.0.0.1 (standalone) / 0.0.0.0 (контейнер) |
Адрес привязки для MCP-эндпоинта. По умолчанию loopback согласно спецификации MCP transports; entrypoint контейнера экспортирует 0.0.0.0, чтобы слой публикации портов Docker мог до него добраться. |
GHOSTDESK_ALLOWED_ORIGINS |
(пусто) | Список через запятую заголовков Origin, принимаемых от браузерных клиентов (например, https://app.example.com,https://localhost:8080). Не-браузерные клиенты (Claude Desktop, SDK, curl) не отправляют Origin и всегда разрешены. Требуется для любого браузерного MCP-интерфейса; без него браузерные запросы отклоняются с HTTP 403 для смягчения DNS-ребдинга (согласно спецификации MCP transports). |
GHOSTDESK_TLS_CERT |
/etc/ghostdesk/tls/server.crt |
Путь к TLS-сертификату. Когда файл существует, websockify и MCP-сервер автоматически переключаются на wss:// / https://. См. Безопасность. |
GHOSTDESK_TLS_KEY |
/etc/ghostdesk/tls/server.key |
Путь к приватному ключу TLS (соответствует GHOSTDESK_TLS_CERT). |
GHOSTDESK_SCREEN_WIDTH |
1280 |
Ширина виртуального экрана в пикселях |
GHOSTDESK_SCREEN_HEIGHT |
1024 |
Высота виртуального экрана в пикселях |
GHOSTDESK_IDLE_TIMEOUT |
1800 |
Секунды тишины MCP до закрытия всех открытых окон клиента (Firefox, foot, mousepad…) через Sway IPC для освобождения памяти. Sway, mako, wayvnc и сам MCP-сервер не затрагиваются. Установите 0 для отключения. |
TZ |
America/New_York |
Часовой пояс IANA (POSIX-стандарт, например, Europe/Paris) |
LANG |
en_US.UTF-8 |
Локаль POSIX (например, fr_FR.UTF-8) |
| Переменная | Значение | Обоснование |
|---|---|---|
GHOSTDESK_VNC_ADDRESS |
127.0.0.1 |
wayvnc заблокирован на loopback внутри netns контейнера; порт VNC доступен только через noVNC-мост на 6080. Попытки переопределения логируются и игнорируются — см. SECURITY.md. |
GhostDesk отвечает за две вещи: шифрование транспорта и аутентификацию. Всё остальное (rate limiting, SSO, WAF, запись сессий, защита от брутфорса, идентификация пользователей на noVNC) — забота обратного прокси. Контейнер спроектирован для работы за прокси, а не напрямую в интернете.
Полная модель угроз, переключатель режима Auth ≡ TLS, обоснование использования wayvnc RFB-типа-2 внутри wss://, контракт на обработку секретов и исчерпывающая таблица «в области / вне области» находятся в SECURITY.md — единственный источник истины. Начните с этого документа перед развертыванием на любом окружении, которому вы не полностью доверяете.
Хотите сообщить об уязвимости? Используйте приватное консультативное заключение по безопасности GitHub — см. SECURITY.md § Сообщение об уязвимостях.
Почти всегда это несоответствие координатного пространства. Передовые модели (Claude, GPT-4o, Gemini) не требуют заголовка (по умолчанию сквозная передача); семейство Qwen vision требует, чтобы клиент отправлял GhostDesk-Model-Space: 1000 в каждом MCP-запросе. Полное обоснование в разделе Требования к моделям → Координатное пространство.
Продакшн-режим (с смонтированным сертификатом) требует установки и GHOSTDESK_AUTH_TOKEN, и GHOSTDESK_VNC_PASSWORD — GhostDesk намеренно отказывается запускаться без них, чтобы предотвратить запуск непроверенного продакшн-контейнера. Сгенерируйте их, как показано в разделе Безопасный локальный запуск, и передайте с помощью -e. Демо-режим (без сертификата) не имеет такого требования.
Вероятно, у вас недостаточно разделяемой памяти. Браузерам и другим GPU-ускоряемым приложениям внутри контейнера нужен разумный размер /dev/shm — --shm-size 2g является базовым во всех примерах, и его не следует уменьшать. Если у вас уже есть --shm-size 2g, проверьте журналы контейнера на наличие ошибок wayvnc или композитора.
Приложения на базе Electron (VS Code, Slack, Discord…) требуют пользовательских пространств имен Linux для своей песочницы. Добавьте --cap-add SYS_ADMIN в вашу команду docker run (уже присутствует в примере безопасного локального запуска). Firefox сам работает без этого.
Тег base предоставляет GhostDesk без каких-либо предустановленных GUI-приложений — только виртуальный рабочий стол, VNC и MCP-сервер. Используйте его для создания собственного образа только с нужными вам инструментами:
FROM ghcr.io/yv17labs/ghostdesk:base
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
chromium-browser \
libreoffice-calc \
&& rm -rf /var/lib/apt/lists/*
docker build -t my-agent .
Полный пример см. в Dockerfile проекта.
| Тег | Описание |
|---|---|
latest, X.Y.Z, X.Y |
Полный образ — Firefox, терминал foot, mousepad, galculator, sudo без пароля |
base, base-X.Y.Z, base-X.Y |
Минимальный образ — без GUI-приложений, предназначен для расширения |
Функциональная лицензия на исходный код, версия 1.1, будущая лицензия ALv2 (FSL-1.1-ALv2) — см. LICENSE для получения официальных условий.
Что это означает на практике (неофициальное резюме — действует файл LICENSE; это не юридическая консультация):
Коммерческое лицензирование. Если ваше предполагаемое использование подпадает под конкурирующее использование — вы хотите перепродавать GhostDesk, предлагать его как управляемую услугу или создавать конкурирующий продукт — свяжитесь с сопровождающими, чтобы обсудить коммерческую лицензию перед развертыванием. Откройте вопрос на GitHub или свяжитесь напрямую; мы будем рады поговорить.