OpenHands:Cloud Mac をツール集合から Agent プラットフォームへ

Claude Code が1ファイルを直し、Runner が1回ビルドを証明したあと、誰が「要件全体」を最後まで走らせる?
シリーズスローガン:Claude Code は Diff、GitHub Runner は Fact、OpenHands は Workflow を生む。

Cloud Mac AI Stack · L5 Hub  ·  2026.06.06  ·  約14分  ·  アーキテクチャ Hub · OpenHands チュートリアルは L5-Q02

Cloud Mac 上の OpenHands 自律 Agent Workflow と多段ソフトウェア工程タスクの示意

この2週間、Stack 連載で L1 Runner(Fact)L2 Ollama(Inference)L4 MCP(Context) を順に立ててきた。読者から繰り返し聞くのは一言:「ツールは全部つながったのに、毎日まだ手でフローを繋いでいる。」 Claude Code は diff を出せ、MCP は GitHub の Context を引ける、Runner は push 後に緑になる——それでも「issue #142 を直して PR」はターミナル前に40分座り込みが残る。

それが L5 · OpenHands の問いだ。もう1本 CLI を買う話ではなく、Cloud Mac をツール集合から多段工程を自律で走らせる Agent プラットフォームへ上げる。本稿は L5-Q01 · R1 · シリーズ Hub:読者を「コーディングツール」から「Agent プラットフォーム」の認知へ運ぶ——Workflow が Stack のどこにいるか、OpenHands vs Claude Code が置き換え関係でない理由、典型タスク、OpenHands self-hosted on macOS の構成。Docker インストール手順は含まない(それは L5-Q02 の SEO ランディング)。

L5
Workflow 層
4
ステップ agent loop
24GB
Ollama 同機推奨 RAM

Cloud Mac AI Stack · シリーズスローガン(第四の輪)

Claude Code は Diff、GitHub Runner は Fact、OpenHands は Workflow を生む。

MCP が Context、Ollama が任意の InferenceWorkflow は Context / Diff / Fact を消費し、ループ内で後二者を何度も呼ぶ——一方向パイプラインではない。詳細は Stack 言語

「ツール集合」罠:どれも優秀、鎖全体はまだ人力

現場でよく見る1週間(顧客 repo で何度も確認した形):

  1. 月曜:Claude Code で API 層、MCP で GitHub issue 一覧——セッション内は順調
  2. 火曜:別マシンから push、Runner が赤——Agent の変更と CI スクリプトが揃っていないL1 実行エンジン未読だとここで繰り返す)。
  3. 水曜:手動テスト、設定変更、また Claude Code でファイル補完。
  4. 木曜:ようやく緑、だがドキュメント、マイグレーション、サンプルテストが欠ける——「コード変更」と「要件納品」が同一視されていた。

ツール集合とは:各ステップに最適ツールはあるが、「要件全体」に責任を持つ層がない。 Agent プラットフォームが足すのは、自分でタスク分解・実行・失敗からの再試行ができる Workflow 層——OpenHands は Stack でそれを担う OSS 選択肢(旧 OpenDevin 系)。

Stack 言語:Workflow と Context / Diff / Fact

全シリーズ共通の記法:Workflow を 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 / テスト) ← test / build / CI シグナル

Agent loop(Workflow 内部 · 複数回イテレーション可)
       Diff  ↔  Fact
         ↑       ↓
      Observe → 再 Plan → 再 Execute …

四つの産出物:Context · Diff · Fact · Workflow(MCP · コーディング層 · Runner · OpenHands)。Inference(L2 · Ollama)は任意で上図から外し、Agent loop と混同しない。

コンポーネント 産出 答える問い
L4 MCP Context Agent は何が見える?
L3 Claude Code Diff 今回の変更は何?
L1 GitHub Runner Fact 組織は信じられる?
L5 OpenHands Workflow 要件全体は終わった?

Workflow は「もう1つの CI job」ではなく、多段・中断再開可能なタスク状態機械:ループ内で Diff と Fact を何度も呼び、PR が渡せるまで回す。Claude Code は単ラウンド Diff が得意;OpenHands はループ全体を無人で走らせるのが得意——Context と Fact が先に敷かれている前提。

OpenHands 一分定位(百科ではない)

OpenHands は OSS の自律ソフトウェア工程 Agent プラットフォーム:サンドボックス(多くは Docker)で自然言語目標を受け、計画 → コード/コマンド → 出力読取 → デバッグを自動化し、GitHub(issue、PR、CI 状態)と接続できる。Cloud Mac AI Stack では Claude Code のペア体験も Runner の客観ビルド証明も置き換えない——その上で多段納品を編成する

「もう1つ MCP Server」との違い

MCP はコンテキスト境界を広げる(repo 読取、API 呼び出し);OpenHands はタスクの深さを広げる(次に何を呼ぶか、リトライするかを自分で決める)。L4 がなければ盲打ち;L1 がなければ「完了」は組織で受け入れられない。

OpenHands vs Claude Code:競合ではない理由

OpenHands vs Claude CodeClaude Code alternative で来る人の本音:どちらか1つで足りない? Cloud Mac AI Stack ではいいえ、そうすべきでもない——層が違い、産出物が違う:

  • Claude Code(L3)Diff:ペアコーディング、人がその場にいる。
  • OpenHands(L5)Workflow:自律 Agent、人は目標を置く。

OpenHands を「もう1つの Claude Code」にすると即ハマる:頭の中の曖昧なプロダクト感覚には弱い;Claude Code は8ステップ issue を無人では回しにくい。正解は積み上げ——昼は Claude Code で難所、夜は OpenHands が issue キューを消化。

次元 Claude Code(L3 · Diff) OpenHands(L5 · Workflow)
対話 人在、段階確認 目標駆動、多段自律
典型時間 5–30分セッション 30分〜数時間タスク
得意 複雑な一点リファクタ、意図の同期 スクリプト化要件、小改修バッチ、テンプレ feature
リスク セッション終了で半成品 暴走、ファイル過多、権限過大
産出 Diff Workflow(PR、ログ、ステップ軌跡)
OpenHands alternative? ❌ 違う ❌ Claude Code 代替ではない

経験則(契約ではない):PR で変更意図を一文で言える → Claude Code;「issue を終わらせて」→ OpenHands を検討。 大規模 repo で CodeGraph 索引があるならペア層は Claude Code のまま;OpenHands はテンプレ化されたバックエンド作業向き。両者は MCP Context を共有するが責務は共有しない

OpenHands で何ができる?(検索ユーザーの第一問)

OpenHands agentOpenHands github で来る人の本当の問い:何を任せると堅い? 以下はテスト + CI ありを前提に最初に試すタスク型——L5-Q02 チュートリアルの例プールでもある:

タスク型 典型入力 期待納品 適合
Fix bug GitHub issue + 再現手順 パッチ + テスト + PR ⭐⭐⭐⭐
Dependency upgrade 「React 18→19 に上げる」 lockfile + 破壊的変更の修正 ⭐⭐⭐⭐
Lint cleanup ESLint / SwiftLint レポート warning 一括修正、挙動不変 ⭐⭐⭐⭐⭐
Generate tests 未カバー模块リスト 単体テスト PR ⭐⭐⭐
Documentation sync API 変更 diff README / OpenAPI 同期 ⭐⭐⭐⭐
Scaffold / boilerplate 「REST endpoint 追加」テンプレ ルート + テスト骨格 ⭐⭐⭐⭐

最初の OpenHands タスクに不向き: テストなし大リファクタ、UX 大改、業務承認が要る schema 移行、本番シークレット直結。これらは Claude Code のペアセッションに残し、人のゲート後に Runner で Fact。

OpenHands の動き方(How OpenHands Works)

How OpenHands worksOpenHands architectureOpenHands agent loop で来る人が知りたいのは Docker コマンドではなく:自律 Agent が一文をマージ可能 PR にどう変える? 核心は四ステップ——Plan → Execute → Observe → Debug

段階 内容 消費する層
Plan issue 読取、サブタスク分割、ファイル一覧 Context(MCP、GitHub、repo ツリー)
Execute パッチ、shell、ツール呼び出し Diff を産出
Observe テスト出力、lint、ビルドログ Fact(ローカル test または Runner)
Debug Observe 結果で計画またはコード修正 Execute へ;未達なら loop 継続
OpenHands agent loop(概念 · 単一パイプラインではない)

        ┌──────────┐
        │   Plan   │  ← Context
        └────┬─────┘
             ▼
        ┌──────────┐
        │ Execute  │  → Diff
        └────┬─────┘
             ▼
        ┌──────────┐
        │ Observe  │  ← Fact(test / build / CI)
        └────┬─────┘
             │
      未達   │ 達成
             ▼
        ┌──────────┐        ┌─────────────┐
        │  Debug   │ ──────▶│ Workflow 完了│ → PR / 納品
        └────┬─────┘        └─────────────┘
             │
             └──── Plan または Execute へ(次ラウンド)

「もっと強い Chat を入れる」とは別物。OpenHands architecture の要は状態付きタスク機——各 Observe が trajectory に書かれ、次の Plan に使われる。Fix bug、Lint cleanup などは同じ loop の別入口。次の 実タスク再生 で1 issue を四段すべて通す;Docker と UI は L5-Q02。

L0–L4 を積んでから L5——さもないと Agent はサンドボックスで独り言

「初日から OpenHands」式のツール積み上げは推奨しない。順序は L1 投入順と同じで、MCP のあと L5:

  1. L0 — 常時稼働 Cloud Mac macOS ノード。
  2. L1 — Runner:push → 緑/赤 が再現可能。
  3. L2–L3 — 任意 Ollama + Claude Code、Fact の上でコーディング。
  4. L4 — MCP Hub + 権限モデル:Agent の読み書きを監査可能に。
  5. L5 — OpenHands:多段 Workflow。

L1 なしでも OpenHands は技術的に PR まで行けるが、マージリスクは判断不能——「Claude Code SSH は緑、Actions は赤」と同型の組織事故。L4 権限なしでは自律 Agent の token 露出が拡大;MCP セキュリティ spec 参照。

実タスク再生:Plan → Execute → Observe → Debug を1周

以下は OpenHands サンドボックス fork で再生したタスク形(数字は示意)。agent loop と照合:

目標:issue #218「CSV エクスポートに UTF-8 BOM がない」を修正

  ① issue + 関連 src/export/*.ts を読む  ~2 min · Context(MCP/Git)
  ② 6ステップ計画                       ~1 min · Plan
  ③ 4ファイル変更 + テスト1本追加       ~8 min · Execute
  ④ pnpm test → 失敗(スナップショット不一致) ~3 min · Observe · Fact
  ⑤ ログ読取 → さらに2ファイル修正      ~5 min · Debug → 再 Execute
  ⑥ 再テスト → 緑                       ~3 min
  ⑦ PR 作成、issue リンク               ~1 min · Workflow 納品

合計約23分 wall time · 人は目標承認 + 最終 merge review のみ

④(Observe)に注意:テスト失敗は災害ではなく agent loop の入力。 ペアツールではその場修正;OpenHands は Observe → Debug で Fact を次の Execute に戻す。安定テストコマンドがなければ(L1 未固定)Observe に信号がなく空転——Runner 先行の理由のひとつ。

トリガ側の概念(インストール教程ではない、GitHub 接続の説明のみ):

# 概念: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:三名、三役

L5 で最も聞かれる三角関係:

コンポーネント Stack 層 比喩 典型動作
GitHub Runner L1 · Fact 両足 xcodebuildpnpm test、アーカイブ
OpenClaw オーケストレーション(Stack 主層外) 配車席 起動順、レシート、監査、ACK
OpenHands L5 · Workflow 自律エンジニア 要件読取、コード変更、PR まで反復

OpenClaw はアーキテクチャ判断をしない——「いつ走らせ、終わったらどう通知」。OpenHands は Runner の代わりに iOS パッケージに署名しない——review 可能な PR とステップログ。三者は同一 Cloud Mac に積めるが、1つの runbook に責務を混ぜない

Cloud Mac 上の典型 OpenHands 構成(self-hosted · Docker · macOS)

OpenHands MacOpenHands self-hostedOpenHands Docker で来るエンジニアが要するのは置けるトポロジ——手順ではなく「部品の位置」。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 Workflow + L3 Diff(同機可)
  │  │ (Docker)    │  │ (SSH/端末)    │  │
  │  └──────┬──────┘  └───────────────┘  │
  │         │ sandbox workspace           │
  │         ▼                             │
  │  ┌─────────────┐  ┌───────────────┐  │
  │  │ MCP Servers │  │ Ollama (任意) │  │  L4 Context · L2 Inference
  │  └─────────────┘  └───────────────┘  │
  │         │ git push                    │
  │         ▼                             │
  │  ┌─────────────────────────────────┐  │
  │  │ GitHub Runner (self-hosted)   │  │  L1 Fact
  │  └─────────────────────────────────┘  │
  └─────────────────────────────────────┘

Workflow 層をノート PC ではなく Cloud Mac に置く理由

  • 時間 — OpenHands タスクは30–90分が普通;蓋を閉じると切れる。
  • OpenHands Docker — サンドボックスは安定 daemon が要る;24/7 Cloud Mac が向く。
  • Runner と同スタック — 変更後、同一 macOS ノードで検証、「SSH 緑・Actions 赤」を減らす。
  • ABI 一致 — iOS / macOS ターゲットは Apple Silicon 上の方が Linux VPS より驚きが少ない。

最小 OpenHands Docker 起動(概念断片;完全 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 単位の最小権限(bot ブランチ、prod secret なし)が要る。将来の L6 Agent Ops / Governance で audit、policy、人の gate——本稿は Workflow を立て、ガバナンスは次の輪。

L5 Agent Stack 推奨スペック:Workflow からどの Cloud Mac を借りるか

構成を読んだあとの自然な問い:Workflow 層に何を載せる? 実運用の積載からの選型表(契約 SLA ではない):

シナリオ 推奨構成 メモ
OpenHands Only(軽量 issue、ローカル推論なし) M4 · 16GB Docker サンドボックス + API LLM;agent Workflow 試行向け
OpenHands + Claude Code(同機ペア + 自律) M4 · 24GB 昼 Diff、夜 Workflow;CI とメモリ競合回避
OpenHands + Ollama 7B M4 · 24GB プライベート Inference + Agent;オフピークスケジュール
OpenHands + Ollama 14B + Runner M4 Pro · 48GB 14B 常駐 + サンドボックス + 日次 macOS CI;Swap リスク最小
iOS チーム(OpenHands issue + xcodebuild CI) M4 · 24GB+ Agent と Runner 同機;archive ピークで 8GB+ 確保

商業ナラティブの Workflow → Cloud Mac → スペック:先に L5 能力を確定し、Docker +(任意)Ollama + Runner を支えるノードを選ぶ——機械を先に借りてツールを後から積まない。

向き・不向き:Agent 宣伝より境界の方が重要

OpenHands(L5)向き 不向き / 慎重に
社内ツール、足場、ドキュサイト、テスト補完 規制金融 / 医療コアで人の gate なし
issue テンプレ明確、テストカバーそこそこ テストも CI もない「とりあえず動かす」repo
反復移行(依存更新、lint 一括) 強いプロダクト直感が要る UX 大改
L1 Runner + L4 MCP 権限ポリシー済み secret が repo に散在、token ローテなし
「Agent PR + 人が merge」を受け入れる Agent が main 直 push / prod 自動リリース

スクリプトと小サービス:はい;無防備な本番書き込み:いいえ。 OpenHands は工程加速器であり、免責の「自動 DevOps」ではない。

意思決定:Cloud Mac を Agent プラットフォームに上げるべきか

下の自己診断で左列 ≥3なら L5 投入;そうでなければ L1/L4 を先に。

OpenHands 可 まだ早い
週 ≥5 の「小さく完結」issue が並ぶ 主痛みが「macOS CI がない」
Runner は緑だが手作業のステップ連結が多い Claude Code セッションがまだ不安定
MCP 権限と bot アカウントが段階付け済み GitHub PAT が repo 全体 admin
サンドボックスとタスクログを維持する意思 merge review をする人がいない
Cloud Mac 24GB または Ollama オフピーク済み 16GB で 14B + Agent + Xcode 同時

結論(要約ではなく決断): OpenHands の価値は「賢い Chat」ではなく、Cloud Mac がツール集合から要件に責任を持つプラットフォームになること——ただし Fact(Runner)と Context/権限(MCP)が先に立っていること。さもないと手動連結を自動化しただけで、組織は依然 merge できない

L5 連載:意思決定から最初の自律タスクへ

qid テーマ 状態
· 本稿 L5-Q01 ツール集合 → Agent プラットフォーム(決断 R1) 公開済み
L5-Q02 Cloud Mac に OpenHands 導入 + 最初の自律タスク 次回
L5-Q03 OpenHands vs OpenClaw 分担詳説 予定
L5-Q04 Runner + OpenHands:CI 失敗後の自動 PR? 予定
· L6 延伸 L6-Q05 Agent Ops / Governance(Context→Workflow→統制) 📅 6/16

L6 閉環の前に少なくとも ② を:再現可能な OpenHands tutorial がなければ Hub にランディングがない。全スタック地図は L6-Q01;シリーズは「AI Tool Stack」から「AI Engineering Platform」へ、L6-Q05 Agent Governance が最後の輪。

FAQ

How OpenHands works / agent loop とは?
Plan → Execute → Observe → Debug;Context 消費、Diff 産出、Fact 検証——動き方参照。

OpenHands vs Claude Code — どちら?
二者択一ではない。Diff は Claude Code、多段 issue は OpenHands——比較

OpenHands tutorial / インストールは?
本 Hub に手順なし。Docker + 最初の issue→PR は L5-Q02(6/14 予定)。

Mac で self-hosted できる?
可。常時 Cloud Mac + Docker サンドボックス;典型構成

Runner なしで OpenHands?
動くが非推奨。先に L1

OpenClaw とは?
オーケストレーション vs 自律工程——三角分担OpenClaw ノート

どのスペックを借りる?
L5 Agent Stack スペック;OpenHands のみ M4 16GB、Claude Code または Ollama 7B 併用は 24GB。

L5 Agent Stack · 選型

ワークロードに合わせて Cloud Mac スペックを選ぶ

OpenHands Only → M4 16GB · + Claude Code → M4 24GB · + Ollama 14B + Runner → M4 Pro 48GB。本 Hub で Workflow 層を整理し、L5-Q02 で最初の自律タスクを通す。

Cloud Mac 料金・スペックを見る
L5 Agent Stack M4 24GB〜