コンテンツへスキップ
ガイド

OpenClawのコントロールUI

ポート18789が提供するもの、そしてあなたに求めるもの

7分で読めます

OpenClawをインストールしてGatewayを起動し、ブラウザで使えるダッシュボードがあるとどこかで読んだとします。開くのはURLひとつで済みますが、表示されたページは誰からも渡されていないGateway secretを求めてきますし、ターミナルに表示されたLANアドレスはノートPCからはまったく応答しないこともあります。ここでは、コントロールUIが実際に何なのか、その唯一の入力欄が何を受け付けるのか、そしてその奥にあるエージェント一覧が何をするのかを説明します。

Gatewayがポート18789で提供するもの

  • コントロールUIは、ViteとLitで作られた小さなシングルページアプリで、Gateway自身が配信します。デフォルトのアドレスはhttp://your-host:18789/で、gateway.controlUi.basePathを設定すると、たとえば/openclawのような任意のプレフィックスが付きます。同じポートのGateway WebSocketと直接通信するため、別のサービスを起動する必要も、別のAPIホストを指定する必要もありません。
  • Gatewayのホスト上で、http://127.0.0.1:18789/またはhttp://localhost:18789/を開きます。ページがまったく読み込まれない場合は、まずopenclaw gatewayでGatewayを起動してください。
  • gateway.controlUi.enabledはホット適用されます。オフにすると、ボットと既存のGateway接続は動き続けたまま、Gatewayはダッシュボードのページとアセットの配信を停止します。オンに戻すと配信が再開し、不足しているアセットはバックグラウンドで準備されます。配信のベースパスやアセットのルートを変更する場合は、引き続きGatewayの再起動が必要です。
  • LAN URLがホスト上では動くのに別のマシンからは動かない場合は、ネットワークより先にホストを疑ってください。ネイティブWindowsでLANにバインドしている場合、Gatewayホスト上で127.0.0.1が動作していても、Windowsファイアウォールや組織が管理するグループポリシーが、案内されたLAN URLをブロックすることがあります。そのWindowsホスト上でopenclaw gateway status --deepを実行すると、ブロックされている可能性が高いポート、プロファイルの不一致、ポリシーによって無視されうるローカルのファイアウォールルールが報告されます。
ループバックでの直接接続でも、トークン認証やパスワード認証は省略されません。

自分のマシンで開いたページでもシークレットを求められる理由

認証はWebSocketのハンドシェイク中に行われます。ローカルからの訪問者に対してアプリがこっそり省略できるような、ログインフォームで行われるわけではありません。Gatewayは設定済みの共有シークレットをconnect.params.auth.tokenまたはconnect.params.auth.passwordのどちらかで受け付け、設定済みのどちらの値を適用するかはgateway.auth.modeで決まります。また、gateway.auth.allowTailscaleがtrueのときはTailscale Serveのアイデンティティヘッダーを、gateway.auth.modeがtrusted-proxyのときは信頼済みプロキシのアイデンティティヘッダーも受け付けます。Gateway認証はデバイスのペアリングより前に行われるため、ブラウザはペアリングリクエストを出すことすらできないうちに、まず共有シークレットで自分を証明しなければなりません。ループバックで直接接続するブラウザが共有シークレットなしで済むのは、gateway.auth.modeが明示的にnoneに設定されている場合だけです。この設定はgateway認証を完全に無効にするもので、コントロールUIの推奨構成ではありません。

1つの入力欄に、2種類の値

  • ログイン画面と「Settings」の「Gateway」は、同じ1つの「Gateway secret」欄を使います。トークンを貼り付けるか、パスワードを入力してください。モードを選ぶのはブラウザではありません。ホスト上のgateway.auth.modeがすでに選んでいます。
  • 接続に成功すると、UIはシークレットをセッションストレージに保持します。範囲は現在のブラウザタブとGatewayのオリジンに限られ、保持するのもGatewayがトークン認証を報告した場合だけです。パスワードはメモリ上にのみ置かれ、永続化されることはありません。デバイスがペアリングされると、以降の接続ではブラウザに保存されたデバイスごとのトークンを使えます。
  • 「Devices」、「Pair device」、「Copy setup code」の順にたどってコピーしたセットアップコードは、別の認証情報です。これを「Gateway secret」に貼り付けると、接続する前にUIがインラインのヒントを表示します。その内容は、このコードはOpenClawモバイルアプリの「Settings」の「Gateway」に入力するもので、コントロールUIが必要とするのは、Gatewayホスト上の対話型ターミナルでopenclaw gateway auth-token --showを実行して得られる共有トークンだ、というものです。

バグのように見えて、実はバグではない状態があります。ローカルのオンボーディングは、トークンとパスワードの選択肢を出さずに、デフォルトでトークンモードのGateway secretを生成し、既存のパスワードモードはそのまま維持します。パスワードを明示的に設定するには、--gateway-auth passwordまたは--gateway-passwordに任意の値を指定します。なお、Tailscale Funnelではパスワードモードが必須です。ところが、トークンが設定されていない状態でGatewayがトークンモードで起動すると、代わりにそのプロセス用の一時的なランタイムトークンを生成します。このトークンは設定に書き込まれないため復元できず、それを持たないループバックのブラウザは拒否されます。つまり目の前の入力欄は、あなたが読める場所のどこにも存在しない値を求めているのです。抜け出すには、openclaw doctor --generate-gateway-tokenを実行してGatewayを再起動し、対話型ターミナルでopenclaw gateway auth-token --showを実行して、その出力を「Gateway secret」に貼り付けます。この修復ツールがほかに何に手を加えうるかはOpenClaw doctorを、そもそもこのポートを持っているプロセスについてはOpenClaw Gatewayの解説をご覧ください。

エージェント一覧とチームモード

サイドバーで「Agents」を開くか、エージェント切り替えメニューで「All agents」を選ぶか、/agentsにアクセスすると、チャットではなくエージェント一覧が表示されます。設定済みのエージェントごとに1枚のカードがあり、アイデンティティ、モデル、現在の作業ステータス、最後のアクティビティ、メインチャットのプレビューが表示されます。作業中のエージェントが先頭に並び、その後ろに最近アクティブだったものが続きます。「Open chat」はそのエージェントのメインセッションに移動し、「Manage agents」は/settings/agentsを開き、「New agent」はcustodianのチャットを開きます。custodianはCLIと同じロールテンプレートを使って、チーフ・オブ・スタッフ、リサーチャー、ライター、レビュアー、またはその4つをそろえた小さなチームを提案し、何かを作成する前にオペレーターの承認を待ちます。「Show all agents」を選ぶとチームモードがオンになります。セッションは設定された一覧の順に、折りたためるエージェント見出しの下にまとめ直され、最上段は設定済みのGateway表示名を掲げたワークスペースの見出しになり、共有のページスコープはデフォルトで「All agents」になります。そのため「Automations」「Dashboards」「Sessions」「Tasks」「Usage」には、エージェントのアイデンティティが付いた複数エージェントの行が混在して表示されます。チームモードはブラウザ側の設定で、デフォルトではオフ、そのブラウザ内でgatewayごとに記憶されます。そのため、同じGatewayでも別のプロファイルから、あるいはOpenClawのリモートアクセス経由で開いた場合は、そちらでオンにするまでシングルエージェントモードで始まります。隔離された複数のエージェントが1つのGatewayプロセスの中にどう収まるのかは別のテーマです。詳しくは1つのGatewayで複数のエージェントを動かす方法をご覧ください。

Dialiでは

DialiはOpenClawをホスティングしているため、ポートもトークンも証明書も、もうあなたが気にする必要はありません。すべてのお客様が専用のインスタンスで自分のアシスタントを動かし、私たちはコントロールUIを平文のLAN URLではなく、実在のアドレス上でHTTPS経由で提供します。ランタイム設定はDialiのダッシュボードから生成され、リリースのたびに新しく書き出されるため、実行される内容は常にあなたが選択した内容と一致します。エージェントの状態は永続ボリュームに保存され、「バックアップ」アドオン(Maxに含まれます)を使えば、毎日のスナップショットとワンクリック復元を利用できます。ホスティングされたアシスタントに含まれる内容はDialiのマネージドOpenClawホスティングのページで、プランの一覧はDialiの料金のページでご確認いただけます。

  • ダッシュボードはGatewayそのもので、ポートは1つだけです。
  • ループバックのブラウザでも、設定済みのシークレットが必要です。
  • 一時的なランタイムトークンは、あとから読み出すことはできません。
今すぐ始める

読むだけでなく、作ってみましょう

エージェントを設定してチャネルを選べば、いつも開いているアプリの中でエージェントが働き始めます。