zCloak-CRM
Scanned@xz-cn
npx machina-cli add skill @xz-cn/clawdbot-crm-skill --openclawPersonal CRM Skill
Manage contacts, relationships, and follow-ups with markdown files. No database needed.
Setup
Initialize contacts inside memory/ for semantic search integration:
mkdir -p memory/contacts/{people,companies,events,_templates,scripts}
cp skills/crm/assets/templates/*.md memory/contacts/_templates/
cp skills/crm/scripts/*.py memory/contacts/scripts/
clawdbot memory index
Natural Language Input
When user describes a contact naturally, extract and create:
User says: "Met Sarah Lee at Web3 summit. She's head of partnerships at Polygon, based in Dubai. Telegram @sarahlee"
Extract:
name: Sarah Lee
company: Polygon
role: Head of Partnerships
location: Dubai
telegram: "@sarahlee"
met_at: web3-summit
tags: [web3, partnership]
Then run: memory/contacts/memory/contacts/scripts/crm-add.py person "Sarah Lee" --company "Polygon" --role "Head of Partnerships" --location "Dubai" --telegram "@sarahlee" --tags "web3,partnership"
Scripts
All scripts use /usr/bin/python3 and require PyYAML.
Query Contacts
memory/contacts/scripts/crm-query.py --list people # List all people
memory/contacts/scripts/crm-query.py --tag investor # Filter by tag
memory/contacts/scripts/crm-query.py --company "Acme" # Filter by company
memory/contacts/scripts/crm-query.py --introduced-by bob # Find introductions
memory/contacts/scripts/crm-query.py --location singapore # Filter by location
memory/contacts/scripts/crm-query.py --search "supply chain" # Full-text search
memory/contacts/scripts/crm-query.py -v # Verbose output
Add Contact
memory/contacts/scripts/crm-add.py person "Name" --company "Co" --role "Title" --tags "a,b"
memory/contacts/scripts/crm-add.py company "Company Name" --industry "Tech"
memory/contacts/scripts/crm-add.py event "Event Name" --date 2026-03-15 --location "City"
Update Contact
memory/contacts/scripts/crm-update.py alice-chen --interaction "Called about demo"
memory/contacts/scripts/crm-update.py alice-chen --set-follow-up 2026-02-15
memory/contacts/scripts/crm-update.py alice-chen --add-tag vip
memory/contacts/scripts/crm-update.py alice-chen --touch # Update last_contact to today
Follow-ups & Reminders
memory/contacts/scripts/crm-followups.py --summary # Quick summary
memory/contacts/scripts/crm-followups.py --days 7 # Due in 7 days
memory/contacts/scripts/crm-followups.py --dormant 90 # Not contacted in 90 days
memory/contacts/scripts/crm-remind.py contact --in 3d # Remind in 3 days
memory/contacts/scripts/crm-remind.py --list # List reminders
memory/contacts/scripts/crm-remind.py --check # Check due reminders
Import/Export
memory/contacts/scripts/crm-import.py contacts.csv # Import CSV
memory/contacts/scripts/crm-import.py contacts.vcf # Import vCard
memory/contacts/scripts/crm-import.py linkedin.csv --format linkedin # LinkedIn export
memory/contacts/scripts/crm-export.py --csv out.csv # Export CSV
memory/contacts/scripts/crm-export.py --vcard out.vcf --type people # Export vCard
Regenerate Index
memory/contacts/scripts/crm-index.py # Rebuilds contacts/_index.md
Contact Schema
---
name: Alice Chen
type: person # person | company | event
tags: [investor, crypto]
company: Acme Corp
role: Partner
email: alice@acme.com
phone: +1-555-0123
telegram: "@alice"
twitter: "@alice"
linkedin: https://linkedin.com/in/alice
location: Singapore
introduced_by: bob-smith # slug of introducer
met_at: token2049-2025 # slug of event
first_contact: 2025-09-20
last_contact: 2026-01-27
follow_up: 2026-02-15
status: active # active | dormant | archived
---
# Alice Chen
## Context
Partner at Acme Corp. Met through Bob at Token2049.
## Interactions
- **2026-01-27**: Called about pilot program.
- **2025-09-20**: First met at conference.
## Notes
- Prefers Signal over email
Folder Structure
memory/
└── contacts/ # Inside memory/ for semantic search
├── people/ # One file per person
├── companies/ # One file per company
├── events/ # One file per event
├── _templates/ # Templates for new contacts
├── _index.md # Auto-generated lookup table
├── .reminders.json # Reminder data
└── scripts/ # CLI tools
Cross-References
- YAML fields:
introduced_by: bob-smith,met_at: event-slug - Wiki-links in notes:
[[bob-smith]],[[acme-corp]] - Semantic search: Memory search finds connections in prose
Heartbeat Integration
Add to HEARTBEAT.md:
### CRM Follow-ups (check 1-2x daily)
1. Run: `/usr/bin/python3 contacts/memory/contacts/scripts/crm-followups.py --summary`
2. Run: `/usr/bin/python3 contacts/memory/contacts/scripts/crm-remind.py --check`
If there are due items, notify the user.
Tips
- Use
--dry-runon import to preview before creating files - Run
crm-index.pyafter bulk changes to update the index - Tags are lowercase, comma-separated
- Slugs are auto-generated from names (lowercase, hyphenated)
- For natural language input, extract fields and use crm-add.py
Overview
zCloak-CRM is a Personal CRM that stores contacts, relationships, and follow-ups in markdown files without a database. It supports natural language input to create contacts, tags and structured fields, and lets you query by tag, company, or location, as well as import/export contacts and manage networking leads. Data is organized under memory/contacts with a semantic index for fast search.
How This Skill Works
Setup places data under memory/contacts and builds a semantic index with clawdbot memory index. You add, query, update, or remind using the provided Python scripts (crm-add.py, crm-query.py, crm-followups.py, crm-remind.py). A natural language input example demonstrates extraction into YAML and a subsequent crm-add.py invocation to save the contact.
When to Use It
- You want to quickly add a new contact after a meeting using natural language.
- You need to track relationship context and updates over time.
- You want to find contacts by tag, company, or location.
- You need to import/export contacts for migration or sharing.
- You want to regenerate the index to refresh semantic search.
Quick Start
- Step 1: Setup memory and indexing: mkdir -p memory/contacts/{people,companies,events,_templates,scripts}; cp skills/crm/assets/templates/*.md memory/contacts/_templates/; cp skills/crm/scripts/*.py memory/contacts/scripts/; clawdbot memory index
- Step 2: Add a contact using natural language (example): memory/contacts/memory/contacts/scripts/crm-add.py person "Name" --company "Co" --role "Title" --location "City" --tags "a,b"
- Step 3: Try a query or reminder: memory/contacts/scripts/crm-query.py --list people && memory/contacts/scripts/crm-followups.py --summary
Best Practices
- Use consistent tags and fields (name, company, role, location, tags) for reliable queries.
- Leverage natural language input to capture meeting details and relationships.
- Regularly run follow-ups and reminders to keep relationships warm.
- Back up memory/contacts regularly and document changes.
- After bulk changes, re-run the index to keep semantic search accurate.
Example Use Cases
- Add a contact via natural language: Met Sarah Lee at Web3 summit; extract name, company Polygon, role Head of Partnerships, location Dubai, and tags web3, partnership.
- Query by tag 'investor' or by company 'Acme' to surface relevant connections.
- Update a contact to add a new follow-up date or a VIP tag with crm-update.py.
- Import contacts from a CSV or vCard using crm-import.py and export to CSV with crm-export.py.
- Regenerate the index after updates with crm-index.py to refresh semantic search.