home / skills / rohunvora / cool-claude-skills / imsg-ingest

imsg-ingest skill

/skills/imsg-ingest

This skill helps you manage and export iMessage conversations, sync state, and resolve contacts from a standalone CLI tool.

npx playbooks add skill rohunvora/cool-claude-skills --skill imsg-ingest

Review the files below or copy the command above to add this skill to your agents.

Files (5)
SKILL.md
3.8 KB
---
name: imsg-ingest
description: >
  Primary iMessage interface. Full-featured CLI for message export, conversation
  management, contact resolution, and thread state. Use when user mentions
  "imessage", "imsg", "text message", "iphone messages", or phone numbers.
  Triggers: "imessage messages", "export imessage", "text from john",
  "imessage contacts", "sync imessage". This is STANDALONE - do not defer
  to unified-messages for iMessage operations.
---

# iMessage Export (imsg-ingest)

Primary interface for all iMessage operations. **Standalone and full-featured.**

**Location**: `/Users/satoshi/data/imsg-ingest`

## Quick Start

```bash
cd /Users/satoshi/data/imsg-ingest

# Check access (MUST have Full Disk Access)
poetry run imsg status

# Sync messages
poetry run imsg sync

# List conversations
poetry run imsg list

# Export specific conversation
poetry run imsg dump "+14155551234" --output john.jsonl
```

## Prerequisites

**Full Disk Access required.** See [references/setup.md](references/setup.md) for setup.

## Core Workflows

### Quick Export for AI Context (Recommended)

Get recent messages as markdown, ready to paste into Claude:

```bash
# Syncs first, outputs to stdout (last 24h)
python scripts/quick_export.py "+14155551234"

# By contact name
python scripts/quick_export.py "John Doe" --hours 48

# Copy to clipboard
python scripts/quick_export.py "+14155551234" | pbcopy

# Visual copy in browser
python scripts/quick_export.py "+14155551234" | quick-view

# Intentional save
python scripts/quick_export.py "+14155551234" --save
# → exports/14155551234_2026-01-02.md
```

See [references/files.md](references/files.md) for file management philosophy.

### Export via CLI (Alternative)

```bash
# By phone number
poetry run imsg dump "+14155551234" --output john.jsonl

# By email
poetry run imsg dump "[email protected]" --output john.jsonl

# By name (searches contacts)
poetry run imsg dump "John Doe" --output john.jsonl

# Last 7 days only
poetry run imsg dump "+14155551234" --last 7d --output john.jsonl
```

### Sync Operations

```bash
# Sync new messages (forward)
poetry run imsg sync

# Backfill older messages
poetry run imsg sync --backfill
```

### List Conversations

```bash
# All conversations
poetry run imsg list

# DMs only
poetry run imsg list --no-groups

# Groups only
poetry run imsg list --no-dms

# With minimum message count
poetry run imsg list --min-messages 10
```

### Export All Conversations

```bash
# Export all with 10+ messages
poetry run imsg dump-all --min-messages 10

# Limit messages per chat
poetry run imsg dump-all --limit-per-chat 500
```

### Contact Resolution

```bash
# Check contact system status
poetry run imsg contacts status

# Lookup a contact
poetry run imsg contacts lookup "+14155551234"

# List all contacts
poetry run imsg contacts list

# Refresh contacts from AddressBook
poetry run imsg contacts sync

# Update exports with contact names
poetry run imsg contacts refresh-exports
```

See [references/contacts.md](references/contacts.md) for resolution backends.

## Data Locations

| Path | Purpose |
|------|---------|
| `data/conversations/` | Exported conversations (*.jsonl) |
| `data/sync-state.json` | Sync state (rowid tracking) |
| `data/context/state.json` | Thread states (done/draft/snooze) |

### Source Database

```
~/Library/Messages/chat.db
```

Read-only SQLite access. Requires Full Disk Access.

## Thread ID Format

iMessage threads use format: `imsg:dm:identifier` or `imsg:group:chatID`

Examples:
- `imsg:dm:+14155551234` - DM with phone number
- `imsg:dm:[email protected]` - DM with email
- `imsg:group:chat123456` - Group chat

## Thread State

State stored in `data/context/state.json`. Same format as tg-ingest:

```json
{
  "imsg:dm:+14155551234": {
    "status": "pending",
    "draft": null,
    "note": "Follow up on project",
    "snooze": null
  }
}
```

States: `pending`, `done`, `archived`

Overview

This skill provides a standalone, full-featured iMessage CLI for exporting messages, managing conversations, resolving contacts, and tracking thread state. It is designed for local use on a Mac with Full Disk Access and reads the system Messages database in read-only mode. Use it when you need reliable exports, syncs, or programmatic access to iPhone/iMessage data.

How this skill works

The tool inspects the macOS Messages SQLite database and maintains a local data directory with exported conversation JSONL files, sync state, and per-thread metadata. It offers commands to sync new or backfill older messages, list and filter conversations, dump single or all chats, and resolve contacts against the AddressBook. Thread states (drafts, pending, done, snooze) are stored in a JSON context file for lightweight workflow tracking.

When to use it

  • Export a conversation for AI prompting or archival purposes.
  • Sync new iMessage traffic into a local export store before processing.
  • Resolve phone numbers or emails to contact names for cleaner exports.
  • List or filter conversations to find active DMs or group chats quickly.
  • Set or inspect thread state (pending/done/archived) for task-oriented messaging workflows.

Best practices

  • Grant Full Disk Access before using the tool; it requires read access to ~/Library/Messages/chat.db.
  • Run a sync before exporting to ensure you have the latest messages and correct rowid tracking.
  • Use quick_export.py for Markdown-ready snippets when preparing AI prompts or clipboard copies.
  • Limit dump-all runs with --min-messages or --limit-per-chat to avoid huge exports.
  • Keep the data directory under versioned or backed-up storage if you need long-term archives.

Example use cases

  • Quickly export the last 24 hours of a conversation to Markdown for feeding into an AI assistant.
  • Backfill older messages when reconstructing a chat history for legal or project review.
  • Batch-export all conversations with more than 10 messages for migration or analysis.
  • Lookup a phone number to attach a contact name before sharing an export with a teammate.
  • Mark a thread as pending with a short note and later mark it done to track follow-ups.

FAQ

Does this require special macOS permissions?

Yes — Full Disk Access is required so the tool can read ~/Library/Messages/chat.db and related files.

Can I run exports without modifying the source database?

Yes — the tool uses read-only SQLite access and stores sync state and exports in a separate local data directory.