iMessage & Signal Analyzer
by @terellison
Analyze iMessage (macOS) and Signal conversation history to reveal relationship dynamics — message volume, initiation patterns, silence gaps, tone samples, a...
clawhub install imessage-signal-analyzer📖 About This Skill
name: imessage-signal-analyzer description: Analyze iMessage (macOS) and Signal conversation history to reveal relationship dynamics — message volume, initiation patterns, silence gaps, tone samples, and recent exchanges. Use when asked to analyze messages, read message history, check conversation patterns, or evaluate a relationship based on text history. Works on macOS (iMessage + Signal), Linux/Windows (Signal only).
iMessage & Signal Analyzer
Analyze iMessage (macOS) and Signal conversations to produce relationship reports.
Prerequisites
macOS (iMessage)
iMessage data is stored locally on macOS. Depending on your security settings, you may need to grant Full Disk Access:Option 1: Run the script directly with Python (no special permissions needed if you have read access to ~/Library/Messages/chat.db)
Option 2: If you get a permission error, grant Full Disk Access:
Linux / Windows (Signal only)
Signal (All Platforms)
brew install signal-cli (macOS) or see https://github.com/AsamK/signal-clisignal-cli link and scan QR codesignal-cli export --output ~/signal_export.jsonUsage
iMessage Analysis
python3 skills/message-analyzer/scripts/analyze.py imessage
Examples:
python3 skills/message-analyzer/scripts/analyze.py imessage "+15551234567"
python3 skills/message-analyzer/scripts/analyze.py imessage "+15551234567" --limit 500
Signal Analysis
First, export your Signal data (one-time):signal-cli export --output ~/signal_export.json
Then analyze:
python3 skills/message-analyzer/scripts/analyze.py signal ~/signal_export.json
Examples:
python3 skills/message-analyzer/scripts/analyze.py signal ~/signal_export.json "+15551234567"
python3 skills/message-analyzer/scripts/analyze.py signal ~/signal_export.json "+15559876543"
Finding a Contact's Number
iMessage
If you have a name but not a number:DB=$(ls ~/Library/Application\ Support/AddressBook/Sources/*/AddressBook-v22.abcddb 2>/dev/null | head -1)
sqlite3 "$DB" "SELECT ZFIRSTNAME, ZLASTNAME FROM ZABCDRECORD WHERE ZFIRSTNAME LIKE '%Name%';"
If AddressBook returns no results, ask the user for the number.Signal
Signal exports include phone numbers in the JSON. Search by name or number.Key Data Caveats
iMessage
+@ prefixes may appear in samples; these are normal.Signal
signal-cli exportAnalysis Output
The script produces:
Interpreting Results
After running the script, synthesize findings conversationally:
Present the analysis conversationally, not just as raw numbers. Offer a genuine take on the relationship dynamic.
💡 Examples
iMessage Analysis
python3 skills/message-analyzer/scripts/analyze.py imessage
Examples:
python3 skills/message-analyzer/scripts/analyze.py imessage "+15551234567"
python3 skills/message-analyzer/scripts/analyze.py imessage "+15551234567" --limit 500
Signal Analysis
First, export your Signal data (one-time):signal-cli export --output ~/signal_export.json
Then analyze:
python3 skills/message-analyzer/scripts/analyze.py signal ~/signal_export.json
Examples:
python3 skills/message-analyzer/scripts/analyze.py signal ~/signal_export.json "+15551234567"
python3 skills/message-analyzer/scripts/analyze.py signal ~/signal_export.json "+15559876543"
⚙️ Configuration
macOS (iMessage)
iMessage data is stored locally on macOS. Depending on your security settings, you may need to grant Full Disk Access:Option 1: Run the script directly with Python (no special permissions needed if you have read access to ~/Library/Messages/chat.db)
Option 2: If you get a permission error, grant Full Disk Access:
Linux / Windows (Signal only)
Signal (All Platforms)
brew install signal-cli (macOS) or see https://github.com/AsamK/signal-clisignal-cli link and scan QR codesignal-cli export --output ~/signal_export.json