Skill: taylorhou/crm-in-a-box (version 0.1.0)

--- 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": "[REDACTED_SECRET]", "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.*

path: README.md
content: # 🐝 CRM-in-a-Box

> An open protocol for customer relationship management. Fork it. Make it yours.

**CRM-in-a-box** is an append-only, hash-chained CRM protocol built on the same principles as [biz-in-a-box](https://biz-in-a-box.org). One repo = one CRM. No vendor lock-in. No SaaS fees. Your data, your rules.

## Why

Every CRM today is a walled garden. Your contacts, your pipeline, your conversations — trapped inside Salesforce, HubSpot, or a dozen other platforms that charge per seat and hold your data hostage.

CRM-in-a-box is different:
- **Open protocol** — JSON files in a git repo
- **Hash-chained** — every entry is cryptographically linked
- **Forkable** — `crm-in-a-box` → `pm-crm`, `saas-crm`, `realestate-crm`
- **Agent-native** — built for AI agents to read, write, and act on
- **Free forever** — self-host for $0, or pay us $1/seat/mo to host it

## Core Concepts

### Contacts
People and companies, stored as structured JSON with full interaction history.

### Pipeline
Customizable stages. Every stage transition is a journal entry — auditable, reversible, timestamped.

### Interactions
Every email, call, meeting, and note is an append-only entry. Nothing gets deleted. Everything is searchable.

### Labels
Flexible tagging system. Tag contacts, deals, interactions — whatever your workflow needs.

## Quick Start

```bash
git clone https://github.com/taylorhou/crm-in-a-box
cd crm-in-a-box
# Your CRM is ready. Start adding contacts.
```

## Protocol

Built on the [biz-in-a-box](https://biz-in-a-box.org) append-only journal protocol:
- `contacts.ndjson` — contact records
- `pipeline.ndjson` — deal/opportunity tracking
- `interactions.ndjson` — all touchpoints
- `config.yaml` — pipeline stages, labels, settings

## Forks

CRM-in-a-box is designed to be forked for specific verticals:
- **pm-crm** — Property management (tenants, owners, vendors)
- **saas-crm** — SaaS sales pipeline
- **realestate-crm** — Buyers, sellers, agents, listings
- **recruiting-crm** — Candidates, jobs, placements

## License

[BSL 1.1](LICENSE) — Free for personal/internal use. Commercial redistribution requires a license. Converts to Apache 2.0 after 4 years.

---

*Part of the [in-a-box](https://biz-in-a-box.org) family of open protocols.*


path: config.yaml
content: id: crm-in-a-box
name: CRM-in-a-Box
version: "0.1"
pipeline:
  stages:
    - new
    - contacted
    - meeting_scheduled
    - proposal_sent
    - negotiating
    - won
    - lost
labels:
  - hot-lead
  - warm-lead
  - cold-lead
  - referral
  - conference
  - inbound
  - outbound


path: index.html
content: <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CRM-in-a-Box — Open CRM Protocol</title>
<style>
  * { margin: 0; padding: 0; box-sizing: border-box; }
  body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; background: #0a0a0a; color: #e0e0e0; line-height: 1.6; }
  .hero { text-align: center; padding: 80px 20px 60px; max-width: 800px; margin: 0 auto; }
  .hero h1 { font-size: 3em; margin-bottom: 0.3em; color: #fff; }
  .hero h1 span { color: #f59e0b; }
  .hero p { font-size: 1.3em; color: #999; margin-bottom: 2em; }
  .hero code { background: #1a1a2e; padding: 12px 24px; border-radius: 8px; font-size: 1.1em; color: #f59e0b; display: inline-block; margin-bottom: 2em; }
  .features { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 24px; max-width: 900px; margin: 0 auto; padding: 0 20px 60px; }
  .feature { background: #111; border: 1px solid #222; border-radius: 12px; padding: 24px; }
  .feature h3 { color: #f59e0b; margin-bottom: 8px; }
  .feature p { color: #888; font-size: 0.95em; }
  .cta { text-align: center; padding: 40px 20px 80px; }
  .cta a { display: inline-block; padding: 14px 32px; background: #f59e0b; color: #000; text-decoration: none; border-radius: 8px; font-weight: 600; font-size: 1.1em; margin: 0 8px; }
  .cta a.secondary { background: transparent; border: 1px solid #f59e0b; color: #f59e0b; }
  footer { text-align: center; padding: 20px; color: #444; font-size: 0.9em; }
</style>
</head>
<body>
<div class="hero">
  <h1>🐝 CRM-in-a-<span>Box</span></h1>
  <p>An open protocol for customer relationship management.<br>Fork it. Make it yours.</p>
  <code>git clone https://github.com/taylorhou/crm-in-a-box</code>
</div>
<div class="features">
  <div class="feature">
    <h3>Open Protocol</h3>
    <p>JSON files in a git repo. No vendor lock-in. No SaaS fees. Your data, your rules.</p>
  </div>
  <div class="feature">
    <h3>Hash-Chained</h3>
    <p>Every entry is cryptographically linked. Full audit trail. Tamper-evident by design.</p>
  </div>
  <div class="feature">
    <h3>Agent-Native</h3>
    <p>Built for AI agents to read, write, and act on. The CRM that works while you sleep.</p>
  </div>
  <div class="feature">
    <h3>Forkable</h3>
    <p>pm-crm, saas-crm, realestate-crm, recruiting-crm — make it yours.</p>
  </div>
</div>
<div class="cta">
  <a href="https://github.com/taylorhou/crm-in-a-box">GitHub</a>
  <a href="https://biz-in-a-box.org" class="secondary">biz-in-a-box</a>
</div>
<footer>Part of the in-a-box family of open protocols.</footer>
</body>
</html>


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: suspicious | SkillSpector: clean (LOW)