Install
$ agentstack add skill-hewi333-mom-n-pop-skills-crm-lite ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ● Filesystem access Used
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
CRM-Lite — Lightweight SQLite CRM for Small Business
Overview
A minimal, file-based CRM built on SQLite for non-technical small business owners. No server, no external dependencies, no auth complexity. Designed for agent-mediated use: the owner interacts via text message with the agent, which reads/writes this database.
When to Use
- Small business (1-10 employees) with no existing CRM
- Agent-mediated access — owners interact via chat/Telegram, not direct DB access
- Lead tracking from website forms, referrals, email inquiries
- Pipeline visibility — estimate sent → accepted/rejected → job scheduled → paid
- Communication log — every email, call, text logged automatically
Don't Use For
- Multi-user concurrent access with role-based permissions
- Complex sales methodologies (MEDDIC, Challenger, etc.)
- Real-time collaboration features
- Integration with enterprise SSO/SCIM
Core Features
Data Model (SQLite: crm.db)
- customers — Core customer records
id(PK),name,email,phone,company,address,city,state,ziplead_source,lead_status(new/qualified/estimate_sent/won/lost)total_value,notes,created_at,updated_at
- leads — Inbound leads before qualification
id,source(website/referral/email/phone),contact_namecontact_email,contact_phone,company,property_addresssqft,ceiling_height,service_type,urgencystatus(new/qualified/estimate_ready/scheduled/lost)assigned_to,created_at,updated_at
- activities — Every touchpoint
id,customer_id(FK),lead_id(FK),activity_type(call/email/text/meeting/estimatesent/estimateaccepted/estimaterejected/jobscheduled/jobcompleted/invoicesent/payment_received)description,outcome,next_action,next_action_datecreated_at,updated_at
- estimates — Estimate lifecycle
id,customer_id,lead_id,estimate_number,amountstatus(draft/sent/accepted/rejected/expired)sent_date,accepted_date,rejected_date,expires_dateline_items(JSON),notes,created_at,updated_at
- communications — Message log
id,customer_id,lead_id,direction(inbound/outbound)channel(email/sms/telegram/phone),subject,bodysent_at,created_at
- tasks — Action items for owners
id,customer_id,lead_id,title,descriptiondue_date,priority(low/medium/high/urgent),status(pending/in_progress/done)assigned_to,created_at,updated_at
Quick Start
import sqlite3
from pathlib import Path
DB_PATH = Path("~/.hermes/crm/crm.db").expanduser()
DB_PATH.parent.mkdir(parents=True, exist_ok=True)
def init_db():
conn = sqlite3.connect(DB_PATH)
conn.execute("""
CREATE TABLE IF NOT EXISTS customers (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL, email TEXT, phone TEXT,
company TEXT, address TEXT, city TEXT, state TEXT, zip TEXT,
lead_source TEXT, lead_status TEXT DEFAULT 'new',
total_value REAL DEFAULT 0, notes TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
""")
# ... other tables
conn.commit()
return conn
Agent Integration Patterns
Create Lead from Website Form
User: "New lead from website: John Smith, john@email.com, 555-555-0123, 123 Main St [CITY] [STATE] [ZIP], 2500 sqft, service request"
Agent: Creates lead record, sets status=qualified, creates task for the owner to review
Log Estimate Sent
User: "Sent estimate #EST-0001-0042 to John Smith for $2,850"
Agent: Updates estimate status=sent, creates activity, creates task for follow-up in 3 days
Weekly Pipeline Report (Cron)
Agent: Queries all leads/customers, summarizes by stage, sends to the owner via Telegram
End-to-End Demo Flow
This skill is the central hub for the demo flow. The full orchestration across all 7 skills is documented in references/demo-flow.md — read it before building or recording the demo. It covers: lead intake -> estimate -> Stripe payment link -> email -> payment confirmation -> calendar scheduling -> daily report, plus the 90-second demo script and credential checklist.
Common Pitfalls
- Forgetting to create indexes — Add indexes on
customers.email,leads.status,activities.customer_idfor query speed - Not backing up — SQLite file is the entire DB; copy to S3/Drive daily via cron
- Schema drift — Use migrations (numbered SQL files) rather than ad-hoc ALTER TABLE
- Concurrent writes — SQLite handles concurrent reads, but writes serialize; keep transactions short
Verification Checklist
- [ ]
crm.dbcreated with all 6 tables - [ ] Indexes on foreign keys and query columns
- [ ] Agent can: create lead, log activity, update estimate status, create task
- [ ] Weekly report cron outputs: new leads, estimates sent, conversion rate, pipeline value
- [ ] Backup script copies DB to offsite location daily
One-Shot Recipes
"New lead from referral"
conn = init_db()
lead_id = conn.execute("""
INSERT INTO leads (source, contact_name, contact_email, contact_phone, company, property_address, sqft, service_type, status)
VALUES ('referral', 'Jane Doe', 'jane@example.com', '555-555-0199', 'Example Realty', '456 Palm Ave [CITY] [STATE] [ZIP]', 3200, 'service_request', 'qualified')
""").lastrowid
conn.commit()
"Get pipeline summary for weekly report"
summary = conn.execute("""
SELECT
COUNT(CASE WHEN lead_status='new' THEN 1 END) as new_leads,
COUNT(CASE WHEN lead_status='estimate_sent' THEN 1 END) as estimates_out,
COUNT(CASE WHEN lead_status='won' THEN 1 END) as won,
SUM(CASE WHEN lead_status='won' THEN total_value ELSE 0 END) as revenue
FROM customers
""").fetchone()
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: hewi333
- Source: hewi333/Mom-n-Pop-Skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.