Track interactions, follow-ups, and relationship context for your personal network.
A lightweight personal CRM for OpenClaw agents. Never forget who you talked to, what you discussed, or who needs a follow-up.
You meet interesting people. You have great conversations. Then... you forget the details. Or you lose touch because life gets busy.
This skill solves that. It's your memory for relationships:
- Track contacts with tags, notes, and custom fields
- Log interactions with timestamps and context
- Get reminders when it's time to follow up
- Auto-capture from chat platforms (optional)
Privacy-first. Local storage. No cloud services required.
- Store names, emails, phone numbers, tags
- Custom fields for anything (company, location, interests)
- Quick search by name, tag, or date
- JSON storage — easy to backup, version, inspect
- Record conversations with context
- Link interactions to contacts automatically
- Backdate entries when catching up
- Tag interactions for easy filtering
- Configurable frequency rules per contact or tag
- "You haven't talked to Alice in 30 days"
- View all pending follow-ups at once
- Suggestions based on your relationship frequency
- Find contacts by name, tag, or last contact date
- View full interaction history
- Filter by date range
- See who you're neglecting
- Chat integration: Auto-log DMs from Telegram, Slack, Discord, Signal, WhatsApp, iMessage
- Email parser: Extract sender and context from forwarded emails
- Calendar parser: Extract attendees from meeting invites
- All integrations are opt-in
- All data stored locally by default
- No external services required
- No API keys needed
- Full control over your data
openclaw skills install personal-crm.skillnode skills/personal-crm/scripts/personal-crm.js add-contact "Alice Smith" \
--email alice@example.com \
--tags friend,tech \
--notes "Met at AI conference, building a chatbot startup"node skills/personal-crm/scripts/personal-crm.js log-interaction "Alice Smith" \
"Discussed her new MVP launch. She's looking for beta testers."node skills/personal-crm/scripts/personal-crm.js suggest-followupsnode skills/personal-crm/scripts/personal-crm.js view "Alice Smith"# Basic contact
personal-crm add-contact "Bob Johnson"
# With details
personal-crm add-contact "Carol Lee" \
--email carol@company.com \
--phone "555-1234" \
--tags professional,investor \
--notes "Introduced by mutual friend Dave"
# With custom fields
personal-crm add-contact "David Chen" \
--field company:"TechCorp" \
--field location:"San Francisco" \
--field twitter:"@davidchen"# Simple note
personal-crm log-interaction "Alice" "Grabbed coffee, discussed AI safety"
# With date (backdate)
personal-crm log "Bob" "Met at conference" --date 2026-02-01
# With tags
personal-crm log "Carol" "Discussed Series A funding" --tags investment,startup# Search by name
personal-crm search "alice"
# Filter by tag
personal-crm search --tag investor
# Find contacts you haven't talked to recently
personal-crm search --stale-days 60
# View full history
personal-crm view "Alice Smith"# See who needs follow-up
personal-crm suggest-followups
# Filter by tag
personal-crm suggest-followups --tag friend
# Customize staleness threshold
personal-crm suggest-followups --days 30# Log a DM from Telegram
personal-crm log-dm telegram "@alice" "Hey, checking in on your launch!"
# Parse an email
personal-crm parse-email "From: bob@example.com\nSubject: Quick question\n..."
# Parse a calendar invite
personal-crm parse-calendar "meeting-invite.ics"add-contact— Create a new contactget-contact— View contact by IDlist-contacts— List all contactsupdate-contact— Modify contact detailsdelete-contact— Remove a contactsearch-contacts— Find contacts by name/email
log-interaction— Record a conversationlist-interactions— View all interactionsget-interaction— View interaction detailsupdate-interaction— Edit an interactiondelete-interaction— Remove an interactionlist-action-items— View pending action itemscomplete-action-item— Mark action item done
create-reminder— Manual reminderlist-reminders— View all reminderssuggest-followups— Auto-generate follow-up listcomplete-reminder— Mark reminder donedelete-reminder— Remove a reminder
search— Find contacts/interactionsview— Full contact profilehistory— Interaction historyby-tags— Filter by tagrecent— Recently contactedstale— Overdue for follow-up
log-dm— Log a chat messagelog-mention— Log a mentionparse-email— Extract email metadatalog-email— Parse and log emailparse-calendar— Extract calendar attendeeslog-calendar— Parse and log meeting
configure-auto-log— Enable/disable auto-loggingauto-log-status— View current settings
Create config/personal-crm-config.json:
{
"dataDir": "~/.personal-crm/data",
"autoLog": {
"enabled": false,
"platforms": ["telegram", "slack", "discord"],
"excludeUsernames": ["bot", "slackbot"],
"minMessageLength": 10
},
"reminders": {
"defaultFrequency": "monthly",
"lookAheadDays": 7,
"notificationChannels": ["telegram"]
},
"privacy": {
"encryptAtRest": false,
"redactPatterns": [
"\\d{4}-\\d{4}-\\d{4}-\\d{4}",
"\\d{3}-\\d{2}-\\d{4}"
]
},
"search": {
"maxResults": 50,
"defaultDays": 90
}
}See references/config-schema.md for full options.
{
"contacts": [
{
"id": "uuid",
"name": "Alice Smith",
"email": "alice@example.com",
"phone": "555-1234",
"tags": ["friend", "tech"],
"notes": "Met at AI conference",
"customFields": {
"company": "StartupAI",
"location": "San Francisco"
},
"lastInteraction": "2026-02-06T10:30:00Z",
"interactionCount": 12,
"createdAt": "2026-01-15T08:00:00Z"
}
]
}{
"id": "uuid",
"contactId": "uuid",
"timestamp": "2026-02-06T10:30:00Z",
"type": "message",
"channel": "telegram",
"content": "Discussed her MVP launch",
"tags": ["startup", "product"],
"actionItems": [
{
"id": "uuid",
"description": "Intro to potential beta testers",
"dueDate": "2026-02-10",
"completed": false
}
]
}{
"reminders": [
{
"id": "uuid",
"contactId": "uuid",
"type": "followup",
"reason": "Last contact 32 days ago (frequency: monthly)",
"suggestedDate": "2026-02-08",
"status": "pending"
}
]
}See references/data-schema.md for complete schema docs.
The skill responds to:
- "track contact"
- "log interaction"
- "personal crm"
- "relationship tracker"
- "who should I reach out to"
When enabled, the skill can automatically log DMs and mentions from:
- Telegram
- Slack
- Discord
- Signal
- iMessage
Configure in config/personal-crm-config.json:
{
"autoLog": {
"enabled": true,
"platforms": ["telegram", "slack"],
"excludeUsernames": ["bot", "github"]
}
}Contacts and interactions can sync to OpenClaw's memory system for long-term recall across sessions.
- SKILL.md: Quick start guide
- scripts/:
personal-crm.js: Main CLI entry point (34 commands)contacts.js: Contact CRUD operationsinteractions.js: Interaction logging & action itemsreminders.js: Follow-up suggestionsquery.js: Search & filter interfacechatLogger.js: Auto-log from chat platformsemailParser.js: Extract email metadatacalendarParser.js: Parse calendar events
- references/:
data-schema.md: Full data structure documentationconfig-schema.md: Configuration options
- assets/sample-config.json: Example configuration
Track people you meet at conferences, meetups, and events. Never lose context about conversations or forget to follow up.
Maintain relationships with clients, leads, and referrals. Track project discussions and follow-up commitments.
Keep notes on investor conversations, track pitch feedback, log follow-ups.
Lightweight CRM for side hustles or small businesses. Track leads without complex software.
Remember birthdays, track conversations with distant friends, maintain relationships across time zones.
Track recruiters, interviewers, referrals. Log conversation details and follow-up tasks.
All data stored in ~/.personal-crm/data/ by default. No cloud services. No API keys. Full control.
Enable privacy.encryptAtRest: true in config to encrypt data files.
Configure regex patterns to automatically redact sensitive data (SSNs, credit cards, etc.)
The skill does not phone home, send analytics, or require registration.
- Modular design: Each script is standalone and can be used independently
- JSON storage: Simple, inspectable, easy to backup
- CLI-first: Easy to script and automate
- Zero dependencies: Pure Node.js (except for optional platform integrations)
Add custom scripts to scripts/ and they'll automatically integrate with the CLI router.
Example custom script:
// scripts/myCustomFeature.js
async function myCommand(args) {
// Your logic here
}
if (require.main === module) {
myCommand(process.argv.slice(2));
}
module.exports = { myCommand };Future enhancements:
- Sync to encrypted cloud storage (S3, Dropbox)
- Rich contact profiles (social links, work history)
- Analytics dashboard (network health, interaction trends)
- Birthday/anniversary reminders
- Export to vCard/CSV
- Import from LinkedIn, Gmail contacts
- Web UI (read-only view)
- Mobile app integration
MIT
Contributions welcome! This skill is part of the openclaw-skills collection.
To contribute:
- Fork this repo
- Make your changes
- Test with your OpenClaw agent
- Submit a PR with description
- Documentation: See
references/directory in this repo - OpenClaw Docs: https://docs.openclaw.ai
- Community: https://discord.com/invite/clawd
- More Skills: https://clawhub.com
Built with ❤️ for the OpenClaw community