OpenClaw macOS IPC-architectuur
Huidig model: een lokale Unix-socket verbindt de Node-hostservice met de macOS-app voor uitvoeringsgoedkeuringen +system.run. Er bestaat een openclaw-mac debug-CLI voor discovery-/verbindingscontroles; agentacties lopen nog steeds via de Gateway WebSocket en node.invoke. UI-automatisering gebruikt PeekabooBridge.
Doelen
- Eén GUI-appinstantie die al het TCC-gerelateerde werk beheert (meldingen, schermopname, microfoon, spraak, AppleScript).
- Een klein oppervlak voor automatisering: Gateway + Node-opdrachten, plus PeekabooBridge voor UI-automatisering.
- Voorspelbare rechten: altijd dezelfde ondertekende bundel-ID, gestart door launchd, zodat TCC-toekenningen behouden blijven.
Hoe het werkt
Gateway + Node-transport
- De app draait de Gateway (lokale modus) en verbindt ermee als een Node.
- Agentacties worden uitgevoerd via
node.invoke(bijv.system.run,system.notify,canvas.*). - Veelvoorkomende Mac-Node-opdrachten zijn
canvas.*,camera.snap,camera.clip,screen.snapshot,screen.record,system.runensystem.notify. - De Node rapporteert een
permissions-map zodat agents kunnen zien of toegang tot scherm, camera, microfoon, spraak, automatisering of toegankelijkheid beschikbaar is.
Node-service + app-IPC
- Een headless Node-hostservice maakt verbinding met de Gateway WebSocket.
system.run-aanvragen worden via een lokale Unix-socket doorgestuurd naar de macOS-app.- De app voert de opdracht uit in UI-context, vraagt zo nodig om toestemming en retourneert uitvoer.
PeekabooBridge (UI-automatisering)
- UI-automatisering gebruikt een aparte UNIX-socket met de naam
bridge.socken het PeekabooBridge JSON-protocol. - Hostvoorkeursvolgorde (client-side): Peekaboo.app → Claude.app → OpenClaw.app → lokale uitvoering.
- Beveiliging: bridge-hosts vereisen een toegestane TeamID; het DEBUG-only noodpad voor dezelfde UID wordt bewaakt door
PEEKABOO_ALLOW_UNSIGNED_SOCKET_CLIENTS=1(Peekaboo-conventie). - Zie: PeekabooBridge-gebruik voor details.
Operationele flows
- Herstarten/opnieuw bouwen:
SIGN_IDENTITY="Apple Development: <Developer Name> (<TEAMID>)" scripts/restart-mac.sh- Beëindigt bestaande instanties
- Swift-build + pakket
- Schrijft/bootstrap/kickstart de LaunchAgent
- Eén instantie: de app sluit vroegtijdig af als er al een andere instantie met dezelfde bundel-ID actief is.
Hardening-opmerkingen
- Geef er de voorkeur aan een TeamID-match te vereisen voor alle bevoorrechte oppervlakken.
- PeekabooBridge:
PEEKABOO_ALLOW_UNSIGNED_SOCKET_CLIENTS=1(alleen DEBUG) kan lokale ontwikkelaars met dezelfde UID toestaan. - Alle communicatie blijft alleen lokaal; er worden geen netwerksockets blootgesteld.
- TCC-prompts komen alleen uit de GUI-appbundel; houd de ondertekende bundel-ID stabiel tussen rebuilds.
- IPC-hardening: socketmodus
0600, token, peer-UID-controles, HMAC challenge/response, korte TTL.