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.
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a90d975a00fe3fc85cc36d7689f5cfa9d6e1095b07f8cfe1adfff1429afbedc5
|
|
| MD5 |
867455bf5dfe8c3fdc1edcc52207bf1d
|
|
| BLAKE2b-256 |
a2b5f9e733f3d6d919725a771161cc7a1f5d4d75c35e0a4730aae68c8543b561
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3423d45ee319a483cbc9e0741270e52c9fcdaab96ce522374f51e44501aeaeac
|
|
| MD5 |
d8c15872e4948049d02e2c5fce81e598
|
|
| BLAKE2b-256 |
412cf8aee3672841fbd0d744672b4709d1d451418e783923097d006333cd1a1b
|