Vai al contenuto principale

Documentation Index

Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt

Use this file to discover all available pages before exploring further.

Per le distribuzioni OpenClaw iMessage, usa imsg su un host macOS Messages con accesso effettuato. Se il tuo Gateway gira su Linux o Windows, punta channels.imessage.cliPath a un wrapper SSH che esegue imsg sul Mac.Il recupero dopo inattività del Gateway è facoltativo. Quando è abilitato (channels.imessage.catchup.enabled: true), il gateway riproduce i messaggi in ingresso arrivati in chat.db mentre era offline (crash, riavvio, sospensione del Mac) all’avvio successivo. Disabilitato per impostazione predefinita — vedi Recupero dopo inattività del gateway. Chiude openclaw#78649.
Il supporto a BlueBubbles è stato rimosso. Migra le configurazioni channels.bluebubbles a channels.imessage; OpenClaw supporta iMessage solo tramite imsg. Inizia da Rimozione di BlueBubbles e percorso iMessage con imsg per l’annuncio breve, oppure da Migrazione da BlueBubbles per la tabella di migrazione completa.
Stato: integrazione CLI esterna nativa. Gateway avvia imsg rpc e comunica tramite JSON-RPC su stdio (nessun daemon/porta separati). Le azioni avanzate richiedono imsg launch e una verifica riuscita dell’API privata.

Private API actions

Risposte, tapback, effetti, allegati e gestione dei gruppi.

Pairing

I DM iMessage usano per impostazione predefinita la modalità di associazione.

Remote Mac

Usa un wrapper SSH quando il Gateway non è in esecuzione sul Mac di Messages.

Configuration reference

Riferimento completo dei campi iMessage.

Configurazione rapida

1

Install and verify imsg

brew install steipete/tap/imsg
imsg rpc --help
imsg launch
openclaw channels status --probe
2

Configure OpenClaw

{
  channels: {
    imessage: {
      enabled: true,
      cliPath: "/usr/local/bin/imsg",
      dbPath: "/Users/user/Library/Messages/chat.db",
    },
  },
}
3

Start gateway

openclaw gateway
4

Approve first DM pairing (default dmPolicy)

openclaw pairing list imessage
openclaw pairing approve imessage <CODE>
Le richieste di associazione scadono dopo 1 ora.

Requisiti e autorizzazioni (macOS)

  • Messages deve avere l’accesso effettuato sul Mac che esegue imsg.
  • È richiesto Accesso completo al disco per il contesto di processo che esegue OpenClaw/imsg (accesso al DB di Messages).
  • È richiesta l’autorizzazione Automazione per inviare messaggi tramite Messages.app.
  • Per le azioni avanzate (reazione / modifica / annullamento invio / risposta in thread / effetti / operazioni sui gruppi), System Integrity Protection deve essere disabilitata — vedi Abilitazione dell’API privata imsg sotto. L’invio/ricezione di testo e contenuti multimediali di base funziona senza.
Le autorizzazioni vengono concesse per contesto di processo. Se gateway viene eseguito senza interfaccia (LaunchAgent/SSH), esegui un comando interattivo una tantum nello stesso contesto per attivare le richieste:
imsg chats --limit 1
# or
imsg send <handle> "test"

Abilitazione dell’API privata imsg

imsg viene distribuito in due modalità operative:
  • Modalità base (predefinita, non sono necessarie modifiche a SIP): testo e contenuti multimediali in uscita tramite send, monitoraggio/cronologia in ingresso, elenco chat. È ciò che ottieni subito con una nuova installazione brew install steipete/tap/imsg più le autorizzazioni macOS standard indicate sopra.
  • Modalità API privata: imsg inietta una dylib helper in Messages.app per chiamare funzioni interne di IMCore. Questo sblocca react, edit, unsend, reply (in thread), sendWithEffect, renameGroup, setGroupIcon, addParticipant, removeParticipant, leaveGroup, oltre agli indicatori di digitazione e alle conferme di lettura.
Per accedere alla superficie di azioni avanzate documentata in questa pagina del canale, ti serve la modalità API privata. Il README di imsg è esplicito sul requisito:
Funzionalità avanzate come read, typing, launch, invio avanzato basato su bridge, mutazione dei messaggi e gestione delle chat sono facoltative. Richiedono che SIP sia disabilitato e che una dylib helper venga iniettata in Messages.app. imsg launch rifiuta l’iniezione quando SIP è abilitato.
La tecnica di iniezione dell’helper usa la dylib di imsg per raggiungere le API private di Messages. Nel percorso iMessage di OpenClaw non c’è alcun server di terze parti o runtime BlueBubbles.
Disabilitare SIP è un compromesso di sicurezza reale. SIP è una delle protezioni principali di macOS contro l’esecuzione di codice di sistema modificato; disattivarlo a livello di sistema apre ulteriore superficie di attacco ed effetti collaterali. In particolare, disabilitare SIP sui Mac Apple Silicon disabilita anche la possibilità di installare ed eseguire app iOS sul Mac.Considerala una scelta operativa deliberata, non un’impostazione predefinita. Se il tuo modello di minaccia non può tollerare SIP disattivato, iMessage incluso è limitato alla modalità base — solo invio/ricezione di testo e contenuti multimediali, senza reazioni / modifica / annullamento invio / effetti / operazioni sui gruppi.

Configurazione

  1. Installa (o aggiorna) imsg sul Mac che esegue Messages.app:
    brew install steipete/tap/imsg
    imsg --version
    imsg status --json
    
    L’output di imsg status --json riporta bridge_version, rpc_methods e i selectors per metodo, così puoi vedere cosa supporta la build corrente prima di iniziare.
  2. Disabilita System Integrity Protection. Questo dipende dalla versione di macOS perché il requisito Apple sottostante dipende dal sistema operativo e dall’hardware:
    • macOS 10.13–10.15 (Sierra–Catalina): disabilita Library Validation tramite Terminale, riavvia in Recovery Mode, esegui csrutil disable, riavvia.
    • macOS 11+ (Big Sur e successivi), Intel: Recovery Mode (o Internet Recovery), csrutil disable, riavvia.
    • macOS 11+, Apple Silicon: sequenza di avvio con il pulsante di accensione per entrare in Recovery; nelle versioni recenti di macOS tieni premuto il tasto Shift sinistro quando fai clic su Continua, poi csrutil disable. Le configurazioni con macchine virtuali seguono un flusso separato — crea prima uno snapshot della VM.
    • macOS 26 / Tahoe: le policy di convalida delle librerie e i controlli di entitlement privati di imagent sono stati ulteriormente irrigiditi; imsg potrebbe richiedere una build aggiornata per restare compatibile. Se l’iniezione di imsg launch o selectors specifici iniziano a restituire false dopo un aggiornamento major di macOS, controlla le note di rilascio di imsg prima di presumere che il passaggio SIP sia riuscito.
    Segui il flusso Recovery Mode di Apple per il tuo Mac per disabilitare SIP prima di eseguire imsg launch.
  3. Inietta l’helper. Con SIP disabilitato e accesso effettuato in Messages.app:
    imsg launch
    
    imsg launch rifiuta l’iniezione quando SIP è ancora abilitato, quindi funge anche da conferma che il passaggio 2 ha avuto effetto.
  4. Verifica il bridge da OpenClaw:
    openclaw channels status --probe
    
    La voce iMessage dovrebbe riportare works, e imsg status --json | jq '.selectors' dovrebbe mostrare retractMessagePart: true più gli eventuali selettori di modifica / digitazione / lettura esposti dalla tua build macOS. Il gating per metodo del plugin OpenClaw in actions.ts pubblicizza solo azioni il cui selettore sottostante è true, quindi la superficie di azioni che vedi nell’elenco strumenti dell’agente riflette ciò che il bridge può effettivamente fare su questo host.
Se openclaw channels status --probe riporta il canale come works ma azioni specifiche generano “iMessage <action> requires the imsg private API bridge” al momento del dispatch, esegui di nuovo imsg launch — l’helper può disattivarsi (riavvio di Messages.app, aggiornamento del sistema operativo, ecc.) e lo stato memorizzato nella cache available: true continuerà a pubblicizzare le azioni finché la prossima verifica non lo aggiorna.

Quando non puoi disabilitare SIP

Se SIP disabilitato non è accettabile per il tuo modello di minaccia:
  • imsg torna alla modalità base — solo testo + contenuti multimediali + ricezione.
  • Il plugin OpenClaw continua a pubblicizzare l’invio di testo/media e il monitoraggio in ingresso; nasconde solo react, edit, unsend, reply, sendWithEffect e le operazioni sui gruppi dalla superficie di azioni (secondo il gate di capacità per metodo).
  • Puoi eseguire un Mac non Apple Silicon separato (o un Mac dedicato al bot) con SIP disattivato per il carico iMessage, mantenendo SIP abilitato sui dispositivi principali. Vedi Utente macOS dedicato al bot (identità iMessage separata) sotto.

Controllo degli accessi e instradamento

channels.imessage.dmPolicy controlla i messaggi diretti:
  • pairing (predefinito)
  • allowlist
  • open (richiede che allowFrom includa "*")
  • disabled
Campo allowlist: channels.imessage.allowFrom.Le voci allowlist devono identificare i mittenti: handle o gruppi di accesso mittente statici (accessGroup:<name>). Usa channels.imessage.groupAllowFrom per destinazioni chat come chat_id:*, chat_guid:* o chat_identifier:*; usa channels.imessage.groups per chiavi di registro numeriche chat_id.

Binding delle conversazioni ACP

Le chat iMessage legacy possono anche essere associate a sessioni ACP. Flusso rapido per l’operatore:
  • Esegui /acp spawn codex --bind here dentro il DM o la chat di gruppo consentita.
  • I messaggi futuri nella stessa conversazione iMessage vengono instradati alla sessione ACP generata.
  • /new e /reset reimpostano la stessa sessione ACP associata sul posto.
  • /acp close chiude la sessione ACP e rimuove il binding.
I binding persistenti configurati sono supportati tramite voci bindings[] di primo livello con type: "acp" e match.channel: "imessage". match.peer.id può usare:
  • handle DM normalizzato come +15555550123 o user@example.com
  • chat_id:<id> (consigliato per binding di gruppo stabili)
  • chat_guid:<guid>
  • chat_identifier:<identifier>
Esempio:
{
  agents: {
    list: [
      {
        id: "codex",
        runtime: {
          type: "acp",
          acp: { agent: "codex", backend: "acpx", mode: "persistent" },
        },
      },
    ],
  },
  bindings: [
    {
      type: "acp",
      agentId: "codex",
      match: {
        channel: "imessage",
        accountId: "default",
        peer: { kind: "group", id: "chat_id:123" },
      },
      acp: { label: "codex-group" },
    },
  ],
}
Vedi Agenti ACP per il comportamento condiviso dei binding ACP.

Pattern di distribuzione

Usa un Apple ID e un utente macOS dedicati in modo che il traffico del bot sia isolato dal tuo profilo personale di Messaggi.Flusso tipico:
  1. Crea/accedi a un utente macOS dedicato.
  2. Accedi a Messaggi con l’Apple ID del bot in quell’utente.
  3. Installa imsg in quell’utente.
  4. Crea un wrapper SSH in modo che OpenClaw possa eseguire imsg nel contesto di quell’utente.
  5. Punta channels.imessage.accounts.<id>.cliPath e .dbPath a quel profilo utente.
La prima esecuzione potrebbe richiedere approvazioni GUI (Automazione + Accesso completo al disco) nella sessione di quell’utente bot.
Topologia comune:
  • il Gateway viene eseguito su Linux/VM
  • iMessage + imsg viene eseguito su un Mac nella tua tailnet
  • il wrapper cliPath usa SSH per eseguire imsg
  • remoteHost abilita il recupero degli allegati tramite SCP
Esempio:
{
  channels: {
    imessage: {
      enabled: true,
      cliPath: "~/.openclaw/scripts/imsg-ssh",
      remoteHost: "bot@mac-mini.tailnet-1234.ts.net",
      includeAttachments: true,
      dbPath: "/Users/bot/Library/Messages/chat.db",
    },
  },
}
#!/usr/bin/env bash
exec ssh -T bot@mac-mini.tailnet-1234.ts.net imsg "$@"
Usa chiavi SSH in modo che sia SSH sia SCP siano non interattivi. Assicurati prima che la chiave host sia considerata attendibile (per esempio ssh bot@mac-mini.tailnet-1234.ts.net) così known_hosts viene popolato.
iMessage supporta la configurazione per account sotto channels.imessage.accounts.Ogni account può sovrascrivere campi come cliPath, dbPath, allowFrom, groupPolicy, mediaMaxMb, impostazioni della cronologia e allowlist delle radici degli allegati.

Media, suddivisione in blocchi e target di consegna

  • l’acquisizione degli allegati in ingresso è disattivata per impostazione predefinita: imposta channels.imessage.includeAttachments: true per inoltrare foto, memo vocali, video e altri allegati all’agente. Con questa opzione disabilitata, gli iMessage composti solo da allegati vengono scartati prima di raggiungere l’agente e potrebbero non produrre alcuna riga di log Inbound message.
  • i percorsi degli allegati remoti possono essere recuperati tramite SCP quando remoteHost è impostato
  • i percorsi degli allegati devono corrispondere alle radici consentite:
    • channels.imessage.attachmentRoots (locale)
    • channels.imessage.remoteAttachmentRoots (modalità SCP remota)
    • pattern radice predefinito: /Users/*/Library/Messages/Attachments
  • SCP usa il controllo rigoroso della chiave host (StrictHostKeyChecking=yes)
  • la dimensione dei media in uscita usa channels.imessage.mediaMaxMb (predefinito 16 MB)
  • limite dei blocchi di testo: channels.imessage.textChunkLimit (predefinito 4000)
  • modalità di suddivisione in blocchi: channels.imessage.chunkMode
    • length (predefinita)
    • newline (suddivisione che privilegia i paragrafi)
Target espliciti preferiti:
  • chat_id:123 (consigliato per un instradamento stabile)
  • chat_guid:...
  • chat_identifier:...
Sono supportati anche i target handle:
  • imessage:+1555...
  • sms:+1555...
  • user@example.com
imsg chats --limit 20

Azioni API private

Quando imsg launch è in esecuzione e openclaw channels status --probe riporta privateApi.available: true, lo strumento di messaggistica può usare azioni native di iMessage oltre ai normali invii di testo.
{
  channels: {
    imessage: {
      actions: {
        reactions: true,
        edit: true,
        unsend: true,
        reply: true,
        sendWithEffect: true,
        sendAttachment: true,
        renameGroup: true,
        setGroupIcon: true,
        addParticipant: true,
        removeParticipant: true,
        leaveGroup: true,
      },
    },
  },
}
  • react: aggiunge/rimuove tapback di iMessage (messageId, emoji, remove). I tapback supportati mappano a amore, mi piace, non mi piace, risata, enfasi e domanda.
  • reply: invia una risposta in thread a un messaggio esistente (messageId, text o message, più chatGuid, chatId, chatIdentifier o to).
  • sendWithEffect: invia testo con un effetto iMessage (text o message, effect o effectId).
  • edit: modifica un messaggio inviato nelle versioni macOS/API private supportate (messageId, text o newText).
  • unsend: ritira un messaggio inviato nelle versioni macOS/API private supportate (messageId).
  • upload-file: invia media/file (buffer come base64 o un media/path/filePath idratato, filename, asVoice facoltativo). Alias legacy: sendAttachment.
  • renameGroup, setGroupIcon, addParticipant, removeParticipant, leaveGroup: gestiscono le chat di gruppo quando il target corrente è una conversazione di gruppo.
Il contesto iMessage in ingresso include sia valori MessageSid brevi sia GUID messaggio completi quando disponibili. Gli ID brevi hanno ambito nella cache in memoria delle risposte recenti e vengono verificati rispetto alla chat corrente prima dell’uso. Se un ID breve è scaduto o appartiene a un’altra chat, riprova con il MessageSidFull completo.
OpenClaw nasconde le azioni API private solo quando lo stato del probe in cache indica che il bridge non è disponibile. Se lo stato è sconosciuto, le azioni restano visibili ed eseguono i probe in modo lazy, così la prima azione può riuscire dopo imsg launch senza un aggiornamento manuale separato dello stato.
Quando il bridge API private è attivo, le chat in ingresso accettate vengono contrassegnate come lette prima del dispatch e viene mostrato un fumetto di digitazione al mittente mentre l’agente genera. Disabilita il contrassegno di lettura con:
{
  channels: {
    imessage: {
      sendReadReceipts: false,
    },
  },
}
Le build imsg più vecchie, precedenti all’elenco delle capability per metodo, disattiveranno silenziosamente digitazione/lettura; OpenClaw registra un avviso una tantum per riavvio così la conferma mancante è attribuibile.
OpenClaw sottoscrive i tapback di iMessage e instrada le reazioni accettate come eventi di sistema invece che come normale testo del messaggio, quindi un tapback dell’utente non attiva un normale ciclo di risposta.La modalità di notifica è controllata da channels.imessage.reactionNotifications:
  • "own" (predefinito): notifica solo quando gli utenti reagiscono a messaggi creati dal bot.
  • "all": notifica per tutti i tapback in ingresso da mittenti autorizzati.
  • "off": ignora i tapback in ingresso.
Le sovrascritture per account usano channels.imessage.accounts.<id>.reactionNotifications.

Scritture di configurazione

iMessage consente per impostazione predefinita le scritture di configurazione avviate dal canale (per /config set|unset quando commands.config: true). Disabilita:
{
  channels: {
    imessage: {
      configWrites: false,
    },
  },
}

Coalescing dei DM inviati in modo suddiviso (comando + URL in un’unica composizione)

Quando un utente digita insieme un comando e un URL, per esempio Dump https://example.com/article, l’app Messaggi di Apple divide l’invio in due righe chat.db separate:
  1. Un messaggio di testo ("Dump").
  2. Un fumetto di anteprima URL ("https://...") con immagini di anteprima OG come allegati.
Le due righe arrivano a OpenClaw a circa 0,8-2,0 s di distanza nella maggior parte delle configurazioni. Senza aggregazione, l’agente riceve il comando da solo al turno 1, risponde (spesso “mandami l’URL”) e vede l’URL solo al turno 2, quando il contesto del comando è già perso. Questo dipende dalla pipeline di invio di Apple, non da qualcosa introdotto da OpenClaw o imsg. channels.imessage.coalesceSameSenderDms fa sì che un DM unisca righe consecutive dello stesso mittente in un singolo turno dell’agente. Le chat di gruppo continuano a essere inviate per messaggio, così la struttura dei turni multiutente viene preservata.
Abilita quando:
  • Distribuisci skills che si aspettano command + payload in un solo messaggio (dump, paste, save, queue, ecc.).
  • I tuoi utenti incollano URL, immagini o contenuti lunghi insieme ai comandi.
  • Puoi accettare la latenza aggiunta al turno DM (vedi sotto).
Lascia disabilitato quando:
  • Ti serve la latenza minima dei comandi per trigger DM di una sola parola.
  • Tutti i tuoi flussi sono comandi one-shot senza payload successivi.

Scenari e cosa vede l’agente

L’utente componechat.db produceFlag disattivo (predefinito)Flag attivo + finestra di 2500 ms
Dump https://example.com (un invio)2 righe a ~1 s di distanzaDue turni dell’agente: solo “Dump”, poi URLUn turno: testo unito Dump https://example.com
Save this 📎image.jpg caption (allegato + testo)2 righeDue turni (allegato scartato nell’unione)Un turno: testo + immagine preservati
/status (comando autonomo)1 rigaInvio immediatoAttende fino alla finestra, poi invia
URL incollato da solo1 rigaInvio immediatoInvio immediato (una sola voce nel bucket)
Testo + URL inviati come due messaggi separati intenzionali, a minuti di distanza2 righe fuori finestraDue turniDue turni (la finestra scade tra i due)
Raffica rapida (>10 piccoli DM dentro la finestra)N righeN turniUn turno, output limitato (prima + più recenti, limiti testo/allegati applicati)
Due persone scrivono in una chat di gruppoN righe da M mittentiM+ turni (uno per bucket mittente)M+ turni: le chat di gruppo non vengono aggregate

Recupero dopo inattività del gateway

Quando il gateway è offline (crash, riavvio, sleep del Mac, macchina spenta), imsg watch riprende dallo stato corrente di chat.db quando il gateway torna attivo: qualsiasi cosa arrivata durante l’intervallo, per impostazione predefinita, non viene mai vista. Il recupero riproduce quei messaggi al successivo avvio, così l’agente non perde silenziosamente il traffico in ingresso. Il recupero è disabilitato per impostazione predefinita. Abilitalo per canale:
channels: {
  imessage: {
    catchup: {
      enabled: true,             // master switch (default: false)
      maxAgeMinutes: 120,        // skip rows older than now - 2h (default: 120, clamp 1..720)
      perRunLimit: 50,           // max rows replayed per startup (default: 50, clamp 1..500)
      firstRunLookbackMinutes: 30, // first run with no cursor: look back 30 min (default: 30)
      maxFailureRetries: 10,     // give up on a wedged guid after 10 dispatch failures (default: 10)
    },
  },
}

Come viene eseguito

Un passaggio per ogni avvio di monitorIMessageProvider, sequenziato come imsg launch pronto → watch.subscribeperformIMessageCatchup → ciclo di invio live. Il recupero usa chats.list + messages.history per chat tramite lo stesso client JSON-RPC usato da imsg watch. Tutto ciò che arriva durante il passaggio di recupero attraversa normalmente l’invio live; la cache di deduplicazione in ingresso esistente assorbe qualsiasi sovrapposizione con le righe riprodotte. Ogni riga riprodotta viene inoltrata attraverso il percorso di invio live (evaluateIMessageInbound + dispatchInboundMessage), quindi allowlist, criteri di gruppo, debouncer, cache echo e conferme di lettura si comportano in modo identico sui messaggi riprodotti e live.

Semantica di cursore e tentativi

Il recupero mantiene un cursore per account in <openclawStateDir>/imessage/catchup/<account>__<hash>.json (la directory di stato di OpenClaw è ~/.openclaw per impostazione predefinita, sovrascrivibile con OPENCLAW_STATE_DIR):
{
  "lastSeenMs": 1717900800000,
  "lastSeenRowid": 482910,
  "updatedAt": 1717900801234,
  "failureRetries": { "<guid>": 1 }
}
  • Il cursore avanza a ogni invio riuscito e resta fermo quando l’invio di una riga genera un’eccezione: l’avvio successivo riprova la stessa riga dal cursore trattenuto.
  • Dopo maxFailureRetries eccezioni consecutive sullo stesso guid, il recupero registra un warn e forza l’avanzamento del cursore oltre il messaggio bloccato, così gli avvii successivi possono progredire.
  • I guid già abbandonati vengono saltati a vista (senza tentativo di invio) nelle esecuzioni successive e conteggiati sotto skippedGivenUp nel riepilogo dell’esecuzione.

Segnali visibili all’operatore

imessage catchup: replayed=N skippedFromMe=… skippedGivenUp=… failed=… givenUp=… fetchedCount=…
imessage catchup: giving up on guid=<guid> after <N> failures; advancing cursor past it
imessage catchup: fetched <X> rows across chats, capped to perRunLimit=<Y>
Una riga WARN ... capped to perRunLimit significa che un singolo avvio non ha svuotato tutto il backlog. Aumenta perRunLimit (massimo 500) se i tuoi intervalli superano regolarmente il passaggio predefinito da 50 righe.

Quando lasciarlo disattivato

  • Il Gateway viene eseguito continuamente con riavvio automatico tramite watchdog e gli intervalli sono sempre < pochi secondi: il valore predefinito disattivato va bene.
  • Il volume DM è basso e i messaggi persi non cambierebbero il comportamento dell’agente: la finestra iniziale firstRunLookbackMinutes può inviare contesto vecchio inatteso alla prima abilitazione.
Quando attivi il recupero, il primo avvio senza cursore guarda indietro solo di firstRunLookbackMinutes (30 min per impostazione predefinita), non per l’intera finestra maxAgeMinutes: questo evita di riprodurre una lunga cronologia di messaggi precedenti all’abilitazione.

Risoluzione dei problemi

Convalida il binario e il supporto RPC:
imsg rpc --help
imsg status --json
openclaw channels status --probe
Se il probe segnala che RPC non è supportato, aggiorna imsg. Se le azioni API private non sono disponibili, esegui imsg launch nella sessione dell’utente macOS con login effettuato e ripeti il probe. Se il Gateway non è in esecuzione su macOS, usa la configurazione Mac remoto via SSH sopra invece del percorso imsg locale predefinito.
Il valore predefinito cliPath: "imsg" deve essere eseguito sul Mac con accesso a Messaggi. Su Linux o Windows, imposta channels.imessage.cliPath su uno script wrapper che si connette via SSH a quel Mac ed esegue imsg "$@".
#!/usr/bin/env bash
exec ssh -T messages-mac imsg "$@"
Poi esegui:
openclaw channels status --probe --channel imessage
Controlla:
  • channels.imessage.dmPolicy
  • channels.imessage.allowFrom
  • approvazioni di pairing (openclaw pairing list imessage)
Controlla:
  • channels.imessage.groupPolicy
  • channels.imessage.groupAllowFrom
  • comportamento allowlist di channels.imessage.groups
  • configurazione del pattern di menzione (agents.list[].groupChat.mentionPatterns)
Controlla:
  • channels.imessage.remoteHost
  • channels.imessage.remoteAttachmentRoots
  • autenticazione con chiave SSH/SCP dall’host gateway
  • la chiave host esiste in ~/.ssh/known_hosts sull’host gateway
  • leggibilità del percorso remoto sul Mac che esegue Messaggi
Riesegui in un terminale GUI interattivo nello stesso contesto utente/sessione e approva i prompt:
imsg chats --limit 1
imsg send <handle> "test"
Conferma che Accesso completo al disco + Automazione siano concessi per il contesto del processo che esegue OpenClaw/imsg.

Riferimenti alla configurazione

Correlati