Get the FREE Ultimate OpenClaw Setup Guide →
x

zCloak-CRM

Scanned

@xz-cn

npx machina-cli add skill @xz-cn/clawdbot-crm-skill --openclaw
Files (1)
SKILL.md
5.6 KB

Personal 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-run on import to preview before creating files
  • Run crm-index.py after 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

Source

git clone https://clawhub.ai/xz-cn/clawdbot-crm-skillView on GitHub

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

  1. 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
  2. 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"
  3. 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.

Frequently Asked Questions

Add this skill to your agents
Sponsor this space

Reach thousands of developers