{"skill":{"slug":"imessage-signal-analyzer","displayName":"iMessage & Signal Analyzer","summary":"Analyze iMessage (macOS) and Signal conversation history to reveal relationship dynamics — message volume, initiation patterns, silence gaps, tone samples, a...","description":"---\nname: imessage-signal-analyzer\ndescription: 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).\n---\n\n# iMessage & Signal Analyzer\n\nAnalyze iMessage (macOS) and Signal conversations to produce relationship reports.\n\n## Prerequisites\n\n### macOS (iMessage)\niMessage data is stored locally on macOS. Depending on your security settings, you may need to grant Full Disk Access:\n\n**Option 1:** Run the script directly with Python (no special permissions needed if you have read access to `~/Library/Messages/chat.db`)\n\n**Option 2:** If you get a permission error, grant Full Disk Access:\n- Open **System Settings → Privacy & Security → Full Disk Access**\n- Click **+** and add Python or your terminal app\n\n### Linux / Windows (Signal only)\n- iMessage is not available on Linux/Windows\n- Signal analysis works via exported JSON\n\n### Signal (All Platforms)\n- Install signal-cli: `brew install signal-cli` (macOS) or see https://github.com/AsamK/signal-cli\n- Link your device: `signal-cli link` and scan QR code\n- Export messages: `signal-cli export --output ~/signal_export.json`\n\n## Usage\n\n### iMessage Analysis\n```bash\npython3 skills/message-analyzer/scripts/analyze.py imessage <phone_or_handle>\n```\n\n**Examples:**\n```bash\npython3 skills/message-analyzer/scripts/analyze.py imessage \"+15551234567\"\npython3 skills/message-analyzer/scripts/analyze.py imessage \"+15551234567\" --limit 500\n```\n\n### Signal Analysis\nFirst, export your Signal data (one-time):\n```bash\nsignal-cli export --output ~/signal_export.json\n```\n\nThen analyze:\n```bash\npython3 skills/message-analyzer/scripts/analyze.py signal ~/signal_export.json <phone_or_name>\n```\n\n**Examples:**\n```bash\npython3 skills/message-analyzer/scripts/analyze.py signal ~/signal_export.json \"+15551234567\"\npython3 skills/message-analyzer/scripts/analyze.py signal ~/signal_export.json \"+15559876543\"\n```\n\n## Finding a Contact's Number\n\n### iMessage\nIf you have a name but not a number:\n```bash\nDB=$(ls ~/Library/Application\\ Support/AddressBook/Sources/*/AddressBook-v22.abcddb 2>/dev/null | head -1)\nsqlite3 \"$DB\" \"SELECT ZFIRSTNAME, ZLASTNAME FROM ZABCDRECORD WHERE ZFIRSTNAME LIKE '%Name%';\"\n```\nIf AddressBook returns no results, ask the user for the number.\n\n### Signal\nSignal exports include phone numbers in the JSON. Search by name or number.\n\n## Key Data Caveats\n\n### iMessage\n- **Your sent messages** may only exist from the current device's setup date — older sent messages are lost when switching devices. This skews initiation stats.\n- **Binary messages** (attributedBody) are partially decoded — some formatting artifacts like `+@` prefixes may appear in samples; these are normal.\n- **Multiple handles**: One contact may have 2–3 duplicate handles (iMessage + SMS + RCS). The script aggregates them automatically.\n\n### Signal\n- **Export required**: You must export Signal data first using `signal-cli export`\n- **Media**: Exported JSON contains message text; media (images, files) is not included\n- **Reactions**: Emoji reactions are included as separate message entries\n\n## Analysis Output\n\nThe script produces:\n- Total message count (you vs. them)\n- Date range\n- Messages per year with volume bar\n- Conversation initiation breakdown (new convo = gap > 4 hours)\n- Notable silences (>30 days)\n- Sample messages by year\n- Most recent 10 messages\n\n## Interpreting Results\n\nAfter running the script, synthesize findings conversationally:\n- **Volume patterns**: When was the friendship most active? Any notable surges or drops?\n- **Initiation skew**: Who reaches out first? (Note: your sent messages may be missing from old periods)\n- **Gaps**: Were long silences mutual drift or explainable (device switch, platform change, life event)?\n- **Tone/content**: What do the sample messages reveal about the relationship's energy?\n- **Context from user**: Always ask the user to fill in context gaps\n\nPresent the analysis conversationally, not just as raw numbers. Offer a genuine take on the relationship dynamic.\n","topics":["Message"],"tags":{"latest":"1.0.0"},"stats":{"comments":0,"downloads":1178,"installsAllTime":44,"installsCurrent":1,"stars":0,"versions":1},"createdAt":1771597193739,"updatedAt":1778991882138},"latestVersion":{"version":"1.0.0","createdAt":1771597193739,"changelog":"Clean release with fake example data","license":null},"metadata":null,"owner":{"handle":"terellison","userId":"s17f856vcctyctfmw0708199yn86q96r","displayName":"Terry Ellison","image":"https://avatars.githubusercontent.com/u/26387922?v=4"},"moderation":null}