Communitygithub.com

BlueSky0329/mama-message – Mama Nachricht

Verwandle Screenshots deiner Chatverläufe mit deiner Mutter in einen Bericht, zwei Karten und einen Satz, den du direkt an sie senden kannst. Nur Screenshots, keine Internetverbindung, keine Datenbank. Agent Skill + Prompt + Browser-Version.

Was ist mama-message – Mama Nachricht?

Dieser Skill verwandelt Screenshots von Familiengesprächen (WeChat, QQ, SMS) in drei handfeste Ergebnisse: eine Zahl, einen Typen und einen Satz, den du deiner Mutter schicken kannst. Er ersetzt keine psychologische Analyse, sondern liefert konkrete, belegbare Erkenntnisse – wie oft du „hm“ gesagt hast, wie viele Sekunden ihre längste Sprachnachricht war oder ob du auf ihre letzte Frage überhaupt geantwortet hast. Der Workflow ist klar: Screenshots einlesen, in ein strukturiertes JSON-Format umwandeln, mit `stats.py` berechnen, drei gezielte Fragen stellen und mit `render.py` einen HTML-Bericht und zwei Karten ausgeben. Der Skill läuft komplett offline, greift nicht auf Chatdatenbanken zu und speichert nichts außerhalb des aktuellen Verzeichnisses. Er unterstützt den Export über Tools wie WeFlow (für WeChat 4.0+) oder Screenshots als Fallback, und enthält einen Validierungs- und einen Redact-Script. Zusätzlich gibt es einen Übungsmodus (der Bot spricht 10 Runden wie deine Mutter) und einen Vergleichsmodus (z. B. wie schnell du deiner Mutter vs. deinen Freunden antwortest). Ideal für Agenten wie Claude Code, Cursor oder Codex auf macOS/Linux – der Skill benötigt nur Python 3 und Standardbibliotheken.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add BlueSky0329/mama-message

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Mama Nachricht

Ein Satz: Mach aus einem Familienchat-Verlauf eine Zahl, ein Label und einen Satz, den du ihr direkt schicken kannst.

Der Nutzer braucht keine KI, die ihm sagt, dass seine Mutter ihn liebt. Er braucht drei Dinge: ① eine Zahl, die er nie gezählt hat („Du hast 38 Mal ‚hm‘ geantwortet“); ② eine Brücke („Die Software sagt, ich schulde dir einen Anruf“ ist einfacher zu schicken als „Ich vermisse dich“); ③ ein Bild, das er teilen kann (Schuldgefühl zeigen = gutes Gewissen zeigen). Jeder Teil des Berichts dient diesen drei Dingen. Es ist keine psychologische Analyse – Mütter brauchen keinen Bindungstyp.

Ablauf: Verlauf holen → Personen bestätigen → in messages.json umwandeln → mit stats.py berechnen → drei Fragen stellen → Text schreiben → mit render.py Bericht und Karten ausgeben. Übungsmodus und Vergleichsmodus sind optionale Einstiege.

Unterstützende Dateien in diesem Verzeichnis, nach Bedarf zu lesen:

  • references/metrics.md – Wie jede Zahl berechnet wird (wenn der Nutzer fragt „Wie wird das berechnet?“, hier nachschauen)
  • references/types.md – 10 Typen für sie + 6 Typen für dich + fünfstufige Bewertung
  • references/dictionary.md – Grundwörterbuch und Generierungsregeln für die Übersetzungstabelle von Insider-Ausdrücken
  • references/writing-rules.md – Regeln für den Textteil, Anti-KI-Liste, wann zurückhaltend sein
  • references/report-template.md – Berichtsvorlage und narrative.json-Felder
  • references/practice.md – Übungsmodus
  • references/export-guide.md – Plattform-spezifische Export-/Screenshot-Anleitungen (wenn der Nutzer fragt „Wie exportiere ich?“, hier zuerst Screenshot empfehlen)
  • scripts/ – parse_export.py validate.py stats.py render.py compare.py redact.py, nur Standardbibliothek, keine Internetverbindung
  • assets/ – HTML-Vorlagen für Bericht und zwei Karten

Datenschutz (vor allem)

  • Liest nur die vom Nutzer bereitgestellten Screenshots/Dateien. Entschlüsselt keine WeChat-Datenbank, keine Internetverbindung, speichert keine Verläufe ohne explizite Anforderung des Nutzers. Skript-Ausgaben (messages.json / stats.json / reports/) bleiben im aktuellen Verzeichnis – dem Nutzer sagen, wo sie sind und dass sie jederzeit gelöscht werden können.
  • Der Bericht wiederholt nicht den gesamten Originaltext, zitiert nur kurze Sätze. Überweisungen: nur die Anzahl, nie den Betrag.
  • Wenn der Nutzer nicht unkenntlich gemacht hat: Einmal darauf hinweisen, dass Namen und sensible Inhalte zuerst mit scripts/redact.py unkenntlich gemacht werden können – nicht wiederholen.
  • Wenn der Nutzer fragt, ob etwas durchsickert: Ehrlich antworten – in welchem Tool du es ausführst, erhält die Daten; das Skript selbst sendet nichts.

Schritt 1: Verlauf holen

Zuerst fragen, ob er die Desktop-Version von WeChat hat. Der Export ist weitaus besser als Screenshots – sechs Monate auf einmal, vollständige Zeitstempel, kein Bild-für-Bild-Abtippen und keine KI-Transkription (Dutzende Screenshots decken nur wenige Hundert Nachrichten ab und sind fehleranfällig).

Priorität:

  1. Exportdatei (bevorzugt): Mit WeFlow (WeChat 4.0+) oder WeChatMsg / PyWxDump (WeChat 3.x) den Chat mit dieser Person als JSON / CSV / TXT exportieren. scripts/parse_export.py erkennt diese Formate. Details je Plattform in references/export-guide.md – je nach Situation des Nutzers den entsprechenden Abschnitt nennen, nicht alles auf einmal.
  2. Screenshots (Fallback): Wenn nur das Handy, ein Mac oder keine zusätzliche Software installiert werden soll. WeChat / QQ / SMS – Android kann lange Screenshots.
  3. Direkt eingefügter Text.

Wenn der Nutzer nichts gibt und nur sagt „Ich will den Chat mit meiner Mutter analysieren“, zuerst fragen:

Hast du WeChat auf dem Rechner installiert? Wenn ja, zeige ich dir, wie du ihren Verlauf exportierst – auf einmal sechs Monate, viel genauer als Screenshots. Nur Handy? Dann mach Screenshots – scrolle von oben nach unten, jede Seite ein Bild.

Beim Screenshot-Pfad ergänzen: Am besten zwei benachbarte Screenshots mit einer Überlappung von ein bis zwei Nachrichten; zehn bis fünfzehn Bilder für einen Bericht, dreißig bis vierzig für stabile Zahlen; Namen und sensible Inhalte vorher unkenntlich machen.

Schritt 2: Personen bestätigen

  • Wer ist der Nutzer, wer die Familie. Auf dem WeChat-Screenshot: rechte Seite grüne Blasen = Nutzer, linke Seite weiße Blasen = Gegenüber. Bei Exportdateien das Sender-Feld prüfen. Wenn unklar, einmal nachfragen.
  • Wer ist das Gegenüber, wie heißt es, mit welchem Pronomen (sie/er)? Wenn der Nutzer „meine Mutter“ sagt, verwende „Mutter/sie“; wenn „mein Vater“ sagt, „Vater/er“; wenn „Oma“ sagt, „Oma/sie“. Berichtstitel, Typenbezeichnungen und Feiertage (Muttertag/Vatertag) werden entsprechend angepasst. Der Skill heißt „Mama Nachricht“, aber die Hälfte der Nutzer wird damit den Vater analysieren.
  • Geburtstage (optional): Ihr Geburtstag und der Geburtstag des Nutzers (MM-DD) – für die Feiertagspunktetafel und den Countdown.

Schritt 3: In Arbeitsblatt umwandeln

Ziel ist messages.json:

{"me": „ich", "her": „Mutter", "her_pronoun": „sie", "source": „screenshots",
 "messages": [
   {"ts": „2026-05-12T21:03:14", "sender": „her", "type": „text", "content": „Hast du gegessen?", "dur": null},
   {"ts": null, "sender": „me", "type": „text", "content": „Ja", "dur": null},
   {"ts": „2026-05-12T21:05:00", "sender": „her", "type": „voice", "content": „", "dur": 23}
 ]}

type ∈ text / voice / image / video / sticker / transfer / link / call_voice / call_video / recall / location / file. Bei Sprachnachrichten und Anrufen die Sekunden in dur eintragen. Bei link den Titel in content. Bei Überweisungen in content nur „Überweisung“ schreiben, keinen Betrag.

Screenshot-Pfad: Bild für Bild transkribieren. Regeln:

  • Überlappende Nachrichten benachbarter Screenshots nur einmal erfassen, nach Inhalt und Position abgleichen, nicht raten.
  • WeChat zeigt Zeitstempel nur bei größeren Abständen. Bei vorhandenem Zeitstempel ts ausfüllen; fehlende auf null setzen (das Skript zählt sie, nimmt sie aber nicht in die Zeitberechnung). Keine Zeitstempel für Nachrichten ohne Zeitstempel erfinden.
  • Sprachnachrichten: Sekunden eintragen. Sticker: sticker (eingebaute Emojis wie [Rose] in content). Überweisungen: Anzahl notieren.
  • Wenn Screenshots unscharf sind oder offensichtlich Lücken haben: nur die lesbaren Teile transkribieren und im Datenhinweis notieren. Keine Daten zum besseren Berichtergebnis ergänzen.
  • Nach der Transkription python scripts/validate.py messages.json ausführen: prüft Format, chronologische Reihenfolge, mögliche Duplikate (übersehene Überlappungen), Überweisungen mit Betrag – und gibt die Anzahl der Nachrichten sowie den Zeitbereich aus. Diese Zusammenfassung dem Nutzer zur Bestätigung vorlegen, dann weiter.

Export-Pfad (bevorzugt):

python scripts/parse_export.py exportdatei --her NameAusVerlauf --call Mutter --out messages.json
# Wenn der Name im Verlauf unbekannt: zuerst ohne --her ausführen, das Skript listet die Namen auf
# Wenn der Verlauf mehrere Jahre umfasst: --since 2026-01-01 (oder --last-days 180) nur für den letzten Abschnitt, Bericht wird gezielter

Bei WeFlow-Export Format JSON wählen (enthält isSend-Feld, Angabe von --her nicht nötig; TXT und weclone CSV werden auch erkannt, enthalten aber weniger Informationen). WeFlow / WeChatMsg exportiert den gesamten Verlauf – möglicherweise zehntausende Nachrichten. Wenn die Zeitspanne zu groß ist, wird der Bericht verwässert („Die häufigste Frage“ wird zum Durchschnitt von drei Jahren). Standardmäßig die letzten 6–12 Monate empfehlen. Hinweis: WeFlow exportiert keine Sekunden für Sprachnachrichten – „längste Sprachnachricht“ fehlt dann, ist aber normal.

Schritt 4: Berechnen

python scripts/stats.py messages.json --out stats.json --today 2026-08-30 --her-birthday 10-20 --my-birthday 06-03

Das Terminal gibt eine Zusammenfassung aus, stats.json enthält alle Zahlen. Jede Zahl im Bericht stammt von hier, nicht selbst ausgerechnet. Definitionen in references/metrics.md. Die warnings in stats.json müssen in den Datenhinweis am Ende des Berichts übernommen werden.

Wenn das Skript nicht ausgeführt werden kann (z. B. in einer reinen Chat-Umgebung): Laut metrics.md die wichtigsten Kennzahlen von Hand berechnen – wer schreibt zuerst, Median der Antwortzeit, kurze Antworten, unbeantwortete Fragen, häufigste Frage, Tageszeiten. Der Rest wird mit „Für genaue Werte Export des Verlaufs erforderlich“ gekennzeichnet.

Schritt 5: Drei Fragen stellen

Nach der Berechnung dem Nutzer zuerst die drei Indizes und die Ergebnisse der Typenbestimmung zeigen (das ist der interessanteste Teil, gleich zu Beginn), dann fragen:

Bevor ich den letzten Teil schreibe, habe ich drei Fragen – du kannst alle überspringen: ① Wann warst du das letzte Mal zu Hause? ② Gab es bei ihr in letzter Zeit etwas – gesundheitlich, familiär? ③ Worüber habt ihr beim letzten Telefonat gesprochen?

Schritt 6: Text schreiben

Nach references/writing-rules.md. Zu schreiben:

  • Für jeden der drei Indizes ein prägnanter Satz (Zahl + ein Detail)
  • Ein Satz zu ihrem Typ und deinem Typ (mit Zitat einer Originalnachricht + Zahl)
  • Übersetzungstabelle mit Insider-Ausdrücken: 6–10 Einträge (was sie wirklich gesagt hat, siehe dictionary.md)
  • Was sie dir überwiesen hat: Ein Einsichtssatz (was überwiesen wurde, in welchem Zusammenhang mit dem, was der Nutzer erzählt hat)
  • Was sie eigentlich sagen wollte: 120–220 Wörter
  • Drei Dinge, die du heute Abend tun kannst
  • Drei Antwortvorschläge für dich
  • Drei Gesprächseinstiege für einen Anruf
  • Ein Satz, den du ihr direkt schicken kannst: 60–100 Wörter, mit konkreter Zeitangabe

Zuerst im Chat den vollständigen Bericht nach der Markdown-Vorlage aus report-template.md ausgeben, gleichzeitig den Text in narrative.json speichern.

Schritt 7: Bericht und Karten ausgeben

python scripts/render.py stats.json narrative.json --out reports/

Drei Dateien: Vollständiger Bericht, Familien-Konto-Karte (für den Nutzer zum Teilen), Karte für sie (zum Verschicken). Dem Nutzer sagen, dass er sie im Browser öffnen und als Screenshot speichern soll. Die Karten sind im Hochformat. Die Karte für sie ist der eigentliche Auslieferungsmechanismus dieses Produkts – wenn nur eines empfohlen werden soll, dann dieses.


Optionale Einstiege

Übungsmodus (Nutzer sagt „Üben“, „Spiel mit mir“, „Spiel meine Mutter“) → references/practice.md lesen. Die KI spricht 10 Runden mit dem Nutzer im Stil seiner Mutter. Antwortet der Nutzer mit „hm“, wird das sofort markiert. Am Ende gibt es eine Bewertung. Voraussetzung: ≥ 40 Nachrichten im Verlauf.

Vergleichsmodus (Nutzer sagt „Vergleich mit einem Freund“, „Wem antworte ich schneller?“) → Der Nutzer gibt eine zweite Serie Screenshots mit einem Freund ab. Selber Ablauf, erzeugt friend-stats.json. Dann:

python scripts/compare.py stats.json friend-stats.json --labels Mutter Freund --mode friend

Schlussfolgerung nur eine Zeile: „Du antwortest deinem Freund in 3 Minuten, deiner Mutter in 4 Stunden und 12 Minuten – das ist 84 Mal so lange.“

Voreingenommenheitsbericht (Nutzer hat beide Elternteile gegeben) → --labels Mama Papa --mode papa.

Nur Karte (Nutzer sagt „Mach eine Karte“ oder „Gib mir ein Bild“) → Wenn es bereits stats und narrative gibt, sofort render; sonst den kompletten Workflow durchführen – die Karte ist das Ergebnis.

Hilf mir zu antworten (Nutzer sagt „Hilf mir, ihr zu antworten“) → Nur Antworten auf die Liste der unbeantworteten Nachrichten und drei Gesprächseinstiege schreiben – keinen vollständigen Bericht.


Wann zurückhaltend sein

Aus dem Verlauf und dem Tonfall des Nutzers erkennen – kein explizites Eingeständnis nötig. Details am Ende von writing-rules.md. Kernpunkte:

  • Weniger als 20 Nachrichten: Nur zahlenbasierte Ergebnisse, keine Interpretation.
  • Verlauf enthält Konflikte, Beleidigungen, Kontrolle, anhaltende Heiratsaufforderungen oder Geldforderungen: Neutral die Muster beider Seiten beschreiben, nicht Partei ergreifen. „Drei Dinge für heute Abend“ und „Der Satz für sie“ weglassen.
  • Der Nutzer ist traurig, die Familie ist zerstritten, oder es wird erwähnt, dass die Mutter nicht mehr lebt: Zuerst auf den Nutzer eingehen, dann fragen, ob er weitermachen möchte. Falls ja, Bewertungen weglassen.
  • Analyse für jemand anderen: Dritte Person verwenden.

Unter keinen Umständen den Nutzer abstempeln. „Kurze Antwort“ ist nicht „gleichgültig“, „Nicht geantwortet“ ist nicht „respektlos“, die Bewertung ist ein Kapitel, kein Urteil.


Selbstcheck vor der Berichtserstellung

  • Jede Zahl ist in stats.json auffindbar
  • Jede Aussage in „Was sie eigentlich sagen wollte“ ist auf eine Originalnachricht oder eine Zahl zurückzuführen
  • Der Satz zum Typ zitiert eine Originalnachricht
  • Der Satz für sie enthält eine konkrete Zeitangabe
  • Keine Blacklist-Phrasen, kein „gleichgültig“/„respektlos“/„sollte“, keine Ausrufezeichen
  • Pronomen und Anrede korrekt, Feiertag dem Gegenüber entsprechend gewählt
  • Keine Überweisungsbeträge notiert
  • Datenhinweis enthält Angaben zu fehlenden Screenshot-Abschnitten und zur Anzahl von Nachrichten ohne Zeitstempel

Verwandte Skills