A lightweight personal CRM for the command line and local browser.
Project description
Narad
Narad is a lightweight, local-first personal CRM for people who want a fast way to remember contacts, conversations, and follow-ups without adopting a sales platform.
It gives you a Python CLI, a compact local browser UI, and a SQLite database on your machine. Use it to track people, organizations, relationship notes, follow-up tasks, contact sources, interaction channels, tags, and full-text search.
Why Narad?
Most CRMs are built for teams, pipelines, dashboards, and reporting. Narad is for a single user (including local agents) who wants to keep context:
-
Consultants tracking client outreach and follow-ups
-
Sales reps managing relationships in a lightweight flow
-
Solo founders organizing contacts and partnerships
-
Who did I meet?
-
Where did this relationship come from?
-
What did we talk about last time?
-
What should I follow up on today?
-
Can I find that note from LinkedIn, WhatsApp, a call, or a conference?
Narad keeps that loop small, searchable, and local.
Features
- Contacts with name, email, phone, title, location, source, company, and tags.
- Organizations linked to contacts.
- Relationship notes and interactions with optional channel metadata.
- Follow-up tasks with due dates and completion state.
todayview for overdue tasks, tasks due today, and recent notes.- FTS5 search across contacts, organizations, notes, tasks, sources, channels, and tags.
- Local browser UI served by FastAPI at
http://127.0.0.1:8765. - Plain SQLite storage under your own home directory.
Contact source means where the relationship originated, such as linkedin,
tea shop, twitter, referral, or conference.
Interaction channel means where a specific note or event happened, such as
call, email, whatsapp, linkedin, twitter, or in-person.
Quick Start
Narad requires Python 3.12 or newer.
Install the published package from PyPI:
uv tool install narad==0.1.2
PyPI release: narad 0.1.2
Then initialize your local database:
narad init
narad today
To install from a checkout instead:
git clone https://github.com/gauravvgat/narad.git
cd narad
uv tool install .
For contributor-style local development, use uv sync and run commands with
uv run narad ... instead.
Usage
Create a small relationship graph:
narad add org "Acme Labs" --website https://acme.example --tag investor
narad add contact "Asha Rao" --company "Acme Labs" --email asha@example.com --source linkedin --tag warm
narad add contact "Dev Shah" --company-id 1 --email dev@example.com
narad add affiliation 1 --company "Icertis" --note "Warm intro path"
narad add note "Discussed pilot timeline" --contact "Asha" --channel whatsapp
narad add task "Send pilot proposal" --due today --contact "Asha"
Use --company to find or create an organization by name. Use --company-id
when you want to attach the contact to one exact existing organization. Contact
creation and editing accept only one of --company or --company-id.
Affiliations record other organizations connected to the person without labels,
kinds, or guessed dates; current company stays on the contact.
Keep it current:
narad edit contact 1 --company-id 1 --email asha@acme.example --source conference
narad edit org 1 --website https://acme.example --location Pune
narad list contacts --tag warm
narad list tasks --status open
narad search "pilot"
narad show 1
narad done 1
Open the local web UI:
narad serve
Useful commands:
narad init: create the Narad home directory and initialize the database.narad add contact: create a contact, optionally with--companyor--company-id.narad add affiliation: add a non-current organization affiliation to a contact.narad edit org: update organization details.narad today: show overdue tasks, tasks due today, and recent notes.narad list contacts: list contacts, optionally filtered by tag.narad list tasks: list tasks byopen,done, orall.narad search: search across your CRM.narad show: show one contact profile with tasks and timeline.narad serve: start the local browser UI.narad path: print the configured home and database paths.narad search-reindex: rebuild the full-text search index.
Storage And Privacy
By default, Narad stores data in:
~/.narad/narad.db
For isolated runs, demos, tests, or agent sandboxes, override the paths:
export NARAD_HOME=/tmp/narad-home
export NARAD_DB=/tmp/narad-home/narad.db
Narad is local-first and single-user in v1. The web UI binds to
127.0.0.1 by default and does not include accounts, teams, permissions, or
remote sync.
Development
Install dependencies and run checks:
uv sync
uv run pytest
uv run ruff check .
uv run pre-commit install
The pre-commit hook runs ruff and pytest.
Project stack:
- Python package management:
uv - CLI: Typer and Rich
- Web UI: FastAPI, Jinja templates, and plain CSS
- Database: SQLite through Python
sqlite3 - Tests: pytest
- Lint: ruff
Before changing behavior, read:
AGENTS.mdmemory/index.md- relevant
memory/areas/*.md - relevant
user_stories/*.md
The repo memory and user stories are part of the project documentation, not generated scratch notes.
Maintainer Release
Before publishing, run the checks and build the release artifacts:
uv run pytest
uv run ruff check .
uv build --no-sources
This creates a source distribution and wheel under dist/.
The wheel includes only the runtime narad package, including the web UI
templates and CSS. The source distribution is intentionally trimmed to source
files and public package metadata:
src/narad/README.mdLICENSEpyproject.toml
Repo-local memory, user stories, artifacts, tests, and uv.lock are not shipped
in distribution artifacts.
Publish to PyPI after the project is configured:
uv publish
For automated releases, prefer PyPI Trusted Publishing from GitHub Actions over long-lived PyPI tokens.
Contributing
Contributions are welcome, especially when they keep Narad small and useful.
Good first areas:
- Improve CLI ergonomics.
- Tighten the local web UI.
- Add focused tests for store, CLI, or web behavior.
- Improve import/export workflows.
- Clarify docs for real personal CRM use cases.
Design principles:
- Keep source code as the source of truth.
- Keep CLI and web behavior aligned through
narad.store. - Prefer simple SQLite-backed behavior over premature platform features.
- Do not touch a user's real
~/.narad/narad.dbin tests. - Use
NARAD_HOMEandNARAD_DBfor isolated test data.
AI Agent Usage
Agents should treat Narad as the user's local personal CRM and prefer the CLI over direct SQLite writes.
Before adding a likely duplicate contact, search first:
narad search "asha acme"
narad show 1
Then record structured context through the CLI:
narad add contact "Asha Rao" --company "Acme Labs" --source linkedin --tag warm
narad add note "Discussed pilot timeline" --contact "Asha" --channel whatsapp
narad add task "Send pilot proposal" --due tomorrow --contact "Asha"
narad edit contact 1 --source conference --tag champion
narad done 3
Agent guidelines:
- Use contact IDs from
narad search,narad list contacts, ornarad showwhen a name is ambiguous. - Store relationship origin in contact
--source. - Store event medium in note
--channel. - Record follow-ups as tasks instead of burying them only in note text.
- Use
NARAD_HOMEandNARAD_DBfor sandboxed runs.
Roadmap
Near-term ideas:
- Add practical import/export commands.
- Add backup helpers.
- Improve filtering and editing flows in the web UI.
Narad is intentionally not trying to become an enterprise CRM. Sync, hosted multi-user access, and advanced reporting can wait until they clearly earn their complexity.
License
Narad is released under the MIT License. See LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file narad-0.1.2.tar.gz.
File metadata
- Download URL: narad-0.1.2.tar.gz
- Upload date:
- Size: 17.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.6.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
36f44cbcfb91d612b35a932d2e47aec58ece2a2a252487efbd7017e9db82a1e8
|
|
| MD5 |
fd5a08759794d36b2cbe387c692962c3
|
|
| BLAKE2b-256 |
3189f23bca8d0bb5dd0c06dacc5239ef5a9b5387ce0a21f1bd5541a646413acf
|
File details
Details for the file narad-0.1.2-py3-none-any.whl.
File metadata
- Download URL: narad-0.1.2-py3-none-any.whl
- Upload date:
- Size: 21.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.6.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b260d68d54f1d7dbb7b189183bd4cfdeb6b8c7a45efbdd8bed8344cc2e4fd858
|
|
| MD5 |
c191ffd9af6cac4e1d2192a165bb287f
|
|
| BLAKE2b-256 |
903f5a11e4fe40dee0256bf72c8b9a12609b35e319d25b95234e7740b64b51a6
|