A local-first personal CRM that lives in the command line. Manage contacts, organizations, interactions, deals, and tasks. Built-in AI integration. No cloud required.
$ brew install jdanielnd/tap/crm
Features
A complete CRM in a single binary. No sign-ups, no subscriptions, no data leaving your machine.
Full contact profiles linked to companies. Track names, emails, phones, titles, locations, and custom notes.
Record calls, emails, meetings, notes, and messages. Track direction, timestamps, and link to multiple contacts.
Manage opportunities through stages from lead to won. Track values, associated contacts, and view pipeline summaries.
Create tasks with due dates, priorities, and person associations. Filter by overdue, completed, or open status.
Find anything instantly across all entities. Powered by SQLite FTS5 for sub-millisecond search on local data.
Built-in MCP server lets Claude and other AI agents read and update your CRM through a structured protocol.
Flexible tagging on any entity. Person-to-person relationships like colleague, mentor, or referred-by.
One command to get everything about a contact: profile, org, interactions, deals, tasks, tags, and relationships.
Table, JSON, CSV, or TSV. Pipe into jq, fzf, awk, or anything else. Unix-native by design.
Quickstart
Install, add a contact, and you're done. No configuration, no setup wizard, no account creation.
Run brew install jdanielnd/tap/crm via Homebrew. Or use go install, or download a binary from Releases.
Run crm person add "Jane Smith" and you're in business. The database is auto-created at ~/.crm/crm.db.
Log interactions, create deals, set tasks. Everything stays local in a single SQLite file you own.
# Add a company and a contact $ crm org add "Acme Corp" --domain acme.com Created organization #1: Acme Corp $ crm person add "Jane Smith" --email jane@acme.com --title "CTO" --org 1 Created person #1: Jane Smith # Log an interaction $ crm log call 1 --subject "Intro call — discussed roadmap" Logged call #1 with Jane Smith # Create a deal $ crm deal add "Website Redesign" --value 15000 --person 1 --stage proposal Created deal #1: Website Redesign # Get a full briefing before your next meeting $ crm context 1
AI Integration
crm ships with a built-in MCP server. Connect it to Claude or any MCP-compatible agent and let AI handle the busywork. Two steps:
If you haven't already, install via Homebrew or any other method from the quickstart.
$ brew install jdanielnd/tap/crm
Register crm as an MCP server so Claude can access your contacts, deals, and tasks:
$ claude mcp add crm -- crm mcp serve
That's it. Claude can now read and update your CRM.
After a meeting, just tell Claude:
"Had a great meeting with Jane. She'll sign the contract next week. Set a follow-up for Thursday."
Claude will automatically:
crm_person_search Find contactscrm_person_get Get person detailscrm_person_create Create a personcrm_person_update Update person fieldscrm_person_delete Archive a personcrm_person_relate Link two peoplecrm_org_search Search organizationscrm_org_get Get org detailscrm_interaction_log Log an activitycrm_interaction_list List interactionscrm_deal_create Create a dealcrm_deal_update Update a dealcrm_task_create Create a taskcrm_task_list List open taskscrm_tag_apply Apply a tagcrm_search Cross-entity searchcrm_context Full person briefingcrm_stats CRM summary statsUse Cases
Real examples of how crm-cli works with Claude across different workflows.
You met several people at a conference and want to log them before you forget.
Tracking deals, logging calls, and preparing for client meetings.
Pulling together context on a VC before a fundraising conversation.
Philosophy
Every design decision optimizes for simplicity, speed, and data ownership.
Your data lives on your machine in a single SQLite file. No cloud, no sync, no accounts.
Sub-millisecond queries on local SQLite. No network latency, no loading spinners, no waiting.
One file, zero dependencies. Pure Go with embedded SQLite. Download and run.
Structured output, exit codes, stdin/stdout discipline. Plays well with pipes and scripts.
FAQ
Homebrew is a package manager for macOS and Linux. Install it by pasting the command from brew.sh into your terminal. Once installed, you can use brew install to install crm-cli and thousands of other tools.
Yes. You can use go install github.com/jdanielnd/crm-cli/cmd/crm@latest if you have Go installed, or download a prebuilt binary for your platform from GitHub Releases.
In a single SQLite file at ~/.crm/crm.db. You can override this with the --db flag or the CRM_DB environment variable. The file is portable — copy it anywhere, back it up however you like.
Point your database to a cloud-synced folder like iCloud Drive or Dropbox. On macOS: export CRM_DB="$HOME/Library/Mobile Documents/com~apple~CloudDocs/crm/crm.db". Just avoid writing from two machines at the same time.
The Model Context Protocol is an open standard that lets AI agents interact with local tools. crm-cli includes a built-in MCP server, so Claude can read and update your contacts, deals, and tasks directly.
Never. crm-cli is fully local. When used with Claude via MCP, the data flows between your local crm binary and the Claude client on your machine — it's not uploaded to any external server by crm-cli.
Yes. Prebuilt Windows binaries are available on the Releases page. You can also build from source with go build — no CGO required.
crm-cli uses soft deletes (archiving) by default, so records are recoverable. The SQLite file is yours — you can always open it with any SQLite client if you need to permanently remove data.