home / skills / openclaw / skills / crm-in-a-box
This skill helps you bootstrap and manage an open file-based CRM, log contacts and interactions, and track deals without SaaS.
npx playbooks add skill openclaw/skills --skill crm-in-a-boxReview the files below or copy the command above to add this skill to your agents.
---
name: crm-in-a-box
description: Bootstrap and manage an open, file-based CRM using the CRM-in-a-Box protocol (contacts, pipeline, interactions as NDJSON). Use when setting up a new CRM for a company, logging contacts/leads, updating deal stages, or recording interactions — all without any SaaS dependency.
metadata:
{
"openclaw":
{
"emoji": "📇"
}
}
---
# CRM-in-a-Box Skill
An open, agent-native CRM protocol. One directory = one CRM. No vendor lock-in.
## Files
- `contacts.ndjson` — one JSON object per line, each a contact/company record
- `pipeline.ndjson` — deal/opportunity tracking with stages
- `interactions.ndjson` — append-only log of emails, calls, notes, meetings
- `config.yaml` — pipeline stages and labels
## Bootstrap a New CRM
Copy the baseline files into a company directory:
```bash
mkdir -p ./mycompany/crm
cp /path/to/crm-in-a-box/{config.yaml,contacts.ndjson,pipeline.ndjson,interactions.ndjson} ./mycompany/crm/
```
Or start fresh with empty NDJSON files and the default config.
## Contact Schema
```json
{
"id": "c001",
"name": "Jane Smith",
"email": "[email protected]",
"company": "Acme Corp",
"phone": "+1-555-0100",
"stage": "new",
"labels": ["hot-lead"],
"notes": "Referred by John.",
"created_at": "2026-01-01T00:00:00Z"
}
```
## Pipeline Schema
```json
{
"id": "p001",
"contact_id": "c001",
"stage": "proposal_sent",
"deal": "Enterprise License",
"value": 12000,
"updated_at": "2026-01-15T00:00:00Z"
}
```
## Interaction Schema
```json
{
"id": "i001",
"contact_id": "c001",
"type": "email",
"summary": "Sent intro email about Denver market sale.",
"at": "2026-01-15T10:00:00Z"
}
```
## Pipeline Stages (default)
`new` → `contacted` → `meeting_scheduled` → `proposal_sent` → `negotiating` → `won` / `lost`
## Default Labels
`hot-lead`, `warm-lead`, `cold-lead`, `referral`, `conference`, `inbound`, `outbound`
## Agent Instructions
- **Log a contact:** append a JSON line to `contacts.ndjson`
- **Update a stage:** append an updated entry to `pipeline.ndjson` (keep old entries — append-only)
- **Log an interaction:** append to `interactions.ndjson`
- **Search contacts:** `grep -i "name" contacts.ndjson | python3 -m json.tool`
- **List pipeline:** `cat pipeline.ndjson | python3 -c "import sys,json; [print(json.dumps(json.loads(l), indent=2)) for l in sys.stdin]"`
## Forks / Verticals
Fork `config.yaml` to customize stages and labels for your vertical:
- `pm-crm` — Property management (tenants, owners, vendors)
- `saas-crm` — SaaS sales
- `realestate-crm` — Buyers, sellers, listings
- `recruiting-crm` — Candidates, jobs, placements
---
*Part of the [biz-in-a-box](https://biz-in-a-box.org) family of open protocols.*
This skill bootstraps and manages an open, file-based CRM using the CRM-in-a-Box protocol. One directory equals one CRM: contacts.ndjson, pipeline.ndjson, interactions.ndjson and a config.yaml define the system. It avoids SaaS lock-in by recording everything as append-only NDJSON so data is portable and auditable. Use it to stand up a lightweight, agent-friendly CRM for teams that prefer plain files.
The skill creates or copies the baseline files into a company directory and enforces simple NDJSON schemas for contacts, pipeline entries, and interactions. All operations are append-only: add a contact by appending a JSON line to contacts.ndjson, update deal stages by appending a pipeline entry, and log activities to interactions.ndjson. A configurable config.yaml defines pipeline stages and labels so you can fork for verticals. Simple command-line patterns (grep, python json.tool) let agents and scripts search and render records.
Can I search records quickly from the command line?
Yes. Use grep and python3 -m json.tool or small Python scripts to filter and pretty-print NDJSON lines.
How do I change pipeline stages or labels?
Edit or fork config.yaml for your vertical. Existing entries remain in NDJSON; new entries should follow the updated stages and labels.