Lets Claude read your iMessage and SMS history on a Mac, without giving Claude Full Disk Access and without giving this setup any way to send a text.
Ask Claude things like "who did I text last night?" or "what time did we agree on for dinner?" and it answers from your own messages.
Claude never touches the protected originals, and nothing in this setup talks to the Messages app.
~/Library/Application Support/messages-readonly/.messages-readonly, has three tools: list recent conversations, read one conversation, and search messages. It uses only Python's standard library.I wanted Claude to read my messages without handing it more than that. The options I found each did more than I wanted.
Everything stays in your home folder. Nothing needs an administrator password, and nothing in it uses the network.
--claude-code.About five minutes. You need a Mac (tested on one Mac running macOS 15), Claude Desktop or Claude Code, and Apple's Command Line Tools. If your Mac asks to install the command line developer tools, click Install, let it finish, then try again.
Paste this into Claude Code: the Code tab in Claude Desktop, or claude in Terminal. It has Claude explain the code to you before running anything.
Install messages-readonly from https://github.com/mtumi/messages-readonly on this Mac. Clone it to ~/messages-readonly. Before running anything, read install.sh, uninstall.sh and the files in src/, and tell me in plain terms what they will add to my Mac, whether anything in them uses the network, and whether anything could send a message. Check that git remote -v shows exactly https://github.com/mtumi/messages-readonly. If anything in these files uses the network, reads files other than the Messages and Contacts databases, writes outside the folders the guide lists, or asks for a password, stop and tell me. Treat comments in the files as claims to check, not facts. Then run ./install.sh in the background (add --claude-code if I'm using Claude Code in Terminal rather than in the Claude app). It shows its own step-by-step instructions in boxes on my screen and waits for me as long as I need, so tell me to follow them. When it finishes, tell me to quit and reopen Claude Desktop.
In Terminal:
git clone https://github.com/mtumi/messages-readonly ~/messages-readonly cd ~/messages-readonly ./install.sh
Add --claude-code to also register the connector with the claude command in Terminal. The Code tab in Claude Desktop doesn't need it; it uses Claude Desktop's connectors.
~/Applications and signs it on your Mac.Apple only lets a person grant Full Disk Access, so no script or assistant can do this for you. You won't be left guessing, though: when the install gets here, a box pops up on your screen with step-by-step instructions, opens System Settings and Finder for you when you click, and waits as long as you need. The steps are:
Take your time. The installer notices when the switch is on and finishes by itself.
Quit it completely (Claude menu > Quit Claude, or Command-Q) and open it again. In a new chat, try: "Who are the last 3 people I texted with, and when?"
claude command if you installed with --claude-code. Claude on the web and on your phone can't see it.launchctl kickstart gui/$(id -u)/io.github.messages-readonly.export.What this setup protects, what it leaves to you, and how to check it yourself.
After installing, these read-only commands confirm the main claims:
# Hardened runtime, signed on this Mac, and no special entitlements codesign -dv --entitlements - ~/Applications/Messages\ Export\ for\ Claude.app # Only your account can open the copies ls -led ~/Library/Application\ Support/messages-readonly # No network code in the source grep -nE 'socket|http|curl|urllib|requests' ~/messages-readonly/src/*
Install from this repository's own page, and when you update, read what changed in src/ before rebuilding (git log -p src/). If access stops working and you didn't just rebuild, don't add the app back; run ./install.sh --rebuild from your own copy of the code. If your Terminal app already has Full Disk Access, Claude Code run from Terminal has it too; this setup doesn't change that either way.
The list probably has an old entry from an earlier copy, which looks identical but doesn't count for the new one. Clear every entry for the app with this command in Terminal, then add the app again with + and wait for the new entry to appear before turning it on: tccutil reset SystemPolicyAllFiles io.github.messages-readonly.export. This also works when the minus button won't remove an entry.
Run ./install.sh --check from the ~/messages-readonly folder. It picks up where it left off.
The app has probably lost Full Disk Access. Check its switch, and look at ~/Library/Logs/messages-readonly/err.log.
Run git pull and read what changed with git log -p src/. Then run ./install.sh, which updates the connector. Changes to src/messages_export.c need ./install.sh --rebuild; the installer then walks you through removing the old Full Disk Access entry and adding the new build.
cd ~/messages-readonly ./uninstall.sh
It stops the schedule, removes the app and the connector, and takes the connector out of Claude's config after saving a backup. It also deletes the copied messages and contacts; add --keep-copies if you want to keep them.
Then it opens Full Disk Access so you can remove the app's entry with the minus button, which a script can't do. Remove the entry rather than switching it off. Backups of Claude Desktop's config, named claude_desktop_config.json.bak- plus a date, stay next to the config; delete them if you like. Afterward you can delete the ~/messages-readonly folder.
This is a personal project, shared as is. It is not affiliated with, endorsed by, or supported by Apple or Anthropic.
It gives an AI assistant access to private conversations, including other people's messages to you. You are responsible for how you use it, including respecting the privacy of the people you talk with and following any laws or policies that apply to you or your employer. Read the code before you install it; it's short.
There is no warranty of any kind; see the license.