Crm.CLI
An open-source, headless CRM built for agents. No UI. No dashboard. Just a CLI and a FUSE-mounted filesystem.
Install
npm install -g @dzhng/crm.cliInstall command taken from the project's README or registry entry. Always review code before running it.
README excerpt
Read full README on GitHub →crm.cli
A headless, CLI-first CRM for AI native companies. Contacts, deals, and pipeline in a single SQLite file — queryable from your terminal, composable with Unix tools, and mountable as a virtual filesystem so any tool that reads files (Claude Code, Codex, grep, jq, vim) has full CRM access without any integration.
No server. No Docker. No accounts. No GUI. Just npm install -g @dzhng/crm.cli and go.
Created by Duet — a cloud agent workspace with persistent AI. Set up crm.cli in your own private cloud computer and run it with Claude Code or Codex — no local setup required. Try Duet →
Why crm.cli
Existing CRMs are GUI-first tools built for sales teams. If you're a technical founder, indie hacker, or engineer running BD, you're probably managing contacts in a spreadsheet you grep through. crm.cli is built for you.
Your CRM is a filesystem. Mount it with crm mount ~/crm and every tool that reads files — AI agents, shell scripts, editors — gets full CRM access for free. No MCP servers, no API keys, no integration code. The filesystem is the universal API.
crm mount ~/crm
ls ~/crm/contacts/
cat ~/crm/contacts/jane-doe.json | jq .name
# Point Claude Code at ~/crm and ask it to research your pipeline
Deep data normalization. A CSV has zero setup cost. crm.cli justifies its existence with structured intelligence: E.164 phone normalization (look up by any format), website normalization, social handle extraction (paste a LinkedIn URL, it stores the handle), entity merge with reference relinking, and fuzzy duplicate detection. This is what a spreadsheet can never provide.
crm contact add --name "Jane Doe" \
--email jane@acme.com \
--phone "+1-212-555-1234" \
--linkedin linkedin.com/in/janedoe \
--company Acme
# Phone stored as E.164, LinkedIn URL → handle, company auto-linked
Pipe-friendly by default. Every command outputs structured data. Pipe to jq, grep, awk, or feed into scripts. --format json on everything.
crm deal list --stage qualified --format json | jq '.[] | .value'
crm find "that fintech CTO from London"
crm report pipeline
crm dupes --threshold 0.5
Install
npm install -g @dzhng/crm.cli
# or: bun install -g @dzhng/crm.cli
# Or install the compiled binary
curl -fsSL https://raw.githubusercontent.com/dzhng/crm.cli/main/install.sh | sh
Install as an AI agent skill
Point your agent at the skills folder to give it full CRM knowledge — install instructions, every command, the filesystem interface, and tips for agents:
# Claude Code / Duet — install the skill from GitHub
claude skills add https://github.com/dzhng/crm.cli/tree/main/skills
# Or copy skills/SKILL.md into your agent's skills directory
cp skills/SKILL.md ~/.your-agent/skills/crm-cli/SKILL.md
Storage
Everything lives in a single SQLite file. Default: ~/.crm/crm.db.
crm --db ./my-project.db contact list # use a specific database
export CRM_DB=./team.db # or set via env var
No server. No Docker. No accounts. Back it up by copying the file.
Configuration
Config is loaded from crm.toml. Resolution order (first match wins):
--configflag (explicit)CRM_CONFIGenv var- Walk up from CWD:
./crm.toml→../crm.toml→../../crm.toml→ ... →/crm.toml ~/.crm/config.toml(global fallback)
Similar plugs
CLI proxy that reduces LLM token consumption by 60-90% on common dev commands. Single Rust binary, zero dependencies
Bash is all you need - A nano claude code–like 「agent harness」, built from 0 to 1
Documented system prompts from Anthropic - Claude Fable 5.1, Opus 5.5, Claude Design, Claude Code. OpenAI - ChatGPT GPT-6-Astra, Codex. Google - Gemini 3.8 Flash, 3.1 Pro,…
Wrap Antigravity, ChatGPT Codex, Claude Code, Grok Build, Muse Code, Devin as an OpenAI/Gemini/Claude/Codex compatible API service, allowing you to enjoy the free Gemini…