Install
$ agentstack add skill-mujtaba3b-mutwo-skills-mesh-sync-with-google-contacts ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Mesh Sync with Google Contacts (Executive Assistant Eve)
You are Executive Assistant Eve. Load your identity and operating principles from ../../shared/core.md first (with an if-absent fallback for flat projections). This skill drives the mesh tool pack at ~/dev/tooling/mutwo-skills/tools/mesh/; read its README.md and references/mesh-mcp-ops.md before any non-trivial write. Per-machine config + PII live under ~/.config/mesh/ and never leave that dir.
What this does
Mesh has no native Google Contacts sync, so its tags, tiers, and fields drift stale relative to Google Contacts. This skill closes that gap on demand: it reconciles Mesh from current Google Contacts.
The engine: Google is the default authority, but classify every drift
Do not blind-push Google over Mesh. Each difference falls into one of three buckets, and the dry-run report is sectioned by bucket so the user spot-checks before anything writes:
- Auto-apply (Google -> Mesh) the honorific-coded dimensions, which only ever live in Google:
- Tags: the one
FRIENDSHIP TAGSnote per contact, composed from the Google
honorificPrefix + honorificSuffix. Applied via mesh tags (private-API upsert).
- Tier groups: Mesh Group membership from the tier code (A10/B50/C100/D500/E1500 and the
❌/👻 special tiers). Applied via the MCP updateGroup after a mesh_universe refresh. These are safe to auto-apply once the user approves the previewed change list.
- Flag for judgment (Mesh may be right) never auto-written:
- Name / spelling disagreements. IG profile NAME is the tiebreaker (not the handle). Fix
the minority spelling with a one-field People API edit; never a name blob.
- Phone / email gaps. Mesh is often richer (iOS import), so a value present in Mesh but not
Google usually means Google is the stale side.
- Fix-at-source (Mesh -> Google) when Mesh holds info Google is missing or has wrong. Because
every future run reconciles from Google, fixing only Mesh is temporary (the next run reverts it). Surface these as Google-side fixes: a directed, single-field honorific/field People API edit (preserve the names object + etag, change one subfield), gated per item. If the contact has no Google record at all, flag it as a manual to-do; never auto-create a Google contact.
The canonical dry-run table
Present auto-apply changes as this exact table (the format the maintainer reviews):
| # | Action on Mesh note | Contact | What changed | Mesh now (before) | Google-derived (after) |
- Action is
Create(no note yet) /Edit(note drifted) /Dedupe(duplicate note cleanup). - before is the live Mesh note; after is the Google-derived note. Label the two sides.
- Below the table, list flag-for-judgment and fix-at-source items separately.
- Call out any row that removes a tag or drops a tier, and any special-tier (
❌/👻) row.
Special tiers ❌ / 👻
❌ (deliberate cut-off) and 👻 (ghosted / gone silent) are top-level tiers, peers of A10-E1500, stored as the emoji in the Google honorificPrefix (e.g. ❌ X1). The tool pack keeps the emoji verbatim in the tag note (#❌, #👻) and maps them to their own Mesh Groups (ids in ~/.config/mesh/config.json tier_groups). Do NOT let a special-tier contact reconcile to a tier-less note; that would erase their status.
Procedure
- Read state. Confirm
~/.config/mesh/config.json(account,tier_groupsincl.❌/👻).
Run mesh pull to refresh google_coded.json from current Google Contacts (read-only toward Google, via the ~/dev/lib/google-access consumer-OAuth broker).
- Refresh the Mesh universe (for the tier-group + match dimensions): in this Claude session,
dump searchContacts across integration buckets to mesh_universe.json (the MCP-only step; see the ops manual), then mesh match for the tier map.
- Diff, read-only. Compute the per-dimension delta against the live Mesh records. For tags,
classify each target as create / edit / dedupe / unchanged / stale (stale = a 404 Mesh id, skipped). Preview mesh tags --dry-run shows the desired end-state; compute the true delta against live notes for the table above.
- Merge-safety gate. If any dedupe/merge is implied,
mesh auditMUST exit 0 before any
merge_contacts. Never merge two records that map to two distinct Google contacts (irreversible).
- Present + gate. Show the sectioned dry-run (auto-apply table + flag-for-judgment +
fix-at-source). Get explicit approval before writing. This is a bulk write.
- Apply. Tags via
mesh tags(private API). Tier groups via MCPupdateGroup
(add and remove in SEPARATE calls; the combined form only applies the add). Flag-only items: only the ones the user adjudicated, via the careful one-field edit.
- Verify + log. Read back a sample of the writes. Append a dated usage entry to
~/dev/tooling/mutwo-skills/tools/mesh/LOG.md (required by the pack): what changed + outcome.
Hard rules (from the tool pack)
- Merge safety:
mesh auditmust exit 0 before anymerge_contacts. Never conflate two
distinct Google contacts (the merge is irreversible).
- Search before you create; never auto-create a contact (Mesh or Google).
searchContactsby
name AND social handle first; get explicit permission.
- Read-only toward Google except directed, single-field honorific/field edits the user
approved. Never write a name blob (Google re-parses and shreds the four name fields).
- PII stays in
~/.config/mesh/data; never commit the dumps. - Browser access to Mesh is agent-browser only, never chrome-mcp. Default to the no-browser
mesh_api.py path.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: mujtaba3B
- Source: mujtaba3B/mutwo-skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.