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

pip install jodie

Or install from source:

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] [options]

Arguments:
    TEXT                                Contact text to parse automatically.
    EMAIL                               Email address for explicit positional mode.
    NAME                                Full name for explicit positional mode.
    COMPANY                             Company name for explicit positional mode.
    TITLE                               Job title for explicit positional mode.

Input Modes:
    --paste                             Read contact text from clipboard.
    --stdin                             Read contact text from stdin.
    --explicit                          Use positional fields: EMAIL NAME [COMPANY] [TITLE].
    -A --auto                           Force automatic parsing. Default for TEXT input.

Contact Fields:
    -E EMAIL --email=EMAIL              Email address.
    -F FIRST --first=FIRST              First name.
    --first-name=FIRST                  First name (alias for --first).
    --firstname=FIRST                   First name (alias for --first).
    -L LAST --last=LAST                 Last name.
    --last-name=LAST                    Last name (alias for --last).
    --lastname=LAST                     Last name (alias for --last).
    -U NAME --full-name=NAME            Full name.
    --name=NAME                         Full name (alias for --full-name).
    -P PHONE --phone=PHONE              Phone number.
    -T TITLE --title=TITLE              Job title.
    -C COMPANY --company=COMPANY        Company name.
    -W WEBSITES --websites=WEBSITES     Comma-separated list of websites/URLs.
    --website=WEBSITES                  Website URLs (alias for --websites).
    --linkedin=URL                      LinkedIn profile URL (auto-labeled as LinkedIn).

Output:
    -D --dry-run                        Preview parsed fields without saving.

General:
    -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"

Use --dry-run with explicit mode to preview before saving.

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.2.tar.gz (24.4 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.2-py3-none-any.whl (26.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: jodie-0.1.2.tar.gz
  • Upload date:
  • Size: 24.4 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.2.tar.gz
Algorithm Hash digest
SHA256 6bb2678739f3441650b32277890b29d8302f106be5699feac08583d2b0c3d701
MD5 eb1fc47644b9df5d03af1ac0145d3582
BLAKE2b-256 b8fdb599ffad7454a2100d3e8875e058da2b258f28f15a6086e08814876099fd

See more details on using hashes here.

File details

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

File metadata

  • Download URL: jodie-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 26.3 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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 1558feb14fe3da4308d1958253decdd66ddb5ad470bde87bb36a0e171ff94490
MD5 3fd61b7a67ff5e349a23227c496e82ee
BLAKE2b-256 5ba9587586b670162fd8e293d412b8cd93763f860f82b694a4ca6dab1c57afbd

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