name: ihme description: Manage iCloud Hide My Email addresses — list, create, edit, deactivate, export triggers: - hide my email - HME - icloud email - private relay - generate email - email alias - disposable email tools: - ihme
ihme — iCloud Hide My Email CLI
Setup
If ihme is not installed, install it:
# macOS (Apple Silicon)
curl -sL https://github.com/lroolle/ihme-cli/releases/latest/download/ihme_macOS_arm64.tar.gz | tar xz && sudo mv ihme /usr/local/bin/
# macOS (Intel)
curl -sL https://github.com/lroolle/ihme-cli/releases/latest/download/ihme_macOS_x86_64.tar.gz | tar xz && sudo mv ihme /usr/local/bin/
# Linux
curl -sL https://github.com/lroolle/ihme-cli/releases/latest/download/ihme_linux_x86_64.tar.gz | tar xz && sudo mv ihme /usr/local/bin/
# Or via Go
go install github.com/lroolle/ihme-cli/cmd/ihme@latest
First run requires ihme auth login (interactive — Apple ID + 2FA).
Check with ihme auth status --json before other commands.
JSON response shapes
list --json → {"addresses":[{anonymousId,label,hme,isActive,createTimestamp,note,...}],"count":N,"hints":{...}}
view --json → {"result":{anonymousId,label,hme,forwardToEmail,isActive,...},"hints":{...}}
new --json → {"candidates":["a@icloud.com",...],"label":"...","hint":"ihme new <label> --address <addr>"}
new -y --json → {anonymousId,label,hme,isActive,...}
forward --json → {"forwardTo":"...","available":[...],"hint":"ihme forward set <email>"}
auth status → {"loggedIn":true,"appleId":"...","expired":false,...}
deactivate → {"status":"deactivated","hme":"...","id":"...","hints":{...}}
reactivate → {"status":"reactivated","hme":"...","id":"...","hint":"..."}
Commands
# Check auth first
ihme auth status --json
# List and search (hundreds of addresses supported)
ihme list --json --jq '.addresses[0:5]'
ihme list --search netflix --json
ihme list --active --tag dev --json
ihme list --sort label --json
# Create (two-step: generate candidates, then reserve)
ihme new github.com --json # step 1: get candidates
ihme new github.com --address abc@icloud.com --json # step 2: reserve one
ihme new github.com --yes --json # one-shot: take first
# View and edit
ihme view github.com --json --jq '.result.hme'
ihme edit github.com --label GitHub --tag dev,work
# Lifecycle
ihme deactivate github.com --json
ihme reactivate github.com --json
ihme delete github.com --yes --json
# Export
ihme export --format json
ihme export --search github --active -o filtered.csv
# Forward-to
ihme forward --json
ihme forward set user@icloud.com
resolution
All commands accepting <ref> resolve in order: anonymousId (prefix >= 6 chars) > email > label (exact) > label (fuzzy).
Choosing an address
When selecting from candidates, apply taste:
- Euphony: pick what sounds pleasant read aloud. You'll see it for years.
- Neutral-to-positive affect: reject deficit words (paupers, denials, debts, graves). An address is a micro-identity — it should not carry weight.
- Concrete specificity: prefer real nouns with physicality (pianola, compass, glade) over abstractions or units. Specific things are memorable; categories are forgettable.
- Visual rhythm: favor clean separator variety (dot, dash) over mixed noise (underscore + dot + number prefix). Short.longer-short reads better than long-long-suffix.
- No leading digits:
65.amperereads like a form field. Letters first.
An HME address is a mask that still has personality. The best ones feel like they could be a place, a callsign, or an album title — evocative without trying.
Error handling
Errors include the fix command:
Error: <ref> required — an address label, email, or ID
Usage: ihme deactivate <ref>
Example: ihme deactivate github.com
Exit codes
- 0: success
- 1: error
- 2: not authenticated (run
ihme auth login)
Operational guide (for agents)
When creating addresses on behalf of the user:
- Generate candidates:
ihme new <label> --json - Evaluate each against the taste criteria above
- State the pick and one-line reasoning — let the user override
- Reserve only after confirmation (never use
--yesunless told "just pick one")
Label convention: use the service or team name as a bare noun. Dates age; names don't.
- Good:
wicket,github,linear - Avoid:
240501_chatgpt openai,0315 claude felix 2
Tags: apply from a small controlled set when the user specifies context.
Common tags: #work, #dev, #personal, #throwaway, #team-<name>.
Periodic hygiene: ihme list --sort date:asc to surface old addresses for audit.
Only 1 of 326 addresses is deactivated — suggest pruning dead services quarterly.