Contacts sync
Relationship management your AI can actually use. 5 Dunbar circles, CSV-as-source-of-truth, filesystem-as-structure, AI-native.
npx -y skills add Astralune-ai/dunbar --skill contacts-syncAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Sync circle folders ↔ contacts.csv for a dunbar relationship workspace. Run this after you drag a person's folder to a different circle (e.g. 05_弱联系_weak/X → 04_熟人_casual/X) or after creating a new person folder. It detects moves / new / orphan states and rewrites the summary block at the top of each person's .md profile. Trigger words: /contacts-sync, sync contacts, 同步联系人, 同步contacts, 圈层同步.
SKILL.md
3.0 KB, as published. Nobody here has run it
contacts-sync — reconcile folders ↔ contacts.csv
Backed by sync.py in the dunbar root.
Where's my dunbar root?
This skill works on whatever the user has set as their dunbar workspace. Look in this order:
$DUNBAR_ROOTenvironment variable- The current working directory if it contains
contacts.csvAND at least one0N_*circle folder - Otherwise — ask the user where their dunbar workspace is
User input parsing
$ARGUMENTS containing dry, --dry-run, or preview → run as a dry-run.
Otherwise → apply the changes.
Execute
# Apply (default)
python3 "$DUNBAR_ROOT/sync.py" --root "$DUNBAR_ROOT"
# Or, from inside the workspace:
cd "$DUNBAR_ROOT" && python3 sync.py
# Dry-run preview
python3 "$DUNBAR_ROOT/sync.py" --root "$DUNBAR_ROOT" --dry-run
Output meaning
| Marker | Means | Script behavior |
|---|---|---|
| 🔄 Updates | A person's folder changed circle | Update CSV's 圈层 + 详档 columns |
| ✨ New | Folder exists in FS, no row in CSV | Append a new row (nickname + circle + profile only; other columns left blank) |
| ⚠️ Orphans | CSV row exists, folder missing | Warn only — does NOT auto-delete |
| 🗓️ Date normalized | Numbers/Excel mangled a date | Restored to ISO format |
| ⚠️ Lint | 真实姓名 == 昵称 | Suggest blanking 真实姓名 until full name is known |
| ✅ in sync | No diff | CSV untouched |
When to run
- After dragging a person folder to a different circle — main use case
- After creating a new person folder (
mkdir <circle>/<nickname>/+ writing the .md) - Periodic sanity check
- When the AI notices the user is doing relationship-management actions (e.g. adding several contacts in a row), proactively offer to run
Data contract (important)
| Field | Source of truth | How to change |
|---|---|---|
| 圈层 | Filesystem (which circle directory the folder is in) | Move the folder + sync |
| 详档 | Filesystem (actual .md path) | sync computes it |
| Row existence | Filesystem (folder presence) | mkdir → sync appends; deletion is manual |
| Other 19 columns (phone/Email/tags/birthday/…) | The CSV itself | Edit contacts.csv directly (Numbers, your editor, a spreadsheet UI). sync never touches these. |
Don't
- ❌ Don't bypass sync to hand-edit the 圈层 or 详档 columns — the next sync will overwrite them
- ❌ Don't
mvjust the.mdfile without moving the whole person folder — sync only looks at folder location - ❌ Don't create person folders outside the circle directories — sync won't see them