parcelcli

Track parcels locally with parcelcli for Evri, Royal Mail, UPS, FedEx, and DHL. Use when the user asks to track a package, detect a carrier, check delivery status, watch a parcel, or summarize courier tracking without sending tracking data to third-party aggregators.

Audits

Pass

Install

openclaw skills install parcelcli

parcelcli

Use parcelcli for local parcel tracking. It drives public carrier tracking pages and returns a normalized JSON shape.

Golden Path

Always use --json when calling parcelcli.

parcelcli track <tracking-number> --carrier evri --postcode <postcode> --json
parcelcli track <tracking-number> --carrier evri --json
parcelcli track <tracking-number> --carrier royalmail --json
parcelcli track <tracking-number> --carrier ups --json
parcelcli track <tracking-number> --carrier fedex --json
parcelcli track <tracking-number> --carrier dhl --json

If the carrier is unknown, run:

parcelcli detect <tracking-number> --json

If detection is ambiguous, ask the user to choose a carrier.

Required Inputs

  • Evri can run rough public tracking without --postcode; use --postcode only when the user wants fuller address-specific detail or provides it.
  • Royal Mail, UPS, FedEx, and DHL do not require postcode by default.
  • Do not infer a postcode from memory unless the user clearly asks you to use their usual address.

Output Handling

Summarize only the normalized JSON fields. Prefer:

  • status
  • status_text
  • last_event
  • ETA or delivery fields when present
  • blocker/error state when present

Do not paste raw carrier page text or browser dumps into chat.

Watches

Use local watch state when the user asks to monitor a parcel:

parcelcli watch add <tracking-number> --carrier evri --postcode <postcode> --label "<label>"
parcelcli watch add <tracking-number> --carrier evri --label "<label>"
parcelcli watch add <tracking-number> --carrier royalmail --label "<label>"
parcelcli watch add <tracking-number> --carrier ups --label "<label>"
parcelcli watch add <tracking-number> --carrier fedex --label "<label>"
parcelcli watch add <tracking-number> --carrier dhl --label "<label>"
parcelcli watch run --json

Do not poll fast. Use 15-30 minute intervals for active delivery watches and longer intervals for non-active parcels.

Notify only on material changes: status enum, latest event, ETA, courier or handover code, delivery, exception, or blocker.

When monitoring is no longer needed, list and remove old watches with parcelcli watch list --json and parcelcli watch remove <id> --json.

Privacy And Errors

Keep tracking numbers, postcodes, and watch state local. Do not use third-party aggregators unless the user explicitly approves that.

If Chrome is missing, say Chrome is required or use the CLI's --chrome flag if the user provides a path.

If a carrier returns unsupported or credentials_required, say that plainly and stop. For timeout or WAF failures, retry once later rather than looping.