Web interfaces

コントロール UI

Control UI は、Gateway によって配信される小規模な Vite + Lit シングルページアプリです。

  • デフォルト: http://<host>:18789/
  • オプションのプレフィックス: gateway.controlUi.basePath を設定(例: /openclaw

同じポート上の Gateway WebSocket と直接通信します。

実行中のセッションを監視している間、Gateway はそのエージェントのユーティリティモデルを使用して、簡潔なステータスダイジェストを生成できます。チャットでは、評価、計画の進捗、プルリクエスト、経過時間を含むカードへ展開できる、1 行のステータスピルとして表示されます。実行が停止状態になった場合や入力を必要とする場合、カードは一度だけ展開できます。/btw サイドチャットは展開されたカードより優先されます。

展開されたカードでは、実行についての短い質問も受け付けます。回答にはオブザーバーの現在のダイジェストとサニタイズされた制限付きメモのみが使用され、そのセッションのブラウザ内に保持されます。メインのエージェント実行に入ることも、中断することもありません。観察内容に回答が含まれていない場合、オブザーバーは判断できないと回答します。

最初のダイジェストが届いた後は、ヒューリスティックなライブアクティビティの代わりに、そのダイジェストが実行のサイドバーサブタイトルを管理します。完了または失敗を示す最終ダイジェストは、セッションが未読の間は表示されたままになり、その後、行は通常の作業サブタイトルに戻ります。

セッション監視はデフォルトで有効です。Settings > Appearance > Sidebar では、Gateway 全体で無効化したり、解決された小規模モデルとその出所を確認したり、自動ルーティングの選択、ユーティリティタスクの無効化、明示的な agents.defaults.utilityModel の選択を行ったりできます。対応する設定コントロールは gateway.controlUi.sessionObserver: falseagents.defaults.utilityModel: "" です。

クイックオープン(ローカル)

Gateway が同じコンピューター上で実行されている場合は、http://127.0.0.1:18789/(または http://localhost:18789/)を開きます。

ページを読み込めない場合は、まず Gateway を起動します: openclaw gateway

認証は、WebSocket ハンドシェイク中に次の方法で提供されます。

  • connect.params.auth.token
  • connect.params.auth.password
  • gateway.auth.allowTailscale: true の場合は Tailscale Serve の ID ヘッダー
  • gateway.auth.mode: "trusted-proxy" の場合は信頼済みプロキシの ID ヘッダー

Gateway 認証はデバイスのペアリングより先に実行されます。直接のループバック接続でも、トークン認証やパスワード認証は迂回されません。ダッシュボードの設定パネルは、現在のブラウザタブのセッションと選択された Gateway URL に対してトークンを保持します。パスワードは永続化されません。ペアリング後、ブラウザは後続の接続で保存済みのデバイスごとのトークンを使用できます。

オンボーディングでは通常、共有シークレット認証用の Gateway トークンが設定されます。設定済みトークンがない状態で Gateway がトークンモードで起動すると、代わりにそのプロセス用の一時的なランタイムトークンが生成されます。ランタイムトークンは設定に書き込まれないため、openclaw config get gateway.auth.token では取得できず、そのトークンを持たないループバックブラウザは拒否されます。openclaw doctor --generate-gateway-token を実行して Gateway を再起動し、設定したトークンを Control UI の設定に貼り付けます。gateway.auth.mode"password" の場合は、代わりにパスワード認証が機能します。

デバイスのペアリング(初回接続)

Gateway 認証に成功した後、新しいブラウザまたはデバイスから接続する際は通常、disconnected (1008): pairing required として表示される 1 回限りのペアリング承認が必要です。

  • 保留中のリクエストを一覧表示

    bash
    openclaw devices list
  • リクエスト ID で承認

    bash
    openclaw devices approve <requestId>
  • ブラウザが変更された認証情報(ロール、スコープ、公開鍵)でペアリングを再試行すると、以前の保留中リクエストは置き換えられ、新しい requestId が作成されます。承認する前に openclaw devices list を再実行してください。

    ペアリング済みのリモートブラウザを読み取りアクセスから書き込みまたは管理者アクセスへ切り替える操作は、暗黙の再接続ではなく、承認のアップグレードとして扱われます。OpenClaw は以前の承認を有効なまま維持し、より広範な再接続をブロックして、新しいスコープセットを明示的に承認するよう求めます。条件を満たす直接ループバックの Control UI 接続は、認証後にアップグレードを暗黙的に承認できます。

    一度承認されるとデバイスは記憶され、openclaw devices revoke --device <id> --role <role> で取り消さない限り、再承認は必要ありません。トークンのローテーション、取り消し、Paperclip / openclaw_gateway の初回実行時承認フローについては、Devices CLI を参照してください。

    モバイルデバイスをペアリングする

    すでにペアリング済みの管理者は、ターミナルを開かずに iOS/Android 接続用 QR を作成できます。

  • モバイルペアリングを開く

    Devices を選択し、Devices カードの Pair mobile device をクリックします。

  • スマートフォンを接続する

    OpenClaw モバイルアプリで SettingsGateway を開き、QR コードをスキャンします。代わりにセットアップコードをコピーして貼り付けることもできます。

  • 接続を確認する

    公式 iOS/Android アプリは自動的に接続します。Pending approval にリクエストが表示された場合は、承認する前にロールとスコープを確認してください。

  • セットアップコードの作成には operator.admin が必要です。これがないセッションではボタンが無効になります。セットアップコードには有効期間の短いブートストラップ認証情報が含まれるため、有効な間は QR とコピーしたコードをパスワードと同様に扱ってください。リモートペアリングでは、Gateway が wss:// に解決される必要があります(たとえば、Tailscale Serve/Funnel 経由)。通常の ws:// は、ループバックおよびプライベート LAN アドレスに限定されます。セキュリティとフォールバックの詳細については、ペアリング を参照してください。

    個人 ID(ブラウザローカル)

    Control UI は、共有セッションでの帰属を示すため、送信メッセージに付加されるブラウザごとの個人 ID(表示名とアバター)をサポートします。これは現在のブラウザプロファイルに限定されたブラウザストレージに保存され、他のデバイスには同期されません。また、送信したメッセージに含まれる通常のトランスクリプト作成者メタデータを除き、サーバー側には永続化されません。サイトデータを消去したりブラウザを切り替えたりすると、空の状態にリセットされます。

    アシスタントのアバター上書きも同じブラウザローカルの方式に従います。アップロードされた上書きは、Gateway が解決した ID にローカルで重ねられ、config.patch を経由して往復することはありません。共有の ui.assistant.avatar 設定フィールドは、フィールドへ直接書き込む非 UI クライアントでも引き続き利用できます。

    ランタイム設定エンドポイント

    Control UI は、Gateway の Control UI ベースパスを基準に解決される /control-ui-config.json からランタイム設定を取得します(たとえば、ベースパス /__openclaw__/ の下では /__openclaw__/control-ui-config.json)。このエンドポイントは、HTTP サーフェスの他の部分と同じ Gateway 認証によって保護されます。未認証のブラウザは取得できず、取得を成功させるには、有効な Gateway トークンまたはパスワード、Tailscale Serve ID、あるいは信頼済みプロキシ ID が必要です。

    Gateway ホストのステータス

    Settings → General を開くと、Gateway マシン、LAN アドレス、オペレーティングシステム、ランタイム、稼働時間、CPU 負荷、メモリ、状態ボリュームのディスク容量を表示する Gateway Host カードを確認できます。このカードは表示中、operator.read スコープを必要とする system.info Gateway RPC を通じて 10 秒ごとに更新されます。古い Gateway およびそのスコープを持たない接続では、カードは表示されません。

    言語サポート

    Control UI は初回読み込み時に、ブラウザのロケールに基づいてローカライズされます。後で変更するには、Settings -> General -> Language を開きます(選択項目は Appearance の下ではなく、General ページにあります)。

    • サポートされるロケール: enardeesfafrhiiditja-JPkonlplpt-BRruthtrukvizh-CNzh-TW
    • 英語以外の翻訳は、ブラウザで遅延読み込みされます。
    • 選択したロケールはブラウザストレージに保存され、今後のアクセス時に再利用されます。
    • 翻訳キーがない場合は英語にフォールバックします。

    ドキュメントの翻訳も同じ英語以外のロケールセットに対して生成されますが、ドキュメントサイトに組み込まれた Mintlify の言語選択には、Mintlify が受け付けるロケールコードのみが表示されます。タイ語(th)とペルシャ語(fa)のドキュメントも公開リポジトリには生成されますが、Mintlify がそれらのコードをサポートするまでは、選択項目に表示されない場合があります。

    外観テーマ

    Appearance パネルには、組み込みの Claw、Knot、Dash テーマ(デフォルトは Claw)に加えて、ブラウザローカルの tweakcn インポートスロットが 1 つあります。テーマをインポートするには、tweakcn エディターを開き、テーマを選択または作成して Share をクリックし、コピーしたリンクを Appearance に貼り付けます。インポーターは、https://tweakcn.com/r/themes/<id> レジストリ URL、https://tweakcn.com/editor/theme?theme=amethyst-haze のようなエディター URL、相対 /themes/<id> パス、生のテーマ ID、amethyst-haze などのデフォルトテーマ名にも対応しています。

    インポートしたテーマは現在のブラウザプロファイルにのみ保存されます。Gateway 設定には書き込まれず、デバイス間でも同期されません。インポートしたテーマを置き換えると、1 つのローカルスロットが更新されます。インポートしたテーマが有効な状態でそれを消去すると、Claw に戻ります。

    Appearance には Text size 設定もあります。これはチャットテキスト、コンポーザーテキスト、ツールカード、チャットサイドバーに適用されます。また、モバイル Safari がフォーカス時に自動ズームしないよう、テキスト入力を 16px 以上に保ちます。

    テーマ、テーマモード、テキストサイズ、言語、チャット表示の設定は Gateway 設定(ui.prefs)を通じて同期されるため、デバイス間で引き継がれ、エージェントは承認ゲートを通じて変更できます。接続中のクライアントは、Gateway の config.changed 通知を介して変更を即時に適用します。各ブラウザーは即時起動用のローカルミラーを保持します。設定を書き込めないクライアント(閲覧者スコープ、オフライン)では、変更はそのデバイス内にのみ保持されます。設定リファレンスを参照してください。

    OpenClaw のシステム管理

    Settings → Ask OpenClaw を開き、システムのセットアップおよび修復エージェントと対話します。オンボーディング以外では、このページにアクセスするたびに、閉じることができるイベントチップが最大 1 つ表示されます。通常の Gateway 通信には反応せず、設定リローダーが無効、設定済みチャネルの切断または劣化、チャネルプローブの失敗、チャネル認証情報の利用不能を報告するヘルススナップショットにのみ反応します。新しいイベントが保留中のチップを置き換えるのは、より重大な場合に限られます。チップを閉じるか使用すると、そのアクセス中はイベントプロンプトが表示されなくなります。チップをクリックすると、診断の質問が実際の openclaw.chat メッセージとして送信されるため、トランスクリプトにリクエストが記録され、OpenClaw が診断を実行します。オンボーディング中にこれらのイベントチップが表示されることはありません。

    Plugin の管理

    サイドバーで Plugins を開くか、設定済みの Control UI ベースパスを基準とする /settings/plugins を使用すると、Control UI から離れずに Plugin を参照および管理できます。たとえば、ベースパスが /openclaw の場合は /openclaw/settings/plugins を使用します。このページは、すべてのオプション Plugin が無効な場合でも常に利用できます。

    Plugins は、4 つのタブを備えたハブです。InstalledDiscover では /settings/plugins にある Plugin コードを管理し、Skills では /skills にあるエージェント別の Skills マネージャーを提供し、Workshop では /skills/workshop にある Skill Workshop の提案レビューを提供します。各タブは固有の URL を保持し、サイドバーではすべてのタブが 1 つの Plugins 項目として表示されます。

    Installed タブには、ローカルの全インベントリがカテゴリ別にまとめられ、概要件数とともに表示されます。各行から詳細ビューを開けます。オーバーフロー()メニューでは Plugin の有効化または無効化ができ、外部からインストールした Plugin には Remove も表示されます。また、設定済みの MCP サーバーが一覧表示され、その場で追加、無効化、削除できます。同じサーバー操作は Settings → MCP にもあります。Discover タブはストアです。OpenClaw に含まれるおすすめ Plugin、公式の外部 Plugin、人気サービス向けのワンクリック MCP コネクターが表示されます。検索ボックスに入力すると ClawHub がその場で検索され、ダウンロード数とソース検証バッジを含む ClawHub から セクションが追加されます。ディープリンクでは /settings/plugins?tab=discover を使用してストアを直接開けます。

    Skills タブには、選択したエージェントを対象とする Skills の状態レポート、有効化/無効化トグル、API キー入力、その場での ClawHub Skills 検索があります。Workshop タブには、Skills の提案に対する Skill Workshop ボードと本日のレビューの流れがあります。Skills のアイデアを探す は、内容のあるセッションを新しいものから古いものへ、範囲を限定してレビューし、結果を保留中の提案として残します。パネルには累積カバレッジが表示されます。以前の作業をスキャン は保存済みカーソルから続行し、古い履歴をすべて処理すると 新しい作業をスキャン に変わります。自律的な自己学習が無効でも履歴を手動でレビューでき、選択したエージェントに設定されているモデルが使用されます。

    同梱 Plugin はすでに Gateway 上に存在するため、Install ではなく Enable または Disable が表示されます。たとえば、Workboard は OpenClaw に含まれていますがデフォルトでは無効なため、操作は Enable です。同梱 Plugin は削除できず、無効化のみ可能です。

    カタログの読み込みと ClawHub の検索には operator.read が必要です。Plugin のインストール、有効化、無効化、削除、および MCP サーバーの変更には operator.admin が必要です。読み取り専用オペレーターの場合、これらの操作は無効のままです。

    ClawHub からのインストールは Gateway を経由し、Gateway が仲介する他のインストールと同じ信頼性、整合性、Plugin インストールポリシーのチェックが適用されます。Plugin コードのインストールまたは削除には Gateway の再起動が必要です。インストール済み Plugin の有効化または無効化は、その Plugin と現在の Gateway ランタイムが対応していれば再起動なしで適用できます。対応していない場合は、再起動が必要であることが UI に表示されます。OAuth を使用する MCP コネクターを追加した後は、CLI から 1 回だけ openclaw mcp login <name> を実行する必要があります。

    このページは意図的に、インベントリ、検出、インストール、有効化、削除に重点を置いています。任意の npm、git、ローカルパスのソース、更新、高度な Plugin 設定には、openclaw plugins を使用してください。

    アプリと拡張機能

    サイドバーの More メニュー、コマンドパレット、またはサイドバーのエージェントメニュー(Get the apps)から Apps を開くか、設定済みの Control UI ベースパスを基準とする /apps を使用します。このページには、OpenClaw のすべてのコンパニオン環境へのインストールリンクがまとめられています。iOS および Android アプリ、それらに同梱される Apple Watch および Wear OS コンパニオン、macOSWindowsLinux デスクトップアプリ、Chrome 拡張機能ClawHub を備えたアプリ内 Plugins ハブ、Discord コミュニティとドキュメントが含まれます。

    サイドバーのナビゲーション

    サイドバーでは、すべての項目がエージェントを中心に整理されています。上部の識別情報行はアクティブなエージェントです。その下の Pages セクションは Home(エージェントの継続的なメインセッションで、未読または実行中の状態がバッジで表示されます)から始まり、固定された移動先(デフォルトでは AutomationsPlugins)が続きます。Pages ヘッダーのカスタマイズコントロールを押すと、Usage、Plugin が提供するタブ、Edit pinned items を含む、その他すべての移動先を表示するメニューが開きます。ナビゲーション領域を右クリックすると、固定項目エディターが直接開きます。下部のセッション一覧は複数のゾーンに分かれます。Threads にはエージェントのチャットセッションが表示されます(メインセッションは Home の背後に留まり、そのセッションが生成したセッションは最上位スレッドとしてここに表示され、名前付きスレッドには種類のプレフィックスが付きません)。Groups にはグループおよびルームの会話が表示されます。Coding には、管理対象ワークツリーまたは実行 Node に関連付けられたセッション(各行に repo ⎇ branch の行と Node ホストが表示されます)、ACP を使用するハーネスセッション、Codex/Claude CLI カタログが表示されます。Coding は初回実行時には折りたたまれており、選択した状態が記憶されます。折りたたまれたヘッダーにも実際の件数が表示され、内部のセッションが動作中の場合は実行中インジケーターが表示されます。カスタムグループ(セッションの category)と Pinned の行は Threads の上に配置され、セッションをカスタムグループに割り当てると、自動ゾーン分類より常に優先されます。Threads ヘッダーには並べ替えコントロール(Created または Last updated、Group by、Active、Archived、All を選べる永続化された Status フィルター)と、新しいセッションページを開く + があります。アーカイブ済みの行はインラインのまま、アーカイブ記号付きで薄く表示されます。未読または注意状態には影響せず、系統の昇格対象にもなりません。セッションを開くと選択ハイライトが移動しますが、行の順序は変わりません。最近の子実行がある親セッションには、展開アイコンと子の件数が表示されます。展開すると、サイドバーを離れずにネストされた子セッション、実行中または終了済みの状態、ランタイムを確認できます。子を選択するとそのチャットが開き、祖先へのパスが自動的に表示されます。子の行はルートのグループ化、固定、ドラッグ、複数選択、ページネーションの対象外です。折りたたまれたゾーンは表示ページの上限を消費しません。最後に読んだ後で新しいアクティビティが発生したセッションには未読ドットが表示され、そのセッションを開くと既読になります。エージェントは、有効期限の短いステータス行を公開し、厳選された琥珀色のアイコンで任意に注意を求めることもできます。この宣言は、セッションを開く、次のメッセージを送信する、明示的にクリアする、または TTL が切れると解除されます。クラウドワーカーのライフサイクル状態には地球儀バッジが使用されます。ローカルおよび再取得されたセッションでは、ローカル実行がデフォルトのため配置バッジが省略されます。各ルートセッション行にはコンテキストメニュー(ケバブボタンまたは右クリック)があり、Pin/Unpin、Mark as unread/read、Rename、Fork、Move to group(New group と Remove from group を含む)、Archive または Unarchive、Delete を実行できます。タッチレイアウトでは、直接操作できる固定ボタンとメニューコントロールが常に表示されます。Cmd/Ctrl キーを押しながらクリックするとルート行の複数選択が切り替わり、Shift キーを押しながらクリックすると表示順に沿って選択範囲が拡張されます。選択済みの行でメニューを開くと、選択したすべてのセッションに適用される一括操作(Mark N as unread/read、Move N to group、Archive N、Delete N)が表示され、一括削除では確認が 1 回だけ行われます。ルートセッションを Pinned にドラッグすると固定でき、カスタムグループにドラッグすると移動できます。カスタムグループのヘッダーは、折りたたみ、展開、ドラッグによる並べ替えが可能です。グループ名と順序は Gateway(sessions.groups.*)に保存されるためブラウザー間で引き継がれますが、折りたたみ状態はブラウザープロファイルに保存されます。グループヘッダーにもメニュー(ケバブボタンまたは右クリック)があり、Rename group、New group、Delete group を実行できます。グループの名前変更または削除は、アーカイブ済みのものを含むすべてのメンバーセッションをサーバー側で更新します。グループを削除してもセッションは保持され、Threads に戻されます。

    新しいセッションページ

    サイドバーのセッション一覧ヘッダーにある + を押すと、/new に全ページの下書きが開きます。最初のメッセージを送信するまで何も作成されません。統合された Place ピッカーでは、作業フォルダーを選択し、管理者オペレーターの場合は実行先も選択します。実行先には Gateway · localsystem.run を公開するペアリング済み Node、または利用可能なクラウドプロファイルがあります。フォルダーのデフォルトはエージェントのワークスペースです。別の Gateway 絶対パスを使用するには operator.admin が必要ですが、Git チェックアウトでなくても直接実行できます。選択した Gateway フォルダーが Git チェックアウトの場合、同じピッカーで任意の Worktree 分離を選択できます。これには worktrees.branches に基づくベースブランチピッカー(fetch は行いません)と、任意のワークツリー名(ブランチは openclaw/<name> になります)が含まれます。クラウドワーカーでは、この管理対象ワークツリーパスが必須です。ペアリング済み Node では表示されません。コンポーザーのフッターでは、新しいセッションのモデルと推論レベルを選択します。Incognito トグルは Web 専用スレッドを作成し、そのセッション項目、トランスクリプト、Compaction の状態は Gateway が再起動するまでメモリ内に保持されます。OpenClaw は自動メモリフラッシュも省略します。エージェントは通常のツールを保持するため、明示的な保存リクエストやツールによるファイル書き込みではデータを永続化できます。モデルプロバイダーは引き続きメッセージを処理し、コンテンツを含まない監査メタデータも引き続き記録されます。クラウド起動では、セッションをワーカーにディスパッチする前に、モデルと推論の選択内容が永続化されます。

    マルチユーザー Gateway では、管理者スコープの接続のみがシークレットスレッドを作成または表示できます。また、他のセッションは、エージェントのセッションツールやトランスクリプト検索を通じてそれらにアクセスできません。シークレットモードが保護するのは、ストレージと Gateway が仲介する他のユーザーからです。ライブセッションを常に監視できる Gateway の所有者またはプロセスオペレーターからは保護されません。

    Browse folders を押すと、Place ピッカー内のインラインディレクトリブラウザーが開きます。このブラウザーは管理者専用の fs.listDir メソッドを使用し、選択した Gateway または Node が対象になります。Gateway と参照機能を持つ Node ではファイルシステムが一覧表示されます。fs.listDir を持たない実行対応 Node でも、入力された絶対パスは受け付けます。最近使用した場所からは、ホスト間でパスを持ち越すことなく、フォルダーとそれを所有する Node をまとめて復元できます。送信すると、最初のメッセージを指定して sessions.create が呼び出されます。これにより、同じラウンドトリップで実行が開始され、UI は新しいセッションのチャットに移動します。Gateway がセッションを作成したものの最初の送信を拒否した場合、チャットは再読み込み後もプロンプトとエラーを保持します。Retry は別のセッションを作成せず、すでに作成済みのセッションを通じて送信します。

    Settings 内の専用サイドバーには Ask OpenClaw があり、設定セクションをすばやく検索するための Search settings フィールドが先頭に表示されます。

    デスクトップ Web では、コンテンツ領域の左上に固定されたコントロール群(macOS のタイトルバーストリップに相当する Web 版)に、サイドバーの折りたたみ切り替え(⌘B)とコマンドパレット検索ボタン(⌘K)があります。サイドバー上部のエージェント ID 行をクリックするとエージェントメニューが開き、ホームを選ぶとメインセッションが開きます。失敗または期限超過した Cron ジョブ、期限切れ間近または期限切れのモデル認証など、対応が必要な項目がある場合は、コンパクトな注意チップがサイドバーフッターの上に表示され、クリックするとその項目を管理するページに移動します。ID 行には、エージェントのアバター(ID 画像または絵文字)、名前、接続状態を示すドット、リアルタイムのサブタイトルが表示されます。エージェント単位のメニューには、インラインのエージェント切り替え(マルチエージェント構成)、新しいエージェント、「このエージェントで何ができますか?」、エージェント設定があります。エージェントが 10 個を超える一覧にはフィルターフィールドが表示され、ピン留めされたエージェントが先頭に並びます。エージェントのピン留めや解除は「エージェント」設定ページで行い、ピン留めの状態はブラウザプロファイルに保存されます。エージェントを選択すると、チャットに加えて、使用状況、自動化、タスク、ワークボード、セッションの対象がそのエージェントに限定されます。対象が限定された各ページには、限定を解除するための すべてのエージェント を含む エージェント コントロールがあります。これにより具体的なチャットエージェントを変更せずに共有ページの対象範囲を広げられ、セッションへの直接リンクは引き続き対象のセッションを開きます。「エージェント」設定ページは独自の ?agent= 選択を保持し、共有ページの対象範囲には追従しません。フッターは横幅いっぱいの単一の ID カードで、オフラインでも利用でき、最後に確認されたアカウント名の下に 再接続中… と表示されます。このカードを選ぶとアプリ/アカウントメニューが開きます。プロファイル ID ヘッダーに続いて、設定使用状況、モバイルのペアリング、アプリを入手ヘルプ(ヘルプ、Discord、ドキュメント、変更履歴)、必要な場合のオフライン再試行アクション、バージョン/ビルドチップ、カラーモード切り替えが表示されます。ビルドチップを選ぶと「OpenClaw について」ページが開きます。Gateway がソースチェックアウトの main 以外のブランチから実行されている場合、フッターにはそのブランチ名も赤色で表示されるため、リリース版ではない Gateway であることが一目で分かります(リリース版のインストールでは表示されません)。Apple プラットフォームでは Shift-Command-Comma、それ以外では Ctrl-Shift-Comma を押すと、ブラウザ標準の Command-Comma ショートカットを上書きせずに 設定 が開きます。サイドバーを折りたたむと(⌘B またはコントロール群の切り替え)、サイドバーは完全に非表示になり、ワークスペースが全幅になります。折りたたみ中も左上のコントロール群には展開切り替えと検索が残り、新しいスレッドのボタンが追加されます。これは macOS アプリのタイトルバーにネイティブに配置されているものと同様です。デスクトップではサイドバーが唯一のナビゲーション要素であり、トップバーはありません。狭いビューポートでは、サイドバーの代わりにスライドオーバードロワーが使用され、コンパクトなヘッダー行の背後に配置されます。このヘッダー行には、ドロワー切り替え、ブランド、コマンドパレット検索があります。スマートフォンでは、チャットがこのナビゲーション行をタイトルバーに取り込み、セッションタイトルの横にメニューと検索コントロールを表示します。macOS アプリでは、独立したヘッダー行によってタイトルバーの余白がウィンドウコントロール横の単一のコンパクトなストリップに統合されます。ナビゲーションには通常のブラウザ履歴が使用されるため、ブラウザの戻る/進むボタンで履歴を移動できます。macOS アプリではさらに、ウィンドウコントロールの横にネイティブのサイドバー切り替えとトラックパッドのスワイプジェスチャが追加されます。サイドバーの展開中は右端に戻る/進むボタンが表示され、折りたたみ中はネイティブ検索(コマンドパレット)と新しいセッションのボタンが表示されます。

    保留中の承認も、サイドバーフッターの上に注意チップとして表示されます。 選択すると、その項目を管理する「承認」ページが開きます。

    現在できること

    チャットとトーク
    • Gateway WS(chat.historychat.sendchat.abortchat.inject)経由でモデルとチャットできます。アーカイブ済みセッションでは入力欄が無効のままとなり、会話を続ける前に アーカイブ解除 アクションを含むバナーが表示されます。
    • チャット履歴を更新すると、メッセージごとのテキスト上限が設定された、範囲の限定された最近のウィンドウが要求されます。そのため、大規模なセッションでも、チャットが利用可能になる前にブラウザがトランスクリプト全体のペイロードをレンダリングする必要はありません。
    • 公開 GitHub Issue またはプルリクエストのリンクにマウスポインターを合わせるか、キーボードでフォーカスすると、その状態、タイトル、作成者、最近のアクティビティ、コメント、変更統計が表示されます。接続中の Gateway は、UI がリモート Gateway を使用している場合も含め、リンク先を変更せずに公開メタデータを取得してキャッシュします。Gateway は、リポジトリが公開されていることを確認した後、利用可能であれば GH_TOKEN または GITHUB_TOKEN を使用します。それ以外の場合は、キャッシュ期間を長くして GitHub の匿名 API を使用します。
    • ブラウザのリアルタイムセッションを通じて会話できます。OpenAI は直接 WebRTC を使用し、Google Live は制限付きの使い捨てブラウザトークンを WebSocket 経由で使用し、バックエンド専用のリアルタイム音声 Plugin は Gateway リレートランスポートを使用します。動画対応のブラウザセッションでは、設定でデバイスローカルのカメラを選択したり、ライブプレビューからカメラを切り替えたりできます。ブラウザは、カメラ映像を Gateway 経由でストリーミングせず、リアルタイムプロバイダー向けに JPEG フレームをキャプチャします。クライアント所有のプロバイダーセッションは talk.client.create で開始され、Gateway リレーセッションは talk.session.create で開始されます。リレーはプロバイダーの認証情報を Gateway 上に保持しながら、ブラウザがマイクの PCM を talk.session.appendAudio 経由でストリーミングします。また、openclaw_agent_consult プロバイダーのツール呼び出しを talk.client.toolCall 経由で転送し、Gateway ポリシーと、構成されたより大規模な OpenClaw モデルで処理します。さらに、実行中の音声操作を talk.client.steer または talk.session.steer 経由でルーティングします。
    • チャットでツール呼び出しとリアルタイムのツール出力カードをストリーミングできます(エージェントイベント)。ツールアクティビティは種類に応じた行としてレンダリングされます。シェルコマンドでは構文が強調表示されたコマンドとターミナル形式の出力が表示され、対応している編集および書き込み呼び出しでは範囲を限定したインライン差分、利用可能な場合は行番号、+added -removed 統計が表示されます。また、連続する呼び出しは「13 個のコマンドを実行し、6 個のファイルを読み取り、9 個のファイルを編集しました」のような概要にまとめられます。実行中は、最新の実行中呼び出しの名前がグループヘッダーに表示されます。行を展開すると、残りの引数と生の出力を確認できます。
    • 複雑なツール呼び出し(長いシェルコマンド、引数の多い Plugin ツール)に対する任意の AI 目的タイトル。gateway.controlUi.toolTitles: true で有効にできます(デフォルトはオフ)。タイトルは、標準のユーティリティモデルルーティングを通じて、バッチ処理される chat.toolTitles メソッドから生成されます。明示的な utilityModel(他のユーティリティタスクと同様にオペレーターが選択したプロバイダー)があればそれを使用し、なければセッションプロバイダーが宣言した小規模モデルのデフォルトを使用し、エージェントごとに Gateway 側でキャッシュします。オプトインが無効な場合、または利用可能な低コストモデルがない場合、行には決定論的なラベルが維持され、モデル呼び出しは行われません。
    • モデルが提案した一時的なフォローアップタスクを開始または破棄できます。提案を承認すると、提案されたプロンプトを使用する新しい管理対象ワークツリーセッションが開きます。
    • 既存の session.tool/ツールイベント配信から取得したリアルタイムのツールアクティビティを、ブラウザローカルかつ秘匿化優先で要約する「アクティビティ」タブ。
    チャンネル、セッション、メモリ
    • チャンネル:組み込みおよび同梱/外部 Plugin チャンネルの状態、QR ログイン、チャンネルごとの構成(channels.statusweb.login.*config.patch)。
    • チャンネルプローブの更新では、時間のかかるプロバイダーチェックが完了するまで以前のスナップショットを表示し続け、プローブまたは監査が UI の時間制限を超えた場合は部分的なスナップショットとしてラベル付けします。
    • スレッド(/sessions にあるワークスペースページで、隣に ワークツリー タブがあります):デフォルトでは構成済みエージェントのセッションを一覧表示し、頻繁に使用するセッションのピン留め、名前変更、非アクティブなセッションのアーカイブまたは復元、古くなった未構成エージェントのセッションキーからのフォールバック、セッションごとのモデル/思考/高速/詳細/トレース/推論のオーバーライド適用ができます(sessions.listsessions.patch)。3 通りの アクティブ/アーカイブ済み/すべて フィルターで、このページとサイドバーの両方を制御します。「すべて」ではアーカイブ済みの行が薄く表示され、明示的にラベル付けされます。アーカイブ済みセッションではトランスクリプトが保持され、自動的に削除されることはなく、明示的にアーカイブ解除または削除されるまで保管されます。最後に読まれてからアクティビティがあったアクティブなセッションの行には未読ドットが表示され、未読にする/既読にするアクションがあります(sessions.patch { unread })。また、トランスクリプトを新しいセッションに分岐するフォークアクションもあります(sessions.create { parentSessionKey, fork: true })。テーブル上部の概要タイルには、読み込まれた一覧の概要(セッション数、実行中の処理、未読セッション、合計トークン数、利用可能な場合はアーカイブ数)が表示されます。各行には種類を示すグリフと実行中を示すドットがあり、状態はシンプルなドットとラベルで表示されます。セッションからトークン数とコンテキストサイズが報告されている場合、「トークン」列にはコンテキストウィンドウの使用量メーターが表示されます。行の管理アクションは、サイドバーのセッションメニューと同じ内容の行ごとのメニュー(ケバブボタンまたは右クリック)にあり、行のドロワーには他のセッション詳細とともにエージェントランタイムと実行時間が表示されます。
    • ネイティブの Claude および Codex サイドバーカタログは、一度に 1 台のホストからストリーミングされ、その後、Node の接続状態が変化したとき、ページにフォーカスしたとき、および表示中は最大 30 秒ごとに再調整されます。カタログの変更により、より早いフォローアップ処理がトリガーされるため、ネイティブツールで作成されたセッションは Control UI を再読み込みしなくても表示されます。Claude Desktop の行では、ローカルのカスタムグループラベルが存在する場合はそれも保持されます。OpenClaw は Desktop のローカルストアからそのマッピングを読み取りますが、書き込むことはありません。
    • セッションのグループ化:「グループ化」コントロールを使用すると、セッションテーブルをカスタムグループ、チャンネル、種類、エージェント、または日付ごとのセクションに整理できます。カスタムグループは sessions.patchcategory)を介してセッションごとに保持されるため、メッセージチャンネル(Discord、Telegram、WhatsApp、...)から開始されたセッションも分類できます。行をセクションにドラッグするか、行ごとのグループセレクターを使用してグループを割り当て、「新しいグループ」アクションでグループを作成できます。
    • メモリ(選択したエージェントを対象とする「エージェント」ページのタブ):Dreaming の状態、有効化/無効化の切り替え、Dream Diary リーダー(doctor.memory.statusdoctor.memory.dreamDiaryconfig.patch)。
    • メモリのインポート(/memory-import、「エージェント」ページの「メモリ」タブからアクセス):ローカルの Claude Code 自動メモリ、Codex 統合メモリ、または Hermes メモリファイルをプレビューし、選択したエージェントのワークスペースにコピーできます(migrations.memory.planmigrations.memory.apply)。
    • オンボーディング時のメモリ取り込み案内:Control UI がオンボーディングモード(?onboarding=1、Linux コンパニオンアプリが初回インストール後に使用)で開くと、検出されたメモリを同じ計画/適用フローでインポートするための 1 ページのダイアログが表示されます。スキップした場合は、後で設定ページから実行できます。
    Cron、タスク、プラグイン、Skills、デバイス、実行承認
    • 自動化(Cron ジョブ):自動化数、失敗数、スケジューラーの状態、次回起動を示す統計カードが、「自動化」タブと「実行履歴」タブの切り替えの上に表示されます。「自動化」タブには、フィルター可能なテーブル(すべて/有効/一時停止、検索、スケジュールおよび前回実行フィルター、行ごとのアクションメニュー)でジョブが一覧表示され、その下に開始用の候補が表示されます。「実行履歴」タブには、すべての自動化にわたる最近の実行が表示されます(cron.*)。
    • タスク:リンクされたセッションとキャンセル機能を備えた、実行中および最近のバックグラウンドタスクのライブ台帳(tasks.*)。チャットの「バックグラウンドタスク」レールでは、実行中と完了済みの作業がグループ化されます。行を選択すると、範囲が限定されたプロンプトと出力、またはエラーの概要を確認できます。
    • プラグイン:インストール済み一覧と厳選されたストアの閲覧、ClawHub の検索、プラグインコードのインストールと削除、インストール済みプラグインの有効化または無効化を行えます(plugins.*)。MCP サーバーの行では、設定メソッドを通じて mcp.servers を編集します。
    • Skills:状態確認、有効化/無効化、インストール、API キーの更新(skills.*)。
    • デバイス:1 つの一覧に、ペアリング済みデバイスのレコード、Node カタログ、ライブプレゼンスが統合されます(device.pair.listnode.listsystem-presence)。Gateway ホストは先頭に固定されます。ペアリング済みクライアントには、接続状態、ロール、トークン、機能、コマンドが表示されます。重複したペアリングは展開可能なグループにまとめられ、古い N 件をクリーンアップでは、管理者が確認したオフラインの重複のうち、自動承認されたもの(無通知のローカル、信頼済み CIDR、または SSH 検証済み)または承認の来歴が記録される以前のものを一括削除します。エントリを削除でき(node.pair.removedevice.pair.remove)、デバイスのペアリングと Node の再承認はインラインで処理され(device.pair.*node.pair.approve/reject)、同じカードからモバイル設定コードを作成できます。
    • 実行承認:exec host=gateway/node の Gateway または Node の許可リストと確認ポリシーを編集します(exec.approvals.*)。
    設定
    • ~/.openclaw/openclaw.json を表示/編集します(config.getconfig.set)。
    • 設定ナビゲーションは「OpenClaw に質問」から始まり、注意すべき領域ごとにページがグループ化されます。上部には「一般」「外観」「通知」、接続には「接続」「チャンネル」「コミュニケーション」「デバイス」、エージェントとツールには「エージェント」「AI とエージェント」「モデルプロバイダー」「MCP」「自動化」「ラボ」、プライバシーとセキュリティには「セキュリティ」「承認」、システムには「インフラストラクチャ」「詳細設定」「デバッグ」「ログ」「OpenClaw について」があります。「一般」は、モデルの既定値、言語、Gateway ホストの統計を備えた簡潔なハブです。その他の各設定は、それぞれ 1 つのページにのみ配置されます。
    • プライバシーとセキュリティ:スキーマに基づく security/approvals セクションの上に、Gateway 認証、実行ポリシー、ブラウザーの有効化、ツールプロファイル、デバイス認証、モバイルペアリング用に厳選された行が表示されます。
    • 「承認」には、解決済みの実行、プラグイン、システムエージェントのリクエストについて、新しい順に 30 日分の履歴が表示されます。種類で絞り込むか、古い行をページ送りして、Gateway に記録された判断、理由、発生元セッション、解決者の帰属を確認できます。
    • 「ラボ」では、リリース済みの実験的スイッチが公開されます。現在の項目は「コードモード」と「Swarm」で、tools.codeMode.enabledtools.swarm.enabled が即座に保存されます。未リリースの実験は表示されず、推測上の設定キーも書き込みません。
    • 通知:ブラウザーの Web プッシュ状態、購読/購読解除、テスト送信。
    • 詳細設定:専用ページがないすべての設定セクションと、生の JSON5 エディター(以前の「一般」ページの詳細モード)。
    • モデル設定(/settings/model-setup)は「モデルプロバイダー」のサブページで、そのヘッダーから開きます。
    • エージェント:エージェントごとのタブ(概要、ファイル、ツール、Skills、チャンネル、自動化、メモリ)を備えた設定ページ(設定 → エージェント/settings/agents)。「概要」タブでは、エージェントのアイデンティティ(表示名、絵文字、および agents.update の前にブラウザー内で縮小されサイズ制限が適用されるアバター画像)を編集します。保存すると、設定されたアイデンティティフィールドが格納され、ワークスペースの IDENTITY.md に反映されます。設定値は、同じファイルフィールドに対する手動編集より優先されます。
    • プロフィール:既定エージェントのアイデンティティと、全期間の使用状況統計(累計トークン、最大使用日、最長セッション、連続アクティビティ、1 年間のトークンヒートマップ、上位ツール、チャンネルのハイライト)を表示する設定ページ(usage.costsessions.usage)。
    • MCP には、サーバー行(トランスポート、有効化状態、OAuth/フィルター/並列処理の概要)、直接追加/有効化/無効化/削除するコントロール、一般的な運用コマンド、スコープ指定された mcp 設定エディターを備えた専用設定ページがあります。「プラグイン」ページは、ワンクリックコネクターと検出のための中心ページとして引き続き使用されます。
    • モデルプロバイダー:設定済みのすべてのモデルプロバイダーを、ブランドアイコン、認証状態(models.authStatus)、モデルの利用可否(models.list)、プロバイダーが報告する場合のライブプラン/割り当て/請求データ(usage.status)、直近 30 日間のローカルセッション支出(sessions.usage)とともに一覧表示する設定ページ。「更新」アクションでは、認証情報の状態とプロバイダー使用量を再取得します。
    • 接続:接続配下の設定ページで、ダッシュボード自体の Gateway リンク(WebSocket URL、Gateway トークン、パスワード、既定のセッションキー)と、最新のハンドシェイクスナップショット(状態、稼働時間、ティック間隔、前回のチャンネル更新)を管理します。オフラインログインゲートは切断時を処理し、このページでは接続中に接続設定を編集します。
    • 検証を伴って適用し再起動した後(config.apply)、最後にアクティブだったセッションを起動します。
    • 書き込みには、同時編集による上書きを防ぐベースハッシュガードが含まれます。
    • 書き込み(config.set/config.apply/config.patch)では、送信された設定ペイロード内の参照について、アクティブな SecretRef の解決を事前確認します。送信されたアクティブな参照のうち未解決のものは、書き込み前に拒否されます。
    • フォーム保存時には、保存済み設定から復元できない古い秘匿済みプレースホルダーを破棄する一方、保存済みシークレットに引き続き対応する秘匿済みの値は保持します。
    • スキーマとフォームのレンダリングは config.schema / config.schema.lookup から取得されます。これには、フィールドの title/description、対応する UI ヒント、直接の子要素の概要、ネストされたオブジェクト/ワイルドカード/配列/合成ノードのドキュメントメタデータ、および利用可能な場合はプラグインとチャンネルのスキーマが含まれます。生の JSON エディターは、スナップショットを安全にそのまま往復変換できる場合にのみ利用できます。それ以外の場合、Control UI はフォームモードを強制します。
    • 生の JSON エディターの「保存済みにリセット」では、平坦化されたスナップショットを再レンダリングするのではなく、生の記述形状(書式、コメント、$include のレイアウト)を保持します。そのため、スナップショットを安全に往復変換できる場合、リセットしても外部編集が維持されます。
    • 構造化された SecretRef オブジェクト値は、オブジェクトから文字列への誤変換を防ぐため、フォームのテキスト入力では読み取り専用として表示されます。
    使用状況
    • セッションから算出されたトークンおよび推定コストの分析は、プロバイダーの請求とは分離されたままです。
    • プロバイダーカードは usage.status を呼び出し、設定済みプロバイダープラグインから報告されたライブプラン名、割り当て期間、残高、支出、予算を表示します。
    • プロバイダー使用量の取得に失敗しても、セッション/コストダッシュボードは妨げられません。利用できないプロバイダーカードには、それぞれ独自のエラー状態が表示されます。
    デバッグ、ログ、更新
    • デバッグ:状態/ヘルス/モデルのスナップショット、イベントログ、手動 RPC 呼び出し(statushealthmodels.list)。
    • イベントログには、Control UI の更新/RPC の所要時間、低速なチャット/設定レンダリングの所要時間、およびブラウザーが該当する PerformanceObserver エントリタイプを公開している場合は、長いアニメーションフレームや長時間タスクに関するブラウザー応答性のエントリが含まれます。
    • ログ:フィルター/エクスポート機能を備えた Gateway ファイルログのライブ追跡(logs.tail)。
    • 更新:再起動レポート付きでパッケージ/Git の更新と再起動を実行し(update.run)、再接続後に update.status をポーリングして、実行中の Gateway バージョンを確認します。
    自動化パネルに関する注記
    • 行を選択すると、ヘッダーに「有効/一時停止」スイッチと「今すぐ実行」がある全画面の詳細ビューが開きます(期限到来時に実行、複製、削除はメニュー内)。「設定」タブでは自動化をインライン編集し(プロンプト、詳細、頻度、詳細な上書き)、「実行履歴」タブにはその自動化の実行が表示されます。
    • テーブル下の開始用自動化を選ぶと、編集可能なプロンプトとスケジュールが作成フォームに事前入力されます。
    • 分離タスクでは、配信の既定値は概要の通知です。内部専用の実行では「なし」に切り替えます。
    • 通知を選択すると、チャンネル/対象フィールドが表示されます。
    • Webhook モードでは、delivery.to を有効な HTTP(S) Webhook URL に設定して delivery.mode = "webhook" を使用します。
    • メインセッションのタスクでは、Webhook と配信なしのモードを利用できます。
    • 詳細編集コントロールには、実行後の削除、エージェント上書きのクリア、Cron の正確実行/時間分散オプション、エージェントのモデル/思考の上書き、ベストエフォート配信の切り替えが含まれます。
    • フォーム検証ではフィールド単位のエラーがインライン表示され、無効な値が修正されるまで保存ボタンは無効になります。
    • 専用のベアラートークンを送信するには cron.webhookToken を設定します。省略した場合、Webhook は認証ヘッダーなしで送信されます。
    • cron.webhook は廃止済みのレガシーフォールバックであり、現在の設定検証では拒否されます。notify: true を引き続き使用している保存済みジョブを、ジョブごとに明示された Webhook 配信または完了通知へ移行し、古いキーを削除するには、openclaw doctor --fix を実行します。

    アシスタントのメモリをインポート

    ローカルの Codex または Claude Code のメモリを OpenClaw エージェントに取り込むには、設定メモリをインポートを開きます。Gateway は自身のホスト上でサポート対象のローカルメモリを検出するため、リモートの Control UI では、ブラウザーのコンピューターではなく Gateway のコンピューターからインポートされます。

    1. インポート先のエージェントを選択します。
    2. 検出されたソースコレクションと Markdown ファイル名を確認します。ファイルの内容は、計画レスポンスでは送信されず、ページにも表示されません。
    3. インポートするコレクションを選択して確認します。適用時には書き込み前に計画が再構築されるため、古い選択は安全に失敗します。
    4. ファイルがすでに存在する場合は、既存のインポートを置換を有効にし、プレビューを更新して、置換を確認します。

    Codex は、統合済みの MEMORY.mdmemory_summary.md のみをインポートします。Claude Code は、プロジェクトの自動メモリディレクトリと設定済みの autoMemoryDirectory から Markdown をインポートします。このページを通じて、セッション、設定、指示、認証情報をインポートすることはありません。ファイルは、選択したワークスペース内の memory/imports/ 配下にコピーされ、そこでアクティブなメモリプラグインがインデックスを作成できます。ソースが変更されることはありません。

    計画と適用には operator.admin が必要です。適用するたびに、状態が存在する場合は検証済みの OpenClaw バックアップが作成され、秘匿化された移行レポートが書き込まれ、既存の宛先ファイルを置換する前に項目単位のバックアップが保持されます。パスと呼び出し時の動作については、メモリの概要を参照してください。

    MCP ページ

    専用の MCP ページは、mcp.servers 配下にある OpenClaw 管理の MCP サーバー向け運用ビューです。このページ自体が MCP トランスポートを起動することはありません。保存済み設定の確認と編集に使用し、稼働中のサーバーを検証する必要がある場合は openclaw mcp doctor --probe を使用します。

    一般的なワークフロー:

    1. サイドバーから MCP を開きます。
    2. 概要カードで、サーバーの合計数、有効数、OAuth 使用数、フィルター適用数を確認します。
    3. 各サーバー行で、トランスポート、有効化状態、認証、フィルター、タイムアウト、コマンドのヒントを確認します。
    4. MCP ページでサーバーを直接追加、有効化、無効化、または削除します。Streamable HTTP、SSE、stdio のいずれかを明示的に選択してください。stdio のコマンドラインでは、スペースを含むパスなどの引用符で囲まれた引数を使用できます。ワンクリックでのコネクター追加と検出には Plugins ページを使用します。
    5. 環境変数、作業ディレクトリ、ヘッダー、TLS/mTLS パス、OAuth メタデータ、ツールフィルター、Codex プロジェクションメタデータなどの高度なサーバーフィールドを設定するには、スコープ設定された mcp 設定セクションを編集します。
    6. 設定を書き込む場合は Save を使用し、実行中の Gateway に変更後の設定を適用させる場合は Save & Publish を使用します。
    7. 静的診断、ライブ動作確認、またはキャッシュ済みランタイムの破棄を行うには、ターミナルから openclaw mcp status --verboseopenclaw mcp doctor --probe、または openclaw mcp reload を実行します。

    このページでは、レンダリング前に認証情報を含む URL 形式の値を秘匿化し、コマンドスニペット内のサーバー名を引用符で囲むため、コピーしたコマンドはスペースやシェルのメタ文字を含む場合でも動作します。CLI と設定の完全なリファレンスについては、MCP を参照してください。

    アクティビティタブ

    アクティビティタブは Settings › System 内の Logs と Debug の横にあります。これはライブツールアクティビティを監視する一時的なブラウザローカルのオブザーバーで、チャットのツールカードにも使用される同じ Gateway session.tool / ツールイベントストリームから生成されます。別の Gateway イベントファミリー、エンドポイント、永続的なアクティビティストア、メトリクスフィード、外部オブザーバーストリームを追加するものではありません。

    アクティビティのエントリには、サニタイズされた概要と、秘匿化および切り詰められた出力プレビューのみが保持されます。ツール引数の値はアクティビティ状態に保存されません。UI には引数が非表示であることが示され、引数フィールド数のみが記録されます。メモリ内のリストは現在のブラウザタブに従い、Control UI 内を移動しても維持されますが、ページの再読み込み、セッションの切り替え、または Clear でリセットされます。

    オペレーターターミナル

    ドッキング可能なオペレーターターミナルはデフォルトで無効です。有効にするには、gateway.terminal.enabled: true を設定して Gateway を再起動します。ターミナルには operator.admin 接続が必要で、アクティブなエージェントワークスペース内でホスト PTY を開きます。新しいタブは、現在選択されているチャットエージェントに従います。

    ドックを切り替えるには Ctrl + backtick を使用します。レイアウトは下側と右側へのドッキングに対応し、ブラウザのビューポートに合わせてサイズが変更され、複数のシェルタブを保持します。gateway.terminal.enabled とオプションの gateway.terminal.shell オーバーライドについては、Gateway 設定を参照してください。

    所有者に許可されたサンドボックス外のエージェントは、オペレーターが監視すべき長時間または対話型の作業に terminal ツールを使用できます。各ツール呼び出しでは、エージェント自身の Gateway PTY を開く、読み取る、書き込む、サイズ変更する、閉じる、または一覧表示できます。新しいセッションでは、デフォルトで共同接続された Control UI タブが開くため、エージェントとオペレーターが出力を共有し、どちらも入力やサイズ変更を行えます。エージェントのアクセス範囲はセッション単位で厳密に限定されます。エージェントは、オペレーターが作成したターミナルや別のエージェントセッションが開いたターミナルを読み取ったり制御したりできません。

    1 つ以上のファイルをアクティブなターミナルにドラッグするか、クリップボタンを使用してファイルを選択します。OpenClaw は、PTY を所有するマシン上で各ファイルをステージングし、シェル用に引用符処理された絶対パスをカーソル位置に貼り付けます。Enter キーを押したり入力を実行したりすることはありません。コンパクトなバッチインジケーターに、現在のファイルと完了数が表示されます。キャンセルすると、パスを貼り付けずに残りのバッチが停止します。転送に失敗したファイルは表示されたままになるため、完了済みのファイルを再アップロードせずに、そのファイルから再試行できます。画像、PDF、アーカイブ、その他のファイル形式を、1 ファイルあたり最大 16 MiB まで受け付けます。ステージングされたファイルには、POSIX ホストでは非公開のシステム一時ディレクトリ(ディレクトリモード 0700、ファイルモード 0600)が、Windows ではユーザープロファイルの ACL 境界内にあるディレクトリが使用され、さらに 24 時間後のクリーンアップタイマーが設定されます。保持する必要があるものは移動またはコピーしてください。

    パスの挿入は、PowerShell、cmd.exe、および認識される POSIX シェル(sh、Bash、Dash、Ash、Ksh、Zsh、Fish)に対応し、Windows 上の Git Bash も含まれます。その他のシェルオーバーライドは、引用規則を安全に推測できないため拒否されます。ネイティブな WSL ターミナルと Linux のアップロードパスを使用するには、WSL 内で Gateway を実行してください。% または ! を含む cmd.exe パスも、そのシェルが二重引用符内でもこれらの文字を展開するため拒否されます。

    セッションサイドバーで検出された Codex および Claude Code セッションは、同じターミナルパネル内でネイティブ CLI を開くことができます。Settings › ChatOpen Codex/Claude threads inTerminal に設定すると、通常の行をクリックした際に codex resume または claude --resume が開きます。デフォルトは引き続き読み取り専用の OpenClaw ビューアーです。行の右クリックメニューまたはケバブメニューでは常に両方の選択肢が提示され、対象セッションが条件を満たす場合は、ビューアーヘッダーに Open in terminal が表示されます。

    利用可否はセッションごと、かつホストごとに決まります。Gateway ローカルのセッションでは、Gateway ホスト上でプロバイダー所有の再開コマンドが起動します。ペアリングされた Node のセッションでは、所有元の Node 上で許可リストに登録されたプロバイダーコマンドが起動し、その PTY の出力、入力、サイズ変更イベントのみが中継されます。これは汎用的な Node シェルを公開したり、ブラウザから提供されたコマンドを受け付けたりするものではありません。ファイルアップロードでは、サイズ制限付きの別個の terminal.upload Node コマンドが使用され、すでに開いているターミナルセッションに引き続き限定されます。そのコマンドが初めて表示されたときに、Node ペアリングのアップグレードを承認してください。二重ストリーミングに対応しない組み込みワーカーブリッジなど、一致するターミナル再開コマンドを通知しない Node では、ビューアーは引き続き使用できますが、ターミナルを開く機能は利用不可として表示されます。古い Node でもターミナルは実行できますが、ドラッグされたファイルを受信することはできません。

    接続所有のセッションは切断後も維持されます。ページの再読み込み、ノートパソコンのスリープ、または一時的なネットワーク障害が発生すると、セッションは終了せず Gateway 上でデタッチされ、同じブラウザタブが再接続時に再アタッチして最近の出力を再生します。デタッチされた接続所有のセッションは、gateway.terminal.detachedSessionTimeoutSeconds 後に終了されます(デフォルトは 300 秒。0 を使用すると切断時の終了に戻ります)。これらのセッションへのアタッチは、引き続き tmux 形式の引き継ぎとなります。

    エージェント所有のセッションは、ブラウザ接続に紐付けられません。terminal.attach は所有権を取得せずに各ブラウザをビューアーとして追加し、ビューアータブを閉じると、そのブラウザだけがデタッチされます。PTY は、所有するエージェントが閉じる、プロセスが終了する、ポリシーによって無効化される、または Gateway がシャットダウンするまで維持されます。terminal.list は各エントリを接続所有またはエージェント所有として示し、terminal.text を使用すると、管理者接続はアタッチせずに最近のプレーンテキスト出力を読み取れます。

    ターミナルは、/?view=terminal にある全画面のターミナル専用ドキュメントとしても利用できます。iOS および Android アプリでは、保存済みの Gateway 認証情報を再利用して、このページを Terminal 画面に埋め込みます。利用可否は同じ gateway.terminal.enabled および operator.admin のゲートに従い、接続先の Gateway がターミナルを提供していない場合は、このページに通知が表示されます。

    ブラウザパネル

    Control UI には、Gateway が制御するブラウザ(エージェントがブラウザツールを介して操作するものと同じ)を通常のあらゆるウェブブラウザ内に表示する、ドッキング可能なブラウザパネルが含まれています。ネイティブの WebView は不要です。接続先の Gateway が operator.admin 接続に対して browser.request を通知すると表示され、スレッドワークスペースレールの地球儀ボタンで切り替えられます。このパネルには、タブ付きのライブページスナップショット、編集可能な URL バー、戻る/進む/再読み込み、自分のブラウザで開く機能があり、右側または下側にドッキングできます。また、クリック、ホイールスクロール、基本的な文字入力をリモートページに転送します。

    2 つのキャプチャモードで、エージェント向けのページコンテキストをまとめられます。

    • 注釈(鉛筆):ページ上にフリーハンドでマークを描きます。Send to chat を使用すると、線をスクリーンショットに合成して画像をアクティブなチャット入力欄に添付し、ページの URL、タイトル、マークされた各領域を説明するプロンプトを事前入力するため、エージェントは囲んだ箇所を正確に把握できます。
    • 検査(ポインター):カーソルを合わせると、その下にある要素(セレクター、アクセシブル名、ロール、サイズ)が表示されます。クリックすると、その要素の詳細と強調表示されたスクリーンショットが同じ入力フローで送信されます。検査、ホイールスクロール、戻る/進むには browser.evaluateEnabled が必要です(デフォルトで有効)。

    macOS アプリでは、ダッシュボード内でクリックしたリンク用のネイティブリンクブラウザサイドバーが維持されます。ブラウザパネルもそこで動作し、その他すべてのプラットフォームでページに注釈を付ける手段となります。

    チャットの動作

    Send and history semantics
    • chat.sendノンブロッキングです。{ runId, status: "started" } ですぐに ACK を返し、応答は chat イベントを介してストリーミングされます。信頼済みの Control UI クライアントは、ローカル診断用のオプションの ACK タイミングメタデータも受信できます。
    • チャットへのアップロードでは、画像と動画以外のファイルを受け付けます。画像ではネイティブの画像パスが維持され、その他のファイルは管理対象メディアとして保存され、履歴には添付ファイルのリンクとして表示されます。
    • 同じ idempotencyKey で再送信すると、実行中は { status: "in_flight" }、完了後は { status: "ok" } が返されます。
    • chat.history の応答には、UI の安全性を確保するためサイズ制限があります。トランスクリプトのエントリが大きすぎる場合、Gateway は長いテキストフィールドを切り詰め、容量の大きいメタデータブロックを省略し、サイズ超過のメッセージをプレースホルダー([chat.history omitted: message too large])に置き換えることがあります。
    • chat.history で表示対象のアシスタントメッセージが切り詰められた場合、サイドリーダーは必要に応じて、sessionKey、アクティブな agentId、トランスクリプトの messageId を指定し、chat.message.get を介して表示用に正規化された完全なトランスクリプトエントリをオンデマンドで取得できます。Gateway がそれ以上の内容を返せない場合、リーダーは切り詰められたプレビューを暗黙に繰り返すのではなく、明示的に利用不可の状態を表示します。
    • アシスタントが生成した画像は管理対象メディア参照として永続化され、認証済みの Gateway メディア URL を介して返されます。そのため、再読み込み時に生の base64 画像ペイロードがチャット履歴の応答内に残っている必要はありません。
    • chat.history のレンダリング時に、Control UI は、表示専用のインラインディレクティブタグ(例:[[reply_to_*]][[audio_as_voice]])、プレーンテキストのツール呼び出し XML ペイロード(<tool_call>...</tool_call><function_call>...</function_call><tool_calls>...</tool_calls><function_calls>...</function_calls>、および切り詰められたツール呼び出しブロックを含む)、漏出した ASCII/全角のモデル制御トークンを、表示対象のアシスタントテキストから除去します。表示対象のテキスト全体が、正確なサイレントトークン NO_REPLY / no_reply または Heartbeat 応答トークン HEARTBEAT_OK のみであるアシスタントエントリは省略されます。
    • 送信中および最終的な履歴更新中に、chat.history が一時的に古いスナップショットを返した場合でも、チャットビューではローカルの楽観的なユーザー/アシスタントメッセージが表示されたままになります。Gateway の履歴が追いつくと、正規のトランスクリプトがこれらのローカルメッセージを置き換えます。
    • ライブの chat イベントは配信状態を表し、chat.history は永続的なセッショントランスクリプトから再構築されます。ツールの最終イベント後、Control UI は履歴を再読み込みし、ごく小さな楽観的末尾のみをマージします。トランスクリプトの境界については WebChat に記載されています。
    • chat.inject はアシスタントの注記をセッショントランスクリプトに追加し、UI のみを更新するための chat イベントをブロードキャストします(エージェントの実行もチャネル配信も行いません)。
    • サイドバーには、読み込まれたすべてのアクティブなセッションが、エージェントセクション別に、ピン留め/チャネル/作業/カスタム/チャットの各バケットに分類されて表示されます。単一の「新規セッション」アクションから下書きダイアログを開けます。表示されている行を開いても、ハイライトのみが移動します。セッションを「ピン留め」にドロップするとピン留めでき、カスタムグループまたは「チャット」にドロップすると移動できます。カスタムグループは折りたたみとドラッグによる並べ替えが可能で、グループ名と順序は Gateway を介して同期され、折りたたみ状態はブラウザーに保持されます。新しいダッシュボードセッションには、コマンド以外の最初のメッセージから簡潔なタイトルが非同期で生成されます。明示的な名前と認証済み送信者の ID は別に扱われるため、アカウント名が生成タイトルに使用されることはありません。この個別のモデル呼び出しを低コストモデルにルーティングするには、agents.defaults.utilityModel(または agents.entries.*.utilityModel)を設定します。その別モデルが失敗した場合、タイトル生成はプライマリモデルで 1 回再試行されます。別のエージェントセクションを展開すると、開いているチャットから離れることなく、そのエージェントのセッションを閲覧できます。
    • スレッド検索はコマンドパレット(⌘K、または左上のコントロール群にある検索ボタン)にあります。クエリを入力すると、エージェントを横断して上限付きのページ数まで一致候補をたどり、内部の子行/Cron 行を除外し、表示可能な一致項目をナビゲーションコマンドと並べて一覧表示します。「スレッド」ページには、フィルター付きの網羅的で検索可能な一覧が引き続き表示されます。
    • サイドバーの各行には、直接ピン留めするための操作に加え、未読状態、名前変更、フォーク、グループ化、アーカイブ、削除を行うための完全なコンテキストメニューがあります。複数選択した行(Cmd/Ctrl クリック、範囲選択は Shift クリック)には、未読状態、グループ化、アーカイブ、削除を一括操作するメニューが表示されます。選択したすべてのセッションがアーカイブ可能でない限り、一括アーカイブ/削除は無効のままです。実行中のセッションとエージェントのメインセッションはアーカイブできません。現在選択中のセッションをアーカイブまたは削除すると、チャットはそのエージェントのメインセッションに戻ります。
    • macOS アプリでは、OpenClaw のマークはサイドバーの行を占有せず、ウィンドウコントロールの隣にある、通常は空いているネイティブタイトルバーストリップを使用します。
    • デスクトップ幅では、チャットコントロールはコンパクトな 1 行に収まり、トランスクリプトを下方向にスクロールすると折りたたまれます。上方向にスクロールする、先頭に戻る、または末尾に到達すると、コントロールが復元されます。
    • 他のユーザーが同じセッションを閲覧している場合、セッションヘッダーのワークスペースチップの横に小さなアバター群が表示されます。最大 4 人の閲覧者のアバターと超過人数が表示され、自分だけになると消えます。
    • テキストのみの同一メッセージが連続した場合、件数バッジ付きの 1 つの吹き出しとしてレンダリングされます。画像、添付ファイル、ツール出力、Canvas プレビューを含むメッセージは折りたたまれません。
    • ユーザーメッセージの吹き出しには、トランスクリプト操作が用意されています。ホバー時に表示される巻き戻しボタン(「Don't ask again」オプション付きの確認ポップオーバー)に加え、右クリックメニューのここまで巻き戻すここからフォークがあります。巻き戻しでは、セッションをそのメッセージの直前の状態に戻し、編集して再送信できるようにメッセージのテキストをコンポーザーへ戻します(sessions.rewindoperator.admin)。フォークでは、メッセージ直前までのアクティブパスの接頭部分から新しいセッションを作成して開き、同じテキストをコンポーザーに設定します(sessions.forkoperator.write)。どちらの操作も、エージェントの作業中は説明付きのツールチップとともに無効になり、永続化されたユーザーメッセージにのみ適用されます。また、会話が外部エージェントハーネスによって所有されているセッションでは拒否されます。巻き戻しで移動するのはチャットコンテキストのみです。ファイルやその他のツールによる副作用は元に戻りません。また、巻き戻し前のトランスクリプトは追記専用のセッションストアに保持されます。そのストアに複数のトランスクリプトブランチが含まれている場合、チャットのタイトルバーにブランチメニューが表示され、各ブランチの最新メッセージ、メッセージ数、更新時期を確認できます。非アクティブなブランチを選択すると、現在のセッションが保持されているそのパスへ切り替わります(sessions.branches.listoperator.readsessions.branches.switchoperator.admin)。エージェントの作業中はブランチの切り替えも利用できません。また、すでにアクティブなブランチを選択すると、RPC 境界で型付きの no-op エラーになります。ユーザー吹き出しの別の非表示操作では、現在のブラウザー内でのみメッセージが非表示になります。メッセージはトランスクリプトに残り、エージェントからも引き続き見えます。
    • セッションのチェックアウトが GitHub リポジトリのデフォルト以外のブランチにある場合、チャットビューではコンポーザーの上にプルリクエストのチップが固定表示されます。各チップには PR 番号、リポジトリ、ブランチ、差分件数、CI ピル、下書き/マージ済み/クローズ済みの状態が表示され、PR へのリンクになっています。行に表示されるチップは最大 2 個で、ライブ(オープン/下書き)の PR が先に表示されます。「さらに表示」ボタンを押すと、折りたたまれたマージ済み/クローズ済みの履歴が表示されます。CI ピルを開くと小さな CI 監視ポップオーバーが表示され、成功/失敗/実行中/スキップ済みのチェック件数と、PR のチェックページへのリンクを確認できます。検出は controlUi.sessionPullRequests を介してサーバー側で実行され、設定されている場合は Gateway の GH_TOKENGITHUB_TOKEN を再利用します。GitHub API のレート制限に達した場合、チップは最後に確認された状態を維持し、状態が古い可能性があるという警告を表示します。チップを閉じると、現在のブラウザープロファイルではそのセッションについて非表示になります。PR がまだ存在しない場合、行にはブランチ自体、つまりリポジトリ、ブランチ名、デフォルトブランチとのマージベースに対する差分(コミット済みおよび未コミットの作業)の +/− サイズが表示されます。プッシュ済みブランチに比較可能なコミットができると、GitHub の新規プルリクエストページを開く「PR を作成」ボタンが行に追加されます。それ以前でも、変更されたファイル(コミット済み、未コミット、未追跡)があるセッションには、ボタンなしで行が表示されます。オープンまたは下書きの PR が存在する間、この行は自動的に非表示になります。ブランチ行はローカルの git 情報のみから生成されるため、GitHub のレート制限中も利用でき、同じ古い状態に関する警告が表示されます。これは、制限がリセットされるまで「PR が見つからない」という結果を信頼できないためです。
    • セッション差分パネルには、そのセッションのチェックアウトで実際に変更された内容が表示されます。ワークスペースレールまたはチャットのタイトルバーにあるブランチボタンを押すと詳細パネルが開き、チェックアウトのデフォルトブランチとのマージベースに対する、ブランチ、未コミット、未追跡の作業のファイル別差分が表示されます。これにはステータスドット、名前変更の矢印、ファイル別の +/− 件数、折りたたみ可能なファイル、ハンク間の「未変更の N 行」マーカーが含まれます。差分は sessions.diff Gateway メソッド(operator.read スコープ)を介してサーバー側で計算されます。バイナリファイルとサイズ超過ファイルは統計情報のみのエントリに縮退し、接続先の Gateway が sessions.diff を通知している場合にのみボタンが表示されます。
    • すべてのチャットペインにタイトルバーがあります。セッションタイトルをクリックすると名前を変更できます。ワークスペースチップではチェックアウトパスまたはブランチをコピーでき、ローカル Gateway のワークスペースをホストのファイルマネージャーで表示できます。リモートセッションと実行 Node のセッションではコピー操作は維持されますが、表示操作は非表示になります。
    • 各チャットペインのスレッドワークスペースレールには、スレッドファイル、プロジェクトファイル、成果物が一覧表示されます。デフォルトではペインの右端にドッキングされます。ヘッダーをドラッグする(またはドックボタンを使用する)と下部へ移動でき、その選択は現在のブラウザープロファイルに保存されます。折りたたまれたレールはまったくスペースを取りません。⇧⌘B またはタイトルバーのファイル切り替えボタンで再度開けます。このボタンには変更ファイル数のバッジが表示されます。個別のファイル、ツール、Canvas 詳細パネルには影響しません。
    • チャット内のファイル参照、展開された読み取り/編集/書き込みツールカード内のファイルパス、またはワークスペースレール内のファイル行をクリックすると、ファイル詳細パネルが開きます。これは CodeMirror ベースのコードビューで、構文ハイライト、行番号、指定行へのジャンプ、ファイル内検索、コピー操作、外部エディターで開くためのメニューを備えています。Gateway が operator.admin 接続に sessions.files.set を通知している場合、パネルには変更状態の追跡と Cmd/Ctrl-S による保存を備えた編集モードが追加されます。未保存の下書きは、明示的に保存または破棄されるまで、現在のブラウザータブ内でファイル、パネル、セッションを移動しても維持されます。保存では、sessions.files.get が返すコンテンツハッシュに対して compare-and-swap が行われます。読み込み後にディスク上のファイルが変更された場合(たとえば、エージェントが作業を続けていた場合)、パネルには競合通知と、「再読み込み」(最新の内容を採用)および「上書き」(ローカル編集を維持)の操作が表示されます。書き込みには読み取りと同じ fs-safe ワークスペースガード(パスの包含、シンボリックリンク/ハードリンクの拒否、256 KB の UTF-8 上限)が適用され、既存ファイルのみを上書きします。エディターがファイルを作成または削除することはありません。
    • 各チャットペインのバックグラウンドタスクレールには、現在のエージェントのバックグラウンドタスクとサブエージェントが一覧表示されます(tasks.list はエージェント単位のスコープで、task イベントによってリアルタイムに維持されます)。実行中の作業には、リアルタイムの経過時間タイマー、ツール使用回数、現在使用中のツール、停止コントロールが表示されます。折りたたみ可能な完了セクションには実行時間も表示されます。また、「トランスクリプトを表示」リンクを押すと、タスクの子セッションがペイン内で開きます。タイトルバーのアクティビティ切り替えボタンで開けます。タスクのスナップショットは事前に読み込まれるため、レールを先に開かなくても実行中件数のバッジが表示されます。「タスク」ページは引き続き、エージェントを横断した完全な台帳として機能します。
    • ワークスペースレール、バックグラウンドタスクレール、詳細パネルは、ウィンドウではなく各ペイン自体の幅に適応します。狭いペインやコンパクトなウィンドウでは、両方のレールが下部ストリップとして表示されます(ペインが広がるまでサイドドックのコントロールは非表示になり、1 列しか収まらない場合はワークスペースレールがサイドスロットを優先的に使用します)。また、詳細パネルはスレッドと同じ行を共有せず、水平リサイズハンドルを挟んでスレッドの下に積み重なります。スマートフォンサイズのビューポートでは、引き続き詳細パネルが全画面で開きます。
    • チャットヘッダーのモデルピッカーと思考ピッカーは、sessions.patch を通じてアクティブなセッションに即座にパッチを適用します。これらは 1 ターン限定の送信オプションではなく、永続的なセッションオーバーライドです。
    • **分割ビュー:**チャットのタイトルバー(スレッド差分、バックグラウンドタスク、スレッドファイルの各切り替えボタンの隣)から開き、収まる数だけアクティブなペインを右または下に分割します。各ペインには、それぞれ独自のスレッド、トランスクリプト、コンポーザー、ツールストリームがあります。
    • screen ツールを持つエージェントは、対応する Control UI が接続されている間、同じペイン、サイドバー、ターミナル、ブラウザー、フォーカス、ナビゲーションの変更を要求できます。プロトコル v1 は、接続されているすべての対応 Control UI にコマンドを適用します。画面を参照してください。
    • サイドバーからセッションをチャットにドラッグすると、ペインで開きます。アニメーション付きのドロッププレビューがゾーン間を滑らかに移動し、結果を示すラベルが表示されます。新しいペインが占める正確な半分の領域には「分割」、ペイン全体には「ここで開く」と表示されます。ドロップは単一ペインモードでも機能します。
    • アクティブな分割ペインによって、サイドバーの選択項目と URL が決まります。そのタイトルバーには分割と閉じるコントロールが追加されます。仕切りを使って列と縦に積み重なったペインのサイズを変更でき、ブラウザーは再読み込み後もレイアウトをローカルに保持します。
    • 狭い画面では、分割ビューはレイアウトを維持しますが、閉じるコントロールを含むヘッダーとともに、アクティブなペインだけを表示します。
    • 同じセッションのモデルピッカー変更がまだ保存中のときにメッセージを送信すると、コンポーザーは chat.send を呼び出す前にそのセッションパッチを待機するため、選択したモデルで送信されます。
    • /new と入力すると、New Chat と同じ新しいダッシュボードセッションが作成され、そのセッションに切り替わります。ただし、session.dmScope: "main" が設定され、現在の親がエージェントのメインセッションである場合は、そのメインセッションをその場でリセットします。/reset と入力すると、Gateway による現在のセッションの明示的なインプレースリセットが維持されます。
    • チャットのモデルピッカーは、Gateway に設定されたモデルビューを要求します。agents.defaults.modelPolicy.allow が空でない場合、そのポリシーによってピッカーの内容が決まり、プロバイダー単位のカタログを動的に保つ provider/* エントリも含まれます。それ以外の場合、ピッカーには設定済みのエントリに加え、使用可能な認証を持つプロバイダーが表示されます。agents.defaults.models 配下のエイリアスと設定による制限は受けません。完全なカタログは、view: "all" を指定したデバッグ用の models.list RPC を通じて引き続き利用できます。
    • 最新の Gateway セッション使用量レポートに現在のコンテキストトークン数が含まれている場合、チャットのコンポーザーツールバーに使用率を示す小さなコンテキスト使用量リングが表示されます。リングを開くと、現在のコンテキストウィンドウ、直近の実行のトークン数と推定総コスト、プロバイダーとモデルの識別情報、および報告されている場合は最新のプロバイダーレスポンスにおける入力、出力、キャッシュのコスト内訳を確認できます。コンテキストへの負荷が高くなるとリングは警告スタイルに切り替わり、推奨される Compaction レベルに達すると、通常のセッション Compaction パスを実行するコンパクトなボタンが表示されます。古いトークンスナップショットは、Gateway が最新の使用量を再度報告するまで非表示になります。
    トークモード(ブラウザーリアルタイム)

    トークモードは、登録済みのリアルタイム音声プロバイダーを使用します。OpenAI は、talk.realtime.provider: "openai"openai API キープロファイル、talk.realtime.providers.openai.apiKey、または OPENAI_API_KEY を使用して設定します。OpenAI Realtime は公開 Platform API を使用し、Platform API キーが必要です。Codex OAuth ログインでは、このインターフェースの要件を満たしません。Google は、talk.realtime.provider: "google"talk.realtime.providers.google.apiKey を使用して設定します。ブラウザーが標準のプロバイダー API キーを受け取ることはありません。OpenAI は WebRTC 用の一時的な Realtime クライアントシークレットを受け取り、Google Live はブラウザーの WebSocket セッション用に、1 回限り使用可能な制約付き Live API 認証トークンを受け取ります。このトークンには、Gateway によって指示とツール宣言が固定されています。バックエンドのリアルタイムブリッジのみを公開するプロバイダーは、Gateway リレートランスポートを介して動作します。そのため、認証情報とベンダーソケットはサーバー側に保持され、ブラウザーの音声は認証済み Gateway RPC を介して転送されます。Realtime セッションプロンプトは Gateway によって構成されます。talk.client.create は、呼び出し元からの指示の上書きを受け付けません。

    永続的なプロバイダー、モデル、音声、トランスポート、推論の強度、正確な VAD しきい値、無音時間、プレフィックスパディングのデフォルトは、Settings → Communications → Talk にあります。変更には operator.admin アクセスが必要です。Gateway リレーを設定すると、バックエンドのリレーパスが強制されます。WebRTC を設定すると、セッションの所有権はクライアントに維持され、プロバイダーがブラウザーセッションを作成できない場合は、暗黙にリレーへフォールバックせず失敗します。

    トークコントロールは、コンポーザーツールバーのマイクボタンです。キャレットには System default と、USB、Bluetooth、仮想入力を含む、ブラウザーが公開するすべてのマイクが一覧表示されます。選択したデバイス ID はブラウザー内にのみ保持され、Gateway には送信されません。そのデバイスが使用できなくなった場合、トークは別のマイクから暗黙に録音するのではなく、別の入力を選択するよう求めます。トークが有効な間、マイクボタンはライブ入力レベルメーターを表示するピル型コントロールになります。クリックすると音声入力が停止し、カーソルを合わせると停止グリフが表示されます。リアルタイムツール呼び出しが talk.client.toolCall を介して設定済みの大規模モデルに問い合わせている間、スクリーンリーダーは Connecting voice input...Listening...、または Asking OpenClaw... を読み上げます。実行中のエージェント応答を停止する操作は引き続き独立しており、ピルの隣にある四角形の Stop コントロールを使用します。

    ビデオトークは、OpenAI Realtime WebRTC および Google Live のブラウザーセッションで利用できます。カメラボタンをクリックし、カメラとマイクへのアクセスを許可して、ローカルプレビューを確認します。describe_view が視覚的なコンテキストを要求すると、OpenAI はブラウザーのデータチャネルを介して、サイズ制限された JPEG フレームを 1 枚送信します。Google Live は、サポートされる最大頻度である 1 秒あたり 1 フレームで、サイズ制限された JPEG フレームをブラウザーからプロバイダーへ直接送信し、describe_view 関数呼び出しにカメラストリームの状態で応答します。カメラフレームが Gateway を通過することはありません。トークを停止すると、プレビューが閉じ、両方のメディアトラックが解放されます。プロバイダーの通信仕様については、Google の Live API の機能および関数呼び出しガイドを参照してください。

    メンテナー向けライブスモークテスト: OPENAI_API_KEY=... GEMINI_API_KEY=... node --import tsx scripts/dev/realtime-talk-live-smoke.ts は、OpenAI バックエンド WebSocket ブリッジ、OpenAI ブラウザー WebRTC SDP 交換、JPEG フレームと describe_view 関数のラウンドトリップを含む Google Live の制約付きトークンによるブラウザーセットアップ、および偽のマイクメディアを使用した Gateway リレーのブラウザーアダプターを検証します。このコマンドはプロバイダーの状態のみを出力し、シークレットはログに記録しません。

    停止と中止
    • Stop をクリックします。正確なローカル実行 ID がある実行では chat.abort を呼び出します。選択したセッションの状態が作業中であることを示しているものの、Control UI にローカル実行 ID がない場合は、代わりに sessions.abort を呼び出します。グローバル以外のセッションでは、選択したセッションのこのパスによって、キューに入っている後続メッセージも破棄されるため、停止後に作業が再開されることはありません。
    • 実行がアクティブな間、通常の後続メッセージでは Gateway の有効な messages.queue モードを使用します。steer は実行中のターンへ挿入します。その他のモードでは、ブラウザーの永続的なキュー配信が維持されます。ステアリングが拒否された場合も、そのキューへフォールバックします。キューに入っているメッセージの Steer をクリックすると、手動で挿入できます。
    • Settings → Appearance → Chat → Follow-ups while the agent is working では、現在のブラウザーについて、そのサーバーデフォルトを上書きできます。このページでは上書きが明示され、Reset to server default が表示されます。Steer into the active run は後続メッセージを即座に送信し、Queue until the run ends は実行が完了するまで保持します。
    • 帯域外で中止するには、/stop(または stopstop actionstop runstop openclawplease stop のような単独の中止フレーズ)を入力します。
    • chat.abort は、そのセッションのすべてのアクティブな実行を中止するために、{ sessionKey }runId なし)をサポートします。Control UI は、ローカル実行 ID がない場合に sessions.abort を使用します。
    中止時の部分出力保持
    • 実行が中止された場合でも、アシスタントの部分的なテキストが UI に表示されることがあります。
    • バッファーされた出力が存在する場合、Gateway は中止されたアシスタントの部分的なテキストをトランスクリプト履歴に永続化します。
    • 永続化されたエントリには中止メタデータが含まれるため、トランスクリプトの利用側は、中止時の部分出力と正常完了時の出力を区別できます。

    接続切断と再接続

    セッションが確立された後に Gateway 接続が切断されても、ログアウトはされません。クライアントがバックオフ(800 ms から最大 15 s)を使用して自動的に再試行する間、ダッシュボードは表示されたままで、上部バーの下に琥珀色の「Gateway connection lost — Reconnecting…」というフローティングピルが表示されます。接続が復旧するまで、ライブ更新とリアルタイム/セッション操作は一時停止します。ピル内の Retry now を使用すると、即座に再試行できます。チャットは引き続き編集可能です。通常のテキストと添付ファイルの送信は、現在のタブの Gateway/セッションスコープのブラウザーストレージに保持され、再接続待ちとして表示され、Gateway が復旧すると自動的に送信されます。オフライン中はライブコントロールとスラッシュコマンドを使用できません。ただし、Stop は正確なローカル実行 ID を再実行用にキューへ入れることができます。接続が復旧する前にそのセッションで新しい作業が開始される可能性があるため、セッションのみを対象とする停止は再実行されません。

    このブラウザーにすでに認証情報(設定済みのトークン/パスワードまたは承認済みデバイストークン)が保存されている場合、初回表示と再読み込みでは、ログインゲートを一瞬表示する代わりに、接続が確立されるまで小さなアニメーション付き OpenClaw マークが表示されます。ログインゲートは、認証情報がまだ保存されていない場合、または Gateway が認証情報を明示的に拒否した場合(無効なトークン/パスワード、取り消されたペアリング)にのみ表示されます。これらは待機ではなく、ユーザーの入力が必要な状態です。

    PWA のインストールと Web Push

    Control UI には manifest.webmanifest とサービスワーカーが含まれているため、最新のブラウザーではスタンドアロン PWA としてインストールできます。Web Push を使用すると、タブやブラウザーウィンドウが開いていない場合でも、Gateway がインストール済み PWA を通知で起動できます。

    macOS アプリ内では、アプリが通知をネイティブに配信するため、Notifications 設定ページにはブラウザー Push の代わりにアプリのネイティブ通知権限が表示されます。

    OpenClaw の更新直後にページに プロトコルの不一致 と表示された場合は、まず openclaw dashboard を使用してダッシュボードを再度開き、ハードリフレッシュします。それでも失敗する場合は、ダッシュボードのオリジンに対するサイトデータを消去するか、プライベートブラウザーウィンドウでテストしてください。古いタブまたはブラウザーのサービスワーカーキャッシュにより、更新前の Control UI バンドルが新しい Gateway に対して実行され続けることがあります。

    サーフェス 機能
    ui/public/manifest.webmanifest PWA マニフェスト。アクセス可能になると、ブラウザーに「Install app」が表示されます。
    ui/public/sw.js push イベントと通知のクリックを処理するサービスワーカー。
    state/openclaw.sqliteweb_push_vapid_keys Web Push ペイロードへの署名に使用される、自動生成された VAPID キーペア。
    state/openclaw.sqliteweb_push_subscriptions 永続化されたブラウザーサブスクリプションのエンドポイント、キー、登録タイムスタンプ。

    廃止された push/vapid-keys.json および push/web-push-subscriptions.json ストアからのアップグレードは、openclaw doctor --fix によってインポートされます。古いプロセスがインポート中に廃止済みの状態を再作成しないように、この修復を実行する前に Gateway を停止してください。アップグレード後に Web Push を使用する前に修復を実行してください。廃止済みのソースまたは中断された Doctor クレームのいずれかが残っている間、登録、配信、削除、キー解決は処理を拒否します。Gateway ランタイムは SQLite のみを読み書きします。

    キーを固定する場合(複数ホストでのデプロイ、シークレットのローテーション、テストなど)は、Gateway プロセスの環境変数を使用して VAPID キーペアを上書きします。

    • OPENCLAW_VAPID_PUBLIC_KEY
    • OPENCLAW_VAPID_PRIVATE_KEY
    • OPENCLAW_VAPID_SUBJECT(デフォルトは https://openclaw.ai

    Control UI は、ブラウザーサブスクリプションの登録とテストに、次のスコープ制限付き Gateway メソッドを使用します。

    • push.web.vapidPublicKey は、アクティブな VAPID 公開キーを取得します。
    • push.web.subscribe は、endpointkeys.p256dh/keys.auth を登録します。
    • push.web.unsubscribe は、登録済みのエンドポイントを削除します。
    • push.web.test は、呼び出し元のサブスクリプションにテスト通知を送信します。

    ホスト埋め込み

    アシスタントメッセージは、[embed ...] ショートコードを使用して、ホストされた Web コンテンツをインライン表示できます。iframe のサンドボックスポリシーは gateway.controlUi.embedSandbox で制御します。

    コアの show_widget ツールは、ツール呼び出しから自己完結型の SVG または HTML を直接レンダリングします。ブラウザーとサポート対象のネイティブチャットクライアントは、inline-widgets Gateway 機能を公開し、生成された Canvas ドキュメントはチャット履歴を再読み込みしても引き続き利用できます。Discord Activities は Discord 上で同じツール名を提供します。その他のチャネルから開始された実行には、このツールは提供されません。

    strict

    ホスト埋め込み内でのスクリプト実行を無効にします。

    scripts (default)

    オリジン分離を維持しながら、インタラクティブな埋め込みを許可します。通常は、自己完結型のブラウザーゲームやウィジェットに十分です。

    trusted

    より強い権限を意図的に必要とする同一サイトのドキュメント向けに、allow-scripts に加えて allow-same-origin を追加します。

    json5
    {  gateway: {    controlUi: {      embedSandbox: "scripts",    },  },}

    絶対外部 http(s) 埋め込み URL は、デフォルトでブロックされたままです。[embed url="https://..."] がサードパーティページを読み込めるようにするには、gateway.controlUi.allowExternalEmbedUrls: true を設定します。

    チャットトランスクリプトのレイアウト

    チャットのトランスクリプトでは、コンポーザーに揃えた中央配置の読みやすいフレームを使用します。そのフレーム内では、アシスタントとツールの出力は左揃えのまま、自分のメッセージは右揃えになります。複数ユーザーのセッション(たとえば、チャンネル Plugin から中継されたグループチャット)では、送信者が特定された他の参加者のメッセージは、作成者のアバター、名前、ID ごとに固定された色とともに左揃えで表示されるため、サインインしている閲覧者のメッセージだけが「自分のもの」として認識されます。送信者が特定された参加者が 2 人以上いる場合、アシスタントの返信には、そのターンのきっかけとなったメッセージの参加者名を示す小さな「名前に返信」マーカーが付きます。ローカルのスラッシュコマンド出力などのシステム項目は、アバターのない中央揃えの通知行として表示されます。

    チャットメッセージの幅

    ワイドモニターのユーザーは、Settings → Chat → Message width でトランスクリプトの幅を上書きできます。この設定は、そのブラウザのローカルストレージに保持されます。対応する 形式には、960px82% のような単純な長さやパーセンテージに加え、 制約付きの min(...)max(...)clamp(...)calc(...)fit-content(...) の幅式があります。

    Tailnet アクセス(推奨)

    統合 Tailscale Serve(推奨)

    Gateway を local loopback のままにし、Tailscale Serve で HTTPS プロキシします。

    bash
    openclaw gateway --tailscale serve

    https://<magicdns>/(または設定した gateway.controlUi.basePath)を開きます。

    デフォルトでは、gateway.auth.allowTailscaletrue の場合、Control UI/WebSocket の Serve リクエストは Tailscale ID ヘッダー(tailscale-user-login)で認証できます。OpenClaw は、x-forwarded-for アドレスを tailscale whois で解決してヘッダーと照合することで ID を検証し、リクエストが Tailscale の x-forwarded-* ヘッダー付きで local loopback に到達した場合にのみ受け入れます。ブラウザーのデバイス ID を使用する Control UI オペレーターセッションでは、この検証済み Serve パスによりデバイスペアリングの往復処理も省略されます。デバイス ID のないブラウザーと Node ロール接続では、引き続き通常のデバイスチェックが行われます。Serve トラフィックにも明示的な共有シークレット認証情報を要求する場合は gateway.auth.allowTailscale: false を設定し、gateway.auth.mode: "token" または "password" を使用します。

    この非同期 Serve ID パスでは、同じクライアント IP と認証スコープに対する失敗した認証試行は、レート制限の書き込み前に直列化されます。そのため、同じブラウザーから不正な再試行が同時に行われた場合、単純な不一致が 2 件並行して競合する代わりに、2 番目のリクエストで retry later が表示されることがあります。

    Tailnet にバインド + トークン

    bash
    openclaw gateway --bind tailnet --token "$(openssl rand -hex 32)"

    http://<tailscale-ip>:18789/(または設定した gateway.controlUi.basePath)を開きます。

    対応する共有シークレットを UI 設定に貼り付けます(connect.params.auth.token または connect.params.auth.password として送信されます)。

    セキュアでない HTTP

    プレーン HTTP(http://<lan-ip> または http://<tailscale-ip>)でダッシュボードを開くと、ブラウザーはセキュアでないコンテキストで動作し、WebCrypto をブロックします。デフォルトでは、OpenClaw はデバイス ID のない Control UI 接続をブロックします。

    サポートされるデバイス ID なしの例外は、gateway.auth.mode: "trusted-proxy" を介した Control UI オペレーター認証が成功した場合です。デバイス ID を無効化する 永続的な設定スイッチはありません。

    推奨される修正: HTTPS(Tailscale Serve)を使用するか、https://<magicdns>/(Serve)または http://127.0.0.1:18789/(Gateway ホスト上)で UI をローカルに開きます。

    信頼済みプロキシに関する注意
    • 信頼済みプロキシ認証に成功すると、デバイス ID のない operator Control UI セッションを許可できます。
    • これは Node ロールの Control UI セッションには適用されません
    • 同一ホストの local loopback リバースプロキシでも信頼済みプロキシ認証の条件は満たしません。信頼済みプロキシ認証を参照してください。

    HTTPS の設定ガイダンスについては、Tailscaleを参照してください。

    コンテンツセキュリティポリシー

    Control UI には厳格な img-src ポリシーが組み込まれています。許可されるのは、同一オリジンのアセット、data: URL、ローカルで生成された blob: URL のみです。リモートの http(s) およびプロトコル相対の画像 URL はブラウザーによって拒否され、ネットワーク取得は一切発生しません。

    実際の動作は次のとおりです。

    • 相対パス(たとえば /avatars/<id>)で配信されるアバターと画像は引き続き表示されます。これには、UI が取得してローカルの blob: URL に変換する、認証付きアバタールートも含まれます。
    • インラインの data:image/... URL は引き続き表示されます。
    • Control UI によって作成されたローカルの blob: URL は引き続き表示されます。
    • GitHub リンクプレビューのアバターは、Gateway が GitHub の固定アバターホストから取得し、制限付きの data: URL として返します。オペレーターのブラウザーがリモートのアバターホストに接続することはありません。
    • チャンネルメタデータから出力されたリモートアバター URL は、Control UI のアバターヘルパーで除去され、組み込みのロゴまたはバッジに置き換えられます。そのため、侵害された、または悪意のあるチャンネルが、オペレーターのブラウザーに任意のリモート画像を取得させることはできません。

    これは常に有効で、設定による変更はできません。

    アバタールートの認証

    Gateway 認証が設定されている場合、Control UI のアバターエンドポイントには、API の他の部分と同じ Gateway トークンが必要です。

    • GET /avatar/<agentId> は、認証済みの呼び出し元にのみアバター画像を返します。GET /avatar/<agentId>?meta=1 は、同じルールに従ってアバターのメタデータを返します。
    • どちらのルートに対する未認証リクエストも拒否されるため(同階層のアシスタントメディアルートと同じ動作)、他の部分が保護されているホストでアバタールートからエージェント ID が漏洩することはありません。
    • Control UI はアバター取得時に Gateway トークンを Bearer ヘッダーとして転送し、認証済みの blob URL を使用するため、ダッシュボードでも画像が引き続き表示されます。

    Gateway 認証を無効にすると(共有ホストでは非推奨)、Gateway の他の部分と同様に、アバタールートも未認証になります。

    アシスタントメディアルートの認証

    Gateway 認証が設定されている場合、アシスタントのローカルメディアプレビューでは 2 段階のルートを使用します。

    • GET /__openclaw__/assistant-media?meta=1&source=<path> には通常の Control UI オペレーター認証が必要です。ブラウザーは利用可否を確認するときに、Gateway トークンを Bearer ヘッダーとして送信します。
    • 成功したメタデータレスポンスには、その正確なソースパスに限定された有効期間の短い mediaTicket が含まれます。
    • ブラウザーで表示される画像、音声、動画、ドキュメントの URL では、有効な Gateway トークンやパスワードの代わりに mediaTicket=<ticket> を使用します。このチケットは短時間で期限切れになり、別のソースを認可することはできません。

    これにより、再利用可能な Gateway 認証情報を表示可能なメディア URL に含めることなく、ブラウザー標準のメディア要素との互換性を維持できます。

    承認リンク

    オペレーターへの承認通知は、予約済みの ${controlUiBasePath}/approve/{approvalId} 名前空間で配信されるスタンドアロンの承認ドキュメントにディープリンクできます(たとえば /approve/<approvalId>、またはベースパスを設定している場合は /openclaw/approve/<approvalId>)。URL は承認の有効期間中は変わらず、自分のデバイス間で安全に転送できます。この URL は承認を識別するだけで、認可することはありません。

    • 1 セグメントの /approve/<approvalId> 名前空間は、すべての HTTP メソッドについて Plugin の HTTP ルートより先に Gateway によって予約されるため、Plugin ルートが承認ドキュメントを隠したり傍受したりすることはありません。
    • 承認ドキュメントを開くには、Control UI の他の部分と同じ Gateway 認証(トークン/パスワード、Tailscale Serve ID、または信頼済みプロキシ ID)が必要です。認証情報が承認 URL の一部になることはありません。
    • Control UI の配信が無効な場合、この名前空間へのリクエストは Plugin ハンドラーにフォールスルーせず、404 を返します。
    • 承認ドキュメントでのサインインは、そのページ限りの一時的なものです。同じブラウザーの完全な Control UI に保存された Gateway の選択や設定を上書きすることはありません。

    Gateway は dist/control-ui から静的ファイルを配信します。

    bash
    pnpm ui:build

    オプションの絶対ベース(固定アセット URL):

    bash
    OPENCLAW_CONTROL_UI_BASE_PATH=/openclaw/ pnpm ui:build

    ローカル開発(別の開発サーバー):

    bash
    pnpm ui:dev

    次に、UI の接続先を Gateway の WS URL(例: ws://127.0.0.1:18789)に設定します。

    Control UI が空白になる場合

    ブラウザーに空白のダッシュボードが読み込まれ、DevTools に有用なエラーが表示されない場合、拡張機能または早期に実行されるコンテンツスクリプトによって、JavaScript モジュールアプリの評価が妨げられた可能性があります。静的ページには、起動後に <openclaw-app> が登録されていない場合に表示される、プレーン HTML の復旧パネルが含まれています。

    ブラウザー環境を変更した後にパネルの Try again アクションを使用するか、次の項目を確認してから手動で再読み込みしてください。

    • すべてのページに挿入される拡張機能、特に <all_urls> コンテンツスクリプトを持つ拡張機能を無効にします。
    • プライベートウィンドウ、クリーンなブラウザープロファイル、または別のブラウザーを試します。
    • Gateway を実行したままにし、ブラウザーを変更した後も同じダッシュボード URL が表示されることを確認します。

    デバッグ/テスト: 開発サーバー + リモート Gateway

    Control UI は静的ファイルで構成されています。WebSocket の接続先は設定可能で、HTTP オリジンと異なっていてもかまいません。Vite 開発サーバーをローカルで実行し、Gateway を別の場所で実行する場合に便利です。

  • UI 開発サーバーを起動する

    bash
    pnpm ui:dev
  • gatewayUrl を指定して開く

    text
    http://localhost:5173/?gatewayUrl=ws%3A%2F%2F<gateway-host>%3A18789

    オプションの一回限りの認証(必要な場合):

    text
    http://localhost:5173/?gatewayUrl=wss%3A%2F%2F<gateway-host>%3A18789#token=<gateway-token>
  • 注意事項
    • gatewayUrl は読み込み後に localStorage に保存され、URL から削除されます。
    • gatewayUrl を介して完全な ws:// または wss:// エンドポイントを渡す場合は、ブラウザーがクエリ文字列を正しく解析できるように値を URL エンコードしてください。
    • token は、可能な限り URL フラグメント(#token=...)を介して渡してください。フラグメントはサーバーに送信されないため、リクエストログや Referer からの漏洩を防げます。従来の ?token= クエリパラメーターも互換性のため一度だけインポートされますが、フォールバックとしてのみ使用され、ブートストラップ直後に削除されます。
    • password はメモリ内にのみ保持されます。
    • gatewayUrl が設定されている場合、UI は設定または環境の認証情報にフォールバックしません。token(または password)を明示的に指定してください。明示的な認証情報がない場合はエラーになります。
    • Gateway が TLS の背後にある場合(Tailscale Serve、HTTPS プロキシなど)は、wss:// を使用します。
    • gatewayUrl は、クリックジャッキングを防ぐため、トップレベルウィンドウ(埋め込みではない)でのみ受け入れられます。
    • 公開されている local loopback 以外の Control UI デプロイでは、gateway.controlUi.allowedOrigins を明示的に設定する必要があります(完全なオリジン)。local loopback、RFC1918/リンクローカル、.local.ts.net、または Tailscale CGNAT ホストからのプライベートな同一オリジン LAN/Tailnet 読み込みは、Host ヘッダーのフォールバックを有効にしなくても受け入れられます。
    • Gateway の起動時に、有効なランタイムのバインドとポートから http://localhost:<port>http://127.0.0.1:<port> などのローカルオリジンが初期設定されることがありますが、リモートブラウザーのオリジンには引き続き明示的なエントリが必要です。
    • 厳密に管理されたローカルテスト以外では gateway.controlUi.allowedOrigins: ["*"] を使用しないでください。これは「あらゆるブラウザーオリジンを許可する」という意味であり、「現在使用しているホストに一致させる」という意味ではありません。
    • gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=true は Host ヘッダーによるオリジンフォールバックモードを有効にしますが、危険なセキュリティモードです。
    json5
    {  gateway: {    controlUi: {      allowedOrigins: ["http://localhost:5173"],    },  },}

    リモートアクセスの設定詳細: リモートアクセス

    関連項目

    Was this useful?
    On this page

    On this page