alliances
Airline alliance membership (Star Alliance, oneworld, SkyTeam) and cross-alliance booking relationships. Maps which loyalty…
Search Amex travel portal for cash prices, MR points pricing, IAP discounts, and FHR/THC hotel benefits via Patchright. Use when comparing pay-with-points portal pricing to award alternatives.
$ npx -y skills add borski/travel-hacking-toolkit --skill amex-travel --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/amex-travelContext preview
The summary Claude sees to decide when to auto-load this skill.
Search Amex travel portal for cash prices, MR points pricing, IAP discounts, and FHR/THC hotel benefits via Patchright. Use when comparing pay-with-points portal pricing to award alternatives.
name: amex-travel description: Search Amex travel portal for cash prices, MR points pricing, IAP discounts, and FHR/THC hotel benefits via Patchright. Use when comparing pay-with-points portal pricing to award alternatives. category: portals summary: Amex MR portal for flights, hotels, IAP discounts, FHR/THC benefits. Requires Platinum. api_key: None (requires Patchright) docker_image: ghcr.io/borski/amex-travel
Search the American Express travel portal for flights and hotels via Patchright. Returns cash prices, MR points pricing, International Airline Program (IAP) discounts, and Fine Hotels & Resorts / The Hotel Collection benefits.
**Requires Patchright** (undetected Playwright fork). Amex blocks standard Playwright and agent-browser.
**Must run headed (headless=False).** Amex detects headless browsers. On macOS, a Chrome window briefly appears. For background operation, use Docker.
pip install patchright && patchright install chromium
Or use Docker (no local install needed):
docker pull ghcr.io/borski/amex-travel:latest # or build locally: docker build -t amex-travel skills/amex-travel/
# Local (opens a Chrome window briefly)
python3 scripts/search_flights.py --origin SFO --dest CDG --depart 2026-08-11
# Round-trip business
python3 scripts/search_flights.py --origin SFO --dest CDG --depart 2026-08-11 --return 2026-09-02 --cabin business
# JSON output
python3 scripts/search_flights.py --origin SFO --dest CDG --depart 2026-08-11 --json
# Docker
docker run --rm \
-v ~/.amex-travel-profiles:/profiles \
-e AMEX_USERNAME -e AMEX_PASSWORD \
amex-travel script /app/search_flights.py \
--origin SFO --dest CDG --depart 2026-08-11 --cabin business --json# Local
python3 scripts/search_flights.py --hotel --dest "Oslo" --checkin 2026-08-13 --checkout 2026-08-15
# Docker
docker run --rm \
-v ~/.amex-travel-profiles:/profiles \
-e AMEX_USERNAME -e AMEX_PASSWORD \
amex-travel script /app/search_flights.py \
--hotel --dest "Oslo" --checkin 2026-08-13 --checkout 2026-08-15 --jsonCapture network traffic during a manual search:
python3 scripts/search_flights.py --record
Save and re-parse hotel results without re-running the browser:
# Save page HTML after hotel search python3 scripts/search_flights.py --hotel --dest "Paris" --checkin 2026-08-11 --checkout 2026-08-15 --save-html /tmp/amex-hotels.json # Re-parse locally (instant, no browser) python3 scripts/search_flights.py --parse-html /tmp/amex-hotels.json
Amex uses email OTP for 2FA. After first login with "Add This Device", subsequent runs skip 2FA from the same profile.
**How it works:** When 2FA is triggered, the script prints `2FA_CODE_NEEDED` to stdout and `2FA REQUIRED` to stderr, then polls for the code. It will wait up to 2 minutes.
**For agents:** When you see `2FA_CODE_NEEDED` in the script output, **ask the user** for the verification code Amex just emailed them. Once they provide it, write it to the code file:
echo "123456" > /tmp/amex-2fa-code.txt
The script picks up the file automatically and continues login.
**Command hook (optional, for full automation):** Set `AMEX_2FA_COMMAND` to a command that blocks until it has the code, then prints it to stdout. The script runs this instead of polling the file.
After first login with "Add This Device", 2FA is skipped on repeat runs from the same profile.
As of Amex's May 2026 overhaul, submitting a flight search redirects through a **separate travel-portal login gate** (`/account/travel/login`) — even when already signed in to americanexpress.com — protected by a **risk-based captcha layer**. The script fills and submits the gate automatically, and the outcome depends on how Amex scores the session that run:
The travel session is also short-lived (next-auth token, ~1 hour), so warm sessions expire quickly and the gate re-appears often. On gate failure the script prints a `Gate diag:` line (field/button/alert state) so breakage is diagnosable from logs, then exits promptly instead of waiting out the results timeout. Hotel search may be affected similarly.
**The wall only exists on fresh logins.** With a warm saved session (valid cookies + trusted device), the gate passes automatically and searches work end to end. So the recovery is a one-time human step, not a dead end:
1. When the gate rejects the automated login (captcha or otherwise), the script prints **`AMEX_HUMAN_LOGIN_NEEDED`** to stdout (and writes `HUMAN_LOGIN_NEEDED` to `/tmp/amex-2fa-status.txt`). **For agents:** stop retrying and tell the user to run the refresh script. (A separate sentinel, **`AMEX_BAD_CREDENTIALS`**, means the credential env vars contained an unresolved secret-manager reference instead of real values — fix the credential injection, not the login.) 2. The user
AI-powered travel hacking with points, miles, and award flights. Drop-in skills and MCP servers for OpenCode, Claude Code, and Codex. Ask your AI to find you a 60,000-mile business class flight to Tokyo.
Airline alliance membership (Star Alliance, oneworld, SkyTeam) and cross-alliance booking relationships. Maps which loyalty…
Check American Airlines AAdvantage balance, elite status, and loyalty points via Patchright. Handles email 2FA with 6-box code…
Search Atlas Obscura for weird, wonderful, and hidden gem places near any destination. Find the interesting stuff, not boring…
Find the cheapest award dates for a route over a date range. Searches seats.aero across all programs, groups by date, and shows a…
Per-program rules for placing award flights on hold before transferring points. Covers programs with holds (AA, Lufthansa, Flying…
Catalog of high-value award redemptions where points dramatically outvalue cash. Tiered by legendary/excellent/good with current…