iMessage (przestarzaly: imsg)

Ostrzezenie: Dla nowych wdrozen iMessage uzyj BlueBubbles.

Integracja imsg jest przestarzala i moze zostac usunieta w przyszlym wydaniu.

Status: przestarzala integracja z zewnetrznym CLI. Gateway uruchamia imsg rpc i komunikuje sie przez JSON-RPC na stdio (brak oddzielnego demona/portu).

Szybka konfiguracja

Lokalny Mac (szybka sciezka)

  ### Krok 1: Zainstaluj i zweryfikuj imsg
brew install steipete/tap/imsg
imsg rpc --help
  ### Krok 2: Skonfiguruj OpenClaw
{
  channels: {
    imessage: {
      enabled: true,
      cliPath: "/usr/local/bin/imsg",
      dbPath: "/Users/<you>/Library/Messages/chat.db",
    },
  },
}
  ### Krok 3: Uruchom gateway
openclaw gateway
  ### Krok 4: Zatwierdz pierwsze parowanie DM (domyslne dmPolicy)
openclaw pairing list imessage
openclaw pairing approve imessage <CODE>
    Zadania parowania wygasaja po 1 godzinie.

Zdalny Mac przez SSH

OpenClaw wymaga jedynie zgodnego ze stdio `cliPath`, wiec mozesz wskazac `cliPath` na skrypt opakowujacy, ktory SSHuje do zdalnego Maca i uruchamia `imsg`.
#!/usr/bin/env bash
exec ssh -T gateway-host imsg "$@"
Zalecana konfiguracja gdy zalaczniki sa wlaczone:
{
  channels: {
    imessage: {
      enabled: true,
      cliPath: "~/.openclaw/scripts/imsg-ssh",
      remoteHost: "user@gateway-host", // uzywany do pobrania zalacznikow SCP
      includeAttachments: true,
      // Opcjonalnie: nadpisz dozwolone korzenie zalacznikow.
      // Domyslnie zawieraja /Users/*/Library/Messages/Attachments
      attachmentRoots: ["/Users/*/Library/Messages/Attachments"],
      remoteAttachmentRoots: ["/Users/*/Library/Messages/Attachments"],
    },
  },
}
Jesli `remoteHost` nie jest ustawiony, OpenClaw probuje go automatycznie wykryc parsujac skrypt opakowujacy SSH.
`remoteHost` musi byc `host` lub `user@host` (bez spacji ani opcji SSH).
OpenClaw uzywa scislego sprawdzania klucza hosta dla SCP, wiec klucz hosta przekaznika musi juz istniec w `~/.ssh/known_hosts`.
Sciezki zalacznikow sa walidowane wobec dozwolonych korzeni (`attachmentRoots` / `remoteAttachmentRoots`).

Wymagania i uprawnienia (macOS)

  • Messages musi byc zalogowane na Macu z imsg.
  • Pelny dostep do dysku jest wymagany dla kontekstu procesu uruchamiajacego OpenClaw/imsg (dostep do bazy danych Messages).
  • Uprawnienia automatyzacji sa wymagane do wysylania wiadomosci przez Messages.app.

Wskazowka: Uprawnienia sa nadawane per kontekst procesu. Jesli gateway dziala bez glowicowo (LaunchAgent/SSH), uruchom jednorazowe interaktywne polecenie w tym samym kontekscie, aby wyzwolic monity:

imsg chats --limit 1
# lub
imsg send <handle> "test"

Kontrola dostepu i routing

Polityka DM

`channels.imessage.dmPolicy` kontroluje wiadomosci bezposrednie:

- `pairing` (domyslnie)
- `allowlist`
- `open` (wymaga `allowFrom` zawierajacego `"*"`)
- `disabled`

Pole listy dozwolonych: `channels.imessage.allowFrom`.

Wpisy listy dozwolonych moga byc identyfikatorami lub celami czatu (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`).

Polityka grupowa + wzmianki

`channels.imessage.groupPolicy` kontroluje obsluge grup:

- `allowlist` (domyslnie gdy skonfigurowane)
- `open`
- `disabled`

Lista dozwolonych nadawcow grupowych: `channels.imessage.groupAllowFrom`.

Zastepczym runtime: jesli `groupAllowFrom` nie jest ustawione, sprawdzenia nadawcow grupowych iMessage stosuja zastepczym `allowFrom` gdy dostepne.
Uwaga runtime: jesli `channels.imessage` calkowicie brakuje, runtime stosuje zastepczym `groupPolicy="allowlist"` i loguje ostrzezenie (nawet jesli `channels.defaults.groupPolicy` jest ustawione).

Bramkowanie wzmiankami dla grup:

- iMessage nie ma natywnych metadanych wzmianek
- wykrywanie wzmianek uzywa wzorcow regex (`agents.list[].groupChat.mentionPatterns`, zastepczym `messages.groupChat.mentionPatterns`)
- bez skonfigurowanych wzorcow bramkowanie wzmiankami nie moze byc egzekwowane

Polecenia sterujace od autoryzowanych nadawcow moga ominac bramkowanie wzmiankami w grupach.

Sesje i deterministyczne odpowiedzi

- DM uzywaja bezposredniego routingu; grupy uzywaja routingu grupowego.
- Z domyslnym `session.dmScope=main`, DM iMessage zwijaja sie do glownej sesji agenta.
- Sesje grupowe sa izolowane (`agent:<agentId>:imessage:group:<chat_id>`).
- Odpowiedzi routuja z powrotem do iMessage uzywajac metadanych kanalu/celu pochodzenia.

Grupowe zachowanie watkowe:

Niektore wielouczestnikowe watki iMessage moga przychodzic z `is_group=false`.
Jesli ten `chat_id` jest jawnie skonfigurowany pod `channels.imessage.groups`, OpenClaw traktuje go jako ruch grupowy (bramkowanie grupowe + izolacja sesji grupowej).

Wzorce wdrozenia

Dedykowany uzytkownik macOS bota (oddzielna tozsamosc iMessage)
Uzyj dedykowanego Apple ID i uzytkownika macOS, aby ruch bota byl izolowany od twojego osobistego profilu Messages.

Typowy przeplyw:

1. Utworz/zaloguj sie na dedykowanego uzytkownika macOS.
2. Zaloguj sie do Messages z Apple ID bota w tym uzytkowniku.
3. Zainstaluj `imsg` w tym uzytkowniku.
4. Utworz skrypt opakowujacy SSH, aby OpenClaw mogl uruchomic `imsg` w kontekscie tego uzytkownika.
5. Wskazz `channels.imessage.accounts.<id>.cliPath` i `.dbPath` na profil tego uzytkownika.

Pierwsze uruchomienie moze wymagac zatwierdzenia GUI (Automatyzacja + Pelny dostep do dysku) w sesji uzytkownika bota.
Zdalny Mac przez Tailscale (przyklad)
Czesta topologia:

- gateway dziala na Linux/VM
- iMessage + `imsg` dziala na Macu w twoim tailnet
- skrypt opakowujacy `cliPath` uzywa SSH do uruchamiania `imsg`
- `remoteHost` umozliwia pobieranie zalacznikow SCP

Przyklad:
{
  channels: {
    imessage: {
      enabled: true,
      cliPath: "~/.openclaw/scripts/imsg-ssh",
      remoteHost: "[email protected]",
      includeAttachments: true,
      dbPath: "/Users/bot/Library/Messages/chat.db",
    },
  },
}
#!/usr/bin/env bash
exec ssh -T [email protected] imsg "$@"
Uzyj kluczy SSH, aby zarowno SSH, jak i SCP byly nieinteraktywne.
Upewnij sie, ze klucz hosta jest zaufany (np. `ssh [email protected]`), aby `known_hosts` byl wypelniony.
Wzorzec wielokontowy
iMessage obsluguje konfiguracje per konto pod `channels.imessage.accounts`.

Kazde konto moze nadpisywac pola takie jak `cliPath`, `dbPath`, `allowFrom`, `groupPolicy`, `mediaMaxMb`, ustawienia historii i listy dozwolonych korzeni zalacznikow.

Media, dzielenie na kawalki i cele dostarczania

Zalaczniki i media
- pobieranie przychodzacych zalacznikow jest opcjonalne: `channels.imessage.includeAttachments`
- zdalne sciezki zalacznikow moga byc pobierane przez SCP gdy `remoteHost` jest ustawiony
- sciezki zalacznikow musza pasowac do dozwolonych korzeni:
  - `channels.imessage.attachmentRoots` (lokalne)
  - `channels.imessage.remoteAttachmentRoots` (tryb zdalny SCP)
  - domyslny wzorzec korzenia: `/Users/*/Library/Messages/Attachments`
- SCP uzywa scislego sprawdzania klucza hosta (`StrictHostKeyChecking=yes`)
- rozmiar mediow wychodzacych uzywa `channels.imessage.mediaMaxMb` (domyslnie 16 MB)
Dzielenie wychodzace na kawalki
- limit kawalka tekstu: `channels.imessage.textChunkLimit` (domyslnie 4000)
- tryb kawalka: `channels.imessage.chunkMode`
  - `length` (domyslnie)
  - `newline` (dzielenie najpierw po akapitach)
Formaty adresowania
Preferowane jawne cele:

- `chat_id:123` (zalecane dla stabilnego routingu)
- `chat_guid:...`
- `chat_identifier:...`

Cele identyfikatorowe sa rowniez obslugiwane:

- `imessage:+1555...`
- `sms:+1555...`
- `[email protected]`
imsg chats --limit 20

Zapisy konfiguracji

iMessage domyslnie pozwala na zapisy konfiguracji wyzwalane z kanalu (dla /config set|unset gdy commands.config: true).

Wylacz:

{
  channels: {
    imessage: {
      configWrites: false,
    },
  },
}

Rozwiazywanie problemow

imsg nie znaleziony lub RPC nieobslugiwane
Zweryfikuj plik binarny i obsluge RPC:
imsg rpc --help
openclaw channels status --probe
Jesli sonda raportuje RPC nieobslugiwane, zaktualizuj `imsg`.
DM sa ignorowane
Sprawdz:

- `channels.imessage.dmPolicy`
- `channels.imessage.allowFrom`
- zatwierdzenia parowania (`openclaw pairing list imessage`)
Wiadomosci grupowe sa ignorowane
Sprawdz:

- `channels.imessage.groupPolicy`
- `channels.imessage.groupAllowFrom`
- zachowanie listy dozwolonych `channels.imessage.groups`
- konfiguracje wzorcow wzmianek (`agents.list[].groupChat.mentionPatterns`)
Zdalne zalaczniki nie dzialaja
Sprawdz:

- `channels.imessage.remoteHost`
- `channels.imessage.remoteAttachmentRoots`
- autoryzacje kluczami SSH/SCP z hosta gateway
- klucz hosta istnieje w `~/.ssh/known_hosts` na hoscie gateway
- czytelnosc zdalnej sciezki na Macu z Messages
Monity uprawnien macOS zostaly pominiete
Uruchom ponownie w interaktywnym terminalu GUI w tym samym kontekscie uzytkownika/sesji i zatwierdz monity:
imsg chats --limit 1
imsg send <handle> "test"
Potwierdz, ze Pelny dostep do dysku + Automatyzacja sa nadane dla kontekstu procesu uruchamiajacego OpenClaw/`imsg`.

Wskazowki referencji konfiguracji