Client setup runbook
Text plus transcribed voice notes, from WhatsApp Desktop into Obsidian. Runs entirely on the client's own Mac. Nothing uploads anywhere; transcription happens locally.
His Claude Code does all the software work: installs the tools, fetches the script, runs it, and writes into his vault. Do the two human steps first, then paste the prompt. If either is missing, Claude notices and tells him what to fix.
Install and link WhatsApp Desktop from the Mac App Store, scan the QR from his phone, and let it sync older history. Linking needs the phone, so Claude cannot do it.
Grant Full Disk Access to whatever runs his Claude Code (Terminal or the Claude app) in System Settings > Privacy & Security, then quit and reopen it. Apple only lets a person flip this.
Loading…
Prefer to click through it yourself? The manual walkthrough is below.
Before the call, have ready
StewartOS1 and a separate second-brain folder. Get the real one or you write into the wrong brain.On his 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 his 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. Very old ones may need him to scroll up in the chat and tap them so the app re-downloads. We 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, which matters for his 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 his real one and use his 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 "Stewart" \
--chat "Mo Asmal" \
--chat "Monica" \
--chat "Courtney" \
--out "/Users/stewart/StewartOS1/WhatsApp"
Fast text-only first pass, no waiting on transcription:
python3 whatsapp_to_brain.py --chat "Mo Asmal" --no-voice --out "/Users/stewart/StewartOS1/WhatsApp"
Open Obsidian on his Mac. The WhatsApp folder now holds the chat files. Open one, find a voice note line, confirm the transcript reads correctly. From here his normal brain workflow can digest these like any other note.
Say this to him, plainly
This reads his entire WhatsApp, personal and family chats included. Only the chats you name in Step 6 get imported. Recommend he chooses the business-relevant ones rather than everything, and note that group chats bring other people's messages into his brain. His informed call.
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 manual run is proven and the vault path is confirmed stable, we add a small scheduled job on his Mac that runs it each morning. Do that only after the first run works.