macOS companion app
IPC macOS
Arsitektur IPC OpenClaw macOS
Soket Unix lokal menghubungkan layanan host Node ke aplikasi macOS untuk persetujuan eksekusi dan system.run. CLI debug openclaw-mac (apps/macos/Sources/OpenClawMacCLI) tersedia untuk pemeriksaan penemuan/koneksi; tindakan agen tetap mengalir melalui WebSocket Gateway dan node.invoke. Jalur computer.act yang didukung Node menjalankan otomatisasi Peekaboo tertanam dalam proses; klien Peekaboo mandiri menggunakan PeekabooBridge.
Tujuan
- Satu instans aplikasi GUI yang menangani semua pekerjaan yang berinteraksi dengan TCC (notifikasi, perekaman layar, mikrofon, ucapan, AppleScript).
- Permukaan kecil untuk otomatisasi: Gateway + perintah Node,
computer.actdalam proses, serta PeekabooBridge untuk klien otomatisasi UI mandiri. - Izin yang dapat diprediksi: selalu menggunakan ID bundel bertanda tangan yang sama, diluncurkan oleh launchd, sehingga pemberian izin TCC tetap berlaku.
Cara kerjanya
Transportasi Gateway + Node
- Aplikasi menjalankan Gateway (mode lokal) dan terhubung dengannya sebagai Node.
- Tindakan agen dilakukan melalui
node.invoke(misalnyasystem.run,system.notify,canvas.*). - Perintah Node mencakup
canvas.*,camera.snap,camera.clip,screen.snapshot,screen.record,computer.act,system.run, dansystem.notify. - Node melaporkan peta
permissionsagar agen dapat melihat apakah akses layar, kamera, mikrofon, ucapan, otomatisasi, atau aksesibilitas tersedia.
Layanan Node + IPC aplikasi
- Layanan host Node tanpa antarmuka grafis terhubung ke WebSocket Gateway.
- Permintaan
system.runditeruskan ke aplikasi macOS melalui soket Unix lokal (ExecApprovalsSocket.swift). - Aplikasi melakukan eksekusi dalam konteks UI, meminta konfirmasi jika diperlukan, dan mengembalikan keluaran.
Diagram (SCI):
Agen -> Gateway -> Layanan Node (WS) | IPC (UDS + token + HMAC + TTL) v Aplikasi Mac (UI + TCC + system.run)PeekabooBridge (otomatisasi UI)
- Alat
computerbawaan agen tidak menggunakan soket ini. Node macOS yang dipasangkan menjalankancomputer.actdalam proses aplikasi dengan layanan Peekaboo tertanam. - Otomatisasi UI menggunakan soket UNIX terpisah (
~/Library/Application Support/OpenClaw/<socket>) dan protokol JSON PeekabooBridge. - Urutan preferensi host (sisi klien): Peekaboo.app -> Claude.app -> OpenClaw.app -> eksekusi lokal.
- Keamanan: host jembatan memerlukan TeamID yang masuk daftar izin (
PeekabooBridgeHostCoordinatorbawaan mengizinkan tim tetap serta tim penandatanganan aplikasi itu sendiri); jalur darurat UID yang sama khusus DEBUG dilindungi olehPEEKABOO_ALLOW_UNSIGNED_SOCKET_CLIENTS=1(konvensi Peekaboo). - Lihat: Penggunaan PeekabooBridge untuk detailnya.
Alur operasional
- Mulai ulang/bangun ulang:
scripts/restart-mac.shmenghentikan instans yang ada, membangun ulang melalui Swift, mengemas ulang, dan meluncurkannya kembali. Skrip ini secara otomatis mendeteksi identitas penandatanganan yang tersedia dan beralih ke--no-signjika tidak ada yang ditemukan; berikan--signuntuk mewajibkan penandatanganan (gagal jika tidak ada kunci yang tersedia) atau--no-signuntuk memaksakan jalur tanpa tanda tangan.SIGN_IDENTITYyang ditetapkan di lingkungan akan dihapus pada jalur bertanda tangan, sehingga deteksi otomatis identitas milikscripts/codesign-mac-app.shmemilih sertifikat tersebut. - Instans tunggal: aplikasi memeriksa
NSWorkspace.runningApplicationsuntuk ID bundel duplikat dan keluar jika ditemukan lebih dari satu instans (isDuplicateInstance()dalamMenuBar.swift).
Catatan penguatan keamanan
- Sebaiknya wajibkan kecocokan TeamID untuk semua permukaan dengan hak istimewa.
- PeekabooBridge:
PEEKABOO_ALLOW_UNSIGNED_SOCKET_CLIENTS=1(khusus DEBUG) dapat mengizinkan pemanggil dengan UID yang sama untuk pengembangan lokal. - Semua komunikasi tetap hanya lokal; tidak ada soket jaringan yang diekspos.
- Permintaan TCC hanya berasal dari bundel aplikasi GUI; pertahankan kestabilan ID bundel bertanda tangan di seluruh proses pembangunan ulang.
- Penguatan soket persetujuan eksekusi: mode berkas
0600, token bersama, pemeriksaan UID rekan (getpeereid), tantangan/respons HMAC-SHA256, dan TTL singkat pada permintaan.
Terkait
Was this useful?