Skip to content
Back to skills

Imessage Signal Analyzer

ASecurity

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).

  • 16 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added June 7, 2026
researchpythonbashsqlreactgitsecurity

Works with

  • terminal
  • cli

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned June 7, 2026

npx -y skills add modbender/skill-library-mcp --skill imessage-signal-analyzer --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Imessage Signal Analyzer?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Imessage Signal Analyzer
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/modbender-imessage-signal-analyzer/badge)](https://www.skillsdirectory.com/skills/modbender-imessage-signal-analyzer)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
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:
- Open **System Settings → Privacy & Security → Full Disk Access**
- Click **+** and add Python or your terminal app

### Linux / Windows (Signal only)
- iMessage is not available on Linux/Windows
- Signal analysis works via exported JSON

### Signal (All Platforms)
- Install signal-cli: `brew install signal-cli` (macOS) or see https://github.com/AsamK/signal-cli
- Link your device: `signal-cli link` and scan QR code
- Export messages: `signal-cli export --output ~/signal_export.json`

## Usage

### iMessage Analysis
```bash
python3 skills/message-analyzer/scripts/analyze.py imessage <phone_or_handle>
```

**Examples:**
```bash
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):
```bash
signal-cli export --output ~/signal_export.json
```

Then analyze:
```bash
python3 skills/message-analyzer/scripts/analyze.py signal ~/signal_export.json <phone_or_name>
```

**Examples:**
```bash
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:
```bash
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
- **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.
- **Binary messages** (attributedBody) are partially decoded — some formatting artifacts like `+@` prefixes may appear in samples; these are normal.
- **Multiple handles**: One contact may have 2–3 duplicate handles (iMessage + SMS + RCS). The script aggregates them automatically.

### Signal
- **Export required**: You must export Signal data first using `signal-cli export`
- **Media**: Exported JSON contains message text; media (images, files) is not included
- **Reactions**: Emoji reactions are included as separate message entries

## Analysis Output

The script produces:
- Total message count (you vs. them)
- Date range
- Messages per year with volume bar
- Conversation initiation breakdown (new convo = gap > 4 hours)
- Notable silences (>30 days)
- Sample messages by year
- Most recent 10 messages

## Interpreting Results

After running the script, synthesize findings conversationally:
- **Volume patterns**: When was the friendship most active? Any notable surges or drops?
- **Initiation skew**: Who reaches out first? (Note: your sent messages may be missing from old periods)
- **Gaps**: Were long silences mutual drift or explainable (device switch, platform change, life event)?
- **Tone/content**: What do the sample messages reveal about the relationship's energy?
- **Context from user**: Always ask the user to fill in context gaps

Present the analysis conversationally, not just as raw numbers. Offer a genuine take on the relationship dynamic.

Files in this skill

  • SKILL.md4.3 KB
  • scripts/analyze.py8.4 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.