agentsclimarketplace

Contacts sync

Skill Astralune-ai/dunbar/skills/contacts-sync

Relationship management your AI can actually use. 5 Dunbar circles, CSV-as-source-of-truth, filesystem-as-structure, AI-native.

Install
npx -y skills add Astralune-ai/dunbar --skill contacts-sync

Assembled 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:

  1. $DUNBAR_ROOT environment variable
  2. The current working directory if it contains contacts.csv AND at least one 0N_* circle folder
  3. 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

MarkerMeansScript behavior
🔄 UpdatesA person's folder changed circleUpdate CSV's 圈层 + 详档 columns
✨ NewFolder exists in FS, no row in CSVAppend a new row (nickname + circle + profile only; other columns left blank)
⚠️ OrphansCSV row exists, folder missingWarn only — does NOT auto-delete
🗓️ Date normalizedNumbers/Excel mangled a dateRestored to ISO format
⚠️ Lint真实姓名 == 昵称Suggest blanking 真实姓名 until full name is known
✅ in syncNo diffCSV 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)

FieldSource of truthHow to change
圈层Filesystem (which circle directory the folder is in)Move the folder + sync
详档Filesystem (actual .md path)sync computes it
Row existenceFilesystem (folder presence)mkdir → sync appends; deletion is manual
Other 19 columns (phone/Email/tags/birthday/…)The CSV itselfEdit 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 mv just the .md file 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

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.