Amazon Package Status via alexacli
Get a full, structured rundown of your incoming packages — silently, from the
command line — by querying Alexa+ (Amazon's LLM assistant) through
alexacli. Alexa is tied to your Amazon
account, so it already knows every package on the way.
TL;DR
alexacli askplus -c "amzn1.conversation.$(uuidgen | tr 'A-Z' 'a-z')" \
"List every package arriving today and tomorrow with item count, delivery window, and carrier."
That single command returns a markdown breakdown like:
Today: 7 packages / 18 items — 12:45–3:00 PM (Amazon), by 10 PM (UPS) Tomorrow: 10 packages — by 10 PM (USPS, Amazon) Later: Tuesday, Thursday
No Echo speaks. No screen-scraping. No Amazon login flow.
The key technique: mint a conversation id
The non-obvious part is the conversation id. You do not need a pre-existing
one — generate a fresh UUID in Amazon's format and pass it with -c:
CONV="amzn1.conversation.$(uuidgen | tr 'A-Z' 'a-z')"
alexacli askplus -c "$CONV" "where are my packages?"
Amazon accepts a client-generated amzn1.conversation.<uuid> and starts a new
Alexa+ session on the spot (the CLI's InitConversation() does exactly this).
Reuse the same $CONV across calls to keep multi-turn context.
To reuse an existing conversation instead, list them:
alexacli conversations # shows id + device ("Alexa App" = the silent ones)
alexacli askplus -c <id> "..."
alexacli fragments <id> # dump a conversation's messages
Why askplus, not ask
ask |
askplus |
|
|---|---|---|
| Backend | legacy voice/TextCommand | Alexa+ LLM |
| Audio | speaks on the target Echo | silent (text-only API) |
| Detail | one canned sentence | full per-package tables, reasoning, formatting |
| Needs | a device -d |
a conversation id -c (mint one) |
alexacli ask "where are my packages" -d Kitchen works but makes the Kitchen
Echo talk out loud, and returns only a one-line summary. For silent, detailed,
scriptable results, use askplus with a minted conversation id.
Heads-up: pointing
askat the phone-app "virtual device" is not a reliable silent path — it uses the legacy backend, doesn't reach Alexa+, and its responses don't show up inalexacli history. Useaskplus.
Prerequisites
- Install alexacli
brew install buddyh/tap/alexacli # or: go install github.com/buddyh/alexa-cli/cmd/alexa@latest - Authenticate (obtains an Amazon refresh token; valid ~14 days)
alexacli auth - Alexa+ must be enabled on your Amazon account (the
askplusLLM path).
Useful queries
CONV="amzn1.conversation.$(uuidgen | tr 'A-Z' 'a-z')"
# Everything, grouped by day
alexacli askplus -c "$CONV" "List all packages arriving today, tomorrow, and later this week with windows and carriers."
# Just today, just the count
alexacli askplus -c "$CONV" "How many packages arrive today and in what time window?"
# A specific order / brand
alexacli askplus -c "$CONV" "Where is my Philips Hue order and when will it arrive?"
# Machine-readable (great for scripts): ask for JSON
alexacli askplus -c "$CONV" --json \
'Return ONLY a JSON array of packages arriving today/tomorrow. Each: {"day","window","carrier","items"}.'
Add -t 30 to raise the response timeout for big answers.
Defeating "privacy protected" titles (no settings change)
A bulk "list my packages" returns 1 item (privacy protected) — Alexa won't
volunteer product names. But if you name the item, it confirms full status
for it. So supply the names (e.g. from your order/shipment emails) and Alexa fills
in the tracking. Batch many in one call:
alexacli askplus -c "$CONV" \
"One-line status (date + window + carrier) for each: FLEXISPOT desk, BenQ ScreenBar, Echo Show 21, APC Back-UPS."
→ each line comes back with its window/carrier/date. This is the cheap way to join "what" (names from email) with "when" (windows from Alexa+) without toggling the Alexa app privacy setting.
Live "stops away" when out for delivery
Alexa+ reports real-time driver proximity for active deliveries:
alexacli askplus -c "$CONV" "Are any packages out for delivery? How many stops away is the driver?"
# → "6 packages out for delivery, 9+ stops away…" (caps at 9+, then exact: "3 stops away")
Great for a live "out for delivery · N stops away" badge.
Gotchas
- Privacy-protected item titles. Alexa+ often returns "1 item (privacy protected)" instead of the product name. Reveal them in the Alexa app → Settings → Notifications → Amazon Shopping. Or cross-reference your email (Amazon "Shipped:" / "Ordered:" subjects contain the real titles).
- Conversation ids persist. Minted ones keep working for a long time; you can reuse one across runs for continuity, or mint fresh each run for a clean slate.
askis audible;askplusis silent. Don't putaskin a background job.- Other merchants too. Alexa only knows Amazon-shipped/Amazon-visible
packages. For non-Amazon merchants (Home Depot, B&H, etc.), combine this with
email parsing (order-confirmation / shipment / delivery notifications) for full
coverage. See
examples/package-digestfor a hybrid email + Alexa+ digest.
Building an automation
For a hands-off tracker, Alexa+ supplies the live ETAs (windows + carriers) and email supplies the item names + non-Amazon merchants. A daily run:
# 1) live windows from Alexa+ (silent)
alexacli askplus -c "amzn1.conversation.$(uuidgen|tr A-Z a-z)" --json \
'JSON array of packages arriving today/tomorrow: {"day","window","carrier","items"}'
# 2) merge with shipment/delivery emails parsed from your inbox
# 3) print/notify a combined digest
This is silent end-to-end and needs no browser or Amazon login.