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.
Gebruik voor OpenClaw iMessage-implementaties
imsg op een aangemelde macOS Messages-host. Als je Gateway op Linux of Windows draait, wijs channels.imessage.cliPath dan naar een SSH-wrapper die imsg op de Mac uitvoert.Inhalen na Gateway-downtime is opt-in. Wanneer dit is ingeschakeld (channels.imessage.catchup.enabled: true), speelt de Gateway inkomende berichten opnieuw af die in chat.db zijn beland terwijl deze offline was (crash, herstart, Mac-slaapstand) bij de volgende start. Standaard uitgeschakeld — zie Inhalen na Gateway-downtime. Sluit openclaw#78649.imsg rpc en communiceert via JSON-RPC op stdio (geen aparte daemon/poort). Geavanceerde acties vereisen imsg launch en een geslaagde private API-probe.
Private API-acties
Antwoorden, tapbacks, effecten, bijlagen en groepsbeheer.
Koppelen
iMessage-DM’s gebruiken standaard de koppelmodus.
Externe Mac
Gebruik een SSH-wrapper wanneer de Gateway niet op de Messages-Mac draait.
Configuratiereferentie
Volledige iMessage-veldreferentie.
Snelle installatie
- Lokale Mac (snelste pad)
- Externe Mac via SSH
Vereisten en machtigingen (macOS)
- Messages moet zijn aangemeld op de Mac waarop
imsgdraait. - Full Disk Access is vereist voor de procescontext waarin OpenClaw/
imsgdraait (toegang tot de Messages-database). - Automatiseringsmachtiging is vereist om berichten via Messages.app te verzenden.
- Voor geavanceerde acties (reageren / bewerken / verzenden ongedaan maken / antwoord in thread / effecten / groepsbewerkingen) moet System Integrity Protection zijn uitgeschakeld — zie De imsg private API inschakelen hieronder. Basis verzenden/ontvangen van tekst en media werkt zonder.
De imsg private API inschakelen
imsg wordt geleverd in twee operationele modi:
- Basismodus (standaard, geen SIP-wijzigingen nodig): uitgaande tekst en media via
send, inkomende watch/geschiedenis, chatlijst. Dit krijg je direct na een nieuwebrew install steipete/tap/imsgplus de standaard macOS-machtigingen hierboven. - Private API-modus:
imsginjecteert een helper-dylib inMessages.appom interneIMCore-functies aan te roepen. Hiermee wordenreact,edit,unsend,reply(threaded),sendWithEffect,renameGroup,setGroupIcon,addParticipant,removeParticipant,leaveGroup, plus typindicatoren en leesbevestigingen ontgrendeld.
imsg README is expliciet over de vereiste:
Geavanceerde functies zoalsDe helper-injectietechniek gebruiktread,typing,launch, bridge-backed rich send, berichtmutatie en chatbeheer zijn opt-in. Ze vereisen dat SIP is uitgeschakeld en dat een helper-dylib inMessages.appwordt geïnjecteerd.imsg launchweigert te injecteren wanneer SIP is ingeschakeld.
imsg’s eigen dylib om private API’s van Messages te bereiken. Er is geen server van derden of BlueBubbles-runtime in het OpenClaw iMessage-pad.
Installatie
-
Installeer (of upgrade)
imsgop de Mac waarop Messages.app draait:De uitvoer vanimsg status --jsonrapporteertbridge_version,rpc_methodsen per methodeselectors, zodat je kunt zien wat de huidige build ondersteunt voordat je begint. -
Schakel System Integrity Protection uit. Dit is macOS-versiespecifiek omdat de onderliggende Apple-vereiste afhangt van het OS en de hardware:
- macOS 10.13–10.15 (Sierra–Catalina): schakel Library Validation uit via Terminal, herstart naar Recovery Mode, voer
csrutil disableuit, herstart. - macOS 11+ (Big Sur en later), Intel: Recovery Mode (of Internet Recovery),
csrutil disable, herstart. - macOS 11+, Apple Silicon: opstartprocedure met de aan/uit-knop om Recovery te openen; houd op recente macOS-versies de linker Shift-toets ingedrukt wanneer je op Continue klikt, daarna
csrutil disable. Virtual-machine-installaties volgen een aparte flow — maak eerst een VM-snapshot. - macOS 26 / Tahoe: library-validation-beleid en private-entitlement-controles van
imagentzijn verder aangescherpt;imsgheeft mogelijk een bijgewerkte build nodig om bij te blijven. Alsimsg launch-injectie of specifiekeselectorsna een grote macOS-upgrade false beginnen terug te geven, controleer dan de release notes vanimsgvoordat je aanneemt dat de SIP-stap is geslaagd.
imsg launchuitvoert. - macOS 10.13–10.15 (Sierra–Catalina): schakel Library Validation uit via Terminal, herstart naar Recovery Mode, voer
-
Injecteer de helper. Met SIP uitgeschakeld en Messages.app aangemeld:
imsg launchweigert te injecteren wanneer SIP nog is ingeschakeld, dus dit dient ook als bevestiging dat stap 2 is gelukt. -
Verifieer de bridge vanuit OpenClaw:
De iMessage-vermelding moet
worksrapporteren, enimsg status --json | jq '.selectors'moetretractMessagePart: truetonen plus de edit-/typing-/read-selectors die je macOS-build blootstelt. De per-method gating van de OpenClaw-plugin inactions.tsadverteert alleen acties waarvan de onderliggende selectortrueis, dus het actieoppervlak dat je in de toollijst van de agent ziet, weerspiegelt wat de bridge daadwerkelijk op deze host kan doen.
openclaw channels status --probe het kanaal als works rapporteert maar specifieke acties tijdens dispatch “iMessage <action> requires the imsg private API bridge” geven, voer imsg launch dan opnieuw uit — de helper kan wegvallen (Messages.app-herstart, OS-update, enz.) en de gecachte status available: true blijft acties adverteren totdat de volgende probe wordt vernieuwd.
Wanneer je SIP niet kunt uitschakelen
Als uitgeschakelde SIP niet acceptabel is voor je dreigingsmodel:imsgvalt terug naar basismodus — alleen tekst + media + ontvangen.- De OpenClaw-plugin adverteert nog steeds tekst/media verzenden en inkomende monitoring; hij verbergt alleen
react,edit,unsend,reply,sendWithEffecten groepsbewerkingen uit het actieoppervlak (volgens de per-method capability gate). - Je kunt een aparte niet-Apple-Silicon-Mac (of een dedicated bot-Mac) met SIP uit gebruiken voor de iMessage-workload, terwijl je SIP ingeschakeld houdt op je primaire apparaten. Zie Dedicated bot macOS-gebruiker (aparte iMessage-identiteit) hieronder.
Toegangscontrole en routing
- DM-beleid
- Groepsbeleid + vermeldingen
- Sessions and deterministic replies
channels.imessage.dmPolicy beheert directe berichten:pairing(standaard)allowlistopen(vereist datallowFrom"*"bevat)disabled
channels.imessage.allowFrom.Allowlist-vermeldingen moeten afzenders identificeren: handles of statische afzendertoegangsgroepen (accessGroup:<name>). Gebruik channels.imessage.groupAllowFrom voor chatdoelen zoals chat_id:*, chat_guid:* of chat_identifier:*; gebruik channels.imessage.groups voor numerieke chat_id-registratiesleutels.ACP-gespreksbindingen
Oude iMessage-chats kunnen ook aan ACP-sessies worden gebonden. Snelle operatorflow:- Voer
/acp spawn codex --bind hereuit in de DM of toegestane groepschat. - Toekomstige berichten in datzelfde iMessage-gesprek worden naar de gespawnde ACP-sessie gerouteerd.
/newen/resetresetten dezelfde gebonden ACP-sessie op zijn plaats./acp closesluit de ACP-sessie en verwijdert de binding.
bindings[] met type: "acp" en match.channel: "imessage".
match.peer.id kan gebruiken:
- genormaliseerde DM-handle zoals
+15555550123ofuser@example.com chat_id:<id>(aanbevolen voor stabiele groepsbindingen)chat_guid:<guid>chat_identifier:<identifier>
Implementatiepatronen
Dedicated bot macOS user (separate iMessage identity)
Dedicated bot macOS user (separate iMessage identity)
Gebruik een speciale Apple ID en macOS-gebruiker zodat botverkeer is geïsoleerd van je persoonlijke Messages-profiel.Typische flow:
- Maak een speciale macOS-gebruiker aan of log erop in.
- Log in bij Messages met de Apple ID van de bot in die gebruiker.
- Installeer
imsgin die gebruiker. - Maak een SSH-wrapper zodat OpenClaw
imsgin de context van die gebruiker kan uitvoeren. - Laat
channels.imessage.accounts.<id>.cliPathen.dbPathnaar dat gebruikersprofiel verwijzen.
Remote Mac over Tailscale (example)
Remote Mac over Tailscale (example)
Veelgebruikte topologie:Gebruik SSH-sleutels zodat zowel SSH als SCP niet-interactief zijn.
Zorg eerst dat de hostsleutel wordt vertrouwd (bijvoorbeeld
- Gateway draait op Linux/VM
- iMessage +
imsgdraait op een Mac in je tailnet cliPath-wrapper gebruikt SSH omimsguit te voerenremoteHostschakelt SCP-ophalen van bijlagen in
ssh bot@mac-mini.tailnet-1234.ts.net) zodat known_hosts wordt gevuld.Multi-account pattern
Multi-account pattern
iMessage ondersteunt configuratie per account onder
channels.imessage.accounts.Elk account kan velden overschrijven zoals cliPath, dbPath, allowFrom, groupPolicy, mediaMaxMb, geschiedenisinstellingen en allowlists voor rootpaden van bijlagen.Media, opsplitsing en bezorgdoelen
Attachments and media
Attachments and media
- opname van inkomende bijlagen staat standaard uit — stel
channels.imessage.includeAttachments: truein om foto’s, spraakmemo’s, video en andere bijlagen door te sturen naar de agent. Als dit is uitgeschakeld, worden iMessages met alleen bijlagen verwijderd voordat ze de agent bereiken en produceren ze mogelijk helemaal geen logregelInbound message. - externe bijlagepaden kunnen via SCP worden opgehaald wanneer
remoteHostis ingesteld - bijlagepaden moeten overeenkomen met toegestane rootpaden:
channels.imessage.attachmentRoots(lokaal)channels.imessage.remoteAttachmentRoots(externe SCP-modus)- standaard rootpatroon:
/Users/*/Library/Messages/Attachments
- SCP gebruikt strikte hostsleutelcontrole (
StrictHostKeyChecking=yes) - grootte van uitgaande media gebruikt
channels.imessage.mediaMaxMb(standaard 16 MB)
Outbound chunking
Outbound chunking
- limiet voor tekstchunks:
channels.imessage.textChunkLimit(standaard 4000) - chunkmodus:
channels.imessage.chunkModelength(standaard)newline(eerst op alinea splitsen)
Addressing formats
Addressing formats
Voorkeursdoelen met expliciete aanduiding:
chat_id:123(aanbevolen voor stabiele routering)chat_guid:...chat_identifier:...
imessage:+1555...sms:+1555...user@example.com
Acties van de private API
Wanneerimsg launch draait en openclaw channels status --probe privateApi.available: true rapporteert, kan de berichttool naast normale tekstverzending ook iMessage-native acties gebruiken.
Available actions
Available actions
- react: Voeg iMessage-tapbacks toe of verwijder ze (
messageId,emoji,remove). Ondersteunde tapbacks mappen naar liefde, leuk, niet leuk, lachen, nadruk en vraag. - reply: Verstuur een threaded antwoord op een bestaand bericht (
messageId,textofmessage, pluschatGuid,chatId,chatIdentifierofto). - sendWithEffect: Verstuur tekst met een iMessage-effect (
textofmessage,effectofeffectId). - edit: Bewerk een verzonden bericht op ondersteunde macOS-/private API-versies (
messageId,textofnewText). - unsend: Trek een verzonden bericht in op ondersteunde macOS-/private API-versies (
messageId). - upload-file: Verstuur media/bestanden (
bufferals base64 of een gehydrateerdemedia/path/filePath,filename, optioneelasVoice). Oude alias:sendAttachment. - renameGroup, setGroupIcon, addParticipant, removeParticipant, leaveGroup: Beheer groepschats wanneer het huidige doel een groepsgesprek is.
Message IDs
Message IDs
Inkomende iMessage-context bevat zowel korte
MessageSid-waarden als volledige bericht-GUID’s wanneer beschikbaar. Korte ID’s zijn beperkt tot de recente in-memory antwoordcache en worden voor gebruik gecontroleerd tegen de huidige chat. Als een korte ID is verlopen of bij een andere chat hoort, probeer het dan opnieuw met de volledige MessageSidFull.Capability detection
Capability detection
OpenClaw verbergt private API-acties alleen wanneer de gecachte probestatus aangeeft dat de bridge niet beschikbaar is. Als de status onbekend is, blijven acties zichtbaar en dispatcht de uitvoering probes lui, zodat de eerste actie kan slagen na
imsg launch zonder een afzonderlijke handmatige statusverversing.Read receipts and typing
Read receipts and typing
Wanneer de private API-bridge actief is, worden geaccepteerde inkomende chats voor dispatch als gelezen gemarkeerd en wordt er een typballon aan de afzender getoond terwijl de agent genereert. Schakel leesmarkering uit met:Oudere
imsg-builds van voor de lijst met mogelijkheden per methode schakelen typen/lezen stilzwijgend uit; OpenClaw logt eenmaal per herstart een waarschuwing zodat de ontbrekende ontvangstbevestiging herleidbaar is.Inbound tapbacks
Inbound tapbacks
OpenClaw abonneert zich op iMessage-tapbacks en routeert geaccepteerde reacties als systeemgebeurtenissen in plaats van normale berichttekst, zodat een tapback van een gebruiker geen gewone antwoordlus triggert.Meldingsmodus wordt beheerd door
channels.imessage.reactionNotifications:"own"(standaard): meld alleen wanneer gebruikers reageren op berichten die door de bot zijn geschreven."all": meld alle inkomende tapbacks van geautoriseerde afzenders."off": negeer inkomende tapbacks.
channels.imessage.accounts.<id>.reactionNotifications.Configuratiewrites
iMessage staat standaard door het kanaal geïnitieerde configuratiewrites toe (voor/config set|unset wanneer commands.config: true).
Uitschakelen:
Gesplitst verzonden DM’s samenvoegen (opdracht + URL in één compositie)
Wanneer een gebruiker samen een opdracht en een URL typt — bijv.Dump https://example.com/article — splitst Apple’s Messages-app de verzending in twee afzonderlijke chat.db-rijen:
- Een tekstbericht (
"Dump"). - Een URL-previewballon (
"https://...") met OG-previewafbeeldingen als bijlagen.
imsg introduceert.
channels.imessage.coalesceSameSenderDms laat een DM opeenvolgende rijen van dezelfde afzender samenvoegen tot een enkele agentbeurt. Groepschats blijven per bericht dispatchen, zodat de beurtstructuur met meerdere gebruikers behouden blijft.
- Wanneer inschakelen
- Inschakelen
- Afwegingen
Schakel in wanneer:
- Je Skills levert die
command + payloadin één bericht verwachten (dump, paste, save, queue, enz.). - Je gebruikers URL’s, afbeeldingen of lange inhoud naast opdrachten plakken.
- Je de toegevoegde DM-beurtlatentie kunt accepteren (zie hieronder).
- Je minimale opdrachtlatentie nodig hebt voor DM-triggers van één woord.
- Al je flows eenmalige opdrachten zijn zonder payload-vervolgberichten.
Scenario’s en wat de agent ziet
| Gebruiker stelt op | chat.db produceert | Vlag uit (standaard) | Vlag aan + venster van 2500 ms |
|---|---|---|---|
Dump https://example.com (één verzending) | 2 rijen ~1 s uit elkaar | Twee agentbeurten: alleen “Dump”, daarna URL | Eén beurt: samengevoegde tekst Dump https://example.com |
Save this 📎image.jpg caption (bijlage + tekst) | 2 rijen | Twee beurten (bijlage valt weg bij samenvoeging) | Eén beurt: tekst + afbeelding behouden |
/status (zelfstandige opdracht) | 1 rij | Directe dispatch | Wacht maximaal het venster en dispatcht daarna |
| Alleen URL geplakt | 1 rij | Directe dispatch | Directe dispatch (slechts één item in bucket) |
| Tekst + URL verzonden als twee bewuste afzonderlijke berichten, minuten uit elkaar | 2 rijen buiten venster | Twee beurten | Twee beurten (venster verloopt ertussen) |
| Snelle stroom (>10 kleine DM’s binnen venster) | N rijen | N beurten | Eén beurt, begrensde uitvoer (eerste + laatste, tekst-/bijlagelimieten toegepast) |
| Twee mensen typen in een groepschat | N rijen van M afzenders | M+ beurten (één per afzenderbucket) | M+ beurten — groepschats worden niet samengevoegd |
Inhalen na Gateway-downtime
Wanneer de Gateway offline is (crash, herstart, Mac in slaapstand, machine uit), hervatimsg watch vanaf de huidige chat.db-staat zodra de Gateway weer opkomt — alles wat tijdens de onderbreking is binnengekomen, wordt standaard nooit gezien. Catchup speelt die berichten opnieuw af bij de volgende start, zodat de agent inkomend verkeer niet stilzwijgend mist.
Catchup is standaard uitgeschakeld. Schakel het per kanaal in:
Hoe het draait
Eén pass permonitorIMessageProvider-start, geordend als imsg launch gereed → watch.subscribe → performIMessageCatchup → live dispatch-loop. Catchup zelf gebruikt chats.list + per-chat messages.history via dezelfde JSON-RPC-client die door imsg watch wordt gebruikt. Alles wat tijdens de catchup-pass binnenkomt, loopt normaal via live dispatch; de bestaande inbound-dedupe-cache vangt eventuele overlap met opnieuw afgespeelde rijen op.
Elke opnieuw afgespeelde rij wordt door het live dispatch-pad gevoerd (evaluateIMessageInbound + dispatchInboundMessage), zodat allowlists, groepsbeleid, debouncer, echo-cache en leesbewijzen zich identiek gedragen bij opnieuw afgespeelde en live berichten.
Cursor- en retrysemantiek
Catchup houdt een cursor per account bij op<openclawStateDir>/imessage/catchup/<account>__<hash>.json (de standaard OpenClaw-statusmap is ~/.openclaw, overschrijfbaar met OPENCLAW_STATE_DIR):
- De cursor schuift op na elke succesvolle dispatch en blijft staan wanneer de dispatch van een rij een exception gooit — de volgende start probeert dezelfde rij opnieuw vanaf de vastgehouden cursor.
- Na
maxFailureRetriesopeenvolgende exceptions voor dezelfdeguidlogt catchup eenwarnen forceert het opschuiven van de cursor voorbij het vastgelopen bericht, zodat latere starts voortgang kunnen maken. - GUID’s die al zijn opgegeven, worden bij later runs bij zicht overgeslagen (geen dispatch-poging) en meegeteld onder
skippedGivenUpin de run-samenvatting.
Operator-zichtbare signalen
WARN ... capped to perRunLimit betekent dat één start niet de volledige achterstand heeft weggewerkt. Verhoog perRunLimit (max 500) als je onderbrekingen regelmatig de standaardpass van 50 rijen overschrijden.
Wanneer je het uit laat
- Gateway draait continu met watchdog-autoherstart en onderbrekingen zijn altijd < een paar seconden — de standaard uitgeschakelde stand is prima.
- DM-volume is laag en gemiste berichten zouden het gedrag van de agent niet veranderen — het initiële venster
firstRunLookbackMinuteskan bij de eerste inschakeling verrassende oude context dispatchen.
firstRunLookbackMinutes terug (standaard 30 min), niet het volledige venster maxAgeMinutes — dit voorkomt dat een lange geschiedenis van berichten van vóór inschakeling opnieuw wordt afgespeeld.
Probleemoplossing
imsg niet gevonden of RPC niet ondersteund
imsg niet gevonden of RPC niet ondersteund
Valideer de binary en RPC-ondersteuning:Als probe meldt dat RPC niet wordt ondersteund, werk
imsg bij. Als private API-acties niet beschikbaar zijn, voer imsg launch uit in de ingelogde macOS-gebruikerssessie en probe opnieuw. Als de Gateway niet op macOS draait, gebruik dan de Remote Mac over SSH-setup hierboven in plaats van het standaard lokale imsg-pad.Gateway draait niet op macOS
Gateway draait niet op macOS
De standaard Voer daarna uit:
cliPath: "imsg" moet draaien op de Mac die is ingelogd bij Berichten. Stel op Linux of Windows channels.imessage.cliPath in op een wrapperscript dat via SSH naar die Mac gaat en imsg "$@" uitvoert.DM's worden genegeerd
DM's worden genegeerd
Controleer:
channels.imessage.dmPolicychannels.imessage.allowFrom- koppelingsgoedkeuringen (
openclaw pairing list imessage)
Groepsberichten worden genegeerd
Groepsberichten worden genegeerd
Controleer:
channels.imessage.groupPolicychannels.imessage.groupAllowFrom- allowlist-gedrag van
channels.imessage.groups - configuratie van vermeldingspatronen (
agents.list[].groupChat.mentionPatterns)
Externe bijlagen mislukken
Externe bijlagen mislukken
Controleer:
channels.imessage.remoteHostchannels.imessage.remoteAttachmentRoots- SSH/SCP-sleutelauthenticatie vanaf de Gateway-host
- hostsleutel bestaat in
~/.ssh/known_hostsop de Gateway-host - leesbaarheid van het externe pad op de Mac waarop Berichten draait
macOS-permissieprompts zijn gemist
macOS-permissieprompts zijn gemist
Voer opnieuw uit in een interactieve GUI-terminal in dezelfde gebruikers-/sessiecontext en keur prompts goed:Bevestig dat Full Disk Access + Automation zijn verleend voor de procescontext die OpenClaw/
imsg uitvoert.Verwijzingen naar configuratiereferentie
Gerelateerd
- Kanaaloverzicht — alle ondersteunde kanalen
- BlueBubbles-verwijdering en het imsg iMessage-pad — aankondiging en migratiesamenvatting
- Overstappen vanaf BlueBubbles — configuratievertaaltabel en stapsgewijze overgang
- Koppeling — DM-authenticatie en koppelingsflow
- Groepen — groepschatgedrag en vermeldingsgate
- Kanaalroutering — sessieroutering voor berichten
- Beveiliging — toegangsmodel en hardening