ホスト型 Andon:どこからでもボードを
Andon は ローカルファーストで、永久に無料でセルフホストできます — これが既定のままで、何も共有しません。 このガイドが扱うのは、オプションでオプトイン式の ホストモードです。暗号文だけを中継し、エージェントの内容を 読み取れない(コンテンツブラインドな)中継を通じて、どこからでもボードを見て(スマホに通知を受け取り)ましょう。
他の人と共有するために中継をデプロイしますか?deploy-relay.md を参照してください。
これは何か(1 分で)
Section titled “これは何か(1 分で)”- すべてのステータスイベントは、送信される前に あなたのマシン上でエンドツーエンドに暗号化 されます。
- 中継 はその 暗号文 を保存・転送するだけで、鍵を持つことはありません — 中継に見えるのは大まかな ルーティング情報だけです(どのボードか、ハッシュ化されたセッション ID、working/waiting/done/error/idle、タイミング)。
- セルフホストと 同じボード を開きます。復号は あなたのブラウザ 内で、リンクの
#fragmentに含まれる鍵を 使って行われます(鍵はサーバーに送られません)。Service Worker も同じ方法でスマホのプッシュ通知を復号します。 - ローカルの
andon serveは不要 です — フックの通常の送信経路が、封印されたコピーも一緒に転送します。
使い方は 2 通りあります:
| 中継を動かす人 | 使える人 | |
|---|---|---|
| A. 自分の中継 | あなた(自分が管理するマシン上の andon relay) | あなただけ |
| B. 共有中継 | 運用者が、1 つの公開 HTTPS URL で | 多くの人 — それぞれが 同じ URL の下で、自分専用の隔離されたボードを持ちます |
どちらも同じコードで、B は A を公開しただけです。マルチテナント を参照してください。
クイックスタート
Section titled “クイックスタート”# 1) Run a relay (yours), or skip this and use a shared relay URL someone gives youandon relay # listens on :8788 (see deploy-relay.md for HTTPS/public use)
# 2) Opt in — generates a key that NEVER leaves your machine, prints your board linkandon hosted setup http://127.0.0.1:8788# → prints: http://127.0.0.1:8788/b/<board-id>#k=<key>
# 3) Open that link in a browser. Done — your agents now show up there.andon hosted setup はまず、中継が何を見られて何を見られないかを正確に示し、[y/N] を尋ねます
(既定は No)。有効にすると、Claude Code / Codex のすべてのステータスが(封印された状態で)中継にも転送されます。
ボードリンクはパスワードのように扱ってください — #k=… の部分が あなたの復号鍵そのもの です。スクリーンショットを
撮ってチャットに貼らないでください。パスワードマネージャーに保存しましょう。(または、ターミナルに表示される QR をスキャンすれば、コピー&ペーストなしでペアリングできます。)
ボードを開く
Section titled “ボードを開く”- 同じコンピューター上で:
http://127.0.0.1:<port>/b/<board-id>#k=<key>を開きます。localhost/127.0.0.1は セキュアコンテキストなので、ブラウザ内での復号は素の HTTP でも動作します。 - スマホ/別のデバイスで: 中継が HTTPS でアクセスできる必要があります(ブラウザは復号とプッシュ通知に
セキュアコンテキストを要求します)。簡単な方法が 2 つあります:
- Tailscale(すでに使っているもの):
tailscale serve --bg <relay-port>→https://<machine>.<tailnet>.ts.netのアドレスが得られます。スマホでhttps://…ts.net/b/<board-id>#k=<key>を開きます。 - 本物のドメイン + 証明書(共有中継の場合)— deploy-relay.md を参照してください。
- Tailscale(すでに使っているもの):
スマホの通知(PWA)
Section titled “スマホの通知(PWA)”- スマホでボードリンクを HTTPS 経由で開きます。
- iPhone: 共有 → ホーム画面に追加(iOS はインストール済みの PWA からの Web Push のみ許可します)。その後、 ホーム画面から開きます。Android/Chrome: 通常のタブから動作します。「ホーム画面に追加」は任意です。
- 通知を有効化 をタップ → 通知を許可します。エージェントが最初に あなたの対応を必要とした とき、または 行き詰まった ときに、ボードを閉じていてスマホがロックされていても、通知が届きます。通知のテキストは あなたのスマホ上 で復号され、中継がそれを見ることはありません。
andon hosted status # is hosted on? which relay + board idandon hosted pair # re-print your board link — add a device, or recover a lost linkandon hosted off # stop forwarding — your agents go back to local-onlyandon verify <relay-url> # check the relay serves the exact open-source code (see below)オンとオフの切り替えは自由です。off はローカルの設定(~/.andon/hosted.json)を削除するだけです。
中継が見えるもの/見えないもの
Section titled “中継が見えるもの/見えないもの”| ❌ 読み取れない | あなたのプロンプト、コード、プロジェクト名、タイトル、メッセージ、レバレッジの集計 |
| • 見える | あなたがアクティブであることと、おおよその時刻(イベントごとのタイミング)、セッション数、あなたの IP、暗号文サイズの区分 |
| • できる | イベントを遅延/保留する、または 過去に実際にあった プッシュ通知の 1 つを再表示する(すでに解決済みのセッションに対する古い「対応が必要」) — ただし 新しいコンテンツを捏造することはできず、それを読むこともできません |
セルフホストは 何も 共有せず、既定のままです。ホストモードは、利便性とメタデータのトレードオフを率直に示したものです。
「信頼するだけでなく、検証できる」(透明性)
Section titled “「信頼するだけでなく、検証できる」(透明性)”Web ボードのコードは 中継から配信される ため、「侵害されても読めない」という完全な保証が成り立つのは、 インストール済みのアプリの場合だけです。Web ボード については、正直な主張は 「あなたに こっそり バックドアを仕掛けることはできない」 というものです:
andon verify https://relay.example.comこれは、中継が実際に配信しているボードと Service Worker を取得してハッシュ化し、あなた自身の
オープンソースのコピーのバイト列と比較します。一致 すれば、中継は監査済みのコードをそのまま配信している —
鍵を盗む隠し細工はない、ということです。同じバージョンで 不一致 が続く場合は、改変されたコードを配信している
ということです。鍵を預けてはいけません。中継は GET /version で自身のハッシュも宣言します。
マルチテナント — 1 つの URL、複数のボード
Section titled “マルチテナント — 1 つの URL、複数のボード”中継は 設計上マルチテナント です:1 つのプロセスが多くのボードを配信し、入り口はユーザーごとの サブドメインではなく 単一の URL です。
https://relay.example.com (one URL = the shared entry) ├── /b/<A's board-id>#k=<A's key> only A's key decrypts it ├── /b/<B's board-id>#k=<B's key> only B's key decrypts it └── /b/<C's board-id>#k=<C's key> only C's key decrypts it the relay holds only ciphertext for all of them全員が andon hosted setup https://relay.example.com を実行し、それぞれがその 1 つの URL の下で
256 ビットの推測不可能な ボード ID を取得します。隔離は 2 層構成で、テストされています:
- 誰も他人を読めない: ボードごとの鍵
K。中継は暗号文のみを保存します(コンテンツブラインド)。 - 誰も他人に書き込めない: ボード ID は読み取りの権限です。書き込みには、そのボード自身の取り込みトークンが
必要です(B のボードに対する A のトークン →
401)。
アップグレード(インストール済みの PWA)
Section titled “アップグレード(インストール済みの PWA)”自動です — アプリストアも、再ペアリングも不要。
- ボードの HTML は
no-storeで配信され、何もキャッシュしないため、起動するたびに最新版が読み込まれます。 - Service Worker は自動更新されます(ブラウザは再起動・ナビゲーション・約 24 時間ごとに
/sw.jsを再チェックします。skipWaiting()を呼ぶので、新しいバージョンがすぐに引き継ぎます)。 - 鍵
Kは、サーバーではなく あなたのデバイス上のブラウザの IndexedDB に保存され、更新後も残ります → ペアリングは維持されます。PWA を再起動するだけで最新版になります。
(新しい デバイス は一度だけペアリングが必要です — そのデバイスの IndexedDB にはまだ K がありません。)
トラブルシューティング
Section titled “トラブルシューティング”- ボードリンク(
#k=…)をなくした? それは中継上にはありません — 中継はあなたの鍵を一度も持っていません。 リンクは、andon hosted setupを実行したマシン上にあります:そこでandon hosted pairを実行すると完全なリンクが 再表示されます(または~/.andon/hosted.jsonを読んで、relayUrl+/b/+boardId+#k=+keyをつなげます)。 一度も ペアリングしていないデバイスは、中継からリンクを復元できません — そのマシンに戻ってリンクを取得し、新しい デバイスで一度開いてください。 - 「再ペアリング — この端末でボードのリンクをもう一度開いてください」 このデバイスには鍵がありません(新しい
デバイス、ストレージのクリア、または
#kが取り除かれたホーム画面からの起動)。完全なボードリンク(#k=…付き)を もう一度開いてください。鍵が再キャッシュされます。 - ボードは読み込まれるが、すべて空白/復号されない。 おそらく
#k=…の部分 なし のリンクを開いています (#で切り詰めるツールがあります)。リンク 全体 をコピーし直してください。 - 古いカードが消えない。 カードは、エージェントが
done/goneを送信したとき、または 6 時間の TTL 経過後に 消えます。終了したセッションは通常は自動的に片付きます。停止した/テスト用のセッションは、TTL まで残ります。 - スマホにプッシュ通知が来ない。 プッシュ通知には HTTPS が必要です(そのため
127.0.0.1経由のボードは プッシュしません)。iPhone ではまずボードを ホーム画面に追加 する必要があり、さらに 通知を有効化 を タップして通知を許可する必要があります。 - すべて停止:
andon hosted off(転送を停止)と、自分の中継を動かしていた場合はlsof -ti tcp:<port> | xargs kill。