Содержание
OpenHands — это open-source платформа для автономных AI-агентов, которые пишут код, создают pull requestы, ревьюят изменения и автоматизируют рутину разработки. Проект начинался как OpenDevin, а сегодня это 80 000+ звёзд на GitHub, MIT-лицензия и поддержка любых LLM — от Claude до локальных моделей через Ollama. В отличие от Claude Code, который работает как ассистент в терминале, OpenHands — это полноценный агент, который самостоятельно берёт задачу из GitHub Issues, разбирается, пишет код и отправляет PR. Без того, чтобы сидеть и ждать. Запустить его на своём VPS можно за вечер, и это не требует ничего, кроме Docker.
Архитектура и принцип работы
Главное, что стоит понять про 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
Пошаговая установка через 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 минут в зависимости от канала.
Для остановки и удаления:
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, в котором:
- разбил монолитную функцию на четыре небольшие:
read_csv,validate_data,send_to_telegram,main - добавил
try/exceptвокруг каждого внешнего вызова - вынес Telegram-токен и chat_id в переменные окружения
- написал docstring для каждой функции
- создал
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 проектируем и разворачиваем такие системы под ключ: от выбора модели и настройки интеграций до продакшен-деплоя с мониторингом.