macOS companion app
IPC macOS
Arsitektur IPC macOS OpenClaw
Model saat ini: socket Unix lokal menghubungkan layanan host node ke aplikasi macOS untuk persetujuan exec + system.run. CLI debug openclaw-mac ada untuk pemeriksaan discovery/connect; aksi agen tetap mengalir melalui Gateway WebSocket dan node.invoke. Otomasi UI menggunakan PeekabooBridge.
Tujuan
- Satu instans aplikasi GUI yang memiliki semua pekerjaan yang berhadapan dengan TCC (notifikasi, perekaman layar, mikrofon, speech, AppleScript).
- Surface kecil untuk otomasi: Gateway + perintah node, ditambah PeekabooBridge untuk otomasi UI.
- Izin yang dapat diprediksi: selalu bundle ID bertandatangan yang sama, diluncurkan oleh launchd, sehingga pemberian TCC tetap melekat.
Cara kerjanya
Gateway + transport node
- Aplikasi menjalankan Gateway (mode lokal) dan terhubung ke sana sebagai node.
- Aksi agen dilakukan melalui
node.invoke(misalnyasystem.run,system.notify,canvas.*).
Layanan node + IPC aplikasi
- Layanan host node headless terhubung ke Gateway WebSocket.
- Permintaan
system.runditeruskan ke aplikasi macOS melalui socket Unix lokal. - Aplikasi menjalankan exec dalam konteks UI, menampilkan prompt jika diperlukan, dan mengembalikan output.
Diagram (SCI):
Agent -> Gateway -> Node Service (WS)
| IPC (UDS + token + HMAC + TTL)
v
Mac App (UI + TCC + system.run)
PeekabooBridge (otomasi UI)
- Otomasi UI menggunakan socket UNIX terpisah bernama
bridge.sockdan protokol JSON PeekabooBridge. - Urutan preferensi host (sisi klien): Peekaboo.app → Claude.app → OpenClaw.app → eksekusi lokal.
- Keamanan: host bridge memerlukan TeamID yang diizinkan; jalur keluar DEBUG-only dengan UID yang sama dijaga oleh
PEEKABOO_ALLOW_UNSIGNED_SOCKET_CLIENTS=1(konvensi Peekaboo). - Lihat: penggunaan PeekabooBridge untuk detail.
Alur operasional
- Restart/rebuild:
SIGN_IDENTITY="Apple Development: <Developer Name> (<TEAMID>)" scripts/restart-mac.sh- Mematikan instans yang ada
- Build + package Swift
- Menulis/bootstrap/kickstart LaunchAgent
- Instans tunggal: aplikasi keluar lebih awal jika instans lain dengan bundle ID yang sama sedang berjalan.
Catatan hardening
- Sebaiknya mewajibkan kecocokan TeamID untuk semua surface dengan hak istimewa.
- PeekabooBridge:
PEEKABOO_ALLOW_UNSIGNED_SOCKET_CLIENTS=1(hanya DEBUG) dapat mengizinkan pemanggil dengan UID yang sama untuk pengembangan lokal. - Semua komunikasi tetap hanya lokal; tidak ada socket jaringan yang diekspos.
- Prompt TCC hanya berasal dari bundle aplikasi GUI; pertahankan bundle ID bertandatangan tetap stabil di beberapa build ulang.
- Hardening IPC: mode socket
0600, token, pemeriksaan peer-UID, challenge/response HMAC, TTL pendek.