CRM

Sales pipeline management with organizations, contacts, deals, and automated email sequences. Built for solo operators running outbound sales from the terminal.

Overview

The CRM system gives you a full sales pipeline right in Pontius. Track organizations, contacts, and deals through custom stages. Attach automated email sequences to deals and let Pontius send them on schedule. Sync with your inbox to automatically log email activity.

Everything is stored locally as JSON files in your knowledge base — no external services, no monthly fees, fully portable.

Replaces Campaigns
The CRM supersedes the older campaign system. Existing campaigns can be migrated with pontius crm import campaign <name> --pipeline <id>.

Quick Start

The fastest way to get started is with the AI-guided setup:

$ pontius crm setup my-sales

This outputs a prompt your AI can use to walk you through creating a pipeline, adding stages, importing contacts, and configuring sequences. Or set things up manually:

# Create a pipeline linked to your email account
$ pontius crm pipeline create my-sales --name "My Sales" --account "Work"
# Add stages with win probabilities
$ pontius crm pipeline stage add my-sales prospect --name "Prospect" --probability 10
$ pontius crm pipeline stage add my-sales outreach --name "Outreach" --probability 20
$ pontius crm pipeline stage add my-sales negotiation --name "Negotiation" --probability 60
$ pontius crm pipeline stage add my-sales closed --name "Closed" --probability 100
# Add an organization and contact
$ pontius crm org add acme --name "ACME Corp" --domain "acme.com"
$ pontius crm contact add john --email "[email protected]" --name "John Doe" --org acme --role "CTO"
# Create a deal
$ pontius crm deal add deal-001 --title "ACME Enterprise" --pipeline my-sales --org acme --contact john --value 50000
# View your pipeline
$ pontius crm view my-sales

Data Storage

~/.config/pontius/knowledge/crm/
├── pipelines.json # Your sales pipelines and stages
├── organizations.json # Companies you're selling to
├── contacts.json # Individual people
├── deals.json # Deals in your pipelines
├── activities.json # Activity log (emails, notes, stage changes)
├── email_index.json # Auto-generated cache for email matching
└── sequences/
└── <name>.json # Email sequence templates

All files are standard JSON. They sync automatically with pontius sync export/import since they live in the knowledge base directory.

Pipelines

A pipeline represents a sales process with ordered stages. Each stage has a win probability used for revenue forecasting.

# List pipelines
$ pontius crm pipeline list
# Show pipeline details
$ pontius crm pipeline show my-sales
# Create with account and optional alias
$ pontius crm pipeline create my-sales --name "My Sales" --account "Work" --from [email protected]
# Manage stages
$ pontius crm pipeline stage add my-sales demo --name "Demo Booked" --probability 40
$ pontius crm pipeline stage remove my-sales demo
# Delete a pipeline
$ pontius crm pipeline delete my-sales

Organizations

Organizations represent companies. The --domain field enables automatic email matching — when Pontius syncs your inbox, emails from @acme.com are automatically linked to the ACME organization.

# Add an organization
$ pontius crm org add acme --name "ACME Corp" --domain "acme.com" --industry "SaaS" --location "NYC"
# Custom fields for anything else
$ pontius crm org edit acme --field employees=500 --field funding="Series B"
# Search organizations
$ pontius crm org find "tech"
# List with tag filter
$ pontius crm org list --tag enterprise

Contacts

Contacts are individual people, optionally linked to organizations. The email field is the primary identifier used for IMAP sync matching.

# Add a contact
$ pontius crm contact add john --email "[email protected]" --name "John Doe" --org acme --role "CTO"
# Edit contact details
$ pontius crm contact edit john --role "VP Engineering"
# Search contacts
$ pontius crm contact find "john"
# List contacts at an organization
$ pontius crm contact list --org acme

Deals

Deals track opportunities through your pipeline stages. Each deal is linked to a pipeline and optionally to an organization and contact.

# Create a deal
$ pontius crm deal add deal-001 --title "ACME Enterprise" --pipeline my-sales \
--org acme --contact john --value 50000
# Move through stages
$ pontius crm deal move deal-001 outreach
$ pontius crm deal move deal-001 negotiation
# Mark outcome
$ pontius crm deal won deal-001 --value 55000
$ pontius crm deal lost deal-001 --reason "Went with competitor"
# Add notes
$ pontius crm deal note deal-001 "Great call, they want a demo next week"
# Filter deals
$ pontius crm deal list --pipeline my-sales --status open
$ pontius crm deal list --stage outreach

Every stage change, win, loss, and note is automatically logged as an activity.

Pipeline Views

See your deals at a glance with built-in views:

# Kanban-style pipeline board
$ pontius crm view my-sales
# Weighted revenue forecast
$ pontius crm forecast --pipeline my-sales
# High-level stats
$ pontius crm summary

The forecast uses each stage's win probability to calculate weighted pipeline value. A $50,000 deal at the "Outreach" stage (20% probability) contributes $10,000 to the forecast.

Email Sequences

Sequences are multi-step email templates that send automatically on a schedule. Create a sequence as a JSON file in the sequences/ directory:

{
"id": "cold-outreach",
"name": "Cold Outreach Sequence",
"pipeline_id": "my-sales",
"steps": [
{
"delay_days": 0,
"subject": "Quick question about {company}",
"body": "Hi {first_name},\n\nI noticed {company} is growing fast...\n\nBest,\nStuart"
},
{
"delay_days": 3,
"subject": "Re: Quick question about {company}",
"body": "Hi {first_name},\n\nJust bumping this in case it got buried..."
},
{
"delay_days": 7,
"subject": "closing the loop",
"body": "Hi {first_name},\n\nI'll assume the timing isn't right..."
}
]
}

Placeholders

PlaceholderReplaced With
{name}Contact full name
{first_name}Contact first name
{last_name}Contact last name
{company}Organization name
{role}Contact role/title
{domain}Organization domain
{deal_title}Deal title

Sending Sequences

# Attach a sequence to a deal
$ pontius crm sequence attach deal-001 cold-outreach
# Send next eligible emails across a pipeline
$ pontius crm sequence send my-sales --limit 20
# Check sequence progress
$ pontius crm sequence status --pipeline my-sales
# Detach a sequence from a deal
$ pontius crm sequence detach deal-001
Rate Limiting
Sequence sends are rate-limited with 15-20 second gaps between emails to protect deliverability. Respects the pipeline's daily send limit.

Email Sync

Sync your inbox to automatically log email activity against CRM contacts and deals:

# Scan last 30 days of email for CRM contacts
$ pontius crm sync --days 30
# View email history for a specific contact
$ pontius crm emails john --days 60

Sync matches emails by sender/recipient address and domain. It creates activity records, updates contact last-emailed dates, and links emails to open deals when possible.

Activity Log

Every action is tracked: emails sent and received, deal stage changes, notes, calls, and status changes.

# View recent activity
$ pontius crm activity list --days 7
# Filter by deal or contact
$ pontius crm activity list --deal deal-001
$ pontius crm activity list --contact john --type email_sent
# Manually log an activity
$ pontius crm activity log call --deal deal-001 --contact john "30 min discovery call, very interested"

Importing Data

CSV Contact Import

Import contacts from a CSV file. The only required column is email. Optional columns: name, first_name, last_name, company, role, phone, linkedin, source, tags, org_id.

$ pontius crm import contacts prospects.csv
Imported 47 contacts (3 skipped - already exist)

Campaign Migration

Migrate existing Pontius campaigns to the CRM:

$ pontius crm import campaign my-outreach --pipeline my-sales

This imports prospects as contacts, creates deals, migrates sequences, and sets up organizations from company data.

AI Workflow

During blitz sessions, your AI can manage the full CRM workflow:

  • "Show my sales pipeline"
  • "Move the ACME deal to negotiation"
  • "Send next batch of sequence emails"
  • "Add a note to the TechCorp deal: great demo, sending proposal"
  • "Import these contacts from the CSV I downloaded"
  • "What's my forecast looking like?"
  • "Sync my inbox and show new activity"

Command Reference

# Pipeline
pontius crm pipeline list|show|create|delete
pontius crm pipeline stage add|remove
# Organization
pontius crm org list|show|add|edit|delete|find
# Contact
pontius crm contact list|show|add|edit|delete|find
# Deal
pontius crm deal list|show|add|edit|move|won|lost|delete|note
# Views
pontius crm view <pipeline-id>
pontius crm forecast [--pipeline <id>]
pontius crm summary [--pipeline <id>]
# Activity
pontius crm activity list|log
# Sequences
pontius crm sequence list|show|attach|detach|send|status
# Email Integration
pontius crm sync [--days N]
pontius crm emails <contact-id> [--days N]
# Import
pontius crm import contacts <file.csv>
pontius crm import campaign <name> --pipeline <id>
# Setup
pontius crm setup <pipeline-name>

File Location

~/.config/pontius/knowledge/crm/