OpenAB Connect + Remote
Mac と iPhone · 中国語、広東語、英語、日本語、韓国語の音声
暗号化されたまま、自分のプライベート環境に分散して動きます。
アプリを閉じても、動き続けます。
Mac App Store でダウンロード無料 · macOS 13 以降
いちばん心を動かされたのは、機能そのものではなく考え方です。多くの AI エージェントツールはまず「動く」ものを作り、安全は後から足す。このプロジェクトは逆で、まず信頼境界を考え抜いています。頭脳は使い捨てのサンドボックスに、手足は期限付きで取り消せる権限に、接続は常に制御される側から発信し、ポートは一切開かない。これらの決定は互いに矛盾せず、公開の契約と ADR に書き残されている。作者が本当にシステムセキュリティを理解していて、「安全」をマーケティング用語として使っていないことが分かります。自らの制約についても文書が正直で、初期段階のプロジェクトでは珍しいことです。
痛点をまさに突いていて、アーキテクチャ設計は非常に先見性があります(Agentic Security)。
「コーディングエージェントに本物のデスクトップを触らせる」ものの中で、私が見た限り最も正しい隔離モデルに近い一つです。
引用は中国語の原文からの翻訳です。

13 種類のエージェント CLI に、それぞれのイメージ — Claude Code、Codex、Cursor、Kiro、Gemini、Copilot など。セッションごとに選べます。native はエージェントを含みません。
シェルはコンテナの中で動きます。アプリを閉じても動き続け、次に開くと同じ分割レイアウトに戻り、出力は止まったバイト位置から続きます。
ポートを開けず、ingress も公開エンドポイントもありません。ネットワーク上の識別を持つのは Tailscale サイドカーだけで、ランタイムは loopback だけを listen します。
デプロイするのはごく普通の pod なので、準拠したクラスタなら何でも動きます — 空いているマシンの k3s、EKS、GKE。あるいは AWS ECS Fargate なら、クラスタ自体を運用する必要がありません。
MIT ライセンスで openabdev/openab-pty にあります。何を動かすのかを先に確認できますし、公開された契約に沿って自分のクライアントも書けます。
打ち込むだけでなく — openab を通じて、同じセッションをチャットや音声で動かせます。
iPhone がプライベートなプッシュ・トゥ・トークリモコンに。音声は端末上で文字化され、安全なテキストだけを選択中の Mac セッションへ送ります。
App Store でダウンロードOpenAB landscape
リモートサンドボックス、自分の Mac、手元のクライアントが、Tailscale でひとつのプライベートなループになります。SaaS の制御プレーンはありません。
Mac と iPhone · 中国語、広東語、英語、日本語、韓国語の音声
隔離されたリモートサンドボックス内の Coding CLI
自分の Mac の Xcode、Simulator、ブラウザ、GUI ツール
対応しています——ペイン切り替えとディクテーションを通常のキーボードショートカット(⌘[ / ⌘] で分割ペイン間を移動、⌃⌘M でディクテーション)として公開しているので、キー入力を合成できるものなら何でも、部屋の向こうから操作できます。手順ガイドは 2 本:
方向パッドやリングでペインを切り替え(画面の HUD がどれかを表示)、あるボタンで送信、別のボタンで Mac のマイク(AirPods を含む)を使ったオンデバイスのディクテーションを開始します。
対応していますが、ひと手間の設定が必要です。GKE の既定の kubeconfig は、トークンが必要になるたびに外部の認証ヘルパー gke-gcloud-auth-plugin を実行します。OpenAB Connect は Mac App Store で配布されており、App Sandbox はサンドボックス化されたアプリがそのような外部ヘルパーを実行することを許可しません。そのため、それに依存する kubeconfig ではデプロイできません。
回避策は static kubeconfig です。exec ブロックの代わりにトークンやクライアント証明書を直接持つ kubeconfig を、gcloud が制限なく動く自分のマシンで生成し、アプリにそのファイルを指定します。Google サービスアカウントキーに基づく kubeconfig が持続的な形です。短命トークンでも動きますが期限切れになります。EKS でこの問題が起きないのは、アプリが外部プラグインではなく独自の SDK で AWS と通信するからです。GKE でも同じ隙間を埋めるため、ネイティブな GCP 認証情報がロードマップにあります。
kubectl exec や SSH と何が違うのですか?どちらもシェルは得られますが、生き残るセッションは得られません。exec の途中でターミナルを閉じれば、プロセスは接続と一緒に死にます。ここではセッションがコンテナの中で生きているので、アプリを閉じても閉じるのは WebSocket ひとつだけです。次の起動で出力が止まったバイト位置から接続し直し、同じ分割レイアウトを復元します。デプロイの形も違います。クライアントに kubeconfig は不要、port-forward も不要で、資格情報が許可するのはクラスタ全体ではなくセッション 1 つです。
Herdr はエージェントマルチプレクサ — コーディングエージェント版の tmux です。各エージェントに本物の PTY を与え、切断されても生かし続け、各ペインを working/blocked/idle に分類し、CLI と socket API を備えています。永続性と一覧性という点は、このアプリとほぼそのまま重なります。違うのはエージェントがどこで動くかです:
uid 1000、sudo なし、ホストの資格情報なし、ルートは読み取り専用、ワークスペースは使い捨て — WireGuard の tailnet 経由で、ポートは一切開けません。影響範囲はそのコンテナで、あなたのマシンではありません。ノートを閉じても、スリープさせても、別のノートに変えても動き続けます。違いはサンドボックス化であって、マルチプレクスではありません。Herdr にできて OpenAB Connect にできないこともあります。ペインの状態判定、スクリプト可能なローカル API、そしてインフラを一切必要としない点です。何もデプロイしたくないなら、Herdr のほうが適した答えです。
Mac 上のエージェントは、あなたとして動きます。SSH 鍵、クラウドの資格情報、npm や GitHub のトークン、ディスク上のすべてのリポジトリに手が届くので、間違ったコマンドはあなたのマシンでの間違ったコマンドになります。こちらのシェルはそれらを一切持たず、ワークスペースはセッションとともに破棄され、複数のエージェントが同じ作業ツリーや同じポートを奪い合わずに同時に働けます。ノートを閉じてもスリープさせても、何も止まりません。代償は実在します。エージェントはローカルのファイルを見られないので作業は git 経由になり、イメージの初回取得には数分かかり、クラスタか AWS アカウントが必要です。すでに開いているリポジトリを一行直すだけなら、ローカルで動かすほうが簡単で、これは何の足しにもなりません。
この二つは設計として補完的です。分かれ目は、何を気にするかです:
補完的であることは比喩ではなく構造です。PTY のイメージは FROM ghcr.io/openabdev/openab なので、シェルはエージェントが動いているのと同じイメージの中で開き、同じ CLI と同じワークスペースを持ちます。作業が途中で止まっていれば、その場で接続して見ます。どちらも他方を必要とせず、セッションモデルは意図的に何も共有しません — バイトストリームの生存はバイトとソケットで定義され、ターンでは定義されないからです。
詳しくは openab-pty の 設計ドキュメントにあります。そして OpenAB Connect は openab-pty クライアント契約の最初のクライアント実装です — 契約は公開されているので、資格情報を持てて WebSocket を話せるものなら、次の実装になれます。
意図的にほとんど何もできません。uid 1000 で開き、sudo なし、サービスアカウントトークンなし、ホストの資格情報なし、ルートファイルシステムは読み取り専用、ワークスペースは使い捨てです。セッションのシェルは loopback でランタイムに到達できます。だからこそ管理用の資格情報はコンテナの中に置きません。アタッチトークンが許可するのは 1 セッションだけで、期限もあります。
ありません。ランタイムは 127.0.0.1 にバインドし、TLS 鍵を持ちません。同じ pod の Tailscale サイドカーだけがネットワーク上の識別を持ち、両者は pod のネットワーク名前空間の中で loopback を通して会話します。通信は WireGuard の tailnet を通って届き、暗号化はそこが担います。
何も届きません。ここにサービスはありません。アプリが接続する先はすべて、あなたが自分のクラスタか自分の AWS アカウントにデプロイしたものです。アカウント登録も、解析も、テレメトリもありません。入力した資格情報は macOS のキーチェーンに留まり、あなた自身のランタイム以外へは送信されません。
できます。ランタイムは MIT ライセンスで openabdev/openab-pty にあり、クライアント契約も公開しているので、このアプリを使わずに自分のクライアントを書くこともできます。このアプリはその契約の一実装で、オープンソースではありません。
試せます。アプリメニューの Demo Mode は、サンプル接続 2 つと収録済みのターミナルだけで動き、ネットワーク接続は一切行いません。何もデプロイする前に評価できるようにするためのものです。
3 クリックのあと、8 つの手順が走ります。資格情報を生成してキーチェーンに保存し、namespace を確認し、secret とボリュームを作成し、pod を適用し、起動を待ち、tailnet への参加を待ち、管理プレーンを検証します。マニフェストを書く必要はありません。あるイメージの初回デプロイは、クラスタがそれを取得するため数分かかることがあります。
ワークスペースは破棄されます。ここは確実です。そのセッションのためだけに存在し、セッションを削除すれば消えます。
確実でないのはプロセスです。セッションを削除するとそのセッションのプロセスグループは終了しますが、意図的にそのグループを離れたプロセス — nohup や setsid で起動したバックグラウンドジョブなど — は、pod や task が置き換わるまで生き残ることがあります。同じサンドボックスの中に閉じたままで、新たに何かへ手が届くわけではありませんが、その pod の CPU とメモリを使い続けます。
そのためアプリでは、きれいに終了したとは言わず best-effort と明示しています。何も残らないことを確実にするなら、pod か task を削除してください。
まだできません — 現在開発中です。今日は各セッションが独立していて、あなたが個々のエージェントに指示を出し、エージェント同士が仕事を委譲することはありません。
設計は公開されています。OpenAB の Agent Control Plane ADR に基づくもので、チャットプラットフォームを経由せず ACP over WebSocket でエージェントが直接委譲できるようにする、ハブ&スポーク型の登録・ルーティングサービスです。チャット経由はレート制限と遅延を招き、人間のためのチャンネルにオーケストレーションのノイズを流し込みます。構成は三つ:誰が生きていてどのラベルを持つかの Registry、名前/ラベル/namespace で振り分ける Router、委譲の深さ・循環・namespace・allowlist を扱う Policy です。
その設計のひとつはこのアプリの考え方と一致します。エージェントは制御プレーンへ外向きに接続するので、ネットワークをまたいで動かすのに、どちら側にも受信ポートは要りません。
ADR はマージ済みで、実装はまだ出荷していません。参加を歓迎します — 議論はあの文書から始まります。