Setup guide
Text plus transcribed voice notes, from WhatsApp Desktop into your Obsidian vault. It runs entirely on your own Mac. Nothing uploads anywhere; transcription happens on your machine.
Your Claude Code does all the software work: installs the tools, fetches the script, runs it, and writes into your vault. Do the two steps below first (only you can), then paste the prompt. If either is missing, Claude will notice and tell you exactly what to fix.
Install and link WhatsApp Desktop from the Mac App Store, scan the QR with your phone, and let it sync older history. Linking needs your phone, so Claude cannot do it.
Grant Full Disk Access to whatever runs your Claude Code (Terminal, or the Claude app) in System Settings > Privacy & Security, then quit and reopen it. Apple only lets a person flip this switch.
Loading…
Prefer to click through it yourself? The manual walkthrough is below.
Before you start, have ready
On your Mac, open the Mac App Store, search WhatsApp, install the official Meta app. Use the App Store version, not a downloaded one.
Open it. On your phone: WhatsApp > Settings > Linked Devices > Link a Device, and scan the QR. When it offers to sync older chat history, say yes and let it finish.
Only recently synced voice notes keep a live download link. For very old ones, scroll up in the chat and tap them so the app re-downloads. You capture what is live now and catch the rest over time.
The one step everyone forgets. The script reads WhatsApp's protected folder and cannot without this.
System Settings > Privacy & Security > Full Disk Access. Toggle Terminal on. If it is not listed, click + and add it from Applications > Utilities. Then fully quit and reopen Terminal, or the permission will not apply.
Open Terminal and run these one block at a time. First, Homebrew (skip if brew --version already works):
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Then the audio and transcription tools plus the one Python library:
brew install ffmpeg whisper-cpp
pip3 install cryptography
Confirm the transcriber is present (should print a path):
which whisper-cli
Make a working folder and download the speech-to-text model (about 1 GB, accurate on accents and cross-talk):
mkdir -p ~/whatsapp-brain && cd ~/whatsapp-brain
curl -L -o model.bin https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-large-v3-turbo-q5_0.bin
export WHISPER_MODEL=~/whatsapp-brain/model.bin
For a faster, smaller option swap the filename for ggml-base.en.bin. Turbo is more accurate on accents and fast speech, which matters for voice notes.
Open a new file to hold the script:
nano ~/whatsapp-brain/whatsapp_to_brain.py
Copy the full script below, paste into nano, then press Ctrl+O, Enter, Ctrl+X.
Loading…
This prints every chat with its exact name and message count. Note the names you want, copied exactly.
cd ~/whatsapp-brain
python3 whatsapp_to_brain.py --list
Replace the vault path with your real one and use your name as the owner label. Each chat becomes one markdown file with voice notes transcribed and dropped in at the moment they were sent.
export WHISPER_MODEL=~/whatsapp-brain/model.bin
python3 whatsapp_to_brain.py \
--owner "YOUR NAME" \
--chat "Name 1" \
--chat "Name 2" \
--out "/Users/you/YourVault/WhatsApp"
Fast text-only first pass, no waiting on transcription:
python3 whatsapp_to_brain.py --chat "Name 1" --no-voice --out "/Users/you/YourVault/WhatsApp"
Open Obsidian on your Mac. The WhatsApp folder now holds the chat files. Open one, find a voice note line, confirm the transcript reads correctly. From here your normal brain workflow can digest these like any other note.
A note on privacy
This can read your entire WhatsApp, personal and family chats included. Only the chats you name in Step 6 get imported, nothing else. Pick the business-relevant ones rather than everything, and keep in mind that group chats bring other people's messages into your notes. Your call, made on purpose.
If something breaks
brew install whisper-cpp and reopen Terminal.--chat; it matches on any substring.Keeping it fresh
Re-running the same Step 6 command re-exports those chats with the latest messages. Once the first run works, ask your Claude Code to add a small scheduled job that runs it each morning, so your brain stays current without you thinking about it.