iCloud+ is storage that Apple's own software uses: device backups, iCloud Photos, Messages, Notes and Keychain all write to it through hooks no third-party code can take over on an iPhone. The extras are separate services, and the ones that matter are rentable or self-hostable elsewhere (email aliases, a private tunnel); HomeKit Secure Video is not. What an agent can build is the way out: a nightly mirror of your iCloud Photos originals to your own disk and an encrypted backup of it, so a full iCloud stops being an emergency.
Before you buildApple gives 5 GB free. Look at what is using your space in iCloud settings before paying; Photos and device backups both count.
Build me a nightly iCloud Photos mirror to replace the storage part of iCloud+. Requirements: - Python 3.12 managed with uv: a CLI named `mirror` with the commands login, sync, verify and report. Run `icloudpd` (icloud-photos-downloader) as a subprocess; do not reimplement Apple's protocol. - `mirror login` starts the session once: APPLE_ID in .env, the password typed at the prompt and never stored, the 2FA code entered in the terminal, cookies kept in ./data/cookies with file mode 600. - `mirror sync` downloads new originals into ./photos/YYYY/MM/ with EXIF dates set, keeps Live Photo videos and never deletes a local file when something disappears from iCloud. Every file is logged in SQLite at ./data/mirror.db (path, size, SHA-256, first seen). - `mirror backup` runs `restic backup ./photos` to RESTIC_REPOSITORY (a bucket or an external disk) with RESTIC_PASSWORD in .env; `mirror verify` runs `restic check --read-data-subset=2%` and re-hashes 20 random files against the log. - `mirror report` prints counts and sizes per year, what is new since the last run and any failed downloads, in plain text. - Scheduling: a launchd plist for macOS and a systemd timer for Linux that run sync and backup at 03:00, and a notification (macOS or an ntfy topic) when the session has expired. - No telemetry, local-first: the only outbound calls go to iCloud and the restic repository. - Out of scope: uploading to iCloud, device backups, Messages, Keychain, iCloud Drive, shared albums, a web interface. - README: icloudpd needs Advanced Data Protection turned off, the session expires now and then so expect to run `mirror login` again, and how to restore one photo from restic.
Opens your agent with the prompt filled in, you press enter. Or copy it and paste it into an empty folder.
The first prompt builds the core. Run these one at a time in the same folder to grow it into your own iCloud+.
Add health alerts to the iCloud mirror in this folder. Requirements: - After every scheduled run, write a status line to ./data/status.json: time, new files, failed files and whether the session was valid. - If no sync succeeded for 3 days, or the session expired, send one ntfy message to NTFY_TOPIC in .env, then stay quiet until it recovers; send a recovery message when it does. - A command `mirror status` that prints the same facts. - Update the README.
Add a local gallery to the iCloud mirror in this folder. Requirements: - A Fastify page on http://127.0.0.1:4965 listing ./photos by year and month with 400 px thumbnails made by `sharp` and cached in ./data/thumbs. - Click a thumbnail for the original; videos play in the browser; a date-range filter. - Read-only: the page must never write inside ./photos. Bind to 127.0.0.1 only. - Update the README.
Add contacts and calendar export to the iCloud mirror in this folder. Requirements: - A command `mirror dav` that reads CardDAV and CalDAV from iCloud with an app-specific password (APPLE_APP_PASSWORD in .env) using `vdirsyncer` or `tsdav`. - Save .vcf files per contact and .ics files per calendar under ./dav/, with a dated snapshot kept for 30 days. - Include ./dav in the restic backup; report counts in `mirror report`. - Update the README with how to create the app-specific password.
The phone asks the moment the free 5 GB runs out: backups and Photos stop, and a dollar or three a month makes the warning go away. Moving instead means shifting every photo and habit off the one service Apple's own apps assume.
Estimate · A disk you own costs nothing to run; a bucket holding a few hundred GB costs a few dollars a month. The build is token usage on your agent plan.
| Plan | Monthly | Annual, per month | What you get |
|---|---|---|---|
| Free | $0 | $0 | 5 GB of iCloud storage; no iCloud+ features. |
| 50 GB | $0.99 | — | Private Relay, Hide My Email, custom email domain, Apple Invites, family sharing with up to 5 others, HomeKit Secure Video for 1 camera. |
| 200 GB | $2.99 | — | Private Relay, Hide My Email, custom email domain, Apple Invites, family sharing with up to 5 others, HomeKit Secure Video for up to 5 cameras. |
| 2 TB | $9.99 | — | Private Relay, Hide My Email, custom email domain, Apple Invites, family sharing with up to 5 others, HomeKit Secure Video for unlimited cameras. |
| 6 TB | $29.99 | — | Same iCloud+ features as 2 TB. |
| 12 TB | $59.99 | — | Same iCloud+ features as 2 TB. |
Every Apple Account includes 5 GB of free iCloud storage.
Not really. The phone asks the moment the free 5 GB runs out: backups and Photos stop, and a dollar or three a month makes the warning go away. Moving instead means shifting every photo and habit off the one service Apple's own apps assume. The prompt on this page builds the closest honest substitute.
About $0.99 a month on the iCloud+ 50 GB plan, $11.88 a year (checked 2026-10-19).
iPhone and iPad backups, and Photos, Messages, Notes and Keychain syncing through iCloud itself; Private Relay, which hides your IP address and browsing location in Safari; Hide My Email aliases built into Safari and Sign in with Apple, and a custom email domain with iCloud Mail; HomeKit Secure Video recording for your cameras; Sharing the storage with up to five family members. If any of those matter to you, keep paying.
Yes: Immich (open source), Ente (self-hosted) (open source), Nextcloud (open source).