crm-cli
A local-first personal CRM for the terminal — manage contacts, deals, interactions, and tasks from Claude with 18 built-in tools, all stored in a local SQLite file.
crm — your contacts, in your terminal.

A local-first personal CRM that lives in your terminal. Manage contacts, organizations, interactions, deals, and tasks — all from the command line. Ships with a built-in MCP server so AI agents like Claude can read and update your CRM directly.
Single static binary. SQLite database. No cloud. No accounts. Your data stays on your machine.
Features
- People & Organizations — contacts with full profiles, linked to companies
- Interaction Log — track calls, emails, meetings, notes, and messages
- Deals & Pipeline — sales opportunities with stages, values, and a pipeline view
- Tasks — follow-ups with due dates, priorities, and completion tracking
- Tags — labels on any entity for flexible organization
- Relationships — person-to-person links (colleague, mentor, referred-by, …)
- Full-Text Search — find anything across all entities instantly
- Context Briefing — one command to get everything about a person before a meeting
- AI-Ready — built-in MCP server for Claude and other AI agents
- Multiple Output Formats — table, JSON, CSV, TSV — pipe into anything
- Zero Dependencies — single binary, pure-Go SQLite, runs anywhere
Install
# Homebrew (macOS/Linux)
brew install jdanielnd/tap/crm
# Go
go install github.com/jdanielnd/crm-cli/cmd/crm@latest
# Or download a binary from GitHub Releases
# https://github.com/jdanielnd/crm-cli/releases
Quick Start
# Add a company
crm org add "Acme Corp" --domain acme.com
# Add a contact and link them to the org
crm person add "Jane Smith" --email [email protected] --org 1
# Log a call
crm log call 1 --subject "Intro call"
# Get a full briefing before your next meeting
crm context 1
# See your dashboard
crm status
Commands
People
crm person add "Jane Smith" --email [email protected] --phone 555-1234 --org 1
crm person list # all contacts
crm person list --tag vip --limit 10 # filtered
crm person show 1 # full details
crm person edit 1 --title "CTO" --company "Acme Corp"
crm person delete 1 # soft-delete (recoverable)
Organizations
crm org add "Acme Corp" --domain acme.com --industry SaaS
crm org list
crm org show 1 --with-people # show org + its members
crm org edit 1 --domain acme.io
crm org delete 1
Interactions
crm log call 1 --subject "Discussed roadmap" --content "Agreed on Q2 timeline"
crm log email 1 --subject "Follow-up" --direction outbound
crm log meeting 1 2 --subject "Product demo" --at "2026-03-05 14:00"
crm log note 1 --subject "Quick check-in" --content "Seemed interested"
crm log list --person 1 --limit 5 # recent interactions with person
Deals
crm deal add "Website Redesign" --value 15000 --person 1 --stage proposal
crm deal list --open # exclude won/lost
crm deal list --stage proposal
crm deal show 1
crm deal edit 1 --stage won --closed-at 2026-03-15
crm deal delete 1
crm deal pipeline # summary by stage
Tasks
crm task add "Follow up on proposal" --person 1 --due 2026-03-14 --priority high
crm task list # open tasks
crm task list --overdue # past due
crm task list --all # include completed
crm task show 1
crm task edit 1 --priority medium
crm task done 1 # mark completed
crm task delete 1
Tags
crm tag apply person 1 "vip"
crm tag apply deal 1 "q2"
crm tag show person 1 # tags on a person
crm tag remove person 1 "vip"
crm tag list # all tags
crm tag delete "old-tag" # remove tag entirely
Relationships
crm person relate 1 2 --type colleague --notes "Met at ReactConf"
crm person relationships 1 # list all relationships
crm person unrelate 1 # remove by relationship ID
Relationship types: colleague, friend, manager, mentor, referred-by
Search
crm search "jane" # searches people, orgs, interactions, deals
crm search "roadmap" --type interaction # filter by entity type
Context Briefing
crm context 1 # full briefing by person ID
crm context "Jane Smith" # or by name
Returns person profile, organization, recent interactions, open deals, pending tasks, relationships, and tags — everything you need before a meeting.
Dashboard
crm status
Shows contact/org counts, open deals with total value, task counts, overdue items, pipeline breakdown, and recent activity.
Output Formats
Every command supports --format / -f:
crm person list # table (default in TTY)
crm person list -f json # JSON (default when piped)
crm person list -f csv # CSV
crm person list -f tsv # TSV
Use -q / --quiet for minimal output (just IDs), useful for scripting:
crm person list --tag vip -q | xargs -I{} crm tag apply person {} "priority"
Piping & Composition
crm follows Unix conventions — data to stdout, messages to stderr, structured exit codes — so it plays well with other tools:
# Bulk tag everyone at an org
crm person list -f json | jq '.[] | select(.org_id == 1) | .id' | xargs -I{} crm tag apply person {} "acme-team"
# Interactive selection with fzf
crm person list -f tsv | fzf | cut -f1 | xargs crm person show
# Export contacts to CSV
crm person list -f csv > contacts.csv
# Overdue task notifications
crm task list --overdue -f json | jq -r '.[] | "OVERDUE: \(.title)"'
Exit codes: 0 success, 1 error, 2 usage, 3 not found, 4 conflict, 10 database error.
AI Integration (MCP Server)
crm includes a built-in MCP server so AI agents can query and update your CRM over a structured protocol.
Claude Code
claude mcp add crm -- crm mcp serve
Then copy AGENT.md into your project as CLAUDE.md so Claude knows how to use the CRM effectively.
Claude Desktop (macOS)
-
Open the config file at
~/Library/Application Support/Claude/claude_desktop_config.json -
Add the CRM server (if the file already has other servers, add the
"crm"entry inside the existingmcpServersobject):
{
"mcpServers": {
"crm": {
"command": "/opt/homebrew/bin/crm",
"args": ["mcp", "serve"]
}
}
}
Note: Use the full path to the binary. Homebrew on Apple Silicon installs to
/opt/homebrew/bin/crm, on Intel Macs to/usr/local/bin/crm. Runwhich crmto find yours.
-
Restart Claude Desktop
-
Create a new Project, click the project settings, and paste the contents of
AGENT.mdinto the project instructions. This teaches Claude when to log interactions, how to maintain contact summaries, tagging conventions, and more.
Available Tools
| Tool | Description |
|---|---|
crm_person_search | Search people by name, email, tag, org |
crm_person_get | Get full details for a person |
crm_person_create | Create a new person |
crm_person_update | Update person fields |
crm_person_delete | Delete (archive) a person |
crm_person_relate | Create relationship between people |
crm_org_search | Search organizations |
crm_org_get | Get org details with members |
crm_interaction_log | Log a call, email, meeting, or note |
crm_interaction_list | List interactions for a person |
crm_search | Cross-entity full-text search |
crm_context | Full person briefing |
crm_deal_create | Create a deal |
crm_deal_update | Update deal stage/fields |
crm_task_create | Create a task |
crm_task_list | List open tasks |
crm_tag_apply | Apply a tag |
crm_stats | CRM summary stats |
Example AI Workflow
After a meeting, tell Claude:
"Just had a great meeting with Jane. We agreed on the timeline, she'll sign next week."
Claude can:
- Log the interaction with
crm_interaction_log - Update the deal stage with
crm_deal_update - Create a follow-up task with
crm_task_create - Update Jane's summary with
crm_person_update
The summary field on contacts acts as a living dossier that AI agents maintain — reading it before meetings for context, updating it after interactions with new facts and preferences.
Configuration
The database lives at ~/.crm/crm.db by default. Override with:
# Flag (highest priority)
crm --db /path/to/crm.db person list
# Environment variable
export CRM_DB=/path/to/crm.db
The database and directory are auto-created on first use.
iCloud Sync (macOS)
Point your database to iCloud Drive for automatic backup across machines:
export CRM_DB="$HOME/Library/Mobile Documents/com~apple~CloudDocs/crm/crm.db"
SQLite WAL mode handles concurrent reads well, but avoid writing from two machines simultaneously.
Building from Source
git clone https://github.com/jdanielnd/crm-cli.git
cd crm-cli
go build -o crm ./cmd/crm
go test ./...
Requires Go 1.23+. No CGO — builds anywhere Go runs.
Tech Stack
| Component | Choice |
|---|---|
| Language | Go |
| Database | SQLite via modernc.org/sqlite (pure Go, no CGO) |
| CLI | Cobra |
| MCP | mcp-go |
| Search | SQLite FTS5 |
License
MIT
Related Servers
Kone.vc
sponsorMonetize your AI agent with contextual product recommendations
MCP Video Digest
Transcribe and summarize video content from links using various transcription services.
GroundEffect
Hyper-fast, local Gmail and Google Calendar indexing for Claude Code, available as a Skill or MCP Server.
Google Spreadsheet MCP
Full Google Sheets integration - read, write, format cells, create charts, use formulas, and manage spreadsheets.
SHrimp
19-tool MCP server for a full-featured iOS task manager. Standalone local mode (13 tools) or pair with iOS app for task sync, inbox, AI prompt config, and provider management across Claude Code, Cursor, Windsurf, OpenClaw and other MCP clients.
Resume Generator
Generates professional PDF resumes using LaTeX templates.
Atlassian Cloud MCP Server
Integrate with Atlassian Cloud to access Jira tickets, issues, projects, and Confluence pages.
Pulsetic MCP Server
The Pulsetic MCP Server connects Pulsetic monitoring with AI agents and MCP-compatible tools, enabling direct access to uptime data, cron monitoring results, incident management workflows, and status page information through the Model Context Protocol (MCP). It allows teams to securely expose operational monitoring data in a structured format, making it easy to build AI-driven automation, monitoring assistants, and intelligent operational workflows without custom middleware.
Goatcounter
Interact with the Goatcounter web analytics API.
Longbridge
US/HK markets — 110 tools: real-time quotes, options, orders, fundamentals, alerts, DCA & portfolio
Feishu/Lark OpenAPI MCP
Connect AI agents to Feishu/Lark APIs for document processing, conversation management, and calendar scheduling.