alliances
Airline alliance membership (Star Alliance, oneworld, SkyTeam) and cross-alliance booking relationships. Maps which loyalty…
Search Southwest Airlines fares and points pricing via Patchright browser automation. SW is not in any GDS or API. Covers all fare classes, Companion Pass value, and fare drop monitoring.
$ npx -y skills add borski/travel-hacking-toolkit --skill southwest --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/southwestContext preview
The summary Claude sees to decide when to auto-load this skill.
Search Southwest Airlines fares and points pricing via Patchright browser automation. SW is not in any GDS or API. Covers all fare classes, Companion Pass value, and fare drop monitoring.
name: southwest description: Search Southwest Airlines fares and points pricing via Patchright browser automation. SW is not in any GDS or API. Covers all fare classes, Companion Pass value, and fare drop monitoring. category: flights summary: SW fare classes, points pricing, Companion Pass. Change flight price drop monitor. api_key: None (requires Patchright) docker_image: ghcr.io/borski/sw-fares allowed-tools: Bash(python3 *), Bash(docker *)
Search southwest.com via Patchright (undetected Playwright fork). Southwest is the only major US airline not in any GDS, API, or flight search tool. This skill is the only way to get SW-specific data: fare classes, points pricing, and Companion Pass qualification.
**Requires Patchright** (undetected Playwright fork). Standard Playwright and agent-browser are detected and blocked by SW. Patchright patches the browser fingerprint to bypass detection.
**Must run headed (headless=False).** SW detects headless browsers even with Patchright. On macOS, a Chrome window briefly appears and closes. For background operation with no popup, use Docker:
# Search new flights (default, no login needed) docker run --rm ghcr.io/borski/sw-fares --origin SJC --dest DEN --depart 2026-05-15 docker run --rm ghcr.io/borski/sw-fares --origin SJC --dest DEN --depart 2026-05-15 --return 2026-05-18 --points --json # Check existing reservation for price drops (requires SW login) docker run --rm -e SW_USERNAME -e SW_PASSWORD \ ghcr.io/borski/sw-fares change --conf ABC123 --first Jane --last Doe --json # List all upcoming trips docker run --rm -e SW_USERNAME -e SW_PASSWORD \ ghcr.io/borski/sw-fares change --list --json # Build locally docker build -t sw-fares skills/southwest/
The Docker image uses xvfb to create a virtual display inside the container. Patchright runs "headed" against xvfb, bypassing SW's headless detection without opening any windows on your machine.
# Install pip install patchright && patchright install chromium # Search cash fares python3 scripts/search_fares.py --origin SJC --dest DEN --depart 2026-05-15 # Search cash + points python3 scripts/search_fares.py --origin SJC --dest DEN --depart 2026-05-15 --return 2026-05-18 --points # JSON output python3 scripts/search_fares.py --origin SJC --dest DEN --depart 2026-05-15 --points --json
**Key implementation details learned the hard way:**
pip install patchright && patchright install chromium
Or use Docker (no local install needed):
# Pre-built image (fastest) docker pull ghcr.io/borski/sw-fares:latest # Or build locally docker build -t sw-fares skills/southwest/
| Fare | Points | Cash | Companion Pass | Change/Cancel | Bags | |------|--------|------|----------------|---------------|------| | Basic (Wanna Get Away) | Lowest | Lowest | **NO** | Credit only | 2 free | | Choice (Wanna Get Away Plus) | Low | Low | **YES** | Transferable credit | 2 free | | Choice Preferred (Anytime) | High | High | **YES** | Refundable | 2 free | | Choice Extra (Business Select) | Highest | Highest | **YES** | Refundable + priority | 2 free |
**Critical for Companion Pass:** Only Choice and above qualify. Basic does NOT. This changes the CPP math significantly.
When CP is in play, one ticket buys travel for two:
Total cash value = qualifying_fare_cash x 2 passengers CPP = total_cash_value / total_points x 100
Always frame as "points bought $X of travel for 2 people."
**Do NOT try to automate the SW booking form manually.** It's fragile and the form's React state doesn't cooperate with browser automation. Use the script instead, which navigates directly to the results URL.
# Local (opens a Chrome window briefly) python3 skills/southwest/scripts/search_fares.py --origin SJC --dest DEN --depart 2026-05-15 # With return date and points python3 skills/southwest/scripts/search_fares.py --origin SJC --dest DEN --depart 2026-05-15 --return 2026-05-18 --points # JSON output for programmatic use python3 skills/southwest/scripts/search_fares.py --origin SJC --dest DEN --depart 2026-05-15 --points --json # Docker (no Chrome window, no display needed) docker run --rm ghcr.io/borski/sw-fares --origin SJC --dest DEN --depart 2026-05-15 --return 2026-05-18 --points
The script handles everything: homepage warmup, cookie dismissal, result extraction, points toggle.
1. Launches Patchright (undetected Playwright) in headed mode with a fresh browser profile 2. Visits southwest.com homepage first to establish a normal browsing session 3. Navigates to the results URL with `fareType=USD` for cash or `fareType=POINTS` for points 4. Waits 15 seconds for SW's React app to render flight data
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…