| name | frm |
| description | CLI friend/relationship manager backed by CardDAV. Use when the user asks about overdue contacts, preparing for a meeting with someone, logging interactions, triaging or categorizing contacts, checking relationship tracking stats, managing contact groups, or snoozing reminders. |
frm — Agent Skill
frm is a CLI friend/relationship manager backed by CardDAV. Use it to help the user maintain their personal and professional relationships.
When to use this skill
- The user asks about contacts they should reach out to
- The user wants to prepare for a meeting with someone
- The user wants to log that they talked to someone
- The user asks you to triage or categorize their contacts
- The user wants a summary of their relationship tracking
Core workflow
- Check who's overdue:
frm check --json — returns contacts past their tracking interval
- Prep for a meeting:
frm context "<name>" --json — returns contact summary, last interaction, and recent emails
- Log an interaction:
frm log "<name>" --note "what happened"
- Bulk triage:
frm triage --json then call frm track or frm ignore for each contact
Commands
All commands support --json for structured output. Always use --json when calling frm programmatically.
Reading data
frm list --json
frm list --all --json
frm check --json
frm context "<name>" --json
frm history "<name>" --json
frm stats --json
frm group list --json
frm group list "<group>" --json
frm contacts --json
Writing data
frm track "<name>" --every 2w
frm track "<name>" --every 1m
frm track "<name>" --every 3d
frm untrack "<name>"
frm log "<name>" --note "coffee chat about their new role"
frm log "<name>" --note "met at conference" --when 2025-06-15
frm log "<name>" --note "quick call" --when -3d
frm ignore "<name>"
frm unignore "<name>"
frm snooze "<name>" --until 2026-04-01
frm snooze "<name>" --until 2m
frm unsnooze "<name>"
frm group set "<name>" friends
frm group unset "<name>"
Bulk triage (agent workflow)
The triage --json endpoint is designed for agents. It returns untriaged contacts (no frequency, not ignored) so you can process them:
frm triage --json --limit -1
Returns:
[
{"name": "Alice Smith", "email": "alice@example.com", "org": "Acme Corp"},
{"name": "Bob Jones"}
]
For each contact, decide and execute one of:
frm track "<name>" --every 2w
frm track "<name>" --every 1m
frm track "<name>" --every 3m
frm track "<name>" --every 12m
frm ignore "<name>"
Repeat frm triage --json until the list is empty.
Duration format
Nd — days (e.g. 3d = 3 days)
Nw — weeks (e.g. 2w = 14 days)
Nm — months as 30 days (e.g. 1m = 30 days)
Tips
- Contact names are case-insensitive for lookup
- When logging, always include a meaningful
--note — it's shown in context output and helps the user remember what was discussed
- Use
--when with frm log for backdating (e.g. --when -2d for "two days ago")
frm context is the best single command for preparing the user for a conversation — it combines tracking status, interaction history, and email context
- Groups are freeform strings; common ones are
friends, family, professional
- Snooze is for temporary suppression (e.g. "they're on vacation for 2 months"); ignore is permanent