一键导入
contacts-unify
Consolidate/dedupe contacts from macOS, iCloud, Google, Zoho, or VCF with provenance-aware review, backups, and optional approved dossiers.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Consolidate/dedupe contacts from macOS, iCloud, Google, Zoho, or VCF with provenance-aware review, backups, and optional approved dossiers.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Audit chezmoi dotfiles for drift, unmanaged files, and broken agent skill symlinks across Claude Code, Codex, Gemini, and other harnesses.
Scan Claude/Codex session logs to find agent behavior patterns, Toolsmith adoption gaps, repeated frustrations, and candidates for new skills/tools.
Generate user-facing changelog entries from git history — plain language, audience-segmented, with optional CHANGELOG.md update.
Capture a technical or product decision with chosen option, rejected alternatives, and rationale — in a format a future agent can read to reconstruct context.
Audit repos for SHA/digest dependency pinning and release cooldowns across Docker, CI, and major language ecosystems; report violations, fix with approval.
Run/triage Django/DRF security smoke checks — settings, throttling, safe HTML, ORM races, model integrity — before shipping or on scanner findings.
| name | contacts-unify |
| description | Consolidate/dedupe contacts from macOS, iCloud, Google, Zoho, or VCF with provenance-aware review, backups, and optional approved dossiers. |
| display_name | Contacts Unify |
| brand_color | #22C55E |
| local_only | true |
| group | For Anyone |
| usage | Ask to fix/merge/clean up contacts, optionally naming whose (local Mac or an SSH host you control). |
| summary | Clean up the mess of contacts scattered across Apple, Google, and your phone — dedupe the duplicates and make it make sense again. |
| default_prompt | Consolidate and dedupe my contacts across all sources into one address book, giving me a simple review UI that shows competing values with provenance and edit dates so I choose the winners. Back up first, dry-run before any change. |
Turn a messy, multi-source pile of contacts into one deduplicated, trustworthy address book — with a review UI simple enough for a non-technical person to drive. Optionally, mine iMessage history to find the people worth a deeper OSINT dossier.
Why this matters: duplicates and inconsistency make people stop maintaining their contacts at all. The win is a single source of truth they'll actually keep feeding.
Scope of local_only: Phase A (dedupe) is fully local — no network egress. Phase B is opt-in
and its dossier step (research-person) does reach the public web (LinkedIn, gov/org sites). Treat
Phase B network access as a deliberate, separately-approved step, never an automatic follow-on.
Consent & authorization (read before running): only operate on contacts/messages belonging to the user, on a machine they own or have explicit permission to access (including any SSH host). Phase B researches other people from the user's private data — only build a dossier on someone the user names explicitly. Never infer a research shortlist from message volume and run it unattended, and don't dossier minors or obviously sensitive relationships.
Full plan: references/unify-plan.md (read it before building). Summary of the workflow:
ssh <host> → sudo -u <user> -i)? Inventory which sources exist:
~/Library/Application Support/AddressBook/Sources/*/AddressBook-v22.abcddb
(read mode=ro for rich fields + ZCREATIONDATE/ZMODIFICATIONDATE); osascript for the live
list and for writes..vcf/CSV..vcf/.csv on Desktop/Downloads.~/Desktop/Contacts-backup-<ts>/; every source
→ timestamped snapshot in the working dir. This is non-negotiable.identical (auto-merge),
combine (safe union), review (disjoint → maybe different people → default keep-separate).
Name-only cards (businesses, placeholders with no phone/email) can't be matched on identifiers —
group them by normalized name only and always route them to review, never silent auto-merge.http.server, no pip).
Each duplicate group shows every competing field value with its label (home/work/cell),
source account, and age ("edited yesterday", "added 3mo ago"). The user picks the winning
value per field; losers become secondary labelled fields or are dropped if marked outdated.
Search/filter for large books. Save records decisions; Apply performs merges/deletes.
Without dates + labels, "Keep/Delete" is meaningless — dates and labels are mandatory.--live. Before any delete, export the
removed cards to deleted-contacts-<ts>.vcf (drag-to-restore undo). Auto-merge only truly
identical cards (same normalized phone/email set — no info lost).Starter code: scripts/contacts_cleanup.py is the proven single-source (macOS) merger with the
full web review UI, backup, undo, and classification already working. Read it, then extend it to
multi-source ingest + per-field winner selection. Do not rebuild from scratch.
Full plan: references/imessage-dossier-plan.md.
scripts/imessage_signal.py — it copies chat.db
to a temp file, opens it read-only, and ranks handles by volume and recency (plus a 1:1-vs-group
signal). It reads counts and timestamps only; message content never leaves the machine.
Reciprocity is an unreliable column — chat.db nulls the sender on the user's own messages, so
rank on volume + recency, not reciprocity. Output: ranked people-signal.csv/json + gap lists
("high-frequency but not in contacts" / "in contacts but never messaged"). Full Disk Access
required for the running user.research-person skill to build
confidence-marked Obsidian People/ notes, enriched from public sources appropriate to the
person's world — LinkedIn, and (Utah-centric example) the state legislature site (le.utah.gov),
arts-group/nonprofit sites, and the lobbyist registry (disclosures.utah.gov). Private message
content stays internal context, never published.--live only after the user sees what would change..vcf.chat.db (work on a copy); never write the live Messages or Contacts DB directly
except through the reviewed, --live-gated apply step.~/dev/agent-notes/me/contacts-merge/<person>/) with source snapshots,
contacts-data.json, contacts-decisions.(csv|json), and the review HTML.Unify My Contacts.command launcher + a friend-readable README.md.people-signal.(csv|json) + research-person dossiers for the approved shortlist.