CONTACTCMD

A fast, local-first personal CRM for the command line. Built in Rust. Powered by AI.

Talk to it in plain English. Search your iMessages. Set reminders. Import contacts from anywhere. Everything stays on your machine.

contactcmd
$ contactcmd
contactcmd > who works at Acme in Austin?
  Sarah Chen
  VP Engineering · Acme Corp · Austin, TX
  sarah@acme.co · (512) 555-0142

  David Park
  Senior Engineer · Acme Corp · Austin, TX
  david.park@acme.co · (512) 555-0891
contactcmd > remind me about Sarah next week
✓ Check-in set: Sarah Chen · due Jul 1

What you can do.

Everything runs locally. Sub-100ms response times. No cloud, no telemetry, no account required.

01
AI Chat
Type what you need in plain English. ContactCMD translates to the right commands. Works with Ollama, Claude, or any OpenAI-compatible model.
$ contactcmd
02
Browse
Full contact cards with inline photos, vim-style navigation, and single-key actions. Filter by tag, missing fields, or search term.
$ contactcmd browse
03
Message Search
Search your entire iMessage and SMS history from the terminal. Filter by date or sender. Reads your local Messages database directly.
$ contactcmd messages "coffee next week"
04
Import
Pull contacts from LinkedIn, Google Contacts, or Outlook CSV exports. Auto-maps columns, handles duplicates, supports dry-run preview.
$ contactcmd import contacts.csv
05
Tasks
Eisenhower matrix task management linked to your contacts. Subtasks, due dates, privacy levels, and a keyboard-driven TUI.
$ contactcmd task
06
Check-ins
Set follow-up reminders with natural dates. See who's overdue at a glance. Never lose touch with the people who matter.
$ contactcmd checkin set "Sarah" +1w
07
Tags
Organize contacts with tags. View by tag, auto-tag on import, bulk operations. Full-text search across names, emails, orgs, and tags.
$ contactcmd tag list
08
Sync
Import from macOS Contacts with full field mapping. Photos, organizations, addresses — everything comes over. Dry-run to preview first.
$ contactcmd sync mac

AI agents draft messages. You decide what sends.

The Gateway is a localhost server that intercepts every AI-proposed message before it reaches anyone. External agents can queue emails, iMessages, and SMS — but nothing sends without your approval.

contactcmd gateway
$ contactcmd gateway --review
Pending Approval
To Sarah Chen <sarah@acme.co> Via Email · Gmail API Agent follow-up-bot Subject Great meeting you at Demo Day Hey Sarah, Really enjoyed our conversation about the developer tools space yesterday. Would love to grab coffee next week and continue the chat — I had some thoughts on the API design we discussed. — Jason [a] approve [e] edit [d] deny
> a
✓ Approved · sent via Gmail API
API Key Auth
SHA-256 hashed, per-agent keys. Named, revokable, zero-trust by default.
Rate Limits
Hourly and daily caps per key. No agent floods your contacts.
Localhost Only
Approve and deny endpoints restricted to 127.0.0.1. No remote approvals.
Multi-channel
Email via Gmail API, SMS and iMessage via AppleScript. Always from your real accounts.
You
Human-in-the-loop review for every message. Approve, edit, or deny. The final guardrail is always a human decision.
01
Local-first
SQLite on your machine. No cloud. No telemetry. No account. Your contact data never leaves your hardware.
02
AI with guardrails
AI helps you find, organize, and draft — but never sends without your approval. A structural firewall ensures the AI never sees your contact data directly.
03
Model-agnostic
Works with local models via Ollama or LM Studio, Anthropic Claude, or any OpenAI-compatible API. Your choice of AI, no lock-in.
04
Fast and portable
Single Rust binary. No runtime dependencies. Sub-100ms for all local operations. Handles 10,000+ contacts in under 50MB.

Three commands. You're in.

$ brew tap jnun/contactcmd-tap
$ brew trust jnun/contactcmd-tap
$ brew install contactcmd
macOS · Apple Silicon · Single Rust binary · No runtime dependencies