In questa pagina
In questa pagina
macOS companion app
IPC di macOS
Architettura IPC di OpenClaw per macOS
Un socket Unix locale collega il servizio host del Node all'app macOS per le approvazioni di esecuzione e system.run. È disponibile una CLI di debug openclaw-mac (apps/macos/Sources/OpenClawMacCLI) per i controlli di rilevamento e connessione; le azioni degli agenti continuano a transitare attraverso il WebSocket del Gateway e node.invoke. Il percorso computer.act basato sul Node esegue l'automazione Peekaboo incorporata nello stesso processo; i client Peekaboo autonomi utilizzano PeekabooBridge.
Obiettivi
- Un'unica istanza dell'app GUI che gestisce tutte le operazioni rivolte a TCC (notifiche, registrazione dello schermo, microfono, sintesi vocale, AppleScript).
- Una superficie ridotta per l'automazione: Gateway + comandi del Node,
computer.actnello stesso processo, oltre a PeekabooBridge per i client autonomi di automazione dell'interfaccia utente. - Autorizzazioni prevedibili: sempre lo stesso ID bundle firmato, avviato da launchd, in modo che le autorizzazioni TCC persistano.
Funzionamento
Trasporto Gateway + Node
- L'app esegue il Gateway (modalità locale) e vi si connette come Node.
- Le azioni degli agenti vengono eseguite tramite
node.invoke(ad esempiosystem.run,system.notify,canvas.*). - I comandi del Node includono
canvas.*,camera.snap,camera.clip,screen.snapshot,screen.record,computer.act,system.runesystem.notify. - Il Node segnala una mappa
permissions, in modo che gli agenti possano verificare se è disponibile l'accesso a schermo, fotocamera, microfono, sintesi vocale, automazione o accessibilità.
Servizio Node + IPC dell'app
- Un servizio host del Node senza interfaccia grafica si connette al WebSocket del Gateway.
- Le richieste
system.runvengono inoltrate all'app macOS tramite un socket Unix locale (ExecApprovalsSocket.swift). - L'app esegue il comando nel contesto dell'interfaccia utente, richiede conferma se necessario e restituisce l'output.
Diagramma (SCI):
PeekabooBridge (automazione dell'interfaccia utente)
- Lo strumento
computerintegrato dell'agente non utilizza questo socket. Un Node macOS associato eseguecomputer.actnel processo dell'app con i servizi Peekaboo incorporati. - L'automazione dell'interfaccia utente utilizza un socket UNIX separato (
~/Library/Application Support/OpenClaw/<socket>) e il protocollo JSON di PeekabooBridge. - Ordine di preferenza dell'host (lato client): Peekaboo.app -> Claude.app -> OpenClaw.app -> esecuzione locale.
- Sicurezza: gli host bridge richiedono un TeamID incluso nell'elenco consentito (il componente
PeekabooBridgeHostCoordinatorincluso consente un team fisso oltre al team di firma dell'app); una modalità alternativa riservata a DEBUG per lo stesso UID è protetta daPEEKABOO_ALLOW_UNSIGNED_SOCKET_CLIENTS=1(convenzione Peekaboo). - Per i dettagli, consulta: Utilizzo di PeekabooBridge.
Flussi operativi
- Riavvio/ricompilazione:
scripts/restart-mac.shtermina le istanze esistenti, ricompila tramite Swift, ricrea il pacchetto e riavvia l'app. Rileva automaticamente un'identità di firma disponibile e, se non ne trova alcuna, ripiega su--no-sign; passa--signper richiedere la firma (l'operazione non riesce se non è disponibile alcuna chiave) oppure--no-signper forzare il percorso senza firma. Nel percorso firmato, la variabileSIGN_IDENTITYimpostata nell'ambiente viene rimossa, affinché il rilevamento automatico dell'identità discripts/codesign-mac-app.shselezioni il certificato. - Istanza singola: l'app controlla
NSWorkspace.runningApplicationsper rilevare un ID bundle duplicato e termina se viene trovata più di un'istanza (isDuplicateInstance()inMenuBar.swift).
Note sulla protezione
- È preferibile richiedere la corrispondenza del TeamID per tutte le superfici privilegiate.
- PeekabooBridge:
PEEKABOO_ALLOW_UNSIGNED_SOCKET_CLIENTS=1(solo DEBUG) può consentire chiamanti con lo stesso UID per lo sviluppo locale. - Tutte le comunicazioni rimangono esclusivamente locali; non viene esposto alcun socket di rete.
- Le richieste TCC provengono esclusivamente dal bundle dell'app GUI; mantieni stabile l'ID bundle firmato tra le ricompilazioni.
- Protezione del socket per le approvazioni di esecuzione: modalità file
0600, token condiviso, controllo dell'UID del peer (getpeereid), challenge/response HMAC-SHA256 e TTL breve per le richieste.
Contenuti correlati
Was this useful?