macOS companion app
macOS IPC
OpenClaw macOS IPC mimarisi
Geçerli model: yerel bir Unix socket, Node host servisinin macOS uygulamasına bağlanmasını sağlar; bu exec onayları + system.run içindir. Keşif/bağlantı kontrolleri için bir openclaw-mac debug CLI vardır; ajan eylemleri yine de Gateway WebSocket ve node.invoke üzerinden akar. UI otomasyonu PeekabooBridge kullanır.
Hedefler
- TCC ile ilgili tüm işleri (bildirimler, ekran kaydı, mikrofon, konuşma, AppleScript) sahiplenen tek GUI uygulama örneği.
- Otomasyon için küçük bir yüzey: Gateway + Node komutları ve UI otomasyonu için PeekabooBridge.
- Öngörülebilir izinler: her zaman aynı imzalı bundle ID, launchd tarafından başlatılır; böylece TCC izinleri kalıcı olur.
Nasıl çalışır
Gateway + Node taşıması
- Uygulama Gateway'i çalıştırır (yerel mod) ve ona bir Node olarak bağlanır.
- Ajan eylemleri
node.invokeile gerçekleştirilir (örn.system.run,system.notify,canvas.*).
Node servisi + uygulama IPC
- Headless bir Node host servisi Gateway WebSocket'e bağlanır.
system.runistekleri yerel bir Unix socket üzerinden macOS uygulamasına iletilir.- Uygulama exec işlemini UI bağlamında gerçekleştirir, gerekirse istem gösterir ve çıktıyı döndürür.
Diyagram (SCI):
Agent -> Gateway -> Node Service (WS)
| IPC (UDS + token + HMAC + TTL)
v
Mac App (UI + TCC + system.run)
PeekabooBridge (UI otomasyonu)
- UI otomasyonu,
bridge.sockadlı ayrı bir UNIX socket ve PeekabooBridge JSON protokolünü kullanır. - Host tercih sırası (istemci tarafı): Peekaboo.app → Claude.app → OpenClaw.app → yerel yürütme.
- Güvenlik: bridge host'ları izin verilen bir TeamID gerektirir; DEBUG-only aynı UID kaçış kapısı
PEEKABOO_ALLOW_UNSIGNED_SOCKET_CLIENTS=1ile korunur (Peekaboo sözleşmesi). - Ayrıntılar için bkz.: PeekabooBridge kullanımı.
Operasyonel akışlar
- Yeniden başlatma/yeniden derleme:
SIGN_IDENTITY="Apple Development: <Developer Name> (<TEAMID>)" scripts/restart-mac.sh- Mevcut örnekleri sonlandırır
- Swift derleme + paketleme yapar
- LaunchAgent'i yazar/bootstrap eder/kickstart eder
- Tek örnek: aynı bundle ID ile başka bir örnek çalışıyorsa uygulama erkenden çıkar.
Sağlamlaştırma notları
- Tüm ayrıcalıklı yüzeylerde TeamID eşleşmesini zorunlu kılmayı tercih edin.
- PeekabooBridge:
PEEKABOO_ALLOW_UNSIGNED_SOCKET_CLIENTS=1(yalnızca DEBUG), yerel geliştirme için aynı UID çağıranlarına izin verebilir. - Tüm iletişim yalnızca yerel kalır; hiçbir ağ socket'i açığa çıkarılmaz.
- TCC istemleri yalnızca GUI uygulama bundle'ından gelir; yeniden derlemeler arasında imzalı bundle ID'yi kararlı tutun.
- IPC sağlamlaştırma: socket modu
0600, token, peer-UID kontrolleri, HMAC challenge/response, kısa TTL.