リモート IDE ブリッジが壊れる典型は二つ。エージェントがホーム全体に書き込むか、ゲートウェイが公網に晒されて劣化しても誰も気づかないか。読み取り専用のコードルート、書き込み可能なスクラッチ、ループバック ゲートウェイ、最小スコープのトークン、定期プローブを束ねれば、大半の不確実性は消える。

前提:リモート Mac に OpenClaw 導入済み(ヘルプ・OpenClaw ガイド)、VS Code/Cursor 等で SSH 越しに単一ルートを開くこと。OpenClaw・自動化 のゲートウェイ話を 権限可観測性 で補強。同機で RAG も回すなら ローカル RAG マトリクス のパス規律を併用。ホーム購入ページ でリージョン比較。

設計原則(2026 最小権限)

  • ゲートウェイはループバックのみ。 OpenClaw を 127.0.0.1 にバインドし、SSH リバーストンネルやプライベート転送経由でだけ IDE から届ける。未認証の制御面を公網に晒さない。
  • トークンはスコープを絞る。 workspace:read、ホワイトリスト化した exec、タスクに不要な権限は付けない。0600 ファイルに格納し OPENCLAW_TOKEN_FILE で読み込む。シェル履歴や Git 管理下の dotfiles に生のシークレットを流さない。
  • 二ルート構成。 ~/ide-bridge/repo はエージェントから読み取り専用。~/ide-bridge/scratch にビルド成果物・キャッシュ・プローブログ・一時モデルパスを集約する。
  • diff は要約で十分なことが多い。 自動作業の前後で git diff --stat(とステージ済み)を追記し、人と自動化が変更規模で合意する。
  • プローブの前に doctor。 設定を大きく変えた直後は openclaw doctor。環境が健全なら高頻度の /health を回し、半壊プロセスを緑表示しない。

再現手順(コピー用)

1. ディレクトリと権限。 リモート Mac で次を実行します。

mkdir -p ~/ide-bridge/repo ~/ide-bridge/scratch/probe # コードを repo に同期したあと、書き込みビットを外す例 chmod -R a-w ~/ide-bridge/repo

人手編集が要るなら worktree/書き込み可能クローン/ACL で分離。ゲートウェイ用は読み取り専用推奨。不変条件は 自動化が既定で正典ツリーを書き換えないこと。

2. ゲートウェイ用トークンを発行。 インストール済み OpenClaw CLI で、IDE ブリッジに必要な最小スコープだけ付与(サブコマンド名は版により異なるのでリリースノート優先)。~/.openclaw/gateway.token に書き chmod 600~/.zprofile または launchd の EnvironmentVariablesexport OPENCLAW_TOKEN_FILE="$HOME/.openclaw/gateway.token"。リポジトリの env や commit hook に生トークンを貼らない。

3. ループバックでゲートウェイ起動。 IDE 拡張が期待するポートに合わせます。

openclaw gateway listen \ --bind 127.0.0.1:18765 \ --token-file "$HOME/.openclaw/gateway.token"

常駐は launchd+KeepAlive、ログは ~/ide-bridge/scratch/logs/gateway.log。ノートから ssh -R 18765:127.0.0.1:18765 user@remote で IDE→Mac ループバックのみ。公網バインド禁止。

4. IDE のワークスペースルート。 Remote-SSH で ~/ide-bridge/repo を開く。OUT_DIR、一時ディレクトリ、テスト成果物、OpenClaw キャッシュはビルドスクリプトやワークスペース設定で ~/ide-bridge/scratch へ。読み取り専用ツリーへの偶発書き込みと、サンドボックスを壊す chmod 運用を防ぐ。

5. diff 要約の固定。 自動化エントリの前後で日次ログへ追記します。

LOG=~/ide-bridge/scratch/probe/diff-$(date +%F).log { echo "=== $(date -Iseconds) pre ==="; git -C ~/ide-bridge/repo diff --stat; \ git -C ~/ide-bridge/repo diff --cached --stat; } >> "$LOG" # ... タスク実行 ... { echo "=== $(date -Iseconds) post ==="; git -C ~/ide-bridge/repo diff --stat; \ git -C ~/ide-bridge/repo diff --cached --stat; } >> "$LOG"

全文 diff が無くても stat で規模合意と巻き戻し判断がしやすい。

6. doctor と定期ヘルス探針。 モデル・パス・トークンを変えたあとベースラインを残す。

openclaw doctor --json > ~/ide-bridge/scratch/probe/doctor-last.json

続けて launchd で 5 分間隔(認証ヘッダは自環境に合わせて調整)の例。

curl -fsS -H "Authorization: Bearer $(cat ~/.openclaw/gateway.token)" \ http://127.0.0.1:18765/health \ || echo "$(date -Iseconds) health FAIL" >> ~/ide-bridge/scratch/probe/health.log

典型原因はディスク満杯・ポート衝突・古いトークン・TCP だけ生きるワーカー詰まり。doctor と同一ユーザー curl で切り分け。CPU ティアより FS/サービス衛生の話(料金)。

トラブルシュート FAQ

401/403。 トークン 0600Bearer 字面、ローテ後の全プロセス再起動。新旧シークレット混在に注意。

EROFS。 repo が読み取り専用。worktree/scratch+パイプライン/対話のみ一時緩和。ゲートウェイ用は緩めない。

doctor がキャッシュを怒る。 ~/ide-bridge/scratch/openclaw-cache に固定。

diff stat が空。 git -C.git ルートか。サブモジュールは別 stat。

ハングだが health 緑。 プローブを深めるか doctor 時系列比較。FD 枯渇・launchd スロットルも疑う。

SSH が夜間切断。 ServerAliveIntervalClientAliveInterval または再接続ウォッチドッグを scratch/probe へ。

まとめ: 最小権限は読み取り専用 repo、書き込み scratch、ループバック ゲートウェイ、スコープ付きトークン。可観測性は doctor --json のベースライン、diff stat の痕跡、定期 /health。上の順で揃えれば、実験一つにマシン全体を明け渡さずに IDE ブリッジを載せられる。