OpenHands — это open-source платформа для автономных AI-агентов, которые пишут код, создают pull requestы, ревьюят изменения и автоматизируют рутину разработки. Проект начинался как OpenDevin, а сегодня это 80 000+ звёзд на GitHub, MIT-лицензия и поддержка любых LLM — от Claude до локальных моделей через Ollama. В отличие от Claude Code, который работает как ассистент в терминале, OpenHands — это полноценный агент, который самостоятельно берёт задачу из GitHub Issues, разбирается, пишет код и отправляет PR. Без того, чтобы сидеть и ждать. Запустить его на своём VPS можно за вечер, и это не требует ничего, кроме Docker.

80K+ звёзд на GitHub
26% SWE-Bench Lite
$1.10 стоимость задачи
MIT лицензия

Архитектура и принцип работы

Главное, что стоит понять про OpenHands, — это не просто обёртка над LLM. Платформа построена как оркестратор: она берёт задачу, разбивает на подзадачи, запускает код в изолированном Docker-контейнере (песочнице), проверяет результат и повторяет, если что-то пошло не так. Внутри работает CodeAct-агент — архитектура, где LLM генерирует не просто текст, а исполняемые действия: команды в терминале, запись файлов, создание директорий.

Вот как выглядит типичный конвейер: разработчик создаёт Issue на GitHub → OpenHands получает уведомление → агент клонирует репозиторий, анализирует код, определяет, какие файлы нужно менять → пишет изменения в Docker-песочнице → прогоняет тесты → создаёт Pull Request с описанием. Всё это без участия человека. Конечно, если тесты падают, агент делает несколько попыток исправить ошибку.

Ключевое преимущество OpenHands перед альтернативами вроде Hermes Agent или Claude Code — он модельно-независимый. Вы можете подключить Claude Sonnet, GPT-4o, DeepSeek или локальную Qwen2.5 через Ollama. TheCode писал, что «OpenHands — агент, который работает самостоятельно. Вы создаёте issue на GitHub, OpenHands сам разбирается, пишет код, создаёт PR». Это не ускорение разработки, а её делегирование.

Системные требования и подготовка VPS

OpenHands не требует GPU — агент не инференсит модель локально, а обращается к ней по API. Поэтому минимальная конфигурация VPS скромная: 2 vCPU, 4 GB RAM, 20 GB SSD. Этого хватит для Docker-песочницы и самого сервиса. Если планируете запускать несколько агентов параллельно — лучше 4 vCPU и 8 GB RAM.

Компонент Минимум Рекомендуется
vCPU 2 4
RAM 4 GB 8 GB
Диск 20 GB SSD 40 GB SSD
ОС Ubuntu 22.04 Ubuntu 24.04
Docker 24+ 27+

Перед началом убедитесь, что на сервере установлен Docker и docker compose plugin. На Ubuntu 22.04+ это делается стандартными командами:

sudo apt update && sudo apt install -y docker.io docker-compose-v2
sudo systemctl enable --now docker

После установки добавьте текущего пользователя в группу docker, чтобы не вводить sudo каждый раз:

sudo usermod -aG docker $USER
# После этого — перелогиньтесь или выполните:
newgrp docker
Важно: OpenHands использует Docker-in-Docker (DinD) для изоляции агента. Это означает, что внутри контейнера OpenHands запускается ещё один Docker-демон. Убедитесь, что на хосте достаточно места для образов — каждая задача скачивает свежий sandbox-образ (~2 GB).

Пошаговая установка через Docker

Самый простой и поддерживаемый способ — запустить OpenHands через официальный docker-compose.yml из репозитория. Разработчики обновляют его под каждую версию, так что не нужно думать о зависимостях.

Создайте директорию и скачайте конфигурацию:

mkdir ~/openhands && cd ~/openhands
wget https://raw.githubusercontent.com/OpenHands/OpenHands/main/docker-compose.yml

Перед запуском нужно создать файл `.env` с настройками. Минимальный набор — LLM-ключ и модель:

cat > .env << 'EOF'
LLM_API_KEY=sk-your-api-key-here
LLM_MODEL=claude-sonnet-4-20250514
WORKSPACE_BASE=/home/ubuntu/openhands/workspace
SANDBOX_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-debug:latest
LOG_ALL_EVENTS=true
EOF

WORKSPACE_BASE — директория на хосте, которая монтируется в контейнер агента. Через неё OpenHands видит файлы вашего проекта. Если не задать, агент будет работать в изолированной файловой системе и не сможет сохранить результат наружу.

Теперь запуск:

docker compose up -d

Через минуту сервис будет доступен на http://ВАШ_IP:3000. Первый запуск скачивает sandbox-образ (~2 GB), так что может занять 2-5 минут в зависимости от канала.

Совет: Если ставите на продакшн — добавьте HTTPS через обратный прокси (Caddy или Nginx). OpenHands не имеет встроенного TLS, а передавать API-ключи по HTTP не стоит. Можно использовать готовый гайд Clore.ai по развёртыванию.

Для остановки и удаления:

docker compose down -v

Флаг -v удаляет тома — если нужно сохранить историю задач, опустите его.

Настройка LLM-бэкенда

OpenHands поддерживает десятки провайдеров. Настройка — в файле `.env`. Основные параметры:

Параметр Описание Пример
LLM_API_KEY API-ключ провайдера sk-ant-...
LLM_MODEL Имя модели claude-sonnet-4-20250514
LLM_BASE_URL Кастомный endpoint http://localhost:11434/v1
LLM_MAX_TOKENS Лимит на ответ модели 8192
LLM_EMBEDDING_MODEL Модель для RAG text-embedding-3-small

Claude (рекомендуется для сложных задач). OpenHands лучшего всего работает с Claude Sonnet 4 — оригинальный CodeActAgent на Claude 3.5 Sonnet показал 26% на SWE-Bench Lite при стоимости $1.10 за задачу. Просто укажите LLM_API_KEY=sk-ant-... и LLM_MODEL=claude-sonnet-4-20250514.

Локальные модели через Ollama. Если хотите полностью автономную систему без внешних API, поднимите Ollama на том же сервере и укажите:

LLM_BASE_URL=http://host.docker.internal:11434/v1
LLM_MODEL=qwen2.5-coder:14b

Для работы host.docker.internal на Linux потребуется дополнительный флаг: добавьте extra_hosts: ["host.docker.internal:host-gateway"] в docker-compose.yml. Без GPU модель 14B будет работать медленно — для CPU лучше qwen2.5-coder:7b или deepseek-coder:6.7b.

GPT / DeepSeek / OpenRouter. Любой провайдер с OpenAI-совместимым API подключается через LLM_BASE_URL:

LLM_BASE_URL=https://openrouter.ai/api/v1
LLM_MODEL=anthropic/claude-3.5-sonnet

Подключение к GitHub

Чтобы OpenHands мог создавать Issue, PR и коммитить код от вашего имени, нужен GitHub Personal Access Token (classic). Создаётся в Settings → Developer settings → Personal access tokens → Tokens (classic) с правами repo, workflow, issues.

Добавьте в `.env`:

GITHUB_TOKEN=github_pat_...
GITHUB_USERNAME=your-username

После перезапуска в веб-интерфейсе появится кнопка «Connect GitHub». Агент сможет:

  • видеть все открытые Issue и назначать их себе
  • создавать ветки и коммитить изменения
  • открывать Pull Request с описанием изменений
  • добавлять комментарии и апрувить ревью

Лучший сценарий использования — связка с GitHub Actions. Вы создаёте Issue с багрепортом, Actions триггерит OpenHands через webhook, агент фиксит баг и отправляет PR. Разработчик только ревьюит код. В документации OpenHands есть готовый workflow-файл для такой интеграции.

Первый запуск: реальный пример

Давайте посмотрим, как OpenHands справляется с реальной задачей — рефакторингом Python-файла. Предположим, у нас есть скрипт, который парсит CSV и отправляет данные в Telegram. Код рабочий, но некрасивый: длинная функция на 200 строк, хардкоженные токены, нет обработки ошибок.

Создаём Issue на GitHub: «Refactor csv_parser.py: split into functions, add error handling, move config to env vars». OpenHands получает задачу, клонирует репозиторий в Docker-песочницу, анализирует код. Через 3-4 минуты агент создаёт PR, в котором:

  1. разбил монолитную функцию на четыре небольшие: read_csv, validate_data, send_to_telegram, main
  2. добавил try/except вокруг каждого внешнего вызова
  3. вынес Telegram-токен и chat_id в переменные окружения
  4. написал docstring для каждой функции
  5. создал requirements.txt с указанием версий зависимостей

Конечно, PR не идеален — агент может неправильно понять контекст или выбрать неоптимальное решение. Но основную черновую работу он делает за минуты, а не часы. NeiroPotok протестировал OpenHands на аналогичных задачах и подтвердил: код рабочий, требует минимум доработок. Главное — чётко формулировать задачу и проверять результат перед мержем.

Безопасность и sandbox

Агент, который сам пишет и запускает код, — это потенциальная дыра в безопасности, если не настроить изоляцию правильно. OpenHands использует Docker-песочницу: каждая задача выполняется в отдельном контейнере, который после завершения уничтожается. Агент не имеет прямого доступа к файловой системе хоста — только к тому, что смонтировано через WORKSPACE_BASE.

Дополнительные меры:

Во-первых, используйте read-only монтирование для репозитория, если хотите, чтобы агент отправлял код только через GitHub API, а не напрямую в файловую систему. Во-вторых, ограничьте ресурсы контейнера через Docker Compose: deploy.resources.limits.cpus: '1.0', memory: 2g. В-третьих, для production-среды запускайте песочницу с профилем --security-opt no-new-privileges и без привилегированного режима.

Если планируете давать OpenHands доступ к закрытым репозиториям, используйте отдельный GitHub-аккаунт с минимальными правами — только на те репозитории, с которыми должен работать агент. Никогда не используйте личный токен с доступом ко всем проектам компании.

Коротко

OpenHands — самый зрелый open-source AI-агент для разработки на середину 2026. 80K звёзд, активная команда, модельно-независимая архитектура и внятная документация делают его лучшим выбором для команды, которая хочет автоматизировать рутинные задачи разработки, не привязываясь к одному вендору.

Установка на VPS сводится к трём шагам: настроить сервер с Docker, скачать docker-compose.yml, заполнить .env с LLM-ключом. Весь процесс занимает вечер, а первый PR от AI-агента можно получить уже через час после запуска.

Если нужен готовый AI-агент для ваших задач — не обязательно разбираться самостоятельно. Мы в N202 проектируем и разворачиваем такие системы под ключ: от выбора модели и настройки интеграций до продакшен-деплоя с мониторингом.