Curtis AI CRM

A CRM that lives in your notes.

Contacts, deals, and interactions are notes with YAML frontmatter — read by Obsidian's native Bases, portable forever, no lock-in.

v0.2.0 — built4 library packs303 vitest casesMIT — no telemetry
01

What a contact looks like.

one contact, as keptmarkdown + frontmatter · under curtis crm/ (configurable)
name
Ada Lovelace
stage
active
last interaction
call — 2026-10-08, pricing discussed
follow-up
due 2026-10-15 — the engine reminds you

There is no database. The scaffold command writes the folders and two Bases views — Pipeline.base and Follow-ups.base — over notes that any text editor can read, and anything can back up.

02

Shaped like your work.

Stages, pipeline, and interaction kinds are data, not code. Four library packs ship — sales, recruiting, real estate, freelance — and a pack is itself a note: duplicate one into Libraries/, edit its frontmatter, and the CRM re-shapes live. Sharing a CRM design is sharing a note.

The follow-up engine watches overdue and upcoming dates and scans for stale contacts, with reminders in-app. Quick capture works from anywhere — obsidian://curtis-crm?text=… from a mobile share sheet lands in Inbox.md for triage.

Read the guide on GitHub

03

AI that does the upkeep.

Bring your own key — OpenAI-compatible endpoints, Anthropic, or Gemini, stored in Obsidian's secret storage, never in plugin data. One sentence becomes a contact, an interaction, and a follow-up date on a review screen; nothing is written until you approve. Ask the CRM questions in plain language. Draft a follow-up from the contact's own history — copy it or append it, never auto-sent. Duplicates are caught deterministically and merged only after review.

04

Under the hood.

The specification of record, straight from the manifest, the checklist, and the changelog.

specification of recordfrom the manifest, checklist, changelog
release
0.2.0 — built; release pending live-install verification
data
markdown + YAML frontmatter — Contacts/ · Deals/ · Interactions/
views
Pipeline.base · Follow-ups.base — native Obsidian Bases
packs
4 built-in · your own is a note under Libraries/
ai
BYOK — OpenAI-compatible, Anthropic, Gemini · every write reviewed
keys
Obsidian secret storage (1.11.4+) — never in plugin data
platforms
Obsidian desktop + mobile · min app 1.9.10 (Bases mobile)
tests
303 vitest cases
license
MIT — local-first, no telemetry
NOT YET — STATED PLAINLY

Not yet in the Obsidian community directory. v0.2.0 is built; what remains is live-install verification and the submission PR — until it merges, installing means copying files from the repository by hand.

The AI layer needs your key. Without one, everything else still works — capture, pipeline, follow-ups — the AI-assisted paths just wait. And duplicate detection is deterministic: same email, normalized name, or name plus company. Fuzzy near-matches pass through unflagged.

05

The record.

What has shipped so far, excerpted from the repository's changelog.

changelog excerpt0.1.0 → 0.2.0 · the full ledger lives in the repository
foundation
0.1.0 — contacts, deals, interactions as markdown; store, dashboard, capture URI
ai layer
log with ai · ask the crm · draft follow-up · dedupe — on your key, behind review
library packs
the CRM's shape becomes data — four packs, or your own as a note
onboarding
dashboard empty state, one-click setup, MIT license, user guide