OpenHands: от набора инструментов к Agent-платформе на Cloud Mac

Когда Claude Code меняет файл, а Runner один раз зелёный — кто доводит до конца всю задачу?
Слоган серии: Claude Code производит Diff, GitHub Runner производит Fact, OpenHands производит Workflow.

Cloud Mac AI Stack · L5 Hub  ·  06.06.2026  ·  ~14 мин  ·  архитектурный Hub · туториал OpenHands — L5-Q02

Автономный агентный Workflow OpenHands на Cloud Mac — многоэтапные инженерные задачи

За последние две недели в серии Stack мы по слоям выстроили L1 Runner (Fact), L2 Ollama (Inference) и L4 MCP (Context). В почти каждом отзыве повторяется одна фраза: «Все инструменты есть — но цепочку я всё ещё собираю руками». Claude Code отдаёт Diff, MCP подтягивает контекст GitHub, Runner после push зелёный — и всё равно кто-то сидит в терминале 40 минут, пока не закроется «починить Issue #142 и открыть PR».

Именно на это отвечает L5 · OpenHands: не покупать ещё один CLI, а поднять Cloud Mac с набора инструментов до платформы, которая автономно проходит многоэтапные инженерные задачи. Этот текст — L5-Q01 · R1 · серийный Hub: путь от «coding tool» к «agent platform» — позиция Workflow в Stack, почему OpenHands vs Claude Code не вопрос замены, типичные задачи и OpenHands self-hosted на macOS. Без установки Docker (это L5-Q02).

L5
Слой Workflow
4
Шага цикла агента
24GB
RAM с Ollama

Cloud Mac AI Stack · слоган серии (четвёртая скобка)

Claude Code производит Diff, GitHub Runner производит Fact, OpenHands производит Workflow.

MCP даёт Context; Ollama опционально — Inference. Workflow потребляет Context / Diff / Fact и снова вызывает оба в цикле — это не однонаправленный конвейер. См. язык Stack.

Ловушка набора инструментов: каждый хорош, цепочка — вручную

Типичная неделя (мы видели это в репозиториях клиентов не раз):

  1. Понедельник: Claude Code меняет API-слой, MCP тянет список issues — в сессии всё гладко.
  2. Вторник: коллега пушит с другой машины, Runner красный — никто не сверил изменения агента с CI-скриптами (без L1 Execution Engine это повторяется).
  3. Среда: тесты вручную, правка конфигов, новая сессия Claude Code для недостающих файлов.
  4. Четверг: наконец зелёный — но документация, миграции, примеры тестов не сделаны, потому что «поменять код» спутали с «закрыть требование».

Признак набора инструментов: на каждом шаге лучший инструмент, но ни один слой не отвечает за всё требование целиком. Agent-платформа добавляет слой Workflow, который сам декомпозирует, выполняет и перезапускается после ошибок — OpenHands это open-source вариант в Stack (экосистема-наследник OpenDevin).

Язык Stack: Workflow vs Context / Diff / Fact

В серии важно: Workflow — не просто downstream от Fact. Workflow (L5) — оркестрация, которая в цикле задачи потребляет Context, создаёт Diff, сверяется с Fact, пока требование не закрыто:

Cloud Mac AI Stack · связи результатов (не порядок вызовов)

  Workflow(L5 · OpenHands)
  ├── Context(L4 · MCP)          ← чтение repo / issue / API
  ├── Diff(L3 · Claude Code)   ← изменение кода / файлов
  └── Fact(L1 · Runner / Tests)← test / build / сигнал CI

Agent loop(внутри Workflow · итеративно)
       Diff  ↔  Fact
         ↑       ↓
      Observe → Plan → Execute …

Четыре типа результата параллельно: Context · Diff · Fact · Workflow (MCP · Coding · Runner · OpenHands). Inference (L2 · Ollama) опционален и намеренно не в схеме, чтобы не путать с циклом агента.

Уровень Компонент Результат Вопрос
L4 MCP Context Что видит агент?
L3 Claude Code Diff Что меняется в этом раунде?
L1 GitHub Runner Fact Можно ли организации доверять?
L5 OpenHands Workflow Требование закрыто?

Workflow — не «ещё один CI-job», а многоэтапный прерываемый автомат задачи: в цикле многократно Diff и Fact, пока PR не готов к выдаче. Claude Code силён в одном раунде Diff; OpenHands — в несупervised прохождении всего цикла, если Context и Fact на месте.

OpenHands за минуту (не энциклопедия)

OpenHands — open-source платформа автономного software engineering агента: в sandbox (обычно Docker) принимает цель на естественном языке и выполняет Plan → код/команды → чтение вывода → отладка, с интеграцией GitHub (issues, PR, статус CI). В Cloud Mac AI Stack он не заменяет паринг Claude Code и объективное доказательство сборки Runner, а оркестрирует многоэтапную поставку поверх них.

Отличие от «ещё одного MCP-сервера»

MCP расширяет границу контекста (чтение repo, API). OpenHands расширяет глубину задачи (сам решает, какой инструмент следующий, нужен ли retry). Без L4 — слепые правки; без L1 — нет организационного «готово».

OpenHands vs Claude Code: не конкуренты, разные уровни

Кто ищет OpenHands vs Claude Code или Claude Code alternative, часто спрашивает: можно ли одно заменить другим? В Stack: нет и не нужно — другой уровень, другой результат:

  • Claude Code (L3)Diff: парное программирование, вы в процессе.
  • OpenHands (L5)Workflow: автономный агент, вы задаёте цель.

OpenHands как «второй Claude Code» быстро ломается: слаб на размытых продуктовых интуициях; Claude Code слаб на восьми несупervised шагах по issue. Правильно — слои: днём Claude Code на сложных местах, ночью OpenHands на очереди issues.

Измерение Claude Code (L3 · Diff) OpenHands (L5 · Workflow)
Взаимодействие Человек в сессии, шаг за шагом Цель, многоэтапная автономия
Типичная длительность 5–30 мин сессия 30 мин – часы на задачу
Сила Сложный точечный рефакторинг, согласование intent Шаблонные требования, batch-мелочи, template-фичи
Риск Сессия кончилась → полуготовое Дрейф, слишком много файлов, широкие права
Результат Diff Workflow (PR, логи, траектория шагов)
Замена друг другом? ❌ Нет ❌ Не замена Claude Code

Правило: intent PR в одном предложении → Claude Code; «закрыть issue» → OpenHands. С индексом CodeGraph в большом repo паринг часто остаётся за Claude Code; OpenHands — для темплейтных backend-задач. Оба делят MCP Context, не роль.

Какие задачи для OpenHands? (первый поисковый запрос)

Кто ищет OpenHands agent или OpenHands github, хочет понять: что надёжно делегировать? При тестах + CI рекомендуем — и пул для L5-Q02:

Тип задачи Типичный вход Ожидаемая поставка Пригодность
Bugfix GitHub issue + repro Патч + тест + PR ⭐⭐⭐⭐
Dependency upgrade «React 18→19» Lockfile + breaking fixes ⭐⭐⭐⭐
Lint cleanup Отчёт ESLint / SwiftLint Warnings пачкой, поведение без изменений ⭐⭐⭐⭐⭐
Генерация тестов Список непокрытых модулей PR с unit-тестами ⭐⭐⭐
Синхронизация документации API diff README / OpenAPI выровнены ⭐⭐⭐⭐
Scaffold Шаблон «REST endpoint» Route + каркас тестов ⭐⭐⭐⭐

Не как первая задача OpenHands: крупный рефакторинг без тестов, UX-переделка, критичная миграция схемы с бизнес-апрувом, prod-secrets. Остаётся в сессиях Claude Code с человеческим gate, затем Runner для Fact.

Как работает OpenHands (цикл агента)

Запросы How OpenHands works или OpenHands agent loop сводятся к вопросу: как из одной фразы получить merge-ready PR? Ядро — четырёхшаговый цикл Plan → Execute → Observe → Debug:

Фаза Действие Потребляет / создаёт
Plan Чтение issue, подзадачи, список файлов Context (MCP, GitHub, дерево)
Execute Патч, shell, инструменты создаёт Diff
Observe Логи test / lint / build Fact (локально или Runner)
Debug Корректировка плана или кода возврат к Execute; цикл до зелёного
OpenHands agent loop (концепт · не одноразовый pipeline)

        ┌──────────┐
        │   Plan   │  ← Context
        └────┬─────┘
             ▼
        ┌──────────┐
        │ Execute  │  → Diff
        └────┬─────┘
             ▼
        ┌──────────┐
        │ Observe  │  ← Fact (test / build / CI)
        └────┬─────┘
             │
      fail   │  pass
             ▼
        ┌──────────┐        ┌─────────────┐
        │  Debug   │ ──────▶│ Workflow OK │ → PR
        └────┬─────┘        └─────────────┘
             │
             └──── назад к Plan или Execute

Это не «более сильный чат»: архитектура OpenHands = stateful-машина задачи — каждый Observe попадает в trajectory для следующего Plan. Fix bug и lint cleanup — тот же цикл, другая точка входа в Plan. Replay задачи ниже; Docker/UI — в L5-Q02.

Сначала L0–L4, потом L5 — иначе sandbox без организационного доказательства

Мы не советуем «день один — ставим OpenHands». Порядок как в последовательности внедрения L1, плюс L5 после MCP:

  1. L0 — Cloud Mac как постоянный macOS-узел.
  2. L1 — Runner: воспроизводимый push → зелёный/красный.
  3. L2–L3 — опционально Ollama + Claude Code поверх Fact.
  4. L4 — MCP Hub + модель прав: чтение/запись с аудитом.
  5. L5 — OpenHands: многоэтапный Workflow.

Без L1 OpenHands технически может открывать PR — команда не оценивает merge-риск. Та же организационная ошибка, что «SSH зелёный, Actions красный». Без L4 растёт token surface автономного агента.

Реальный сценарий: Plan → Execute → Observe → Debug

Replay на sandbox-fork (цифры иллюстративны), сверка с циклом агента:

Цель: Issue #218 «в CSV-экспорте нет UTF-8 BOM»

  ① Чтение issue + src/export/*.ts     ~2 мин · Context
  ② План из 6 шагов                   ~1 мин · Plan
  ③ 4 файла + 1 тест                  ~8 мин · Execute
  ④ pnpm test → snapshot fail         ~3 мин · Observe · Fact
  ⑤ По логу — правка 2 файлов         ~5 мин · Debug → Execute
  ⑥ Тесты зелёные                     ~3 мин
  ⑦ PR + ссылка на issue              ~1 мин · поставка Workflow

~23 мин wall time · человек: approve цели + merge review

Шаг ④ (Observe): падение теста — вход цикла, не катастрофа. В паринге вы чините сразу; OpenHands нуждается в Observe → Debug → Fact в следующем Execute. Без зафиксированной команды теста (L1 не закреплён) цикл крутится вхолостую — снова: Runner перед OpenHands.

Концепт триггера (не install-туториал):

# Концепт: label на issue запускает автономную задачу
on:
  issues:
    types: [labeled]
if: github.event.label.name == 'agent:openhands'
run: |
  openhands run \
    --repo "${{ github.repository }}" \
    --issue "${{ github.event.issue.number }}" \
    --max-iterations 40 \
    --sandbox docker

Runner · OpenClaw · OpenHands: три имени, три роли

Компонент Stack Образ Типичное действие
GitHub Runner L1 · Fact Ноги xcodebuild, pnpm test, архив
OpenClaw Оркестрация Диспетчерская Триггеры, квитанции, аудит, ACK
OpenHands L5 · Workflow Автономный инженер Читает требование, пишет код, итерирует до PR

OpenClaw не принимает архитектурных решений — «когда запускать, как уведомлять». OpenHands не подписывает iOS-архивы — на выходе PR для review и пошаговые логи. Все три на одном Cloud Mac, но не смешивать в одном runbook.

Типичная архитектура: OpenHands self-hosted · Docker · macOS

Запросы OpenHands Mac или OpenHands self-hosted требуют топологии, не шагов установки. Минимальная продакшен-форма на Apple Silicon Cloud Mac:

OpenHands self-hosted on macOS (Cloud Mac · L0)

  GitHub(issues / webhooks / PR)
           │
           ▼
  ┌─────────────────────────────────────┐
  │  Cloud Mac · macOS · Apple Silicon   │
  │  ┌─────────────┐  ┌───────────────┐  │
  │  │ OpenHands   │  │ Claude Code   │  │  L5 + L3 (опц. тот же узел)
  │  │ (Docker)    │  │ (SSH/Terminal)│  │
  │  └──────┬──────┘  └───────────────┘  │
  │         │ sandbox workspace           │
  │         ▼                             │
  │  ┌─────────────┐  ┌───────────────┐  │
  │  │ MCP Servers │  │ Ollama (opt.) │  │  L4 · L2
  │  └─────────────┘  └───────────────┘  │
  │         │ git push                    │
  │         ▼                             │
  │  ┌─────────────────────────────────┐  │
  │  │ GitHub Runner (self-hosted)     │  │  L1 Fact
  │  └─────────────────────────────────┘  │
  └─────────────────────────────────────┘

Почему Workflow на Cloud Mac, а не на ноутбуке?

  • Длительность — задачи часто 30–90 мин; крышка закрыта = обрыв.
  • Docker — стабильный daemon; Cloud Mac 24/7.
  • Runner в том же Stack — тот же узел валидирует после push агента, меньше SSH-зелёный / Actions-красный.
  • ABI — iOS/macOS цели на Apple Silicon, не сюрпризы Linux VPS.

Минимальный старт Docker (концепт; полный compose — L5-Q02):

# Cloud Mac · OpenHands self-hosted (эскиз)
docker pull docker.all-hands.dev/all-hands-ai/openhands:0.9
docker run -d --name openhands \
  -e SANDBOX_USER_ID=$(id -u) \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v $HOME/.openhands:/.openhands \
  -p 3000:3000 \
  docker.all-hands.dev/all-hands-ai/openhands:0.9

Выделенный узел ≠ автоматическая безопасность

Cloud Mac даёт macOS ABI и круглосуточную работу; OpenHands нуждается в минимальных правах на repo (ветка бота, без prod-secrets). L6 Agent Ops / Governance дальше — аудит, policy и человеческие gates; здесь сначала закрепляем Workflow.

L5 Agent Stack: какой Cloud Mac?

После архитектуры — спецификация; ориентир из реальных комбинаций Stack:

Сценарий Рекомендация Примечание
Только OpenHands M4 · 16GB Docker + API-LLM; проверка Workflow
OpenHands + Claude Code M4 · 24GB Днём Diff, ночью Workflow
OpenHands + Ollama 7B M4 · 24GB Приватный inference; см. планирование нагрузок
OpenHands + Ollama 14B + Runner M4 Pro · 48GB 14B resident + sandbox + ежедневный macOS CI
iOS-команда M4 · 24GB+ Агент + Runner на одном узле; пик архива ~8GB+

Цепочка Workflow → Cloud Mac → спецификация: сначала ясность по L5, потом узел под Docker + опц. Ollama + Runner — не наоборот «арендовали железо и накидали tools».

Чёткие границы лучше агент-хайпа

Лучше для OpenHands (L5) Осторожно / нет
Внутренние tools, scaffolds, документация, дыры в тестах Регулируемые core-пути без человеческого gate
Чёткие issue-шаблоны, рабочие тесты Нет тестов, нет CI
Повторяемые миграции, lint batch UX-переделка с продуктовой интуицией
L1 Runner + L4 MCP policy Secrets в repo, без ротации токенов
«Agent-PR + человек мержит» Агент пушит main / auto-prod

Скрипты и сервисы — да; регулируемая запись в prod — нет. OpenHands — ускоритель инженерии, не «авто-DevOps на замену ответственности».

Решение: апгрейд Cloud Mac до Agent-платформы?

Self-check — ≥3 совпадения слева перед инвестицией в L5:

OpenHands уместен Сначала L1/L4
≥5 мелких закрытых issues в неделю Главная боль — нет macOS CI
Runner зелёный, но много ручной склейки Сессии Claude Code ещё нестабильны
Права MCP и bot-аккаунты разведены GitHub PAT с admin на всё
Sandbox и логи задач ведутся Никто не делает merge review
Cloud Mac 24GB или Ollama разведены по времени 16GB с 14B + агент + Xcode

Итог: OpenHands — не «умнее чат», а апгрейд от набора инструментов к платформенной ответственности за требование, когда Fact (Runner) и Context/policy (MCP) на месте. Иначе автоматизируете только ручную склейку, merge остаётся рискованным.

Серия L5: от решения к первой автономной задаче

Часть qid Тема Статус
· этот текст L5-Q01 Набор инструментов → Agent-платформа (R1) опубликовано
L5-Q02 OpenHands на Cloud Mac + первая автономная задача далее
L5-Q03 OpenHands vs OpenClaw подробно запланировано
L5-Q04 Runner + OpenHands: auto-PR после CI fail? запланировано
· L6 L6-Q05 Agent Ops / Governance 📅 16.06.

До L6 закройте хотя бы ② — без воспроизводимого туториала OpenHands у Hub нет landing. Общая карта в L6-Q01; серия идёт от «AI tool stack» к «AI engineering platform».

FAQ

Цикл агента?
Plan → Execute → Observe → Debug; см. как работает OpenHands.

OpenHands vs Claude Code?
Не «или-или»; см. сравнение.

Установка?
Hub без пошаговки; L5-Q02 (план 14.06.).

Self-hosted на Mac?
Да — Cloud Mac + Docker; архитектура.

Без Runner?
Запустится, не рекомендуем — сначала L1.

OpenClaw?
треугольник и заметка OpenClaw.

Спецификация?
таблица L5; только OpenHands от M4 16GB.

L5 Agent Stack · подбор

Спецификация Cloud Mac под нагрузку

Только OpenHands → M4 16GB · + Claude Code → M4 24GB · + Ollama 14B + Runner → M4 Pro 48GB. Hub закрывает L5 — L5-Q02 для первой автономной задачи.

Тарифы и спецификация Cloud Mac
L5 Agent Stack от M4 24GB