personal-crm

Track interactions, follow-ups, and relationship context for personal contacts

Personal CRM

A lightweight personal CRM for tracking relationships, conversations, and follow-ups. Never forget important context about the people you talk to.

Quick Start

# Add a contact
node scripts/personal-crm.js add-contact "Alice" --email [email protected] --tags friend,tech

# Log an interaction
node scripts/personal-crm.js log-interaction alice "Discussed her new startup idea. She's looking for feedback on the MVP."

# View reminders
node scripts/personal-crm.js list-reminders

# Search contacts
node scripts/personal-crm.js search --tag tech

# View contact history
node scripts/personal-crm.js view alice

Features

šŸ“‡ Contact Management

  • Store names, emails, tags, custom fields
  • Quick search by name or tag
  • Flexible JSON storage (no database needed)

šŸ’¬ Interaction Logging

  • Record conversations with timestamps and context
  • Supports manual entry and auto-logging from chat platforms
  • Link interactions to contacts automatically

ā° Smart Reminders

  • Get follow-up suggestions based on interaction frequency
  • "You haven't talked to Alice in 30 days"
  • Configurable rules per contact or tag

šŸ” Search & Query

  • Find contacts by tag, name, or date range
  • View full interaction history
  • Filter by last contact date

šŸ¤– Auto-Capture (Optional)

  • Log DMs and mentions from Telegram/Slack/Discord
  • Parse emails to extract sender and context
  • Extract attendees from calendar events

File Structure

personal-crm/
ā”œā”€ā”€ SKILL.md              # This file
ā”œā”€ā”€ scripts/
│   ā”œā”€ā”€ personal-crm.js   # Main CLI entry point
│   ā”œā”€ā”€ contacts.js       # Contact CRUD operations
│   ā”œā”€ā”€ interactions.js   # Interaction logging
│   ā”œā”€ā”€ reminders.js      # Follow-up suggestions
│   ā”œā”€ā”€ query.js          # Search interface
│   ā”œā”€ā”€ chatLogger.js     # Auto-log from chat platforms
│   ā”œā”€ā”€ emailParser.js    # Extract email metadata
│   └── calendarParser.js # Extract calendar data
ā”œā”€ā”€ references/
│   ā”œā”€ā”€ data-schema.md    # Data structure documentation
│   └── config-schema.md  # Configuration options
└── assets/
    └── sample-config.json # Example config

# Data files (created on first use, stored in workspace)
~/.openclaw-personal-crm/
ā”œā”€ā”€ contacts.json         # Contact database
ā”œā”€ā”€ interactions.json     # Interaction log
└── config.json          # User configuration

Usage Guide

Add a Contact

node scripts/personal-crm.js add-contact "Name" [options]

Options:
  --email <email>       Email address
  --phone <phone>       Phone number
  --tags <tag,tag>      Comma-separated tags
  --notes <text>        Initial notes
  --field key:value     Custom fields

Log an Interaction

node scripts/personal-crm.js log-interaction <contact> <note> [options]

Options:
  --date <YYYY-MM-DD>   Backdate the interaction
  --tags <tag,tag>      Tag this interaction

View Reminders

node scripts/personal-crm.js list-reminders [options]

Options:
  --days <N>            Show contacts not contacted in N days (default: 30)
  --tag <tag>           Filter by contact tag

Search Contacts

node scripts/personal-crm.js search [options]

Options:
  --name <pattern>      Name contains pattern
  --tag <tag>           Has tag
  --since <YYYY-MM-DD>  Contacted since date
  --before <YYYY-MM-DD> Contacted before date

View Contact Details

node scripts/personal-crm.js view <contact>

Shows:
- Contact details
- All interactions (newest first)
- Last contact date
- Follow-up suggestion

Configuration

Create ~/.openclaw-personal-crm/config.json:

{
  "reminderRules": {
    "default": 30,
    "tags": {
      "friend": 14,
      "family": 7,
      "professional": 60
    }
  },
  "autoCapture": {
    "enabled": true,
    "sources": ["telegram", "slack"],
    "filterChannels": ["@username", "dm"]
  },
  "storage": {
    "path": "~/.openclaw-personal-crm"
  }
}

Integration with OpenClaw

The skill automatically integrates with OpenClaw workflows:

Chat auto-capture: When enabled, DMs and mentions are logged as interactions automatically.

Natural language: Use trigger phrases:

  • "Track my conversation with Alice"
  • "Who should I follow up with?"
  • "When did I last talk to Bob?"

Memory integration: Contacts and interactions can sync to OpenClaw memory for long-term recall.

Privacy & Security

  • All data stored locally by default
  • No external services required
  • Contact data never leaves your machine unless you explicitly configure sync
  • Supports .gitignore patterns for sensitive files

Development Notes

Core principles:

  • Simple JSON storage (easy to backup, version, inspect)
  • CLI-first (can be wrapped with GUI later)
  • Zero dependencies where possible
  • Composable scripts (each module can work standalone)

Future enhancements:

  • Sync to encrypted cloud storage
  • Rich contact profiles (social media links, work history)
  • Interaction analytics (who you talk to most, network health)
  • Birthday/anniversary reminders
  • Export to vCard/CSV

Troubleshooting

"Contact not found" → Use search to find the exact name, or add the contact first

Reminders not showing → Check config.json reminder rules, ensure interactions are logged

Auto-capture not working → Verify autoCapture.enabled: true and sources are configured

Data location → Default: ~/.openclaw-personal-crm/ (configurable in config.json)

Support

For issues or feature requests, check the skill's references/ folder or OpenClaw docs.