За последние две недели в серии 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).
Cloud Mac AI Stack · слоган серии (четвёртая скобка)
Claude Code производит Diff, GitHub Runner производит Fact, OpenHands производит Workflow.
MCP даёт Context; Ollama опционально — Inference. Workflow потребляет Context / Diff / Fact и снова вызывает оба в цикле — это не однонаправленный конвейер. См. язык Stack.
Ловушка набора инструментов: каждый хорош, цепочка — вручную
Типичная неделя (мы видели это в репозиториях клиентов не раз):
- Понедельник: Claude Code меняет API-слой, MCP тянет список issues — в сессии всё гладко.
- Вторник: коллега пушит с другой машины, Runner красный — никто не сверил изменения агента с CI-скриптами (без L1 Execution Engine это повторяется).
- Среда: тесты вручную, правка конфигов, новая сессия Claude Code для недостающих файлов.
- Четверг: наконец зелёный — но документация, миграции, примеры тестов не сделаны, потому что «поменять код» спутали с «закрыть требование».
Признак набора инструментов: на каждом шаге лучший инструмент, но ни один слой не отвечает за всё требование целиком. 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:
- L0 — Cloud Mac как постоянный macOS-узел.
- L1 — Runner: воспроизводимый
push → зелёный/красный. - L2–L3 — опционально Ollama + Claude Code поверх Fact.
- L4 — MCP Hub + модель прав: чтение/запись с аудитом.
- 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