macOS companion app
macOS IPC
OpenClaw macOS IPC mimarisi
Yerel bir Unix soketi, exec onayları ve system.run için Node ana makine hizmetini macOS uygulamasına bağlar. Keşif/bağlantı denetimleri için bir openclaw-mac hata ayıklama CLI'ı (apps/macos/Sources/OpenClawMacCLI) bulunur; ajan eylemleri yine Gateway WebSocket ve node.invoke üzerinden akar. Node destekli computer.act yolu, gömülü Peekaboo otomasyonunu işlem içinde çalıştırır; bağımsız Peekaboo istemcileri PeekabooBridge kullanır.
Hedefler
- TCC ile ilişkili tüm işleri (bildirimler, ekran kaydı, mikrofon, konuşma, AppleScript) sahiplenen tek GUI uygulaması örneği.
- Otomasyon için küçük bir yüzey: Gateway + Node komutları, işlem içi
computer.actve bağımsız kullanıcı arayüzü otomasyon istemcileri için PeekabooBridge. - Öngörülebilir izinler: TCC izinlerinin kalıcı olması için her zaman launchd tarafından başlatılan aynı imzalı paket kimliği.
Nasıl çalışır?
Gateway + Node aktarımı
- Uygulama Gateway'i (yerel modda) çalıştırır ve ona bir Node olarak bağlanır.
- Ajan eylemleri
node.invokeüzerinden gerçekleştirilir (ör.system.run,system.notify,canvas.*). - Node komutları arasında
canvas.*,camera.snap,camera.clip,screen.snapshot,screen.record,computer.act,system.runvesystem.notifybulunur. - Node, ajanların ekran, kamera, mikrofon, konuşma, otomasyon veya erişilebilirlik erişiminin kullanılabilir olup olmadığını görebilmesi için bir
permissionseşlemesi bildirir.
Node hizmeti + uygulama IPC'si
- Başsız bir Node ana makine hizmeti Gateway WebSocket'e bağlanır.
system.runistekleri, yerel bir Unix soketi (ExecApprovalsSocket.swift) üzerinden macOS uygulamasına iletilir.- Uygulama exec işlemini kullanıcı arayüzü bağlamında gerçekleştirir, gerekirse istem gösterir ve çıktıyı döndürür.
Diyagram (SCI):
Ajan -> Gateway -> Node Hizmeti (WS) | IPC (UDS + belirteç + HMAC + TTL) v Mac Uygulaması (UI + TCC + system.run)PeekabooBridge (kullanıcı arayüzü otomasyonu)
- Yerleşik ajan
computeraracı bu soketi kullanmaz. Eşleştirilmiş bir macOS Node'u, gömülü Peekaboo hizmetleriyle uygulama işlemi içindecomputer.actişlemini gerçekleştirir. - Kullanıcı arayüzü otomasyonu ayrı bir UNIX soketi (
~/Library/Application Support/OpenClaw/<socket>) ve PeekabooBridge JSON protokolünü kullanır. - Ana makine tercih sırası (istemci tarafında): Peekaboo.app -> Claude.app -> OpenClaw.app -> yerel yürütme.
- Güvenlik: köprü ana makineleri izin verilenler listesindeki bir TeamID'yi gerektirir (paketlenmiş
PeekabooBridgeHostCoordinator, sabit bir ekibi ve uygulamanın kendi imzalama ekibini izin verilenler listesine ekler); yalnızca DEBUG için aynı UID'ye yönelik bir kaçış yoluPEEKABOO_ALLOW_UNSIGNED_SOCKET_CLIENTS=1ile korunur (Peekaboo kuralı). - Ayrıntılar için bkz. PeekabooBridge kullanımı.
İşletim akışları
- Yeniden başlatma/derleme:
scripts/restart-mac.shmevcut örnekleri sonlandırır, Swift aracılığıyla yeniden derler, yeniden paketler ve yeniden başlatır. Kullanılabilir bir imzalama kimliğini otomatik olarak algılar ve kimlik bulunamazsa--no-signseçeneğine geri döner; imzalamayı zorunlu kılmak için--signiletin (anahtar yoksa başarısız olur) veya imzasız yolu zorlamak için--no-signiletin. Ortamda ayarlananSIGN_IDENTITY, imzalı yolda kaldırılır; böylecescripts/codesign-mac-app.shöğesinin kendi kimlik otomatik algılaması sertifikayı seçer. - Tek örnek: uygulama, yinelenen bir paket kimliği için
NSWorkspace.runningApplicationsöğesini denetler ve birden fazla örnek bulunursa çıkar (MenuBar.swiftiçindekiisDuplicateInstance()).
Güçlendirme notları
- Tüm ayrıcalıklı yüzeyler için 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'ye sahip çağıranlara izin verebilir. - Tüm iletişim yalnızca yerel olarak kalır; hiçbir ağ soketi açığa çıkarılmaz.
- TCC istemleri yalnızca GUI uygulama paketinden kaynaklanır; imzalı paket kimliğini yeniden derlemeler arasında kararlı tutun.
- Exec onayları soketi güçlendirmesi: dosya modu
0600, paylaşılan belirteç, eş UID denetimi (getpeereid), HMAC-SHA256 sınama/yanıtı ve istekler için kısa bir TTL.
İlgili
Was this useful?