$npx -y skills add chacosoldier/compabob --skill merge-contactsMerge the user's contact exports (Google Takeout, LinkedIn export, vault People notes) into one local CRM. Use for "/merge-contacts", "build my CRM", "dedup my contacts", or when another workflow needs a clean contacts source of truth.
| 1 | # Merge Contacts |
| 2 | |
| 3 | Build the user's local CRM source of truth with the `crm-merge` module. The |
| 4 | module does the work; your job is to find their exports, run it with the right |
| 5 | flags, and report what merged. Never invent data, never call an external CRM. |
| 6 | |
| 7 | ## Steps |
| 8 | |
| 9 | 1. **Find the exports.** Check, in order: |
| 10 | - A Google Takeout zip in `~/Downloads` (name contains "takeout" or |
| 11 | "google"). The script auto-finds the newest one, but confirm it exists. |
| 12 | - A LinkedIn export folder (contains `Connections.csv`, ideally |
| 13 | `messages.csv`). Ask the user for the path if you cannot find it. |
| 14 | - `vault/People/` for per-person notes (optional). |
| 15 | If none exist, point the user at the setup steps in |
| 16 | `modules/crm-merge/README.md` (both exports are self-service downloads) and stop. |
| 17 | |
| 18 | 2. **Get their name** for message-frequency counting. Ask how their name appears |
| 19 | in LinkedIn messages (the "me" side), or read it from `config/user.config.yaml`. |
| 20 | |
| 21 | 3. **Run the build:** |
| 22 | ```bash |
| 23 | python3 modules/crm-merge/build.py \ |
| 24 | --takeout-zip <path-or-omit-to-autofind> \ |
| 25 | --linkedin-dir <folder> \ |
| 26 | --me "<their name>" \ |
| 27 | --out data/crm-merge |
| 28 | ``` |
| 29 | Omit any source they do not have; one source alone is fine. |
| 30 | |
| 31 | 4. **Report** the counts the script prints: total unique people, how many appear |
| 32 | in 2+ sources (the high-confidence merges), and how many link to a vault note. |
| 33 | Flag if a source loaded zero records, since that usually means a wrong path. |
| 34 | |
| 35 | 5. **Point them onward.** Tell them `data/crm-merge/browser.html` is openable in |
| 36 | any browser, and that `contacts.json` is what `/build-list` dedups against. |
| 37 | |
| 38 | ## Watch out for |
| 39 | |
| 40 | - **Over-merging on a common name:** if the user says distinct people got fused, |
| 41 | lower `--name-collision-threshold` and re-run. |
| 42 | - **Zero LinkedIn messages counted:** the `--me` name probably does not match the |
| 43 | export. Check the `FROM`/`TO` values in `messages.csv` and pass the exact form. |
| 44 | - **Privacy:** outputs are git-ignored; do not commit them or paste contact data |
| 45 | into anything outward-facing. |