Skip to main content

☁️ icloud-cli-tools

Access your iCloud Calendar, Reminders, Notes, and Find My devices from the Linux terminal.

CI PyPI License: MIT Python 3.9+

Features

  • 📅 Calendar — List, create, and delete events with natural date parsing
  • ✅ Reminders — Manage reminders across lists, mark complete, set priorities
  • 📝 Notes — Read, create, and search your iCloud Notes
  • 📍 Find My — Locate devices, play sounds, activate Lost Mode
  • 🔄 Background Sync — Daemon with systemd integration for periodic caching
  • 🔐 Secure Auth — 2FA support, OS keyring for credentials, session caching
  • 🎨 Beautiful Output — Rich tables, JSON, and plain text formats

Installation

# From PyPI (recommended)
pip install icloud-cli-tools

Or install from source:

# Clone the repo
git clone https://github.com/alan13367/icloud-cli-tools.git
cd icloud-cli-tools

# Set up a virtual environment (recommended, required on modern Debian/Ubuntu)
python3 -m venv .venv
source .venv/bin/activate
pip install -e .

Tip: To use icloud-cli without activating the venv every time, add an alias:

echo 'alias icloud-cli="~/icloud-cli-tools/.venv/bin/icloud-cli"' >> ~/.bashrc
source ~/.bashrc

Quick Start

# 1. Login to your iCloud account
icloud-cli login

# 2. Set up Notes access (requires app-specific password)
icloud-cli notes setup-imap

# 3. Start using it!
icloud-cli calendar list
icloud-cli reminders list
icloud-cli notes list
icloud-cli findmy list

Usage

Authentication

icloud-cli login          # Interactive login with 2FA
icloud-cli logout         # Clear all stored credentials
icloud-cli status         # Check auth status

Calendar

icloud-cli calendar list                    # Events for next 7 days
icloud-cli calendar list --from today --to tomorrow
icloud-cli calendar show <event-id>
icloud-cli calendar add -t "Meeting" -s "2025-06-15 10:00" -e "2025-06-15 11:00"
icloud-cli calendar delete <event-id>

Reminders

icloud-cli reminders list                   # All active reminders
icloud-cli reminders list --list "Shopping" --completed
icloud-cli reminders add -t "Buy milk" -d "2025-06-15" -l "Shopping"   # bare date -> all-day reminder
icloud-cli reminders add -t "Standup" -d "2025-06-15 09:30"            # date + time -> timed reminder
icloud-cli reminders complete <reminder-id>
icloud-cli reminders delete <reminder-id>

Notes

icloud-cli notes list
icloud-cli notes show <note-id>
icloud-cli notes add -t "My Note" -b "Note content here"
icloud-cli notes search "keyword"

Note: Notes access requires an app-specific password. Generate one at appleid.apple.com → Sign In & Security → App-Specific Passwords.

Find My

icloud-cli findmy list                      # All devices with status
icloud-cli findmy locate "iPhone"           # GPS coordinates + Maps link
icloud-cli findmy play-sound "iPhone"       # Ring your device
icloud-cli findmy lost-mode "iPhone" -p "+1234567890" -m "Please return"

Sync & Daemon

icloud-cli sync                # One-shot sync to local cache
icloud-cli daemon start        # Start background sync (every 15 min)
icloud-cli daemon stop         # Stop daemon
icloud-cli daemon status       # Check daemon status

Systemd Integration (Linux)

# Install the service
cp systemd/icloud-cli-sync.service ~/.config/systemd/user/
systemctl --user enable icloud-cli-sync
systemctl --user start icloud-cli-sync

Output Formats

icloud-cli calendar list -f table   # Rich formatted table (default)
icloud-cli calendar list -f json    # Machine-readable JSON
icloud-cli calendar list -f plain   # Tab-separated for scripting

Configuration

Config file: ~/.config/icloud-cli/config.toml

[general]
default_format = "table"
verbose = false

[auth]
apple_id = "your@icloud.com"

[sync]
sync_interval_minutes = 15

[calendar]
default_calendar = "Personal"

[reminders]
default_reminder_list = "Reminders"

Development

# Install with dev dependencies
pip install -e ".[dev]"

# Run tests
pytest tests/ -v

# Lint
ruff check src/ tests/

⚠️ Disclaimer

This project uses unofficial/private iCloud web APIs via the pyicloud library. Apple may change these APIs at any time without notice, which could break functionality. This tool is not affiliated with or endorsed by Apple Inc.

License

MIT

Metadata

Release files for icloud-cli-tools 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 icloud-cli-tools 0.1.3
File Size Uploaded Provenance Actions
icloud_cli_tools-0.1.3.tar.gz 35.1 kB Without provenance Details for icloud_cli_tools-0.1.3.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for icloud-cli-tools 0.1.3
File Interpreter ABI Platform Actions
icloud_cli_tools-0.1.3-py3-none-any.whl Python 3 none any Details for icloud_cli_tools-0.1.3-py3-none-any.whl

Total release size: 64.2 kB

Release files / icloud_cli_tools-0.1.3.tar.gz

Download URL icloud_cli_tools-0.1.3.tar.gz
Size 35.1 kB
Tags Source
SHA-256 checksum
How to use checksums
91d63b2d78c7062ba130a3e7b561cbff0912bc6687530c10786281853b38f4a7
BLAKE2b-256 checksum
How to use checksums
d143c18d36ed430d1029285582deab2a557d3f45d1d503bbcb6acf915dac57e0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.6

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

Download URL icloud_cli_tools-0.1.3-py3-none-any.whl
Size 29.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
204b3a602117aba7663cb820e53e05f1fc4fa7e30757800fa5f43b8386598181
BLAKE2b-256 checksum
How to use checksums
060125326ddd98bdba26bfd1e0eac8989941f8b946272e8357a1f0269b8ff183
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.6

Security for icloud-cli-tools 0.1.3

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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