Skip to main content

Jodie lets you add contacts to Contacts.app on macOS from command line

Project description

Jodie

A command line tool to quickly save new contacts to Contacts.app on macOS.

Named for Jodie Foster for her stellar performance in Contact.

Jodie Foster in Contact

Installation

git clone git@github.com:austinogilvie/jodie.git
cd jodie
pip install .

After installation, both jodie and jodie-cli commands are available.

Quick Start

# Smart parsing (default) - jodie figures out what's what
jodie new "John Doe" john@acme.com "Acme Inc" "CEO"

# Preview before saving
jodie new "John Doe" john@acme.com --dry-run

# Parse from clipboard (copy an email signature first)
jodie new --paste

# Parse from stdin
echo "John Doe <john@acme.com>" | jodie new --stdin

Usage

jodie - Manage macOS Contacts.app from command line!

Usage:
    jodie new TEXT... [options]
    jodie new [options]
    jodie new --paste [options]
    jodie new --stdin [options]
    jodie new --explicit EMAIL NAME [COMPANY] [TITLE]

Arguments:
    TEXT          Text for jodie to parse intelligently (default mode).
    EMAIL         Email address (used with --explicit).
    NAME          Full name (used with --explicit).
    COMPANY       Company name (used with --explicit).
    TITLE         Job title (used with --explicit).

Options:
    --explicit                      Use strict positional parsing.
    --paste                         Read input from clipboard (pbpaste).
    --stdin                         Read input from stdin (pipe/heredoc).
    -D --dry-run                    Preview parsed fields without saving.

    -E EMAIL --email=EMAIL          Email address.
    -F FIRST --first=FIRST          First name.
    -L LAST --last=LAST             Last name.
    -U NAME --full-name=NAME        Full name (or use --name).
    -P PHONE --phone=PHONE          Phone number.
    -T TITLE --title=TITLE          Job title.
    -C COMPANY --company=COMPANY    Company name.
    -W URL --websites=URL           Comma-separated website URLs.
    --linkedin=URL                  LinkedIn URL (auto-labeled).

    -H --help                       Show this screen.
    -V --version                    Show version.

Examples

Smart Parsing (Default)

Just pass the information in any order - jodie figures it out:

jodie new "John Doe" john@acme.com "Acme Inc" "CEO" "https://linkedin.com/in/johndoe"

Preview with --dry-run

See what jodie parsed before saving:

jodie new "John Doe" john@acme.com "Acme Inc" --dry-run

Output:

┌─────────────────────────────────────────────────────────┐
│                     Contact Preview                     │
├──────────────┬──────────────────────┬───────────────────┤
│ Field        │ Value                │ Source            │
├──────────────┼──────────────────────┼───────────────────┤
│ First Name   │ John                 │ parsed (100%)     │
│ Last Name    │ Doe                  │ parsed (100%)     │
│ Email        │ john@acme.com        │ parsed (100%)     │
│ Company      │ Acme Inc             │ parsed (100%)     │
└──────────────┴──────────────────────┴───────────────────┘

Run without --dry-run to save this contact.

Parse Email Signatures from Clipboard

Copy an email signature to your clipboard, then:

jodie new --paste --dry-run

Jodie handles common signature formats:

  • Strips pronouns (he/him, she/her, they/them)
  • Splits on bullet separators (•, |, —)
  • Filters out reply headers and forwarded message noise
  • Infers company from email domain

Parse from Stdin

Pipe text directly:

echo "Jane Smith <jane@startup.io> | CEO | Startup Inc" | jodie new --stdin

Or use a heredoc:

jodie new --stdin << 'EOF'
Jane Smith
CEO, Startup Inc
jane@startup.io
415-555-1234
https://linkedin.com/in/janesmith
EOF

Explicit Flags

For full control, use explicit flags:

jodie new \
    --first "John" \
    --last "Doe" \
    --email "john@acme.com" \
    --phone "+1 555 555 5555" \
    --title "CEO" \
    --company "Acme Inc" \
    --linkedin "https://linkedin.com/in/johndoe" \
    --websites "https://acme.com,https://github.com/johndoe"

Strict Positional Mode

If you prefer explicit ordering (email first, then name, company, title):

jodie new --explicit john@acme.com "John Doe" "Acme Inc" "CEO"

Note: --explicit mode doesn't support --dry-run. Use smart parsing with --dry-run to preview first.

Flag Aliases

For convenience, these aliases are supported:

Primary Aliases
--first --first-name, --firstname
--last --last-name, --lastname
--full-name --name
--websites --website

Known Limitations

  • Notes field: Currently disabled due to macOS entitlement requirements. Will be re-enabled in a future update.

License

MIT

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

jodie-0.1.0.tar.gz (23.1 kB view details)

Uploaded Source

Built Distribution

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

jodie-0.1.0-py3-none-any.whl (25.1 kB view details)

Uploaded Python 3

File details

Details for the file jodie-0.1.0.tar.gz.

File metadata

  • Download URL: jodie-0.1.0.tar.gz
  • Upload date:
  • Size: 23.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for jodie-0.1.0.tar.gz
Algorithm Hash digest
SHA256 a90d975a00fe3fc85cc36d7689f5cfa9d6e1095b07f8cfe1adfff1429afbedc5
MD5 867455bf5dfe8c3fdc1edcc52207bf1d
BLAKE2b-256 a2b5f9e733f3d6d919725a771161cc7a1f5d4d75c35e0a4730aae68c8543b561

See more details on using hashes here.

File details

Details for the file jodie-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: jodie-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 25.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for jodie-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3423d45ee319a483cbc9e0741270e52c9fcdaab96ce522374f51e44501aeaeac
MD5 d8c15872e4948049d02e2c5fce81e598
BLAKE2b-256 412cf8aee3672841fbd0d744672b4709d1d451418e783923097d006333cd1a1b

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