WhatsApp-Wächter: nur das Wichtige aus WhatsApp, lokal auf dem Mac =================================================================== Baue mir in einem Durchgang ein Tool, das meine WhatsApp-Chats mitliest und mich nur bei wichtigen Dingen benachrichtigt. Frag nur nach, wo ich selbst etwas tun muss (Systemeinstellungen, Token, Mailadresse). Rahmen ------ - macOS, die WhatsApp-Desktop-App ist installiert und angemeldet. - Alles läuft lokal. Kein inoffizieller WhatsApp-Client, kein Bot, keine weitere verknüpfte Sitzung, nichts auf einem Server. - Python mit eigener venv, launchd für die Hintergrunddienste, eine Konfigurationsseite unter http://localhost:8787, nur auf 127.0.0.1 erreichbar. - Einordnen der Nachrichten mit Claude Haiku (aktuelles Modell mit voller ID angeben, nicht den Alias). - Sprache der Oberfläche und der Meldungen: Deutsch. User Stories ------------ * Viele WhatsApp-Gruppen (Kita, Schule, Nachbarn, Verein, Familie), wenig Zeit * Als Elternteil will ich * nicht in jede Gruppe schauen müssen * trotzdem nichts verpassen * Alerts (Kita morgen ab 11 zu, Termin verlegt) * To-dos (mitbringen, Geld mitgeben, bis Freitag zurückmelden) * Erwähnungen (jemand fragt mich direkt) * Aushänge mitbekommen, die nur als Foto oder PDF gepostet werden * nichts doppelt, auch wenn es in fünf Gruppen steht * nichts, was ich im Chat schon erledigt habe * Als Nutzer will ich * pro Chat einstellen, worauf geachtet wird * sehen, welche Gruppen ich kaum lese * Kanäle wählen (Mail; Telegram, Push, Fax vorbereitet) * sofort oder im Tagesüberblick * einen Probelauf: was wäre in den letzten Wochen gemeldet worden * alles der letzten 7 Tage durchsuchen und als Mail bekommen * dass meine Chats den Mac nicht verlassen, außer zum Einordnen der Texte * dass es viermal am Tag von selbst läuft Akzeptanzkriterien und bekannte Fallen -------------------------------------- Datenquelle - Die App speichert alles in ~/Library/Group Containers/group.net.whatsapp.WhatsApp.shared/ChatStorage.sqlite. Nur lesend öffnen (mode=ro). Zeitstempel zählen ab 2001-01-01 (plus 978307200 für Unix-Zeit). - ZWACHATSESSION.ZSESSIONTYPE: 0 Einzelchat, 1 Gruppe, 4 Community-Ankündigung; 2, 3 und 5 auslassen. - Absendernamen: zuerst das Adressbuch der App (ContactsV2.sqlite, über die LID), sonst ZWAGROUPMEMBER.ZFIRSTNAME. Das ist "+" plus base64-kodiertes Protobuf, Feld 1 ist der Name. - Die eigene Kennung ist die LID, die in jeder Gruppe als Mitglied ohne Namen auftaucht. Erwähnungen stehen im Text als "@" oder "@". Sie werden exakt erkannt, auch ohne KI. - Neue Nachrichten kommen nur in die Datenbank, solange die WhatsApp-App läuft: als Anmeldeobjekt eintragen (vorher fragen). Rechte und Dienste - launchd-Dienste bekommen auf die Datenbank "authorization denied" (App-Datenschutz). Lösung: ein kleiner eigener, signierter Starter, dem ich einmal den Festplattenvollzugriff gebe. Python läuft als dessen Kindprozess (posix_spawn, nicht exec), andere Python-Skripte bekommen das Recht nicht. - Nach der Freigabe selbst prüfen, ob sie gegriffen hat, statt meiner Aussage zu glauben: in der TCC-Datenbank nach dem Starter suchen, auth_value 2 heißt an. Bei mir ist das Hineinziehen beim ersten Mal still gescheitert. - Den Starter nicht unter ~/Documents ablegen: launchd darf dort nicht starten, und iCloud lagert Dateien aus. Wird er neu kompiliert, ändert sich die Signatur und die Freigabe muss neu erteilt werden. Einordnen - Zugang zu Claude über einen API-Key oder über "claude setup-token". Beim Einfügen des Tokens aus dem Terminal rutscht durch den Zeilenumbruch ein Leerzeichen hinein: Leerraum in Zugangsdaten immer entfernen. - Der Alias "haiku" einer älteren CLI kann auf ein älteres, zehnmal teureres Modell zeigen: Modell-ID fest setzen und Verbrauch je Aufruf mitschreiben. - Nur echte Kandidaten schicken: Nachrichten anderer mit Text oder Fotos/PDFs mit mindestens 6 erkannten Wörtern (Texterkennung lokal mit macOS Vision bzw. PDFKit über ein kleines Swift-Programm). - Dem Modell den Verlauf davor und danach mitgeben, damit Erledigtes und schon Gemeldetes wegfällt. Pro Chat und Lauf Pakete von höchstens 40 Nachrichten, mehrere Chats parallel. - Gleiche Texte über Chats hinweg zusammenführen ("+ 3 weitere"). Versand - E-Mail über Apple Mail per AppleScript, ohne Passwort. Absenderkonto wählbar. - Zugangsdaten für Kanäle in einer .env mit Modus 600, nie in der Konfiguration. Oberfläche - Schlicht, Serifen-Überschriften, hell und dunkel, aufs Handy passend. - Nur geänderte Felder speichern. Fertig ist es, wenn "Alles durchsuchen" über 7 Tage läuft, die Treffer stimmen und eine Testmail angekommen ist.