OpenClaw、iOS および Android 向けコンパニオンノードアプリをリリースし、スマートフォンを自己ホスト型 AI エージェントゲートウェイに接続
本文の状態
日本語全文を表示中
詳細モードで約14分の本文を読めます。
同じ出来事の情報源
この情報源を基点に整理
MarkTechPost
OpenClaw が iOS と Android のネイティブアプリを無料公開した。これらは単体チャットボットではなく、電話をネットワークノードとして機能させ、アシスタントは別個のゲートウェイで実行する設計である。
Continue in AI NEW LAB
このニュースを、実務の判断につなげる
AI NEW LABで、試したことや先に確認したい条件を共有できます。まずはログインなしで読めます。
AI NEW LABで論点を見るSource Article
元記事を日本語で読む
本文に関係しない購読案内、埋め込み通知、サイト内プロモーションは除いています。
OpenClaw はこのほど、iOS および Android 向けのネイティブコンパニオンアプリをリリースしました。iOS アプリは「OpenClaw – AI that does things.」としてリストされています。両方のアプリは無料でダウンロード可能です。これらは単体のチャットボートではありません。それぞれのスマートフォンが、セルフホスト型のエージェントネットワークにおけるノードとなります。アシスタント自体は、別のゲートウェイ上で動作します。この分離こそが、本システムの設計の核心です。
TL;DR
OpenClaw の iOS および Android アプリは、単体のアシスタントではなく、コンパニオンノードです。
ゲートウェイがエージェントを実行し、スマートフォンはカメラ、位置情報、音声、Canvas を追加します。
ノード間はポート 18789 上の WebSocket でペアリングされ、明示的な承認を必要とします。
プライバシーに配慮したコマンドは、ホワイトリストに登録するまで無効化されます。
macOS、Linux、または Windows (WSL2) 上で動作するゲートウェイが必要です。
OpenClaw とは何か?
OpenClaw は、Peter Steinberger 氏によってコミュニティの貢献者と共に開発されたオープンソースのパーソナル AI アシスタント/エージェントです。このプロジェクトは独立しており、Anthropic とは一切関係ありません。そのコアは TypeScript で記述されています。ランタイムには Node 24(推奨)または Node 22.19 以上が必要です。ゲートウェイは macOS、Linux、または Windows (WSL2) 上で動作します。既存のチャットアプリから操作可能です。対応するチャンネルには WhatsApp、Telegram、Discord、Slack、Signal、iMessage が含まれます。エージェントはウェブ閲覧、シェルコマンドの実行、ファイルの読み書きが可能です。ホスト型、サブスクリプション型、ゲートウェイ型、またはローカルモデルとも連携します。利用者は選択したプロバイダーから API キーを取得して使用します。永続的なメモリを保持し、コミュニティ製のスキルやプラグインもサポートしています。
ゲートウェイとノードのアーキテクチャはどのように動作するのか?
ゲートウェイは単一の制御プレーンです。セッション、ルーティング、チャネル、ツール、イベントをすべて管理します。ご自身のマシンまたはサーバー上で 1 つの Gateway プロセスを実行するだけです。チャットメッセージは常にゲートウェイに届き、電話機には直接届くことはありません。ノードは、そのゲートウェイに接続するコンパニオンデバイスです。ノードはデフォルトポート 18789 の WebSocket を介して接続します。各ノードはペアリング時に role: "node" で登録されます。ノードは node.invoke を通じてコマンド表面(コマンドインターフェース)を公開します。そのコマンドファミリーには、canvas.*, camera.*, device.*, notifications.*, system.* が含まれます。ドキュメントでは明確に「ノードは周辺機器であり、ゲートウェイではない」と記されています。ローカルネットワーク上では、アプリは mDNS/Bonjour を経由してゲートウェイを発見します。リモートアクセスについては、OpenClaw は wss:// エンドポイントを持つ Tailscale の使用を推奨しています。
モバイルアプリは何を追加するのか?
電話機はエージェントに身体を与えます。ワークフローにデバイス固有のハードウェアを提供します。iOS アプリは QR コードまたはセットアップコードでペアリングされます。チャット、リアルタイムおよびバックグラウンドの Talk モード、承認機能をサポートしています。テキスト、リンク、メディアを iOS から OpenClaw へ共有できます。オプション機能にはカメラ、画面共有、位置情報、写真、連絡先、カレンダー、リマインダーが含まれます。Android アプリはスタンドアロンのゲートウェイではなく、コンパニオンノードです。ストリーミングチャット返信、画像添付、完全なセッション履歴を提供します。Talk モードでは ElevenLabs またはシステム TTS(Text-to-Speech:テキスト読み上げ)を使用します。ライブ Canvas 表面により、エージェントがダッシュボードやツールをレンダリングできます。Android では権限を一つずつ付与する必要があります。フォアグラウンドサービスによってゲートウェイ接続が生きた状態に保たれます。
iOS ノードと Android ノードの比較
CapabilityiOS — OpenClaw – AI that does thingsAndroid — OpenClaw’ node
RoleCompanion nodeCompanion node
PairingQR code or setup codeSetup code or manual host/port
ChatChat from iPhoneStreaming replies, image attachments, full session history
VoiceRealtime and background Talk modeTalk Mode (ElevenLabs or system TTS)
CanvasCanvas surfaceLive Canvas surface
Device capabilitiesCamera, screen, location, photos, contacts, calendar, remindersCamera, photos, screen capture, location, notifications, contacts, calendar, SMS, motion sensors
Action approvalsReviewable from the iPhoneManaged on the Gateway
Data collectionNone declared (App Store)None declared (Google Play)
RequirementiOS 18.0+ and a running GatewayA running Gateway on macOS, Linux, or Windows (WSL2)
Use Cases With Examples
Consider field data collection on a job site. The agent uses iOS camera capture to photograph conditions. Location tags each photo with GPS coordinates. Consider a context-aware reminder. The agent triggers a task when you reach a place. Consider an incoming notification on Android. The agent reads it and drafts a reply. Consider a live dashboard. The agent pushes a Canvas surface to your screen. Consider hands-free use. Talk Mode holds a continuous voice conversation. One caveat applies to camera and screen capture. They require the app in the foreground. Background calls return an error.
Pairing a Phone: A Minimal Walk-Through
First, run the Gateway on a supported host.
異なるブラウザを使用する
ゲートウェイホスト(macOS、Linux、または WSL2 を介した Windows)上で
npm install -g openclaw@latest
openclaw onboard --install-daemon
次にアプリを開き、検出されたゲートウェイを選択します。あるいは、手動でホストとポートを入力してください。このアプリは「node」のロールで接続し、デバイスペアリングリクエストを送信します。これをゲートウェイ CLI から承認してください。
異なるブラウザを使用する
openclaw devices list
openclaw devices approve
openclaw nodes status # ノードがペアリングされ、接続されていることを確認
プライバシー重視のコマンドはデフォルトでオフになっています。例としては camera.snap、camera.clip、screen.record などがあります。これらのコマンドは、設定ファイル内の gateway.nodes.allowCommands を通じて明示的にオプトインする必要があります。
異なるブラウザを使用する
// ~/.openclaw/openclaw.json
{
"gateway": {
"nodes": {
"allowCommands": ["camera.snap", "screen.record"],
},
},
}
deny リスト(gateway.nodes.denyCommands)は、allow リストよりも常に優先されます。
セキュリティと承認
ペアリング認証情報はデバイス上に保存されます。すべてのノード接続は、ゲートウェイに到達する前に承認が必要です。デバイスペアリング記録は、永続的なロール契約です。トークンのローテーションによって、ノードが異なるロールに昇格することはありません。カメラおよび画面キャプチャは権限管理されており、フォアグラウンドでのみ実行されます。平文の ws:// は LAN および .local ホストに限定されています。パブリックまたは Tailscale エンドポイントには、実際の wss:// TLS エンドポイントが必要です。
インタラクティブ解説
OpenClaw Gateway & Nodes — インタラクティブ解説
:root {
--bg:#fbf6f2; /* ウォームクリーム */
--card:#ffffff;
--ink:#26190f; /* ウォームのほぼ黒 */
--muted:#7c6a5e; /* ウォームのくすんだ色 */
--line:#efe2d8; /* ウォームのボーダー */
--soft:#f8efe7; /* ウォームのソフトな塗りつぶし */
--accent:#ff5a36; /* OpenClaw のサンゴ色 / ロブスター色 */
--accent-deep:#df4326; /* より濃いサンゴ色 */
--accent-soft:#ffe6dd; /* ピーチ */
--accent-bd:#ffc9b8; /* ピーチのボーダー */
--teal:#0d9488; /* "完了"状態 — サンゴ色とは区別 */
--amber:#b45309;
--amber-soft:#fdeccc;
--green:#76B900; /* Marktechpost ブランドカラー */
--code-bg:#21130f;
--code-ink:#f1e4dc;
--code-coral:#ff8a6b;
--code-green:#7ee787;
--code-blue:#ffb59e;
--code-mut:#a18a7e;
--radius:14px;
--mono:"JetBrains Mono",ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
--sans:Inter,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--sans);line-height:1.5;-webkit-font-smoothing:antialiased}
.wrap{max-width:880px;margin:0 auto;padding:22px 18px 8px}
.eyebrow{font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--accent);font-weight:600}
h1{font-size:26px;line-height:1.18;margin:6px 0 6px;letter-spacing:-.01em}
.sub{color:var(--muted);font-size:14.5px;margin:0 0 6px;max-width:640px}
.note{font-family:var(--mono);font-size:11px;color:var(--muted);background:var(--soft);border:1px solid var(--line);border-radius:8px;padding:6px 10px;display:inline-block;margin-top:8px}
.tabs{display:flex;gap:6px;margin:20px 0 14px;flex-wrap:wrap}
.tab{font-family:var(--mono);font-size:12.5px;font-weight:600;letter-spacing:.02em;border:1px solid var(--line);background:var(--card);color:var(--muted);
padding:9px 14px;border-radius:10px;cursor:pointer;transition:.15s;user-select:none}
.tab:hover{border-color:var(--accent);color:var(--accent)}
.tab.active{background:var(--accent);border-color:var(--accent);color:#fff}
.panel{display:none;animation:fade .25s ease}
.panel.active{display:block}
@keyframes fade{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:18px}
.card+.card{margin-top:14px}
.card h3{margin:0 0 4px;font-size:15px}
.card p.lead{margin:0 0 14px;color:var(--muted);font-size:13.5px}
/* アーキテクチャマップ */
.archwrap{position:relative}
.lane{display:grid;grid-template-columns:1fr;gap:14px}
.row{display:grid;gap:10px}
.row.chan{grid-template-columns:repeat(4,1fr)}
.gw-row{display:flex;justify-content:center}
.row.outs{grid-template-columns:repeat(3,1fr)}
.blk{border:1px solid var(--line);background:var(--card);border-radius:11px;padding:11px 10px;text-align:center;cursor:pointer;transition:.15s;position:relative}
.blk:hover{border-color:var(--accent);box-shadow:0 4px 14px rgba(255,90,54,.14);transform:translateY(-1px)}
.blk .t{font-size:12.5px;font-weight:600}
.blk .d{font-size:10.5px;color:var(--muted);margin-top:2px;font-family:var(--mono)}
.blk.gw{background:linear-gradient(180deg,#fff1ec,#ffe6dd);border-color:var(--accent-bd);min-width:230px;padding:14px}
.blk.gw .t{font-size:14px;color:var(--accent)}
.blk.active{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.conn{height:16px;display:flex;align-items:center;justify-content:center}
.conn svg{display:block}
.archlabel{font-family:var(--mono);font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.12em;text-align:center;margin:2px 0 -2px}
.detail{margin-top:14px;border:1px dashed var(--line);border-radius:11px;padding:13px 14px;background:var(--soft);min-height:64px}
.detail .dt{font-family:var(--mono);font-size:11px;color:var(--accent);font-weight:600;letter-spacing:.04em}
.detail .dd{font-size:13px;color:var(--ink);margin-top:4px}
/* シミュレーター */
.controls { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; margin-bottom: 14px }
@media (max-width: 560px) { .controls { grid-template-columns: 1fr } }
.ctl label { font-family: var(--mono); font-size: 11px; text-transform: uppercase; letter-spacing: .1em; color: var(--muted); display: block; margin-bottom: 6px }
.chips { display: flex; flex-wrap: wrap; gap: 6px }
.chip { font-size: 12px; font-family: var(--mono); border: 1px solid var(--line); background: var(--card); color: var(--muted); padding: 7px 11px; border-radius: 8px; cursor: pointer; transition: .12s }
.chip:hover { border-color: var(--accent); color: var(--accent) }
.chip.active { background: var(--accent-soft); border-color: var(--accent); color: var(--accent); font-weight: 600 }
.runbtn{font-family:var(--mono);font-weight:700;font-size:13px;letter-spacing:.03em;background:var(--accent);color:#fff;border:none;
padding:11px 18px;border-radius:10px;cursor:pointer;transition:.15s;display:inline-flex;align-items:center;gap:8px}
.runbtn:hover{filter:brightness(1.06)}
.runbtn:disabled{opacity:.55;cursor:default}
.pipe{display:flex;align-items:stretch;gap:0;margin:16px 0 8px;overflow-x:auto;padding-bottom:4px}
.stage{min-width:104px;flex:1;border:1px solid var(--line);border-radius:10px;padding:9px 8px;text-align:center;background:var(--card);transition:.2s;opacity:.45}
.stage .sn{font-size:11px;font-weight:600}
.stage .sc{font-family:var(--mono);font-size:9.5px;color:var(--muted);margin-top:3px;word-break:break-word}
.stage.lit{opacity:1;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.stage.done{opacity:1;border-color:var(--teal);box-shadow:none}
.arrow{display:flex;align-items:center;color:var(--line);font-size:18px;padding:0 2px;min-width:14px}
.arrow.lit{color:var(--accent)}
.console{background:var(--code-bg);border-radius:11px;padding:14px 15px;font-family:var(--mono);font-size:12px;color:var(--code-ink);
min-height:120px;white-space:pre-wrap;overflow-x:auto;border:1px solid #3a241c}
.console .c-mut{color:var(--code-mut)}
.console .c-grn{color:var(--code-green)}
.console .c-blu{color:var(--code-blue)}
.console .c-cor{color:var(--code-coral)}
.console .c-amb{color:#e3b341}
.cursor{display:inline-block;width:7px;height:14px;background:var(--code-coral);vertical-align:-2px;animation:blink 1s steps(2) infinite}
@keyframes blink{0%,50%{opacity:1}50.01%,100%{opacity:0}}
/* ペアリング */
.steps { display: flex; flex-direction: column; gap: 0 }
.step { display: flex; gap: 12px; padding: 10px 0; border-bottom: 1px solid var(--line); opacity: .4; transition: .25s }
.step:last-child { border-bottom: none }
.step.lit { opacity: 1 }
.stepnum { flex: 0 0 26px; height: 26px; border-radius: 50%; background: var(--soft); border: 1px solid var(--line); display: flex; align-items: center; justify-content: center;
font-family: var(--mono); font-size: 12px; font-weight: 700; color: var(--muted); transition: .25s }
.step.lit .stepnum { background: var(--accent); border-color: var(--accent); color: #fff }
.step.done .stepnum { background: var(--teal); border-color: var(--teal); color: #fff }
.stepbody .st { font-size: 13px; font-weight: 600 }
.stepbody .sd { font-size: 12px; color: var(--muted); margin-top: 2px }
.stepbody code { font-family: var(--mono); font-size: 11.5px; background: var(--soft); border: 1px solid var(--line); padding: 1px 5px; border-radius: 5px; color: var(--accent) }
.legend { display: flex; gap: 14px; flex-wrap: wrap; margin-top: 12px; font-size: 11px; color: var(--muted); font-family: var(--mono) }
.legend span { display: inline-flex; align-items: center; gap: 5px }
.dot { width: 9px; height: 9px; border-radius: 3px; display: inline-block }
footer{max-width:880px;margin:18px auto 0;padding:14px 18px 22px;border-top:1px solid var(--line);display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px}
footer .brand{font-family:var(--mono);font-size:12px;font-weight:700;color:var(--green);letter-spacing:.02em}
footer .fnote{font-size:11px;color:var(--muted);font-family:var(--mono)}
インタラクティブ解説
OpenClaw:スマートフォンが AI エージェントネットワークのノードとなる仕組み
ゲートウェイとノードのアーキテクチャ(※アーキテクチャ)を探求し、チャットコマンドがスマートフォンのハードウェアへ流れる様子をシミュレーションし、デバイスのペアリング手順をブラウザ上で体験できます。
概念的なシミュレーション · ローカルで実行 · 実際のゲートウェイは接続されていません
① アーキテクチャマップ
② コマンドフローシミュレーター
③ ペアリング手順ガイド
ゲートウェイが唯一の真実(ソース・オブ・トゥルース)です
任意のブロックをクリックすると、その役割を確認できます。メッセージは常にゲートウェイに届き、スマートフォンに直接届くことはありません。
チャットアプリとプラグイン
チャンネル
Telegram
チャンネル
Discord
チャンネル
iMessage
チャンネル
⬡ ゲートウェイ
セッション · ルーティング · チャンネル · イベント
ゲートウェイが提供するサーフェス
OpenClaw エージェント
ツール · メモリ
CLI / Web UI
コントロールプレーン
iOS / Android ノード
役割:"ノード"
⬡ ゲートウェイ
単一の制御プレーン。macOS、Linux、または Windows (WSL2) で実行されます。セッション、ルーティング、チャネル、ツール、イベントを管理します。1 つのゲートウェイプロセスがすべてのチャネルとすべてのノードを同時に処理します。
スマホのハードウェアにコマンドが届く様子をシミュレートする
チャネルとタスクを選択して実行してください。リクエストがゲートウェイを経由し、ノードの node.invoke コマンド表面へ流れる様子を見守ります。
1 · メッセージを送信するチャネル
Telegram
Discord
2 · エージェントのタスク
私の前にある棚を写真に撮る
私は今どこにいる?
スマホでライブダッシュボードを表示する
最新の通知を読み、返信文を作成する
image コマンドを実行
チャネル
→
ゲートウェイ
ルーティング + セッション
→
エージェント
プランニング + ツール
→
node.invoke
camera.snap
→
返信
チャットへ戻る
# 上記のオプションを選択して「実行」を押してください。
アクティブなホップ
完了
フォアグラウンド/オプトインが必要
スマホをノードとしてペアリングする
ノードはポート 18789 の WebSocket を経由して接続され、明示的な承認が必要です。手順を確認するために「再生」ボタンを押してください。
ペアリングフローを実行
1
ゲートウェイをホスト上で起動
macOS、Linux、または Windows (WSL2) で openclaw onboard --install-daemon を実行します。
2
アプリがゲートウェイを検出
同じ Wi-Fi 環境内では、アプリは mDNS/Bonjour を経由してゲートウェイを見つけます。リモート接続の場合は wss:// Tailscale エンドポイントを使用します。
3
スマートフォンからペアリングリクエストを送信
ノードは WebSocket に接続し、ロールを「node」として、かつデバイス ID を含めて送信します。
4
オペレーターがゲートウェイ上で承認
openclaw devices list → openclaw devices approve
5
ノードがペアリングされ接続完了
openclaw nodes status で「paired · connected」が表示されます。プライバシー重視のコマンドは、ホワイトリストに登録されるまで実行されません。
Marktechpost
インタラクティブ解説 · OpenClaw ゲートウェイ & ノード
/* ---------- アーキテクチャの詳細 ---------- */
var arch={
wa:["WhatsApp · チャネル","着信チャネルです。ユーザーのメッセージはゲートウェイに配信され、そこでセッションとルーティングが管理されます。"],
tg:["Telegram · チャネル","同じ単一のゲートウェイプロセスへの着信チャネルです。チャネル自体はエージェントロジックを実行しません。"],
dc:["Discord · チャネル","チャットチャネルです。OpenClaw は、1 つのゲートウェイを介して Slack、Signal、iMessage など多数のプラットフォームもサポートしています。"],
im:["iMessage · チャネル","チャットインターフェースです。すべてのチャネルは 1 つのコントロールプレーンに接続され、返信は元のチャットへ返されます。"],
gw:["⬡ ゲートウェイ","単一のコントロールプレーンです。macOS、Linux、または Windows (WSL2) で実行されます。セッション、ルーティング、チャネル、ツール、イベントを管理します。1 つのゲートウェイがすべてのチャネルとノードを担当します。"],
agent:["OpenClaw エージェント","ツールと永続的メモリを備えた推論ランタイム。
ウェブを閲覧し、シェルコマンドを実行し、ファイルの読み書きも可能です。],
cli:["CLI / Web 制御 UI","セットアップ、ペアリング承認、セッション、設定のためのオペレーター用インターフェース。ノードの承認は CLI で行います。"],
node:["iOS / Android ノード","WebSocket を介して接続し、ロールが「node」であるコンパニオンデバイスです。node.invoke を通じて canvas.*, camera.*, device.*, notifications.*, system.* を公開します。ノードは周辺機器であり、ゲートウェイではありません。"]
};
var blks=document.querySelectorAll('#arch .blk'), det=document.getElementById('archDetail');
blks.forEach(function(b){b.addEventListener('click',function(){
blks.forEach(function(x){x.classList.remove('active')});
b.classList.add('active');
var d=arch[b.dataset.k];
det.innerHTML=''+d[0]+'
+d[1]+
';
});});
/* ---------- Simulator ---------- */
var chan="WhatsApp", task="cam";
var taskMap={
cam:{cmd:"camera.snap",fam:"camera.*",label:"Photograph the shelf",fg:true,
result:'image captured · 1 attachment returned to chat'},
loc:{cmd:"location.get",fam:"location.*",label:"Get current location",fg:false,
関連記事
News to Guide
ニュースの次に確認する
発表内容を、現在の料金や仕様と照らし合わせられる関連ガイドです。
今日のまとめ
AIデイリーブリーフで今日の重要ニュースをまとめ読み