Skip to main content

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.
  • today view 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 --company or --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 by open, done, or all.
  • 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.md
  • memory/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.md
  • LICENSE
  • pyproject.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.db in tests.
  • Use NARAD_HOME and NARAD_DB for 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, or narad show when 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_HOME and NARAD_DB for 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

narad-0.1.2.tar.gz (17.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

narad-0.1.2-py3-none-any.whl (21.6 kB view details)

Uploaded Python 3

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

Hashes for narad-0.1.2.tar.gz
Algorithm Hash digest
SHA256 36f44cbcfb91d612b35a932d2e47aec58ece2a2a252487efbd7017e9db82a1e8
MD5 fd5a08759794d36b2cbe387c692962c3
BLAKE2b-256 3189f23bca8d0bb5dd0c06dacc5239ef5a9b5387ce0a21f1bd5541a646413acf

See more details on using hashes here.

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

Hashes for narad-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 b260d68d54f1d7dbb7b189183bd4cfdeb6b8c7a45efbdd8bed8344cc2e4fd858
MD5 c191ffd9af6cac4e1d2192a165bb287f
BLAKE2b-256 903f5a11e4fe40dee0256bf72c8b9a12609b35e319d25b95234e7740b64b51a6

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page