[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M74YN7VP233AYWY3QYKDH58C":3,"skill-same:01M74YN7VP233AYWY3QYKDH58C":49},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":27,"commitSha":28,"skillDirectory":29,"forksCount":30,"repositoryHtmlUrl":31,"repositoryHomepageUrl":6,"ownerHtmlUrl":32,"ownerBlogUrl":6,"ownerDescription":33,"updatedAt":34,"install":35,"resources":48},"01M74YN7VP233AYWY3QYKDH58C","compare-flights",null,"Unified flight comparison across cash (Duffel, Ignav), award (seats.aero), and portal (Chase, Amex) sources in parallel. Outputs one table with transfer partner optimization and recommendations.","borski\u002Ftravel-hacking-toolkit","borski","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F207674?v=4","01M74YKQ7FZM71RB1ET5KSXBZT","Michael Borohovski","01M74YKQ85N97DKHKHJCDECJT5",955,"MIT","https:\u002F\u002Fgithub.com\u002Fborski\u002Ftravel-hacking-toolkit\u002Fblob\u002Fmain\u002Fplugins\u002Ftravel-hacking-toolkit\u002Fskills\u002Fcompare-flights\u002FSKILL.md",[],[],"2026-11-11 17:32:24",false,"---\nname: compare-flights\ndescription: Unified flight comparison across cash (Duffel, Ignav), award (seats.aero), and portal (Chase, Amex) sources in parallel. Outputs one table with transfer partner optimization and recommendations.\ncategory: orchestration\nsummary: Unified flight comparison across ALL sources in parallel. Auto-applies transfer optimization.\napi_key: Uses individual skill keys\n---\n\n# Compare Flights\n\nSearch every available source for a route and present one unified comparison. Combines cash pricing, award availability, portal pay-with-points, and transfer partner optimization into a single table.\n\n**This is an orchestration skill.** It tells the agent which tools to run and how to combine results. No standalone script.\n\n**Companion reference skills.** Load these for deeper context:\n- `flight-search-strategy` — full source priority, market selection, source accuracy hierarchy\n- `points-valuations` — CPP rules, floor\u002Fceiling, surcharge programs, transfer bonuses\n- `partner-awards` — alliance + bilateral partnership reachability\n- `lessons-learned` — Seats.aero workflow, Southwest specifics, Companion Pass math\n- `fallback-and-resilience` — what to do when a source fails\n- `transfer-bonuses` — current active transfer bonuses (live data); changes effective ratios when computing options 4-7 of the comparison table\n- `stopovers` — when an itinerary has a long layover or multi-city, check if a stopover-allowing program priced lower than separate one-ways\n- `round-the-world` — for 3+ stop multi-region itineraries, RTW products may beat sum-of-parts award pricing\n- `award-holds` — many major Western programs (UA, Aeroplan, AS, DL, BA, ANA, Qatar, Korean) no longer offer holds. Some still do: AA (24h online), Lufthansa M&M (5 days), Flying Blue (3 days, $25 phone fee), Cathay (2 days, $39 fee), Turkish (2 days), Virgin Atlantic (1-2 days, free phone), Singapore (agent discretionary). Affects whether the recommended path is \"transfer first then ticket\" or \"ticket immediately\"\n- `status-match` — when comparing options that include upgrades or elite-only benefits (lounge access, free bags, priority); status changes the real cost of a flight\n\n## When to Use\n\n- \"Find me the best way to get from SFO to CDG in August\"\n- \"Should I pay cash or use points for this flight?\"\n- \"Compare all options for SFO to NRT business class\"\n- Any flight search where the user wants the full picture\n\n## Sources\n\nRun these in parallel where possible. **Never fail silently.** If a source errors, report it in the output so the user knows what's missing.\n\n### Cash Prices (run in parallel)\n\n| Source | Skill | Speed | Notes |\n|--------|-------|-------|-------|\n| Duffel | `duffel` | ~3s | Primary. Real GDS fares with fare classes. No Southwest. |\n| Ignav | `ignav` | ~2s | Fast REST API. Good for price comparison. Booking links. |\n| Google Flights | `google-flights` | ~10s | Browser-automated. All airlines including Southwest cash. Good cross-check. |\n| Skiplagged | web search | ~5s | Hidden city ticketing. Often finds significantly cheaper fares. Search `skiplagged.com\u002Fflights\u002F{origin}\u002F{dest}\u002F{date}`. |\n| Kiwi.com | web search | ~5s | Creative routings, self-transfer combos, multi-city. Search `kiwi.com`. |\n| Southwest | `southwest` | ~20s | Patchright, Docker only. Points + cash for all 4 fare classes. Only needed when SW flies the route. |\n\n**Skiplagged and Kiwi:** Use web search (tavily or exa) to find their prices. They don't have MCP skills but their URLs are predictable. Always note that Skiplagged fares have restrictions (can't check bags, must use the \"missed\" connection city as destination).\n\n**Southwest:** Run the `southwest` skill if SW flies the route. Include SW Rapid Rewards points in the comparison table as a separate currency. The `lessons-learned` skill has the full details on SW specifics (fare class requirements, Companion Pass math, GDS gap).\n\n**SerpAPI is optional.** Only use if the user asks for Google Hotels or destination discovery.\n\n### Award Availability\n\n| Source | Skill | Speed | Notes |\n|--------|-------|-------|-------|\n| Seats.aero | `seats-aero` | ~5s | Cached award availability across 25+ programs. Primary award source. Partner API with a key, `seats-aero` MCP without one (next 60 days only). |\n\n### Portal Pay-With-Points (run in parallel, Docker required)\n\n| Source | Skill | Speed | Notes |\n|--------|-------|-------|-------|\n| Chase UR | `chase-travel` | ~45s | Dynamic Points Boost pricing (~1.5-2.0 cpp on select bookings, not a guaranteed floor). |\n| Amex MR | `amex-travel` | ~45s | IAP discount detection on Platinum. |\n\nPortal searches are slower (require browser login). Run them in parallel with each other, but don't block on them. Start cash + award searches first, present those results, then append portal results when ready.\n\n**Only run portal searches if the user has the relevant card or asks for portal pricing.** Don't run Chase if they don't have a Sapphire card.\n\n## Workflow\n\n### Step 1: Gather All Prices\n\nRun searches in parallel. Track which sources succeeded and which failed.\n\n```\nPARALLEL GROUP 1 (fast, ~3-5s):\n  - Duffel: cash prices with fare classes\n  - Ignav: cash prices with booking links\n  - Seats.aero: award availability by program\n  - Skiplagged: hidden city fares (web search)\n  - Kiwi.com: creative routings (web search)\n\nPARALLEL GROUP 2 (browser-automated, ~10-45s, Docker):\n  - Google Flights: all airlines including Southwest cash\n  - Southwest: points + cash for all fare classes (if SW flies the route)\n  - Chase Travel: UR portal pricing + Points Boost\n  - Amex Travel: MR portal pricing + IAP discounts\n```\n\nFor each source, capture:\n- Source name\n- Status: \"ok\" | \"error: {reason}\" | \"skipped: {reason}\"\n- Results count\n- Data\n\n### Step 2: Apply Transfer Partner Optimization\n\nFor every seats.aero award result, calculate the effective cost in each transferable currency using `data\u002Ftransfer-partners.json`:\n\n```\nFor each award (e.g., United business at 88,000 miles):\n  1. Look up which currencies transfer to United: Chase UR (1:1), Bilt (1:1)\n  2. Calculate effective cost: 88,000 \u002F 1.0 = 88,000 UR or 88,000 Bilt\n  3. Calculate opportunity cost using data\u002Fpoints-valuations.json:\n     88,000 UR × 1.7cpp floor = $1,496 equivalent\n```\n\n**Include ALL viable transfer paths**, not just the cheapest. The user may have more points in one currency than another.\n\n### Step 3: Calculate Portal CPP\n\nChase portal uses dynamic Points Boost pricing on CSR\u002FCSP. **The historical static 1.5x multiplier is gone.** Each booking now quotes a specific points price; the effective cpp typically falls in the 1.5-2.0 cpp range on CSR but is not a guaranteed floor on every booking. Always pull the actual portal quote rather than computing from a multiplier.\n\nWorked example with a Points Boost quote (verify the actual price):\n```\nPortal quote: 269,841 points for a $5,397 flight\nTrue CPP: $5,397 \u002F 269,841 = 2.0 cpp (excellent)\n```\n\nFor lower-boost or non-boost bookings, the same flight might quote at 1.5 cpp or worse. Always use the real quote in the comparison.\n\nAmex portal is ~1 cpp for flights (1 MR = 1 cent). IAP fares are discounted cash prices:\n```\nStandard: $5,044 = 504,400 MR points\nIAP: $4,381 = 438,100 MR points (saves 66,300 MR)\n```\n\n### Step 4: Present Unified Table\n\n**Always use markdown tables.** One table with all options sorted by effective cost.\n\n#### Example: SFO → CDG Business Class, Aug 11\n\n| # | Option | Source | Price | Points | Currency | CPP | Rating |\n|---|--------|--------|-------|--------|----------|-----|--------|\n| 1 | Cash (lowest) | Duffel | $4,200 | — | — | — | — |\n| 2 | Flying Blue via Chase UR | seats.aero | $120 tax | 55,000 | Chase UR | 7.4 | Excellent |\n| 3 | Aeroplan via Chase UR | seats.aero | $200 tax | 70,000 | Chase UR | 5.7 | Excellent |\n| 4 | Chase Portal (Boost offer) | chase-travel | $5,400 portal | 180,000 | Chase UR | 3.0 | Excellent (when offered) |\n| 5 | Chase Portal (no Boost) | chase-travel | $5,400 portal | 360,000 | Chase UR | varies (~1.5 typical) | Pull live quote |\n| 6 | Amex Portal (IAP) | amex-travel | $5,044 portal | 438,100 | Amex MR | 1.15 | Poor |\n| 7 | Amex Portal (standard) | amex-travel | $5,044 portal | 504,400 | Amex MR | 1.0 | Poor |\n\nNote: CPP for portal rows uses the portal's own quote ($5,400 \u002F $5,044) as the anchor since that's the actual cash price the portal would charge. Award rows use the Duffel market price ($4,200) as the anchor since that's the cash equivalent the user is foregoing by burning miles. The two anchors differ because portals add a markup, so portal-CPP and award-CPP aren't directly comparable. Better comparison: total cash out-of-pocket (taxes + cash component) per option.\n\n#### Example: SFO → LAX Economy, Aug 11\n\n| # | Option | Source | Price | Points | Currency | CPP | Rating |\n|---|--------|--------|-------|--------|----------|-----|--------|\n| 1 | SW Wanna Get Away | southwest | $79 | 5,200 | SW RR | 1.52 | Good |\n| 2 | Cash (lowest) | Duffel | $89 | — | — | — | — |\n| 3 | SW WGA+ | southwest | $119 | 8,400 | SW RR | 1.42 | Fair |\n| 4 | United via Chase UR | seats.aero | $5.60 tax | 5,000 | Chase UR | 1.67 | Good |\n| 5 | Chase Portal | chase-travel | — | 8,900 | Chase UR | varies (~1.5 typical) | Pull live quote |\n| 6 | SW Anytime | southwest | $219 | 16,800 | SW RR | 1.30 | Fair |\n\nNote: SW points values shown use direct redemption CPP. If the user has Companion Pass, effective CPP doubles (two tickets for the points price of one).\n\n**Sources checked:**\n- ✅ Duffel: 45 results\n- ✅ Ignav: 38 results\n- ✅ Skiplagged: 3 hidden city options\n- ✅ Kiwi.com: 12 creative routings\n- ✅ Seats.aero: 12 award options\n- ✅ Southwest: 4 fare classes (WGA $79\u002F5.2K, WGA+ $119\u002F8.4K, Anytime $219\u002F16.8K, BizSelect $289\u002F22.1K)\n- ✅ Chase Travel: 300 results (3 with Points Boost)\n- ✅ Amex Travel: 292 results (IAP available)\n- ✅ Google Flights: 52 results\n\n### Step 5: Recommendation\n\nAfter the table, always provide:\n\n1. **Best overall value:** Which option gives the most CPP\n2. **Best convenience:** Which is easiest to book (online vs call, instant transfer vs wait)\n3. **Cash vs points verdict:** Using the trip-calculator framework:\n   - If cash \u003C opportunity cost of best award → \"Pay cash\"\n   - If cash > opportunity cost → \"Use points\"\n4. **Transfer warning:** \"Don't transfer until you confirm availability. Transfers are usually instant but can take 48h.\"\n5. **Balance check:** If the user's balances are known (from AwardWallet or prior context), flag if they don't have enough points\n\n## Error Handling\n\n**NEVER fail silently.** Every source must report its status.\n\nIf a source fails:\n```\n- ❌ Duffel: API error (rate limit exceeded). Cash prices from Ignav only.\n- ❌ Chase Travel: Login failed (2FA timeout). No portal pricing available.\n```\n\nIf ALL cash sources fail, say so explicitly. Don't present award-only results without noting the missing cash comparison.\n\nIf seats.aero returns no availability, say \"No award availability found\" instead of silently omitting the award section.\n\n## Data Files Used\n\n| File | Purpose |\n|------|---------|\n| `data\u002Ftransfer-partners.json` | Credit card → loyalty program transfer ratios |\n| `data\u002Fpoints-valuations.json` | CPP floor\u002Fceiling for calculating opportunity cost |\n| `data\u002Fpartner-awards.json` | Cross-alliance booking options (VA→ANA, EY→AA, etc.) |\n\n## Limitations\n\n- Portal searches require Docker and login credentials. Skip if not configured.\n- Seats.aero shows cached availability (up to 24h old). Live search via seats-aero-web is local only.\n- Transfer ratios are from `transfer-partners.json`. Verify against issuer before large transfers.\n- Chase portal pricing is dynamic Points Boost (~1.5-2.0 cpp on select bookings, not a guaranteed floor). The historical static 1.5x multiplier is gone. Pull the actual portal quote rather than computing from a multiplier.\n- Southwest is NOT in Duffel, Ignav, or seats.aero. Use Google Flights skill if SW pricing needed.\n","# Compare Flights\n\nSearch every available source for a route and present one unified comparison. Combines cash pricing, award availability, portal pay-with-points, and transfer partner optimization into a single table.\n\n**This is an orchestration skill.** It tells the agent which tools to run and how to combine results. No standalone script.\n\n**Companion reference skills.** Load these for deeper context:\n- `flight-search-strategy` — full source priority, market selection, source accuracy hierarchy\n- `points-valuations` — CPP rules, floor\u002Fceiling, surcharge programs, transfer bonuses\n- `partner-awards` — alliance + bilateral partnership reachability\n- `lessons-learned` — Seats.aero workflow, Southwest specifics, Companion Pass math\n- `fallback-and-resilience` — what to do when a source fails\n- `transfer-bonuses` — current active transfer bonuses (live data); changes effective ratios when computing options 4-7 of the comparison table\n- `stopovers` — when an itinerary has a long layover or multi-city, check if a stopover-allowing program priced lower than separate one-ways\n- `round-the-world` — for 3+ stop multi-region itineraries, RTW products may beat sum-of-parts award pricing\n- `award-holds` — many major Western programs (UA, Aeroplan, AS, DL, BA, ANA, Qatar, Korean) no longer offer holds. Some still do: AA (24h online), Lufthansa M&M (5 days), Flying Blue (3 days, $25 phone fee), Cathay (2 days, $39 fee), Turkish (2 days), Virgin Atlantic (1-2 days, free phone), Singapore (agent discretionary). Affects whether the recommended path is \"transfer first then ticket\" or \"ticket immediately\"\n- `status-match` — when comparing options that include upgrades or elite-only benefits (lounge access, free bags, priority); status changes the real cost of a flight\n\n## When to Use\n\n- \"Find me the best way to get from SFO to CDG in August\"\n- \"Should I pay cash or use points for this flight?\"\n- \"Compare all options for SFO to NRT business class\"\n- Any flight search where the user wants the full picture\n\n## Sources\n\nRun these in parallel where possible. **Never fail silently.** If a source errors, report it in the output so the user knows what's missing.\n\n### Cash Prices (run in parallel)\n\n| Source | Skill | Speed | Notes |\n|--------|-------|-------|-------|\n| Duffel | `duffel` | ~3s | Primary. Real GDS fares with fare classes. No Southwest. |\n| Ignav | `ignav` | ~2s | Fast REST API. Good for price comparison. Booking links. |\n| Google Flights | `google-flights` | ~10s | Browser-automated. All airlines including Southwest cash. Good cross-check. |\n| Skiplagged | web search | ~5s | Hidden city ticketing. Often finds significantly cheaper fares. Search `skiplagged.com\u002Fflights\u002F{origin}\u002F{dest}\u002F{date}`. |\n| Kiwi.com | web search | ~5s | Creative routings, self-transfer combos, multi-city. Search `kiwi.com`. |\n| Southwest | `southwest` | ~20s | Patchright, Docker only. Points + cash for all 4 fare classes. Only needed when SW flies the route. |\n\n**Skiplagged and Kiwi:** Use web search (tavily or exa) to find their prices. They don't have MCP skills but their URLs are predictable. Always note that Skiplagged fares have restrictions (can't check bags, must use the \"missed\" connection city as destination).\n\n**Southwest:** Run the `southwest` skill if SW flies the route. Include SW Rapid Rewards points in the comparison table as a separate currency. The `lessons-learned` skill has the full details on SW specifics (fare class requirements, Companion Pass math, GDS gap).\n\n**SerpAPI is optional.** Only use if the user asks for Google Hotels or destination discovery.\n\n### Award Availability\n\n| Source | Skill | Speed | Notes |\n|--------|-------|-------|-------|\n| Seats.aero | `seats-aero` | ~5s | Cached award availability across 25+ programs. Primary award source. Partner API with a key, `seats-aero` MCP without one (next 60 days only). |\n\n### Portal Pay-With-Points (run in parallel, Docker required)\n\n| Source | Skill | Speed | Notes |\n|--------|-------|-------|-------|\n| Chase UR | `chase-travel` | ~45s | Dynamic Points Boost pricing (~1.5-2.0 cpp on select bookings, not a guaranteed floor). |\n| Amex MR | `amex-travel` | ~45s | IAP discount detection on Platinum. |\n\nPortal searches are slower (require browser login). Run them in parallel with each other, but don't block on them. Start cash + award searches first, present those results, then append portal results when ready.\n\n**Only run portal searches if the user has the relevant card or asks for portal pricing.** Don't run Chase if they don't have a Sapphire card.\n\n## Workflow\n\n### Step 1: Gather All Prices\n\nRun searches in parallel. Track which sources succeeded and which failed.\n\n```\nPARALLEL GROUP 1 (fast, ~3-5s):\n  - Duffel: cash prices with fare classes\n  - Ignav: cash prices with booking links\n  - Seats.aero: award availability by program\n  - Skiplagged: hidden city fares (web search)\n  - Kiwi.com: creative routings (web search)\n\nPARALLEL GROUP 2 (browser-automated, ~10-45s, Docker):\n  - Google Flights: all airlines including Southwest cash\n  - Southwest: points + cash for all fare classes (if SW flies the route)\n  - Chase Travel: UR portal pricing + Points Boost\n  - Amex Travel: MR portal pricing + IAP discounts\n```\n\nFor each source, capture:\n- Source name\n- Status: \"ok\" | \"error: {reason}\" | \"skipped: {reason}\"\n- Results count\n- Data\n\n### Step 2: Apply Transfer Partner Optimization\n\nFor every seats.aero award result, calculate the effective cost in each transferable currency using `data\u002Ftransfer-partners.json`:\n\n```\nFor each award (e.g., United business at 88,000 miles):\n  1. Look up which currencies transfer to United: Chase UR (1:1), Bilt (1:1)\n  2. Calculate effective cost: 88,000 \u002F 1.0 = 88,000 UR or 88,000 Bilt\n  3. Calculate opportunity cost using data\u002Fpoints-valuations.json:\n     88,000 UR × 1.7cpp floor = $1,496 equivalent\n```\n\n**Include ALL viable transfer paths**, not just the cheapest. The user may have more points in one currency than another.\n\n### Step 3: Calculate Portal CPP\n\nChase portal uses dynamic Points Boost pricing on CSR\u002FCSP. **The historical static 1.5x multiplier is gone.** Each booking now quotes a specific points price; the effective cpp typically falls in the 1.5-2.0 cpp range on CSR but is not a guaranteed floor on every booking. Always pull the actual portal quote rather than computing from a multiplier.\n\nWorked example with a Points Boost quote (verify the actual price):\n```\nPortal quote: 269,841 points for a $5,397 flight\nTrue CPP: $5,397 \u002F 269,841 = 2.0 cpp (excellent)\n```\n\nFor lower-boost or non-boost bookings, the same flight might quote at 1.5 cpp or worse. Always use the real quote in the comparison.\n\nAmex portal is ~1 cpp for flights (1 MR = 1 cent). IAP fares are discounted cash prices:\n```\nStandard: $5,044 = 504,400 MR points\nIAP: $4,381 = 438,100 MR points (saves 66,300 MR)\n```\n\n### Step 4: Present Unified Table\n\n**Always use markdown tables.** One table with all options sorted by effective cost.\n\n#### Example: SFO → CDG Business Class, Aug 11\n\n| # | Option | Source | Price | Points | Currency | CPP | Rating |\n|---|--------|--------|-------|--------|----------|-----|--------|\n| 1 | Cash (lowest) | Duffel | $4,200 | — | — | — | — |\n| 2 | Flying Blue via Chase UR | seats.aero | $120 tax | 55,000 | Chase UR | 7.4 | Excellent |\n| 3 | Aeroplan via Chase UR | seats.aero | $200 tax | 70,000 | Chase UR | 5.7 | Excellent |\n| 4 | Chase Portal (Boost offer) | chase-travel | $5,400 portal | 180,000 | Chase UR | 3.0 | Excellent (when offered) |\n| 5 | Chase Portal (no Boost) | chase-travel | $5,400 portal | 360,000 | Chase UR | varies (~1.5 typical) | Pull live quote |\n| 6 | Amex Portal (IAP) | amex-travel | $5,044 portal | 438,100 | Amex MR | 1.15 | Poor |\n| 7 | Amex Portal (standard) | amex-travel | $5,044 portal | 504,400 | Amex MR | 1.0 | Poor |\n\nNote: CPP for portal rows uses the portal's own quote ($5,400 \u002F $5,044) as the anchor since that's the actual cash price the portal would charge. Award rows use the Duffel market price ($4,200) as the anchor since that's the cash equivalent the user is foregoing by burning miles. The two anchors differ because portals add a markup, so portal-CPP and award-CPP aren't directly comparable. Better comparison: total cash out-of-pocket (taxes + cash component) per option.\n\n#### Example: SFO → LAX Economy, Aug 11\n\n| # | Option | Source | Price | Points | Currency | CPP | Rating |\n|---|--------|--------|-------|--------|----------|-----|--------|\n| 1 | SW Wanna Get Away | southwest | $79 | 5,200 | SW RR | 1.52 | Good |\n| 2 | Cash (lowest) | Duffel | $89 | — | — | — | — |\n| 3 | SW WGA+ | southwest | $119 | 8,400 | SW RR | 1.42 | Fair |\n| 4 | United via Chase UR | seats.aero | $5.60 tax | 5,000 | Chase UR | 1.67 | Good |\n| 5 | Chase Portal | chase-travel | — | 8,900 | Chase UR | varies (~1.5 typical) | Pull live quote |\n| 6 | SW Anytime | southwest | $219 | 16,800 | SW RR | 1.30 | Fair |\n\nNote: SW points values shown use direct redemption CPP. If the user has Companion Pass, effective CPP doubles (two tickets for the points price of one).\n\n**Sources checked:**\n- ✅ Duffel: 45 results\n- ✅ Ignav: 38 results\n- ✅ Skiplagged: 3 hidden city options\n- ✅ Kiwi.com: 12 creative routings\n- ✅ Seats.aero: 12 award options\n- ✅ Southwest: 4 fare classes (WGA $79\u002F5.2K, WGA+ $119\u002F8.4K, Anytime $219\u002F16.8K, BizSelect $289\u002F22.1K)\n- ✅ Chase Travel: 300 results (3 with Points Boost)\n- ✅ Amex Travel: 292 results (IAP available)\n- ✅ Google Flights: 52 results\n\n### Step 5: Recommendation\n\nAfter the table, always provide:\n\n1. **Best overall value:** Which option gives the most CPP\n2. **Best convenience:** Which is easiest to book (online vs call, instant transfer vs wait)\n3. **Cash vs points verdict:** Using the trip-calculator framework:\n   - If cash \u003C opportunity cost of best award → \"Pay cash\"\n   - If cash > opportunity cost → \"Use points\"\n4. **Transfer warning:** \"Don't transfer until you confirm availability. Transfers are usually instant but can take 48h.\"\n5. **Balance check:** If the user's balances are known (from AwardWallet or prior context), flag if they don't have enough points\n\n## Error Handling\n\n**NEVER fail silently.** Every source must report its status.\n\nIf a source fails:\n```\n- ❌ Duffel: API error (rate limit exceeded). Cash prices from Ignav only.\n- ❌ Chase Travel: Login failed (2FA timeout). No portal pricing available.\n```\n\nIf ALL cash sources fail, say so explicitly. Don't present award-only results without noting the missing cash comparison.\n\nIf seats.aero returns no availability, say \"No award availability found\" instead of silently omitting the award section.\n\n## Data Files Used\n\n| File | Purpose |\n|------|---------|\n| `data\u002Ftransfer-partners.json` | Credit card → loyalty program transfer ratios |\n| `data\u002Fpoints-valuations.json` | CPP floor\u002Fceiling for calculating opportunity cost |\n| `data\u002Fpartner-awards.json` | Cross-alliance booking options (VA→ANA, EY→AA, etc.) |\n\n## Limitations\n\n- Portal searches require Docker and login credentials. Skip if not configured.\n- Seats.aero shows cached availability (up to 24h old). Live search via seats-aero-web is local only.\n- Transfer ratios are from `transfer-partners.json`. Verify against issuer before large transfers.\n- Chase portal pricing is dynamic Points Boost (~1.5-2.0 cpp on select bookings, not a guaranteed floor). The historical static 1.5x multiplier is gone. Pull the actual portal quote rather than computing from a multiplier.\n- Southwest is NOT in Duffel, Ignav, or seats.aero. Use Google Flights skill if SW pricing needed.\n",{"name":5,"api_key":24,"summary":25,"category":26,"description":7},"Uses individual skill keys","Unified flight comparison across ALL sources in parallel. Auto-applies transfer optimization.","orchestration","main","30b091178a3e4b02ff2c31bb43eb4186c4bf9d8a","plugins\u002Ftravel-hacking-toolkit\u002Fskills\u002Fcompare-flights",118,"https:\u002F\u002Fgithub.com\u002Fborski\u002Ftravel-hacking-toolkit","https:\u002F\u002Fgithub.com\u002Fborski","I run the Agentic Red Team @ DeepMind (Google)","2026-11-09 22:54:02",{"source":8,"skillName":5,"commands":36,"prompt":46,"zipAvailable":47},[37,40,43],{"tool":38,"command":39},"npx","npx skills add borski\u002Ftravel-hacking-toolkit --skill compare-flights",{"tool":41,"command":42},"bunx","bunx skills add borski\u002Ftravel-hacking-toolkit --skill compare-flights",{"tool":44,"command":45},"pnpm","pnpm dlx skills add borski\u002Ftravel-hacking-toolkit --skill compare-flights","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fborski\u002Ftravel-hacking-toolkit\u002Fblob\u002Fmain\u002Fplugins\u002Ftravel-hacking-toolkit\u002Fskills\u002Fcompare-flights\u002FSKILL.md",true,[],[50,57,64,71,78,85],{"skillNo":51,"name":52,"nameZh":6,"description":53,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":54,"categories":55,"keywords":56,"publishedAt":19},"01M74YSPQMTR5MVRP5DPXM6F73","wikipedia-airports","Discover destinations served from any airport via Wikipedia. Sanity-check whether an airline flies a specific route, find regional service that fare tools miss, identify late-split-return airport options.","https:\u002F\u002Fgithub.com\u002Fborski\u002Ftravel-hacking-toolkit\u002Fblob\u002Fmain\u002Fplugins\u002Ftravel-hacking-toolkit\u002Fskills\u002Fwikipedia-airports\u002FSKILL.md",[],[],{"skillNo":58,"name":59,"nameZh":6,"description":60,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":61,"categories":62,"keywords":63,"publishedAt":19},"01M74YSK14ZG02D6DT18N3X4GM","wheretocredit","Mileage earning rates by airline and booking class via wheretocredit.com. Redeemable and qualifying miles across 50+ programs. Use when deciding where to credit a flight or comparing earning rates.","https:\u002F\u002Fgithub.com\u002Fborski\u002Ftravel-hacking-toolkit\u002Fblob\u002Fmain\u002Fplugins\u002Ftravel-hacking-toolkit\u002Fskills\u002Fwheretocredit\u002FSKILL.md",[],[],{"skillNo":65,"name":66,"nameZh":6,"description":67,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":68,"categories":69,"keywords":70,"publishedAt":19},"01M74YSDZJZ70SN5A9GG16NQC0","vrbo","Search VRBO (Vrbo \u002F Expedia Group) vacation rentals including entire homes, condos, and cabins via Patchright browser automation. VRBO sits behind Akamai Bot Manager so plain HTTP and standard Playwright get a 429 bot wall. Use for whole-home or group stays, multi-bedroom rentals, and Airbnb-vs-VRBO comparisons. Trigger phrases include search VRBO, Vrbo rentals, vacation rental, cabin rental, whole house, condo for the group.","https:\u002F\u002Fgithub.com\u002Fborski\u002Ftravel-hacking-toolkit\u002Fblob\u002Fmain\u002Fplugins\u002Ftravel-hacking-toolkit\u002Fskills\u002Fvrbo\u002FSKILL.md",[],[],{"skillNo":72,"name":73,"nameZh":6,"description":74,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":75,"categories":76,"keywords":77,"publishedAt":19},"01M74YSAXWPG81WK20XTQS0K04","tripadvisor","TripAdvisor Content API for hotel ratings, restaurant search, attraction reviews, rankings, and nearby locations. Use when evaluating hotels or researching destinations. 5K calls\u002Fmonth.","https:\u002F\u002Fgithub.com\u002Fborski\u002Ftravel-hacking-toolkit\u002Fblob\u002Fmain\u002Fplugins\u002Ftravel-hacking-toolkit\u002Fskills\u002Ftripadvisor\u002FSKILL.md",[],[],{"skillNo":79,"name":80,"nameZh":6,"description":81,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":82,"categories":83,"keywords":84,"publishedAt":19},"01M74YS7174Q6WJRWVK4TPJQED","trip-planner","Full trip planning orchestration. Combines flight search, hotel search, and points optimization into one cost analysis. Use when the user says \"plan a trip\" or wants the complete picture for a destination.","https:\u002F\u002Fgithub.com\u002Fborski\u002Ftravel-hacking-toolkit\u002Fblob\u002Fmain\u002Fplugins\u002Ftravel-hacking-toolkit\u002Fskills\u002Ftrip-planner\u002FSKILL.md",[],[],{"skillNo":86,"name":87,"nameZh":6,"description":88,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":89,"categories":90,"keywords":91,"publishedAt":19},"01M74YS3QM1ED7D6Q6X3JK2783","trip-log","Save flight searches, itineraries, and booked trips to the trips\u002Flogs\u002F directory for future reference. OPT-IN — use when the user asks to log a trip or look up past searches, or on every search only if the user has said they want automatic logging. Also use to update status when a trip is booked or completed.","https:\u002F\u002Fgithub.com\u002Fborski\u002Ftravel-hacking-toolkit\u002Fblob\u002Fmain\u002Fplugins\u002Ftravel-hacking-toolkit\u002Fskills\u002Ftrip-log\u002FSKILL.md",[],[]]