Install
$ agentstack add skill-borski-travel-hacking-toolkit-trip-calculator ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Trip Cost Calculator
"Should I pay cash or use points?" answered with math.
Compares the true cost of booking with cash versus each available points currency, accounting for transfer ratios, taxes/fees, and the opportunity cost of burning your points.
No API key needed. Uses local JSON data files plus flight/hotel search results.
Data Files
| File | Purpose | |------|---------| | data/points-valuations.json | CPP valuations per program (floor/ceiling) | | data/transfer-partners.json | Credit card → loyalty program transfer ratios |
When to Use
- User has both cash prices (from Duffel/Ignav/Google Flights) and award prices (from seats.aero)
- User asks "should I pay cash or use points?"
- User wants to know the CPP of a specific redemption
- User is deciding between multiple booking strategies for a trip
Core Concepts
Cents Per Point (CPP)
The value you're getting per point when redeeming:
cpp = (cash_price - taxes_on_award) / points_needed × 100
A CPP above the floor valuation from points-valuations.json means you're getting above-average value. Below floor = poor redemption.
Opportunity Cost
Points have value even when unspent. Burning 100K Chase UR at 1.7 cpp (floor) means you're "spending" $1,700 in future travel flexibility:
opportunity_cost = points_needed × floor_cpp / 100
If the cash price is lower than the opportunity cost, pay cash. If higher, use points.
The Decision Framework
IF cash_price opportunity_cost → USE POINTS (good redemption)
IF cash_price ≈ opportunity_cost → PAY CASH (preserve flexibility)
The tie goes to cash because points maintain optionality.
Workflow
Step 1: Gather Prices
Cash prices (use one or more sources):
Duffel API → exact bookable fares
Ignav API → fast comparison prices
Google Flights → browser-based, includes Southwest
Award prices (use seats.aero):
Seats.aero API → cached availability across 25+ programs
Seats.aero web → live search (local Patchright only)
Step 2: Calculate CPP for Each Award Option
For each award option with a corresponding cash price:
cpp = (cash_price_usd - award_taxes_usd) / award_miles × 100
Award taxes come from seats.aero trip details (TotalTaxes field, in cents) or estimate $5.60 per segment for domestic US, $50-$200 for international (varies wildly by carrier and routing).
Step 3: Factor in Transfer Ratios
If using transferable points (Chase UR, Amex MR, etc.), the effective points cost changes:
effective_points = award_miles / transfer_ratio
effective_cpp = (cash_price - award_taxes) / effective_points × 100
Example: Flying Blue award at 50,000 miles via Capital One (1:1):
- Effective points: 50,000
- Cash price: $1,200, taxes: $100
- CPP: ($1,200 - $100) / 50,000 × 100 = 2.2 cpp
Contrast: a separate Emirates award at 72,500 Skywards miles via Capital One (4:3 ratio, the worst Cap One transfer rate):
- Effective points needed: 72,500 / 0.75 = 96,667 Cap One miles
- Same $1,200 cash equivalent: ($1,200 - $100) / 96,667 × 100 = 1.14 cpp. Worse than the Flying Blue path.
Important: pick the best currency for the destination program. Emirates Skywards has a 1:1 transfer from Bilt Rewards (no fee, instant). For the same Emirates redemption, 72,500 Bilt = 72,500 Skywards = ($1,200 - $100) / 72,500 × 100 = 1.52 cpp. Always check data/transfer-partners.json for every transferable currency the user holds before recommending a transfer — Bilt's 1:1 to Emirates beats Capital One's 4:3 by a wide margin. The skill enforces this in Step 0 (load transfer-partners first to enumerate every viable path).
Step 4: Compare Against Valuations
Load valuations from points-valuations.json:
jq -r '.credit_card_points.chase_ultimate_rewards | "Chase UR: floor \(.floor)cpp, ceiling \(.ceiling)cpp"' data/points-valuations.json
| Rating | CPP vs Floor | Meaning | |--------|-------------|---------| | Excellent | > ceiling | Exceptional redemption. Book it. | | Good | > floor | Above average. Solid use of points. | | Fair | 0.8× to 1× floor | Mediocre. Consider cash instead. | | Poor | award CPP → portal wins If award CPP > actual portal CPP → transfer to partner wins
Sapphire Preferred is similar (1.5-1.75 cpp typical via Points Boost). Amex portal is ~1.0 cpp for flights (1 cent per MR point). Capital One portal is ~0.75-1.0 cpp.
**Always pull the real portal quote** via the `chase-travel` or `amex-travel` skills before making a points-vs-portal recommendation. Don't assume the headline rate applies to your specific booking.
## Common Pitfalls
- **Ignoring taxes/fees on awards.** Some airlines (especially BA, Lufthansa, Singapore on own metal) add $500+ in fuel surcharges to award tickets. Always subtract taxes before calculating CPP.
- **Comparing one-way award to round-trip cash.** Make sure denominators match.
- **Forgetting transfer ratios.** 50K miles via Amex → Emirates at 5:4 costs 62,500 MR, not 50,000.
- **Not checking portal pricing.** Sometimes Chase/Amex portal pricing beats the transfer math.
- **Over-optimizing small differences.** If two options are within 0.5 cpp of each other, pick the one with better routing, lower taxes, or more flexibility.
## Notes
- Point valuations are subjective. The floor from `points-valuations.json` is the most defensible number.
- "Opportunity cost" assumes you WILL use those points eventually at floor value. If you're sitting on a huge balance with no plans, the real opportunity cost is lower.
- Currency devaluation risk matters for long-term holdings. Points are depreciating assets.
- Transfer bonuses can shift the math significantly. A 30% bonus on Chase → Flying Blue means 75K UR becomes 97.5K Flying Blue miles.
## Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- **Author:** [borski](https://github.com/borski)
- **Source:** [borski/travel-hacking-toolkit](https://github.com/borski/travel-hacking-toolkit)
- **License:** MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.