OpenHands CLI: Быстрый старт, установка, флаги, headless-режим
Установка через CLI, флаги, headless, локальные модели
OpenHands — это агент для кодирования с открытым исходным кодом, который редактирует файлы и выполняет команды в песочнице. Данный быстрый старт для CLI был проверен 26.10.2026 г. в соответствии с пакетом версии 1.16.0.
Пакет на PyPI openhands версии 1.16.0 был загружен 8 мая 2026 г. и закреплён на openhands-sdk==1.21.0. В README с тегом указано требование Python 3.12 и uv версии 0.11.6 или новее. README ветки по умолчанию репозитория OpenHands-CLI сообщает, что этот репозиторий более не активно поддерживается и направляет новых пользователей на Agent Canvas. Режим headless и команда openhands acp по-прежнему входят в набор команд версии 1.16.0.

Руководство по инструментам ИИ для разработчиков продолжает обзор других терминальных агентов на этом сайте. Эта страница остаётся в рамках OpenHands CLI: установка, файлы настроек, локальные URL моделей и флаги, которые скрипт действительно передаёт.
Что такое CLI
Ассистент ИИ для кодирования, как правило, генерирует или редактирует код на основе запроса. OpenHands расширяет этот подход в агентный цикл: планирование, выполнение действия (например, запись файла или запуск теста), наблюдение за результатом и продолжение работы. Ранее проект назывался OpenDevin. Статья об OpenHands описывает среду выполнения в Docker-песочнице с оболочкой и возможностью просмотра веб-страниц, что является моделью выполнения, которую CLI по-прежнему оборачивает.
Выпуск 1.16.0 документирует пять способов запуска этого цикла.
| Режим | Команда | Назначение |
|---|---|---|
| Терминальный UI | openhands |
Интерактивная сессия. Спрашивает перед каждым действием, если не передан флаг подтверждения. |
| Headless | openhands --headless -t "задача" |
Для CI и скриптов. Требует --task или --file. Всегда подтверждает действия. |
| ACP | openhands acp |
Сервер протокола Agent Client Protocol для Zed, JetBrains, Toad и расширения ACP для VS Code. |
| Браузерный TUI | openhands web |
Тот же CLI в браузере. По умолчанию привязывается к 0.0.0.0:12000. |
| Устаревший GUI | openhands serve |
Docker GUI через лаунчер CLI. URL по умолчанию http://localhost:3000. |
Agent Canvas: текущая поддерживаемая установка
3 июня 2026 г. в FAQ проекта OpenHands было указано, что терминальный UI переходит в режим поддержки до 1 октября 2026 г., при этом headless-режим и ACP останутся полностью поддерживаемыми. Локальный GUI (openhands serve) также должен был оставаться в режиме поддержки, пока Agent Canvas не сможет запускать изолированные эфемерные песочницы. В этом FAQ поддержка определяется как обновление зависимостей, исправление критических ошибок и добавление новых LLM. В главном репозитории OpenHands 23 октября 2026 г. был выпущен Agent Canvas версии 1.33.0.
agent-canvas запускает текущий UI и его бэкенд. openhands serve запускает устаревший GUI и не запускает Agent Canvas.
Для Agent Canvas требуется Node.js версии 24 или новее и uv. Первый запуск без глобальной установки:
npx @openhands/agent-canvas
Процесс слушает порт на http://localhost:8000. Закрытие этого терминала останавливает локальный бэкенд. Глобальная установка выполняется командой npm install -g @openhands/agent-canvas, после чего запускается agent-canvas. Установка через npm запускает сервер агента под вашим пользователем, поэтому агент может воздействовать на локальные файлы с разрешениями вашей учётной записи.
Docker-путём порт публикуется только на localhost, а каталог проектов монтируется внутрь контейнера:
mkdir -p ~/projects
docker run -it --rm \
-p 127.0.0.1:8000:8000 \
-v openhands-data:/home/openhands/.openhands \
-v ~/projects:/projects \
ghcr.io/openhands/agent-canvas:latest
Контейнер предоставляет UI по адресу http://localhost:8000/canvas. Именованный том openhands-data сохраняет настройки после использования флага --rm. На Linux попытка bind-mount-а каталога ~/.openhands в этот образ завершается ошибкой unable to open database file: пользователь контейнера имеет UID 10001, а каталог на хосте обычно принадлежит вашему UID. Именно по этой причине на странице установки используется именованный том. Настройки, уже находящиеся в ~/.openhands, не копируются в новый том.
Установка OpenHands CLI
Используйте CLI, если вам всё ещё нужны команды openhands --headless или openhands acp. Опубликованное колесо устанавливается только в среде Python 3.12 (спецификация ==3.12.* на PyPI). Версия uv должна быть 0.11.6 или новее. На Windows страница установки рекомендует выполнять команды в WSL (Ubuntu).
Установка с помощью uv
uv tool install openhands --python 3.12
openhands
Обновление с тем же закреплением интерпретатора:
uv tool upgrade openhands --python 3.12
На странице локальной настройки указано, что uv изолирует CLI от виртуального окружения проекта, и что по умолчанию MCP-серверы требуют его.
Установка автономного бинарного файла
curl -fsSL https://install.openhands.dev/install.sh | sh
openhands
На macOS диалоговое окно Gatekeeper может блокировать бинарный файл («openhands не может быть открыт, потому что Apple не может проверить его на наличие вредоносного ПО»). Путь, указанный на странице установки: Система -> Настройки -> Конфиденциальность и безопасность -> Разрешить всё равно (в разделе Безопасность), после чего снова выполнить openhands.
Запуск CLI через Docker
Контейнер на странице установки устанавливает переменную AGENT_SERVER_IMAGE_TAG для образа agent-server. Команда uv tool install openhands внутри контейнера устанавливает CLI с PyPI. Тег в этом примере, проверенный для этой страницы, — 1.26.0-python. В более старых копиях этой команды использовался тег 1.12.0-python.
export SANDBOX_VOLUMES="$PWD:/workspace"
docker run -it \
--pull=always \
-e AGENT_SERVER_IMAGE_REPOSITORY=ghcr.io/openhands/agent-server \
-e AGENT_SERVER_IMAGE_TAG=1.26.0-python \
-e SANDBOX_USER_ID=$(id -u) \
-e SANDBOX_VOLUMES=$SANDBOX_VOLUMES \
-v /var/run/docker.sock:/var/run/docker.sock \
-v ~/.openhands:/root/.openhands \
--add-host host.docker.internal:host-gateway \
--name openhands-cli-$(date +%Y%m%d%H%M%S) \
python:3.12-slim \
bash -c "pip install uv && uv tool install openhands --python 3.12 && openhands"
Параметр SANDBOX_USER_ID=$(id -u) делает пользователя песочницы идентичным пользователю хоста, чтобы агент не оставлял файлов, принадлежащих root, в смонтированном рабочем каталоге. SANDBOX_VOLUMES — это каталог, к которому агент имеет доступ.
Переменная OPENHANDS_VERSION выбирает версию Docker-образа для openhands serve. Она не меняет версию CLI с PyPI.
Файлы настроек
При первом запуске CLI запрашивает настройки модели и записывает их в ~/.openhands/. В README версии 1.16.0 и справочнике по командам указаны следующие файлы:
| Файл | Содержимое |
|---|---|
~/.openhands/agent_settings.json |
Сохранённая спецификация агента, включая блок LLM и конфигурацию конденсатора |
~/.openhands/cli_config.json |
Предпочтения CLI, включая включён ли критик |
~/.openhands/mcp.json |
Определения MCP-серверов |
~/.openhands/conversations/ |
История разговоров |
Страница установки всё ещё сообщает пользователям Docker готовить файл ~/.openhands/settings.json. Однако CLI README и класс AgentStore в дереве версии 1.16.0 сохраняют спецификацию агента в agent_settings.json. Установка CLI, пропустившая имя файла со страницы установки и записавшая agent_settings.json, соответствует этому источнику.
Функция create_and_save_from_settings создаёт два объекта LLM из одной модели, API-ключа и base URL: один для агента и один для суммаризирующего конденсатора. Поэтому в сохранённом файле дублируются поля llm. Редактируйте файл агента любым редактором:
nano ~/.openhands/agent_settings.json
Переменные LLM_API_KEY, LLM_MODEL и LLM_BASE_URL игнорируются, если вы не включите опцию переопределения. Переопределение не сохраняется:
export LLM_MODEL="gpt-4o"
export LLM_API_KEY="ваш-api-ключ"
openhands --override-with-envs
OPENHANDS_CLOUD_URL задает сервер облака по умолчанию. Команды cloud и login используют https://app.all-hands.dev по умолчанию, если эта переменная не установлена.
Обновление с версий CLI старше 1.0.0 требует повторного ввода настроек. На странице установки указано, что формат конфигурации изменился в версии 1.0.0.
Локальные модели
В руководстве по локальным LLM от 21 мая 2026 г. рекомендуется Qwen3.6-35B-A3B как первая локальная модель для проверки. Требуется GPU с видеопамятью не менее 24 ГБ для квантованной сборки или Mac с Apple Silicon с объёмной памятью не менее 64 ГБ. На той же странице рекомендуется установить длину контекста не менее 22000 токенов, а также указано, что значение по умолчанию Ollama (4096) слишком мало для системного промпта.
Если агент никогда не вызывает инструменты, руководство считает это ограничением модели и ссылается на сообщения сообщества для qwen2.5-coder-14b-instruct и qwopus3.5-27b-v3. Сравнение локального хостинга служит таблицей сравнения по серверам, если выбор между Ollama, vLLM, LM Studio или LocalAI ещё не сделан.
Ollama
В руководстве для запуска Ollama длина контекста устанавливается до выполнения ollama serve. Шпаргалка по CLI Ollama описывает serve, run и ps вместе с этой переменной.
OLLAMA_CONTEXT_LENGTH=32768 OLLAMA_HOST=0.0.0.0:11434 OLLAMA_KEEP_ALIVE=-1 ollama serve
ollama pull qwen3.6:35b-a3b
Для OpenHands, работающего в Docker, в руководстве указаны настраиваемая модель openai/qwen3.6:35b-a3b, base URL http://host.docker.internal:11434/v1 и любой плейсхолдер API-ключа. CLI, работающий на том же хосте, что и Ollama, использует http://127.0.0.1:11434/v1 вместо host.docker.internal. Linux LM Studio и другие серверы, работающие только на loopback, недоступны из контейнера через 127.0.0.1; проверка в руководстве заключается в включении обслуживания в локальной сети и выполнении curl host.docker.internal изнутри контейнера.
Страница терминала открывает этот экран сочетанием Ctrl+P, затем выбирает Настройки. Сохранённый профиль CLI использовал идентификатор модели ollama/ и base URL без /v1:
- Пользовательская модель:
ollama/devstral-small-2:24b - Base URL:
http://localhost:11434

Именно сессия с Devstral-Small-2, описанная выше, постоянно останавливалась. Поля, записанные для неё (как в LLM агента, так и в LLM конденсатора), были следующими:
"llm": {
"model": "ollama/devstral-small-2:24b",
"api_key": "aaa",
"base_url": "http://localhost:11434"
}
llama.cpp и vLLM
llama.cpp использовал префикс, совместимый с OpenAI, и base URL /v1, снова в обоих объектах LLM:
"model": "openai/Qwen3.5-35B-A3B-UD-IQ3_S.gguf""base_url": "http://localhost:8080/v1"
Команда сервера, флаги которой описаны в быстром старте llama.cpp, была следующей:
./llama.cpp/llama-server \
-m /mnt/ggufs/Qwen3.5-35B-A3B-UD-IQ3_S.gguf \
--ctx-size 70000 \
-ngl 40 \
--temp 0.6 \
--top-p 0.95 \
--top-k 20 \
--min-p 0.00
Против этого сервера CLI завершил работу над клиентом Go IndexNow: исходный код, исполняемый файл и README. Текст задачи был: создай для меня CLI-инструмент на Go, который будет вызывать endpoints indexnow поисковых систем bing и других для уведомления об изменениях на моём сайте.
Пример vLLM в руководстве по локальным LLM для более новой модели Qwen3.6 — это обслуживание на двух GPU. Быстрый старт vLLM проходит через флаги vllm serve и проверки исчерпания памяти. Соответствующая строка модели OpenHands в руководстве — openai/Qwen3.6-35B-A3B, base URL http://host.docker.internal:8000/v1 и тот же --api-key, с которым был запущен сервер (mykey в их примере).
vllm serve Qwen/Qwen3.6-35B-A3B \
--host 0.0.0.0 --port 8000 \
--api-key mykey \
--tensor-parallel-size 2 \
--served-model-name Qwen3.6-35B-A3B \
--enable-prefix-caching
Интерактивные элементы управления
Запуск openhands без подкоманды открывает терминальный UI. На странице терминала перечислены эти элементы управления:
| Управление | Действие |
|---|---|
Ctrl+P |
Палитра команд. Настройки, статус MCP, история, план, тема, выход. |
Esc |
Пауза работающего агента. |
Ctrl+Q или /exit |
Выход из CLI. |
Слэш-команды из справочника по командам: /help, /new, /history, /confirm, /condense, /skills, /feedback, /exit. Изменения модели из палитры (раздел Настройки) применяются без перезапуска. --exit-without-confirmation пропускает диалог подтверждения выхода. --exp выбирает текстовый UI и задокументирован как флаг совместимости, так как этот UI уже является значением по умолчанию.
Флаги и подкоманды
openhands [ОПЦИИ] [КОМАНДА]
Глобальные опции из справочника по командам, проверенные относительно argparsers/util.py в теге 1.16.0 для флагов подтверждения и окружения:
| Опция | Эффект |
|---|---|
-v, --version |
Вывести версию и выйти. |
-t, --task TEXT |
Инициализировать разговор этой задачей. |
-f, --file PATH |
Инициализировать разговор из файла. |
--resume [ID] |
Возобновить указанный разговор. Без ID — вывести список последних. |
--last |
С --resume — возобновить самый последний разговор. |
--headless |
Без UI. Требует --task или --file. Всегда подтверждает. |
--json |
Потоковая запись событий в формате JSONL. Требует --headless. |
--always-approve, --yolo |
Подтвердить каждое действие. Невозможно использовать вместе с --llm-approve. |
--llm-approve |
Подтверждать только действия, которые анализатор безопасности LLM помечает как высокий риск. |
--override-with-envs |
Применить LLM_API_KEY, LLM_MODEL и LLM_BASE_URL для этого процесса. |
--exit-without-confirmation |
Выйти без диалога подтверждения. |
Флаги --always-approve и --llm-approve не могут использоваться одновременно. В режиме интерактивного использования по умолчанию перед действиями запрашивается подтверждение.
Подкоманды, которые появляются, когда TUI недостаточны:
openhands serveзапускает устаревший GUI в Docker.--mount-cwdмонтирует текущий каталог в/workspace.--gpuвключает nvidia-docker.openhands webпредоставляет CLI в браузере.--hostпо умолчанию0.0.0.0,--port—12000,--debugвыключен.openhands acpобщается по протоколу Agent Client Protocol через stdio. Флаги:--resume,--last,--always-approve,--llm-approve,--streaming.openhands cloud -t "задача"открывает облачный разговор.--server-urlпереопределяетhttps://app.all-hands.dev.openhands loginиopenhands logoutуправляют этой облачной учётной записью.logoutбез--server-urlвыходит из всех сохранённых серверов.openhands mcpуправляет серверами:add,list,get,remove,enable,disable. Командаaddтребует--transportтипаhttp,sseилиstdio.
MCP-сервер из README версии 1.16.0:
openhands mcp list
openhands mcp add tavily --transport stdio \
npx -- -y mcp-remote "https://mcp.tavily.com/mcp/?tavilyApiKey=<ваш-api-ключ>"
openhands mcp enable tavily
openhands mcp disable tavily
Примеры
Интерактивная задача
openhands -t "Исправь ошибку в auth.py и добавь регрессионный тест"
Файл задачи
cat > task.txt << 'EOF'
Рефакторинг модуля подключения к базе данных.
Добавление юнит-тестов и обеспечение прохода тестового набора.
EOF
openhands -f task.txt
Headless, включая JSONL
Режим headless требует --task или --file. Он всегда работает с полным подтверждением действий, а --llm-approve там отклоняется. Рассматривайте рабочий каталог как тот, который агент может свободно модифицировать.
openhands --headless -t "Добавь юнит-тесты для auth.py и запусти их"
openhands --headless --json -t "Создай простое приложение Flask с healthcheck endpoint" > openhands-output.jsonl
Страница headless описывает --json как один JSON-объект на событие, потоково передаваемый в формате JSONL.
Возобновление
openhands --resume
openhands --resume --last
openhands --resume abc123def456
Браузерный TUI с привязкой к localhost
openhands web по умолчанию привязывается к 0.0.0.0:12000, что делает его доступным из сети. В документации CLI указано, что этот интерфейс обладает полным функционалом CLI, поэтому привязка только к локальному хосту — более безопасный вариант по умолчанию:
openhands web --host 127.0.0.1 --port 12000
ACP для редактора
ACP-клиенты на странице IDE — это Zed и JetBrains (нативные), Toad (нативный) и VS Code (расширение сообщества). Редактор запускает openhands acp и общается через JSON-RPC 2.0 по stdio, используя сохранённые настройки LLM CLI.
openhands acp
openhands acp --llm-approve
openhands acp --resume --last
Подтверждения, коды выхода и результаты локальных моделей
В интерактивных сессиях перед действиями запрашивается подтверждение. /confirm меняет эту политику в сессии. --always-approve (алиас --yolo) подтверждает всё. --llm-approve запрашивает подтверждение только для действий, которые анализатор безопасности оценивает как высокий риск. Режим headless всегда работает с полным подтверждением на протяжении всего запуска.
openhands serve --mount-cwd монтирует текущий каталог в /workspace внутри контейнера устаревшего GUI. Docker CLI-поток использует SANDBOX_VOLUMES для той же границы.
Коды выхода из справочника по командам:
| Код | Значение |
|---|---|
| 0 | Успех |
| 1 | Ошибка или провал задачи |
| 2 | Недействительные аргументы |
Devstral-Small-2 24B на Ollama неоднократно останавливался в этом CLI.

Сессия llama.cpp выше (Qwen3.5-35B-A3B с контекстом в 70000 токенов) успешно завершила задачу IndexNow. Для терминального агента, который продолжал работать на той же машине, быстрый старт OpenCode служит руководством по установке и настройке провайдеров.