Getting it into your agent
It runs from inside its repository, so the clone comes first — what it calls does not travel with the file alone.
git clone --depth 1 https://github.com/borski/travel-hacking-toolkitnpx agentmods add skills/borski/travel-hacking-toolkit/transfer-bonusesWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/borski/travel-hacking-toolkit/transfer-bonuses)<a href="https://agentmods.dev/skills/borski/travel-hacking-toolkit/transfer-bonuses"><img src="https://agentmods.dev/badge/skills/borski/travel-hacking-toolkit/transfer-bonuses/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/borski/travel-hacking-toolkit/transfer-bonuses"><img src="https://agentmods.dev/badge/skills/borski/travel-hacking-toolkit/transfer-bonuses.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- NVIDIA SkillSpector pass
What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00058 | $0.02500 |
| Opus 5 | $0.00029 | $0.01250 |
| Sonnet 5 | $0.00012 | $0.00500 |
| Haiku 4.5 | $0.00006 | $0.00250 |
Grade A, and why
transfer-bonuses scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 9d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 142 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Transfer Bonuses Skill
Authoritative reference for current credit card transfer bonuses. Reads from data/transfer-bonuses.json, which is refreshed weekly by scripts/refresh-transfer-bonuses.py (run automatically every Monday via .github/workflows/refresh-data.yml, and manually any time). The script scrapes Frequent Miler (canonical) and cross-checks each bonus against AwardWallet. Each active bonus carries a confidence marker (VERIFIED if both FM and AwardWallet agree, LIKELY if only FM, UNVERIFIED if single weak source) per the toolkit's Research Integrity Protocol. TPG is sometimes consulted manually as a sanity check but is NOT scraped programmatically — TPG often shows expired bonuses as active.
The Expiry Gate (run this BEFORE citing any bonus)
The data file is a snapshot; bonuses commonly end on month-end dates between refreshes. On 2026-07-07 the file listed 7 "active" bonuses of which 5 had ended a week earlier — an agent quoting the file raw would have priced a Chase→Marriott transfer at 1.55x when the real ratio was 1.0. So, mechanically, every time:
- Get today's date.
- For each bonus you're about to cite, compare
end_date_inclusiveto today. Past-dated = expired, regardless of which array it sits in. Never present an expired bonus as available. - If any
active_bonusesentry is past-dated, or_meta.last_updatedis more than 7 days old, refresh first:python3 scripts/refresh-transfer-bonuses.py(use--dry-runto preview). Then re-read the file. - If the refresh fails (source layout changed, offline), present the bonus WITH its end date and staleness caveat: "the file shows +30% through 2026-07-14, last verified — confirm on the issuer's transfer page before moving points."
When to Use
- Pricing an award booking that involves a transfer. A 30% bonus to JAL changes the real cost of a oneworld booking through JAL by 23%. The math has to factor in the bonus.
- Deciding whether to transfer now or wait. If a bonus is expected to recur (see
frequent_recurring_bonuses_to_watch), it may be worth waiting. - Sanity-checking whether a "good bonus" actually wins. Hotel bonuses especially (Chase UR to IHG 70%, Chase UR to Marriott 50-70%) often look great in headlines but lose to the Chase Travel portal (dynamic Points Boost on CSR/CSP, ~1.5-2.0 cpp on select bookings; not a guaranteed floor). Always pull the actual portal quote and run the math against it, not against an assumed rate.
- Identifying stackable bonuses. Aeroplan Visa cardholders stack a 10% cardholder bonus on top of any Chase UR to Aeroplan promotion.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 9d ago First seen · 142 lines · 58 tokens per session scan A e3b24288f0c3
transfer-bonuses is a skill published in the GitHub repository borski/travel-hacking-toolkit (654 stars, last pushed yesterday), licensed MIT. It adds 58 tokens to every session and 2,500 once invoked, about $0.0003 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
stock-liquidity
Analyze stock liquidity using bid-ask spreads, volume profiles, order book depth, market impact estimates, and turnover ratios via Yahoo Finance data. Use this skill whenever the user asks about liquidity, trading costs, bid-ask spread, market depth, volume analysis, slippage, market impact, turnover ratio, or how…
company-valuation
Estimate the intrinsic value of a public company using DCF, relative (peer multiple) and sum-of-parts (SOTP) methods, then triangulate to an implied share price with upside/downside versus the current market price. Use this skill whenever the user asks: "what is AAPL worth", "valuation of NVDA", "fair value of TSLA"…
fintel-data
Query Fintel (fintel.io) institutional market intelligence via the REST API at https://api.fintel.io/v1 with FINTELAPIKEY (X-API-KEY header), or the official MCP server at https://mcp.fintel.io/mcp. Read-only data: short interest, borrow rate/fee and shares available to borrow, daily short volume, fails-to-deliver…
earnings-recap
Generate a post-earnings analysis for any stock using Yahoo Finance data. Use when the user wants to review what happened after earnings, understand beat/miss results, see stock reaction, or get an earnings recap. Triggers: "AAPL earnings recap", "how did TSLA earnings go", "MSFT earnings results", "did NVDA beat…
twitter-reader
Read Twitter/X for financial research using opencli (read-only). Use this skill whenever the user wants to read their Twitter feed, search for financial tweets, view bookmarks, look up user profiles, or gather market sentiment from Twitter/X. Triggers include: "check my feed", "search Twitter for", "show my…
finance-sentiment
Fetch structured stock sentiment across Reddit, X.com, news, and Polymarket using the Adanos Finance API. Use this skill whenever the user asks how much people are talking about a stock, how hot a ticker is on social platforms, how many Polymarket bets exist for a company, whether sources are aligned, or to compare…