home / skills / openclaw / skills / crm-in-a-box

crm-in-a-box skill

/skills/taylorhou/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-box

Review the files below or copy the command above to add this skill to your agents.

Files (5)
SKILL.md
2.7 KB
---
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.*

Overview

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.

How this skill works

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.

When to use it

  • Setting up a new CRM for a small company or project without relying on third-party SaaS
  • Logging new contacts and leads in a reproducible, auditable format
  • Tracking deal progress with append-only pipeline entries to preserve history
  • Recording calls, emails, and meeting notes as a tamper-evident interaction log
  • Creating vertical- or team-specific CRMs by forking config.yaml

Best practices

  • Keep NDJSON files under version control or periodic backups to preserve history and enable restores
  • Treat all updates as append-only; never rewrite existing lines to maintain an audit trail
  • Use stable, unique IDs (e.g., c001, p001, i001) and ISO 8601 timestamps for consistency
  • Customize config.yaml per vertical to reflect real workflow stages and sensible labels
  • Use simple CLI filters and JSON pretty-printing for quick inspection; add small scripts for common queries

Example use cases

  • Bootstrap a company CRM by copying the baseline files into ./mycompany/crm and start appending leads
  • Log an inbound lead: append a contact with labels like inbound and hot-lead, then create an initial pipeline entry
  • Move a deal through stages by appending new pipeline entries (proposal_sent → negotiating → won) to preserve history
  • Record all customer interactions (emails, calls, meetings) in interactions.ndjson to keep a unified activity log
  • Fork config.yaml into saas-crm or realestate-crm to match domain-specific stages and labels

FAQ

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.