[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M74YRBXV892ZWXJKTZSVMHFE":3,"skill-same:01M74YRBXV892ZWXJKTZSVMHFE":70},{"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":28,"commitSha":29,"skillDirectory":30,"forksCount":31,"repositoryHtmlUrl":32,"repositoryHomepageUrl":6,"ownerHtmlUrl":33,"ownerBlogUrl":6,"ownerDescription":34,"updatedAt":35,"install":36,"resources":49},"01M74YRBXV892ZWXJKTZSVMHFE","sutochno",null,"Search Sutochno.ru (СУТОЧНО.РУ), a Russian short-term apartment-rental platform where you book directly from owners and pay in rubles (Mir card \u002F bank transfer). Best for Russian-speaking travellers booking stays in Georgia \u002F the CIS, where Airbnb and Booking have withdrawn or do not accept Russian cards. Sutochno is NOT behind a bot wall — it ships on the toolkit standard patchright-docker base but runs the bundled chromium headless with no Akamai sensor to defeat. Trigger phrases include search Sutochno, суточно, Russian apartment rental, ruble payment, Mir card, Tbilisi apartment, Batumi apartment, Georgia CIS rental.","borski\u002Ftravel-hacking-toolkit","borski","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F207674?v=4","01M74YKQ7FZM71RB1ET5KSXBZT","Michael Borohovski","01M74YKQ85N97DKHKHJCDECJT5",978,"MIT","https:\u002F\u002Fgithub.com\u002Fborski\u002Ftravel-hacking-toolkit\u002Fblob\u002Fmain\u002Fplugins\u002Ftravel-hacking-toolkit\u002Fskills\u002Fsutochno\u002FSKILL.md",[],[],"2026-11-11 17:32:24",false,"---\nname: sutochno\ndescription: Search Sutochno.ru (СУТОЧНО.РУ), a Russian short-term apartment-rental platform where you book directly from owners and pay in rubles (Mir card \u002F bank transfer). Best for Russian-speaking travellers booking stays in Georgia \u002F the CIS, where Airbnb and Booking have withdrawn or do not accept Russian cards. Sutochno is NOT behind a bot wall — it ships on the toolkit standard patchright-docker base but runs the bundled chromium headless with no Akamai sensor to defeat. Trigger phrases include search Sutochno, суточно, Russian apartment rental, ruble payment, Mir card, Tbilisi apartment, Batumi apartment, Georgia CIS rental.\ncategory: hotels\nsummary: Sutochno.ru Russian apartment search via Patchright. Ruble \u002F Mir payment for Georgia \u002F CIS stays.\napi_key: None\ndocker_image: ghcr.io\u002Fborski\u002Fsutochno\n---\n\n# Sutochno Search\n\nSearch **Sutochno.ru** (СУТОЧНО.РУ) — a Russian short-term-rental marketplace\nwhere you book apartments, rooms, and houses directly from owners and pay in\n**rubles**, typically via **Mir card** or bank transfer. It's the natural fit\nfor Russian-speaking travellers booking stays in **Georgia \u002F the CIS**, where\nAirbnb and Booking have withdrawn or won't take Russian cards. It complements\nthe Airbnb MCP and the `vrbo` skill: those reach Western inventory, Sutochno\nreaches the ruble-priced, owner-direct inventory those platforms miss.\n\n**Sutochno is NOT behind Akamai.** Unlike the `vrbo` skill (which fights an\nAkamai bot wall and must run **headed**), Sutochno's server-rendered city pages\nload fine **headless** — there is no bot sensor to defeat. This skill still ships\non the toolkit's standard **patchright-docker** base (the same image every\nbrowser skill builds on), but only for the bundled chromium + OS deps; it does\nnot need Patchright's stealth. Patchright is a drop-in Playwright fork, so the\nbrowser API is identical. The default mode is headless; `--headed` is opt-in for\ndebugging.\n\n**The JSON API is auth-walled — we scrape pages instead.** Sutochno's `\u002Fapi\u002F*`\nendpoints (e.g. `\u002Fapi\u002Fgeo\u002Fsuggest`) return `403 Application authentication\nfailed` without an app token the SPA computes client-side. So this skill does\n**not** touch the API. It scrapes the **server-rendered city pages**, where the\nlisting cards are already present in the HTML.\n\n**City results live on SUBDOMAINS.** Each city has its own host:\n`https:\u002F\u002Ftbilisi.sutochno.ru\u002F`, `https:\u002F\u002Fbatumi.sutochno.ru\u002F`,\n`https:\u002F\u002Fkutaisi.sutochno.ru\u002F`, etc. The country directory\n`https:\u002F\u002Fsutochno.ru\u002Fgeorgia` lists the supported Georgian cities and links out\nto `https:\u002F\u002F{city}.sutochno.ru\u002F\u003ClistingId>` cards. Pass the city as a\n**subdomain keyword** (`--city tbilisi`) or a full URL (`--url`).\n\n**No login required.** Sutochno search results are public; the skill finds\nrentals and returns links only — it does not log in or complete a booking.\n\n## Prerequisites\n\n```bash\npip install patchright && patchright install chromium\n```\n\nOr use Docker (no local install):\n\n```bash\ndocker build -t sutochno skills\u002Fsutochno\u002F\n```\n\n## When to Use\n\n- A Russian-speaking traveller (or one travelling with Russian companions)\n  booking accommodation that's **paid in rubles via Mir card** \u002F bank transfer\n- **Georgia \u002F CIS** stays (Tbilisi, Batumi, Kutaisi, …) where Airbnb \u002F Booking\n  withdrew or won't accept Russian cards\n- Cross-referencing owner-direct ruble inventory against Airbnb \u002F VRBO before\n  booking a multi-night stay\n\n## When NOT to Use\n\n- **Completing a booking.** This skill finds rentals and returns links only.\n  Do not attempt to complete a purchase or contact the owner.\n- **Non-CIS destinations.** For Western destinations Airbnb (MCP), the `vrbo`\n  skill, and Booking have far deeper inventory and card support — use those.\n- **Hotels \u002F branded chains.** Use compare-hotels \u002F serpapi \u002F liteapi \u002F the\n  portal skills.\n\n## Usage\n\n```bash\n# Tbilisi, human-readable table (headless by default)\npython3 skills\u002Fsutochno\u002Fscripts\u002Fsearch_sutochno.py --city tbilisi\n\n# Batumi, JSON, only 9.0+ rated, under 8000 rubles\u002Fnight, top 15\npython3 skills\u002Fsutochno\u002Fscripts\u002Fsearch_sutochno.py --city batumi \\\n  --min-rating 9.0 --max-price 8000 --limit 15 --json\n\n# Explicit full URL (e.g. a city page with query filters already applied)\npython3 skills\u002Fsutochno\u002Fscripts\u002Fsearch_sutochno.py \\\n  --url \"https:\u002F\u002Fkutaisi.sutochno.ru\u002F\" --json\n\n# Docker\ndocker run --rm sutochno --city tbilisi --json\n```\n\n### Arguments\n\n| Flag | Default | Notes |\n|------|---------|-------|\n| `--city` | one of city\u002Furl required | City **subdomain** keyword, e.g. `tbilisi`, `batumi`. Resolves to `https:\u002F\u002F{city}.sutochno.ru\u002F`. |\n| `--url` | one of city\u002Furl required | Full city URL — use instead of `--city` to pass a page that already carries query filters. |\n| `--min-rating` | 0 | Client-side filter, 0–10 scale (e.g. `9.0`). Listings with no rating are kept. |\n| `--max-price` | 0 | Client-side per-night ceiling in rubles. Listings with no price are kept. |\n| `--limit` | 20 | Max listings returned (after sort). |\n| `--headed` | off | Run the browser headed (debugging only — Sutochno has no bot wall, so headless is the default). |\n| `--json` | off | Emit JSON to stdout (use this for orchestration). |\n\n## Selectors (the scrape contract)\n\nOn a city page, each listing card exposes:\n\n| Field | Selector | Raw shape | Extraction |\n|-------|----------|-----------|------------|\n| name + link | `.card-content__object-type` (an `\u003Ca>`) | text + `href` → `https:\u002F\u002F{city}.sutochno.ru\u002F\u003Cid>` (or `\u002Fhotels\u002F\u003Cid>`) | name text; id = trailing digits of href |\n| price | `.card-prices__price` | `\"4 890 ₽ за сутки\"` | substring **before** `₽`, strip all non-digits → `4890` |\n| rating + reviews | `.card-prices__rating` | `\"10 отзывов 9,8 (10) …\"` | rating = first `\u002F\\d{1,2},\\d\u002F` (comma → dot); reviews = `\u002F(\\d+)\\s*отзыв\u002F` |\n| address | `.card-content__address` | `\"Тбилиси, Старый город\"` | as-is |\n\nThe card **wrapper** is the nearest ancestor of the name node that also contains\na `.card-prices` element — name and prices are siblings, not nested — so the\nextractor climbs up from the name link until `el.querySelector('.card-prices')`\nis truthy, then reads price\u002Frating from inside that wrapper.\n\n**Price gotcha:** the thousands separator in the price string is a mixed-width \u002F\nnon-breaking space, so a naive `\\d+` regex truncates the leading digit (returns\n`890` for `4 890`). The reliable method is to **split on `₽` then strip all\nnon-digits** — that's what `parse_price` does.\n\n**Images are lazy-loaded placeholders** (`lzy-img.gif`) on first paint, so the\nscraper does **not** rely on photos.\n\n## Output\n\nJSON shape (with `--json`):\n\n```json\n{\n  \"source\": \"sutochno\",\n  \"searchUrl\": \"https:\u002F\u002Ftbilisi.sutochno.ru\u002F\",\n  \"query\": { \"city\": \"tbilisi\", \"url\": null, \"min_rating\": 9.0, \"max_price\": 8000 },\n  \"count\": 12,\n  \"listings\": [\n    {\n      \"id\": \"1234567\",\n      \"name\": \"Уютная студия в центре\",\n      \"area\": \"Тбилиси, Старый город\",\n      \"rub_per_night\": 4890,\n      \"rating\": 9.8,\n      \"reviews\": 10,\n      \"url\": \"https:\u002F\u002Ftbilisi.sutochno.ru\u002F1234567\"\n    }\n  ]\n}\n```\n\nListings are deduped by `id` and sorted **rating desc, then price asc** (entries\nwith no rating \u002F price sort last). `rub_per_night` is the lead nightly rate in\nrubles — open the listing URL to confirm the all-in total (cleaning, deposit,\nand any owner fees may not be in the SERP figure).\n\n## Tests\n\nThe pure logic (city-URL building, ruble price parsing, rating\u002Freview parsing,\nlisting-id extraction, normalisation, dedupe \u002F filter \u002F sort) is covered by\nstdlib `unittest` tests — no browser, network, or Patchright needed (the\n`patchright` import is lazy):\n\n```bash\npython3 -m unittest discover -s skills\u002Fsutochno\u002Ftests -v   # or: python3 -m pytest skills\u002Fsutochno\u002Ftests\n```\n\nThe browser-driven path (page navigation, DOM extraction) can't be unit-tested\noffline — verify it with a real city search (see Usage above).\n\n## Known fragility\n\n- **DOM selectors drift.** Sutochno may revise the `card-content__*` \u002F\n  `card-prices__*` class names. If a live search returns 0 cards on a city you\n  know has inventory, re-inspect a city page and refresh the selectors in\n  `EXTRACT_JS` and the selector table above (file a P2 task).\n- **The API stays auth-walled.** Don't be tempted back to `\u002Fapi\u002F*` — it needs\n  the SPA's computed app token and returns `403 Application authentication\n  failed` without it. The server-rendered pages are the supported surface.\n","# Sutochno Search\n\nSearch **Sutochno.ru** (СУТОЧНО.РУ) — a Russian short-term-rental marketplace\nwhere you book apartments, rooms, and houses directly from owners and pay in\n**rubles**, typically via **Mir card** or bank transfer. It's the natural fit\nfor Russian-speaking travellers booking stays in **Georgia \u002F the CIS**, where\nAirbnb and Booking have withdrawn or won't take Russian cards. It complements\nthe Airbnb MCP and the `vrbo` skill: those reach Western inventory, Sutochno\nreaches the ruble-priced, owner-direct inventory those platforms miss.\n\n**Sutochno is NOT behind Akamai.** Unlike the `vrbo` skill (which fights an\nAkamai bot wall and must run **headed**), Sutochno's server-rendered city pages\nload fine **headless** — there is no bot sensor to defeat. This skill still ships\non the toolkit's standard **patchright-docker** base (the same image every\nbrowser skill builds on), but only for the bundled chromium + OS deps; it does\nnot need Patchright's stealth. Patchright is a drop-in Playwright fork, so the\nbrowser API is identical. The default mode is headless; `--headed` is opt-in for\ndebugging.\n\n**The JSON API is auth-walled — we scrape pages instead.** Sutochno's `\u002Fapi\u002F*`\nendpoints (e.g. `\u002Fapi\u002Fgeo\u002Fsuggest`) return `403 Application authentication\nfailed` without an app token the SPA computes client-side. So this skill does\n**not** touch the API. It scrapes the **server-rendered city pages**, where the\nlisting cards are already present in the HTML.\n\n**City results live on SUBDOMAINS.** Each city has its own host:\n`https:\u002F\u002Ftbilisi.sutochno.ru\u002F`, `https:\u002F\u002Fbatumi.sutochno.ru\u002F`,\n`https:\u002F\u002Fkutaisi.sutochno.ru\u002F`, etc. The country directory\n`https:\u002F\u002Fsutochno.ru\u002Fgeorgia` lists the supported Georgian cities and links out\nto `https:\u002F\u002F{city}.sutochno.ru\u002F\u003ClistingId>` cards. Pass the city as a\n**subdomain keyword** (`--city tbilisi`) or a full URL (`--url`).\n\n**No login required.** Sutochno search results are public; the skill finds\nrentals and returns links only — it does not log in or complete a booking.\n\n## Prerequisites\n\n```bash\npip install patchright && patchright install chromium\n```\n\nOr use Docker (no local install):\n\n```bash\ndocker build -t sutochno skills\u002Fsutochno\u002F\n```\n\n## When to Use\n\n- A Russian-speaking traveller (or one travelling with Russian companions)\n  booking accommodation that's **paid in rubles via Mir card** \u002F bank transfer\n- **Georgia \u002F CIS** stays (Tbilisi, Batumi, Kutaisi, …) where Airbnb \u002F Booking\n  withdrew or won't accept Russian cards\n- Cross-referencing owner-direct ruble inventory against Airbnb \u002F VRBO before\n  booking a multi-night stay\n\n## When NOT to Use\n\n- **Completing a booking.** This skill finds rentals and returns links only.\n  Do not attempt to complete a purchase or contact the owner.\n- **Non-CIS destinations.** For Western destinations Airbnb (MCP), the `vrbo`\n  skill, and Booking have far deeper inventory and card support — use those.\n- **Hotels \u002F branded chains.** Use compare-hotels \u002F serpapi \u002F liteapi \u002F the\n  portal skills.\n\n## Usage\n\n```bash\n# Tbilisi, human-readable table (headless by default)\npython3 skills\u002Fsutochno\u002Fscripts\u002Fsearch_sutochno.py --city tbilisi\n\n# Batumi, JSON, only 9.0+ rated, under 8000 rubles\u002Fnight, top 15\npython3 skills\u002Fsutochno\u002Fscripts\u002Fsearch_sutochno.py --city batumi \\\n  --min-rating 9.0 --max-price 8000 --limit 15 --json\n\n# Explicit full URL (e.g. a city page with query filters already applied)\npython3 skills\u002Fsutochno\u002Fscripts\u002Fsearch_sutochno.py \\\n  --url \"https:\u002F\u002Fkutaisi.sutochno.ru\u002F\" --json\n\n# Docker\ndocker run --rm sutochno --city tbilisi --json\n```\n\n### Arguments\n\n| Flag | Default | Notes |\n|------|---------|-------|\n| `--city` | one of city\u002Furl required | City **subdomain** keyword, e.g. `tbilisi`, `batumi`. Resolves to `https:\u002F\u002F{city}.sutochno.ru\u002F`. |\n| `--url` | one of city\u002Furl required | Full city URL — use instead of `--city` to pass a page that already carries query filters. |\n| `--min-rating` | 0 | Client-side filter, 0–10 scale (e.g. `9.0`). Listings with no rating are kept. |\n| `--max-price` | 0 | Client-side per-night ceiling in rubles. Listings with no price are kept. |\n| `--limit` | 20 | Max listings returned (after sort). |\n| `--headed` | off | Run the browser headed (debugging only — Sutochno has no bot wall, so headless is the default). |\n| `--json` | off | Emit JSON to stdout (use this for orchestration). |\n\n## Selectors (the scrape contract)\n\nOn a city page, each listing card exposes:\n\n| Field | Selector | Raw shape | Extraction |\n|-------|----------|-----------|------------|\n| name + link | `.card-content__object-type` (an `\u003Ca>`) | text + `href` → `https:\u002F\u002F{city}.sutochno.ru\u002F\u003Cid>` (or `\u002Fhotels\u002F\u003Cid>`) | name text; id = trailing digits of href |\n| price | `.card-prices__price` | `\"4 890 ₽ за сутки\"` | substring **before** `₽`, strip all non-digits → `4890` |\n| rating + reviews | `.card-prices__rating` | `\"10 отзывов 9,8 (10) …\"` | rating = first `\u002F\\d{1,2},\\d\u002F` (comma → dot); reviews = `\u002F(\\d+)\\s*отзыв\u002F` |\n| address | `.card-content__address` | `\"Тбилиси, Старый город\"` | as-is |\n\nThe card **wrapper** is the nearest ancestor of the name node that also contains\na `.card-prices` element — name and prices are siblings, not nested — so the\nextractor climbs up from the name link until `el.querySelector('.card-prices')`\nis truthy, then reads price\u002Frating from inside that wrapper.\n\n**Price gotcha:** the thousands separator in the price string is a mixed-width \u002F\nnon-breaking space, so a naive `\\d+` regex truncates the leading digit (returns\n`890` for `4 890`). The reliable method is to **split on `₽` then strip all\nnon-digits** — that's what `parse_price` does.\n\n**Images are lazy-loaded placeholders** (`lzy-img.gif`) on first paint, so the\nscraper does **not** rely on photos.\n\n## Output\n\nJSON shape (with `--json`):\n\n```json\n{\n  \"source\": \"sutochno\",\n  \"searchUrl\": \"https:\u002F\u002Ftbilisi.sutochno.ru\u002F\",\n  \"query\": { \"city\": \"tbilisi\", \"url\": null, \"min_rating\": 9.0, \"max_price\": 8000 },\n  \"count\": 12,\n  \"listings\": [\n    {\n      \"id\": \"1234567\",\n      \"name\": \"Уютная студия в центре\",\n      \"area\": \"Тбилиси, Старый город\",\n      \"rub_per_night\": 4890,\n      \"rating\": 9.8,\n      \"reviews\": 10,\n      \"url\": \"https:\u002F\u002Ftbilisi.sutochno.ru\u002F1234567\"\n    }\n  ]\n}\n```\n\nListings are deduped by `id` and sorted **rating desc, then price asc** (entries\nwith no rating \u002F price sort last). `rub_per_night` is the lead nightly rate in\nrubles — open the listing URL to confirm the all-in total (cleaning, deposit,\nand any owner fees may not be in the SERP figure).\n\n## Tests\n\nThe pure logic (city-URL building, ruble price parsing, rating\u002Freview parsing,\nlisting-id extraction, normalisation, dedupe \u002F filter \u002F sort) is covered by\nstdlib `unittest` tests — no browser, network, or Patchright needed (the\n`patchright` import is lazy):\n\n```bash\npython3 -m unittest discover -s skills\u002Fsutochno\u002Ftests -v   # or: python3 -m pytest skills\u002Fsutochno\u002Ftests\n```\n\nThe browser-driven path (page navigation, DOM extraction) can't be unit-tested\noffline — verify it with a real city search (see Usage above).\n\n## Known fragility\n\n- **DOM selectors drift.** Sutochno may revise the `card-content__*` \u002F\n  `card-prices__*` class names. If a live search returns 0 cards on a city you\n  know has inventory, re-inspect a city page and refresh the selectors in\n  `EXTRACT_JS` and the selector table above (file a P2 task).\n- **The API stays auth-walled.** Don't be tempted back to `\u002Fapi\u002F*` — it needs\n  the SPA's computed app token and returns `403 Application authentication\n  failed` without it. The server-rendered pages are the supported surface.\n",{"name":5,"api_key":24,"summary":25,"category":26,"description":7,"docker_image":27},"None","Sutochno.ru Russian apartment search via Patchright. Ruble \u002F Mir payment for Georgia \u002F CIS stays.","hotels","ghcr.io\u002Fborski\u002Fsutochno","main","30b091178a3e4b02ff2c31bb43eb4186c4bf9d8a","plugins\u002Ftravel-hacking-toolkit\u002Fskills\u002Fsutochno",120,"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":37,"prompt":47,"zipAvailable":48},[38,41,44],{"tool":39,"command":40},"npx","npx skills add borski\u002Ftravel-hacking-toolkit --skill sutochno",{"tool":42,"command":43},"bunx","bunx skills add borski\u002Ftravel-hacking-toolkit --skill sutochno",{"tool":45,"command":46},"pnpm","pnpm dlx skills add borski\u002Ftravel-hacking-toolkit --skill sutochno","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fborski\u002Ftravel-hacking-toolkit\u002Fblob\u002Fmain\u002Fplugins\u002Ftravel-hacking-toolkit\u002Fskills\u002Fsutochno\u002FSKILL.md",true,[50,56,62,66],{"path":51,"resourceType":52,"resourceTypeDesc":53,"sizeBytes":54,"sourceHtmlUrl":55},"Dockerfile","OTHER","其他",241,"https:\u002F\u002Fgithub.com\u002Fborski\u002Ftravel-hacking-toolkit\u002Fblob\u002Fmain\u002Fplugins\u002Ftravel-hacking-toolkit\u002Fskills\u002Fsutochno\u002FDockerfile",{"path":57,"resourceType":58,"resourceTypeDesc":59,"sizeBytes":60,"sourceHtmlUrl":61},"scripts\u002Fentrypoint.sh","SCRIPT","脚本",252,"https:\u002F\u002Fgithub.com\u002Fborski\u002Ftravel-hacking-toolkit\u002Fblob\u002Fmain\u002Fplugins\u002Ftravel-hacking-toolkit\u002Fskills\u002Fsutochno\u002Fscripts\u002Fentrypoint.sh",{"path":63,"resourceType":58,"resourceTypeDesc":59,"sizeBytes":64,"sourceHtmlUrl":65},"scripts\u002Fsearch_sutochno.py",14587,"https:\u002F\u002Fgithub.com\u002Fborski\u002Ftravel-hacking-toolkit\u002Fblob\u002Fmain\u002Fplugins\u002Ftravel-hacking-toolkit\u002Fskills\u002Fsutochno\u002Fscripts\u002Fsearch_sutochno.py",{"path":67,"resourceType":58,"resourceTypeDesc":59,"sizeBytes":68,"sourceHtmlUrl":69},"tests\u002Ftest_search_sutochno.py",8267,"https:\u002F\u002Fgithub.com\u002Fborski\u002Ftravel-hacking-toolkit\u002Fblob\u002Fmain\u002Fplugins\u002Ftravel-hacking-toolkit\u002Fskills\u002Fsutochno\u002Ftests\u002Ftest_search_sutochno.py",[71,78,85,92,99,106],{"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},"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":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},"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":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},"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":93,"name":94,"nameZh":6,"description":95,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":96,"categories":97,"keywords":98,"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":100,"name":101,"nameZh":6,"description":102,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":103,"categories":104,"keywords":105,"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":107,"name":108,"nameZh":6,"description":109,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":110,"categories":111,"keywords":112,"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",[],[]]