alliances
Airline alliance membership (Star Alliance, oneworld, SkyTeam) and cross-alliance booking relationships. Maps which loyalty…
Search Chase UR travel portal via Patchright for cash prices, points pricing, Points Boost offers, and Chase Edit hotel benefits. Use for pay-with-points portal comparison on Sapphire Reserve/Preferred.
$ npx -y skills add borski/travel-hacking-toolkit --skill chase-travel --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/chase-travelContext preview
The summary Claude sees to decide when to auto-load this skill.
Search Chase UR travel portal via Patchright for cash prices, points pricing, Points Boost offers, and Chase Edit hotel benefits. Use for pay-with-points portal comparison on Sapphire Reserve/Preferred.
name: chase-travel description: Search Chase UR travel portal via Patchright for cash prices, points pricing, Points Boost offers, and Chase Edit hotel benefits. Use for pay-with-points portal comparison on Sapphire Reserve/Preferred. category: portals summary: Chase UR portal for flights, hotels, Points Boost, Edit benefits. Requires Sapphire. api_key: None (requires Patchright) docker_image: ghcr.io/borski/chase-travel
Search the Chase Ultimate Rewards travel portal for flights and hotels via Patchright. Returns cash prices, UR points pricing, Points Boost offers, and Chase Edit hotel benefits.
**Requires Patchright** (undetected Playwright fork). Chase blocks standard Playwright and agent-browser.
**Must run headed (headless=False).** Chase 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/chase-travel:latest # or build locally: docker build -t chase-travel skills/chase-travel/
The script automatically selects the **Sapphire Reserve** card from the account selector (dynamic Points Boost pricing on travel; ~1.5-2.0 cpp typical on CSR but not a guaranteed floor; Edit hotels). Falls back to **Sapphire Preferred** if no Reserve found. Only these cards show Edit hotel benefits and travel portal pricing.
# 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 ~/.chase-travel-profiles:/profiles \
-v /tmp:/tmp/host \
-e CHASE_USERNAME -e CHASE_PASSWORD \
ghcr.io/borski/chase-travel script /scripts/search_flights.py \
--origin SFO --dest CDG --depart 2026-08-11 --cabin business --json# Local
python3 scripts/search_flights.py --hotel --dest "Paris" --checkin 2026-08-11 --checkout 2026-08-15
# Docker
docker run --rm \
-v ~/.chase-travel-profiles:/profiles \
-v /tmp:/tmp/host \
-e CHASE_USERNAME -e CHASE_PASSWORD \
ghcr.io/borski/chase-travel script /scripts/search_flights.py \
--hotel --dest "Oslo" --checkin 2026-08-13 --checkout 2026-08-15 --jsonCapture network traffic during a manual search. Useful for debugging or discovering new API endpoints.
# Local only (needs interactive browser) python3 scripts/record_search.py
Chase uses SMS **or** mobile-app push for 2FA (some accounts offer only push). On first login, you must complete 2FA manually. After that, device trust persists (2FA skipped on subsequent runs from the same profile). The script auto-detects which method the account offers and takes the matching path.
**How it works:** When 2FA is triggered, the script prints one of two sentinels to stdout, then polls for up to 3 minutes:
**For agents (SMS):** When you see `2FA_CODE_NEEDED`, **ask the user** for the SMS code Chase just sent to their phone. Once they provide it, write it to the code file:
echo "12345678" > /tmp/chase-2fa-code.txt
The script picks up the file automatically and continues login.
**For agents (mobile push):** When you see `MOBILE_APP_APPROVAL_NEEDED`, **tell the user to approve the sign-in in their Chase mobile app** — there is no code to enter. The script polls for up to 3 minutes for the approval to land, then continues.
**Command hook (optional, for full automation):** Set `CHASE_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. (Applies to the SMS path only.)
**Docker:** Use `-v /tmp:/tmp/host` to share the temp directory. The script checks both `/tmp/host/chase-2fa-code.txt` and `/tmp/chase-2fa-code.txt`.
After first successful login with device trust, 2FA is skipped on repeat runs.
`CHASE_USERNAME`/`CHASE_PASSWORD` must contain the **actual** username and password when they reach this script. If you keep secrets in a secret manager, resolve the references into the environment before launching (most managers ship an exec/run wrapper for exactly this).
An unresolved reference (a literal `scheme://vault/item` placeholder) gets typed into the login form, and Chase answers "We can't find that username and password. Try again." — which is easy to misread as bot detection. (It isn't: fresh automated logins from Docker work fine with real credentials, verified live July 2026, including when saved cookies have expired.)
The script fails fast on both forms of this mistake: it prints **`CHASE_BAD_CREDENTIALS`** to stdout (and writes `BAD_CREDENTIALS` to the 2FA status file) when a credential still looks like a secret reference, or when Chase reports the username/password as not found. **For agents:** don't retry on this sentinel — fix how credentials are injected, then re
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 Amex travel portal for cash prices, MR points pricing, IAP discounts, and FHR/THC hotel benefits via Patchright. Use when…
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…