Skip to main content

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

Metadata

Release files for jodie 0.1.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for jodie 0.1.3
File Size Uploaded
jodie-0.1.3.tar.gz 25.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for jodie 0.1.3
File Interpreter ABI Platform
jodie-0.1.3-py3-none-any.whl Python 3 none any Details

Total release size: 52.1 kB

Release files / jodie-0.1.3.tar.gz

Download URL jodie-0.1.3.tar.gz
Size 25.2 kB
Tags Source
SHA-256 checksum
How to use checksums
b800e9f28d2fd9adf9ab984a76dc30f422de5eb8cfa696b9a4ae11c92a935bb6
BLAKE2b-256 checksum
How to use checksums
7ef8518c79cee3687fe58ea2cf0403cc2b68b15c7135c21d5772026060d58b49
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.14

Release files / jodie-0.1.3-py3-none-any.whl

Download URL jodie-0.1.3-py3-none-any.whl
Size 26.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d96eb230bc6f72bc6d0eb50a463fa8889232a9be3e6a444d4b622cd49190500f
BLAKE2b-256 checksum
How to use checksums
9d5c0324fc8be0d1e48e642e348fcd57c407b9d61d4718a640d2c69de26c3183
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.14

Release history Release notifications | RSS feed

This release

0.1.3 This release

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page