reading-sms-messages · git:20260127.4050ddc · 2026-01-27 · sha256 5841e5c2b4ba6da4

reading-sms-messages git:20260127.4050ddcA

Immutable. This exact content is served forever at /api/v1/blob/5841e5c2b4ba6da4.

---
name: reading-sms-messages
description: Read SMS and iMessage from macOS Messages app. Use when getting 2FA codes, checking recent texts, or searching message history.
---

# SMS Reader

**Location**: `~/Library/Messages/chat.db` (macOS Messages database)

**Tool**: `tools/sms_reader/__init__.py`

## Quick Usage

```python
from tools.sms_reader import get_2fa, get_recent_messages, search_messages, get_latest_2fa_code

# Get 2FA code from last 5 minutes
code = get_2fa(minutes=5)
print(f"Code: {code}")

# Get detailed 2FA info
result = get_latest_2fa_code(minutes=10)
if result:
    print(f"Code: {result['code']}")
    print(f"From: {result['sender']}")
    print(f"Message: {result['message']}")

# Recent messages
messages = get_recent_messages(limit=10)
for m in messages:
    print(f"{m['sender']}: {m['text']}")

# Search
results = search_messages("verification", limit=5)
```

## Functions

| Function | Description |
|----------|-------------|
| `get_2fa(minutes=5)` | Returns just the code string, or None |
| `get_latest_2fa_code(minutes=10)` | Returns dict with code, message, sender, date |
| `get_recent_messages(limit=20, sender=None, since_minutes=None)` | List of message dicts |
| `search_messages(query, limit=20)` | Search by content |
| `list_senders(limit=50, since_days=30)` | List senders with message counts |

## Common Patterns

### Wait for 2FA code
```python
from tools.sms_reader import get_2fa
import time

for _ in range(30):  # 30 second timeout
    code = get_2fa(minutes=1)
    if code:
        print(f"Got code: {code}")
        break
    time.sleep(1)
```

### Get code from specific sender
```python
from tools.sms_reader import get_latest_2fa_code

# Partial match on sender
result = get_latest_2fa_code(minutes=10, sender="+1555")
```

## Requirements

- macOS with Messages app
- Full Disk Access for Python (System Settings > Privacy & Security > Full Disk Access)
- Python.app added: `/Library/Frameworks/Python.framework/Versions/3.12/Resources/Python.app`

## Database Schema

Key tables in `chat.db`:
- `message` - text, date, is_from_me, handle_id
- `handle` - phone numbers/emails
- `chat` - conversation metadata
- `chat_message_join` - links messages to chats

Apple timestamps are nanoseconds since 2001-01-01 (add 978307200 seconds and divide by 1e9 for Unix time).