name: relationship-manager description: > Track professional and personal relationships. Add contacts, update context, view summaries with open Notion tasks, log interactions, and sync Google Calendar for auto-detected last contact dates. triggers: - add contact - update contact - summarize contact - list contacts - talked to - delete contact - sync calendar contacts - what's up with - who is - when did I last talk to env: - CF_ACCOUNT_ID - CF_D1_DATABASE_ID - CF_API_TOKEN - NOTION_API_TOKEN - NOTION_DATABASE_ID - GMAIL_CLIENT_ID - GMAIL_CLIENT_SECRET - GMAIL_REFRESH_TOKEN
Relationship Manager
Track professional and personal contacts in D1. Open commitments are Notion tasks
with [Name] prefix (e.g., [Alice Chen] Send IC memo). Last contact dates
auto-update daily from Google Calendar attendees at 08:00 UTC.
Commands
All commands run:
python3 ~/.hermes/skills/relationship-manager/scripts/contacts.py <subcommand> [args]
Look up a contact (whois)
python3 ~/.hermes/skills/relationship-manager/scripts/contacts.py whois --name "Sean"
Output: card with name, company, last contact, last discussed, and the 5 most recent interactions. With multiple matches, lists each with its id.
Add a contact
python3 ~/.hermes/skills/relationship-manager/scripts/contacts.py add \
--name "Alice Chen" \
--email "alice@example.com" \
--type professional \
--context "Partner at Sequoia, intro'd by Marcus"
Output: Added: Alice Chen (professional)
--type must be professional or personal. --context is optional.
Summarize a contact
python3 ~/.hermes/skills/relationship-manager/scripts/contacts.py summarize \
--name "Alice Chen"
Output: contact card (name, type, email, last contact date, context) followed by
open Notion tasks whose title starts with [Alice Chen].
List all contacts
python3 ~/.hermes/skills/relationship-manager/scripts/contacts.py list
python3 ~/.hermes/skills/relationship-manager/scripts/contacts.py list --type professional
Log an interaction (manual touch)
python3 ~/.hermes/skills/relationship-manager/scripts/contacts.py talked-to \
--name "Alice Chen"
Sets last_contact to today's date. Use for phone calls, in-person meetings, or
any interaction not captured by calendar sync.
Output: Noted: talked to Alice Chen on 2026-04-19
Update a contact field
python3 ~/.hermes/skills/relationship-manager/scripts/contacts.py update \
--name "Alice Chen" \
--field context \
--value "Now General Partner at Sequoia"
--field must be one of: name, email, type, context.
Output: Updated: Alice Chen
Delete a contact
python3 ~/.hermes/skills/relationship-manager/scripts/contacts.py delete \
--name "Alice Chen"
Output: Deleted: Alice Chen
Sync calendar (runs automatically at 08:00 UTC)
python3 ~/.hermes/skills/relationship-manager/scripts/contacts.py sync-calendar --days 1 --auto-add
Fetches Google Calendar events from the past N days. With --auto-add, any attendee not
already in contacts is upserted as a professional contact (name derived from email, context
set to "Auto-added from calendar"). Then updates last_contact for all matched contacts.
Output: Synced calendar: updated last_contact for 2 contacts (Alice Chen, Bob Smith); added 1 new (Rakhee Gupta)
Notion task convention
Open commitments to a contact are tracked as Notion tasks with [Name] prefix:
[Alice Chen] Send Q2 IC memo
[Alice Chen] Intro to Marcus at Benchmark
Create these with the notion-tasks skill. The summarize command surfaces them automatically.
Notes
- Name matching is case-insensitive for all commands.
- Email must be unique per contact —
addon a duplicate email updates the existing record. - The D1
contactstable is inmahler-db(same database asemail_triage_log).