Agent skill

Southwest

by borski in borski/travel-hacking-toolkit

Search Southwest Airlines fares and points pricing via Patchright browser automation.

MITAuto-check passedProductivity & Automation

Install Southwest

skills CLI
$ npx skills add borski/travel-hacking-toolkit --skill southwest -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install borski/travel-hacking-toolkit southwest --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/borski/travel-hacking-toolkit.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/travel-hacking-toolkit/skills/southwest .claude/skills/southwest && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
southwest
GitHub stars
688
Token cost
~3.8k tokens
SKILL.md length
1,549 words
Files
6 (incl. scripts)
Skills in repo
46
Repo updated
First seen
Licence
MIT

At a glance

Search Southwest Airlines fares and points pricing via Patchright browser automation.

  • Works in 7 steps: Launches Patchright (undetected… → Visits southwest.com homepage first to… → Navigates to the results URL with… → …
  • Tasks that involve Browser automation
  • SKILL.md covers Prerequisites, When to Use, When NOT to Use and Southwest Fare Classes, plus 8 more sections
  • Runs Python and Shell scripts from its folder; calls docker, python3 and pip; needs SW_PASSWORD

What it does

Southwest is an agent skill from borski/travel-hacking-toolkit. 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.

Its SKILL.md is about 3.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 6 other files, including scripts (for example `scripts/check_change.py`, `scripts/entrypoint.sh` and `scripts/monitor.py`).

It sits in Productivity & Automation, covering Browser automation. It works with Docker and Playwright. The repository describes itself as: AI-powered travel hacking and search with cash, points, miles, and award flights. Drop-in skills and MCP servers for Claude, Codex, and OpenCode. The licence is MIT.

When your agent uses it

  • Tasks that involve Browser automation

Example prompts

  • “/southwest”

Requirements

  • Python 3
  • A Bash shell
  • Docker
  • Pre-approved tools (allowed-tools): Bash(python3 *), Bash(docker *)

Workflow steps

7 steps, taken from the first numbered list in SKILL.md.

  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
  5. Extracts flight text from [role='main'] (NOT which is the booking form)
  6. Parses flight blocks by splitting on # \d+ patterns
  7. Cleans up the browser and temp profile

What it can do on your machine

Read from SKILL.md and the folder at commit db82131. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Bash(python3 *)
    • Bash(docker *)

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 4 files in scripts/ (Python and Shell), which the agent can run.

    Shell commands in SKILL.md call:

    • docker
    • python3
    • pip

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use docker and pip, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • SW_PASSWORD

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Southwest loads about 3.8k tokens when it runs. Until then it costs about 49 tokens; SKILL.md has 1,549 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~49
When it runs · the whole SKILL.md, loaded when a task matches
~3.8k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from borski/travel-hacking-toolkit at commit db82131, republished under its MIT licence (© borski). 1,549 words, ~3,836 tokens.

Download SKILL.mdSave it as .claude/skills/southwest/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.
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.
allowed-tools
Bash(python3 *), Bash(docker *)
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

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:

bash
# 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.

bash
# 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:

  • Navigate to southwest.com homepage FIRST, then to the results URL. Direct URL without homepage warmup gets blocked.
  • Use fareType=POINTS URL parameter for points pricing. Don't try to click the Points toggle on the page.
  • Use a fresh persistent browser context (temp dir) each run to avoid fingerprint accumulation.
  • Extract text from [role='main'] NOT <main>. The <main> element contains the booking form. [role='main'] contains the flight results.
  • Flight blocks can be parsed by splitting on # \d+ patterns and ending at View seats.
  • Always dismiss the cookie banner first. It blocks interactions.

Prerequisites

bash
pip install patchright && patchright install chromium

Or use Docker (no local install needed):

bash
# Pre-built image (fastest)
docker pull ghcr.io/borski/sw-fares:latest

# Or build locally
docker build -t sw-fares skills/southwest/

When to Use

  • User asks about Southwest flights or fares
  • Need points pricing (not available anywhere else)
  • Need fare class breakdown (Basic, Choice, Choice Preferred, Choice Extra)
  • Calculating Companion Pass value
  • Comparing SW points vs cash vs other airlines

When NOT to Use

  • Just need SW cash prices: Use google-flights skill instead (faster)
  • Completing purchases: Find flights only. Do not book.
  • Non-Southwest airlines: Use duffel, ignav, google-flights, or other skills

Southwest Fare Classes

FarePointsCashCompanion PassChange/CancelBags
Basic (Wanna Get Away)LowestLowestNOCredit only2 free
Choice (Wanna Get Away Plus)LowLowYESTransferable credit2 free
Choice Preferred (Anytime)HighHighYESRefundable2 free
Choice Extra (Business Select)HighestHighestYESRefundable + priority2 free

Critical for Companion Pass: Only Choice and above qualify. Basic does NOT. This changes the CPP math significantly.

Companion Pass CPP Formula

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."

Search: Use the Script

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.

bash
# 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.

How the Script Works

  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
  5. Extracts flight text from [role='main'] (NOT <main> which is the booking form)
  6. Parses flight blocks by splitting on # \d+ patterns
  7. Cleans up the browser and temp profile

Why fareType in the URL instead of clicking the Points toggle: The Points label on the results page is in a different frame context than the flight cards. Clicking it via Playwright is unreliable. Using the URL parameter loads points results directly. Two page loads (cash + points) is more reliable than one load + a toggle click.

Why [role='main'] not main: SW has two content areas. The <main> HTML element contains the booking form. The [role='main'] ARIA attribute marks the flight results. Using the wrong one returns zero flights.

Output Format

Always use markdown tables. Show both cash and points in separate tables.

Cash Prices
FlightDepartArriveStopsDurationBasicChoiceCh PrefCh Extra
#1046:00AM9:35AMNonstop2h 35m$277$317$387$432
#16817:40PM11:05PMNonstop2h 25m$209$249$319$364
#481/37806:35AM12:05PM1 stop via PHX4h 30m$219$259$329$374
Points Prices
FlightDepartArriveStopsDurationBasicChoiceCh PrefCh Extra
#1046:00AM9:35AMNonstop2h 35m23,500 +$5.6027,000 +$5.6033,000 +$5.6036,500 +$5.60
After Tables
  • Calculate CPP for each fare class: cash_price / points x 100
  • Flag which fares qualify for Companion Pass (Choice and above)
  • If CP is in play, show the 2-pax value
  • Compare against other airline options if available

Troubleshooting

  • "No flights found": SW may have flagged the IP from too many automated requests. Wait a few minutes and try again, or try Docker (different network stack).
  • Chrome window pops up: Expected in local mode. Use Docker for no popup.
  • Script hangs: SW's page can take up to 20 seconds to render. The 15-second wait is usually enough but slow connections may need more.
  • "Oops" error page: Retry after a short wait. SW's site can be flaky.

Limitations

  • Headed mode required. SW detects and blocks headless browsers, even with Patchright's stealth patches. Docker+xvfb is the workaround for background operation.
  • No codeshare data. SW doesn't codeshare with anyone.
  • ~20 seconds per search. Homepage warmup + page render time. Slower than API sources.
  • Prices change frequently. SW uses dynamic pricing. Results are point-in-time.
  • One-way searches only return departing flights. For round-trip, the script fetches departure fares. Return flight fare search would require a second URL load (future enhancement).

Change Flight Price Monitor (check_change.py)

READ-ONLY script. NEVER modifies, changes, or cancels any flight.

Logs into southwest.com, looks up an existing reservation, and reads the Change Flight page to check if prices have dropped below what was paid.

Show full SKILL.md (613 more words)Show less
Docker Usage (No Popup Window)
bash
# Set your SW credentials however you like (env vars, 1Password, etc.)
export SW_USERNAME="your_username"
export SW_PASSWORD="your_password"

# List all upcoming trips (auto-discover confirmation numbers)
docker run --rm -e SW_USERNAME -e SW_PASSWORD \
  ghcr.io/borski/sw-fares change --list --json

# Check a specific reservation for price drops
docker run --rm -e SW_USERNAME -e SW_PASSWORD \
  ghcr.io/borski/sw-fares change --conf ABC123 --first Jane --last Doe --json

# Local (opens Chrome window, for debugging only)
SW_USERNAME=your_user SW_PASSWORD=your_pass \
  python3 scripts/check_change.py --conf ABC123 --first Jane --last Doe --debug

SW bookings use the legal name on the reservation, not nicknames. Use the exact first and last name that appears on the booking.

How It Works
  1. Logs into southwest.com via header login flyout
  2. For --list: clicks My Account, expands accordion for each trip, extracts confirmation numbers
  3. For --conf: navigates to Change Flight page, fills lookup form, selects both legs, clicks "Explore options"
  4. Reads the change results page which shows fare differences for every available flight:
    • CURRENT FLIGHT = your booked flight (Basic cell shows "CURRENT", no change)
    • +2,000 = this flight costs 2,000 points MORE than what you paid
    • -2,000 = this flight costs 2,000 points LESS (savings, rebook opportunity)
    • Unavail = fare class sold out
  5. Flags any flight with a negative diff as a savings opportunity
Safety Guardrails
  1. DANGEROUS_LABELS blocklist: "change this flight", "confirm", "cancel", "book", "purchase", etc.
  2. is_dangerous_click() check on every button click after the login and lookup phases
  3. extract_results() is read-only. Zero clicks after the leg selection + "Explore options" step
  4. The script selects legs and views alternatives but NEVER selects a replacement flight or confirms any change
Verified Working Selectors (Apr 5, 2026)

Login flyout:

  • Trigger: button:has-text('Log in')
  • Username: input[aria-label*='Account']
  • Password: input[name='password']
  • Submit: button[type='submit']:has-text('Log in')

Change flight lookup form:

  • Confirmation: input[id*='confirmationNumber']
  • First name: input#passengerFirstName
  • Last name: input#passengerLastName
  • Submit: button#form-mixin--submit-button (text: "Continue")

Leg selection:

  • Checkboxes: label:has(input[type='checkbox']) (visible labels, hidden inputs)
  • Continue: button#form-mixin--submit-button (text: "Explore options")
Important Limitation: Companion Pass Linked Reservations

The change command DOES NOT WORK on Companion Pass-linked reservations. SW shows a banner: "Companion itinerary linked. To change it, cancel the companion's flight first."

For CP-linked reservations (or any monitoring scenario where you don't want to log in), use the monitor subcommand instead. It uses the public fare-search flow and matches your booked flight number against current results. No login needed.

Fare Drop Monitor (monitor.py)

Compare current SW fares against what you paid for booked flights. Reports any specific booked flight where the current price has dropped below the baseline (= reclaimable travel credit when you rebook).

No login needed. Uses the public search-fares flow and matches by exact flight number. Works on CP-linked reservations where the change-flight flow is blocked.

Config File

Provide a JSON array of trips:

json
[
  {
    "name": "Trip name (display only)",
    "confirmation": "ABC123",
    "passenger": "Jane (free-text label, display only)",
    "outbound": {
      "origin": "SJC",
      "dest": "SAN",
      "date": "2026-04-30",
      "flight_number": "4107",
      "baseline_pts": 13000
    },
    "return": {
      "origin": "SAN",
      "dest": "SJC",
      "date": "2026-05-03",
      "flight_number": "4119",
      "baseline_pts": 17500
    }
  }
]

The flight_number MUST match exactly how SW displays it in search results. For multi-segment flights it includes spaces, e.g. "3657 / 4630". The return leg can be omitted for one-way trips.

Docker Usage
bash
# Check all trips in the config
docker run --rm -v /path/to/trips.json:/app/trips.json:ro \
  ghcr.io/borski/sw-fares monitor --config /app/trips.json

# Check just one trip by confirmation number
docker run --rm -v /path/to/trips.json:/app/trips.json:ro \
  ghcr.io/borski/sw-fares monitor --config /app/trips.json --only ABC123

# JSON output
docker run --rm -v /path/to/trips.json:/app/trips.json:ro \
  ghcr.io/borski/sw-fares monitor --config /app/trips.json --json
Local Usage (opens Chrome window briefly)
bash
python3 scripts/monitor.py --config /path/to/trips.json
How It Works
  1. For each leg of each trip in the config:
    • Navigate to SW homepage (resets SPA state between legs)
    • Search the route + date in points fareType
    • Validate the results URL contains the requested origin and dest (rejects stale renders)
    • Find the SPECIFIC booked flight number in the results
    • Read its current Basic fare in points
    • Compare against baseline_pts from config
  2. Report savings (positive) or upcharge (negative) per leg, plus a trip-level total
After a Rebook

If you rebook a leg to capture savings, update the baseline_pts for that leg in the config to the new (lower) paid amount. Otherwise the next monitor run will keep flagging the same opportunity falsely.

Why It's Better Than the Change Flow
check_changemonitor
Login requiredYesNo
Works on CP-linked reservationsNoYes
Shows alternatives at all timesYesNo (only the booked flight)
Brittle SW DOM dependenciesHigh (form clicks)Low (URL params + text parse)
Output detailFull fare-class diffs for every alternativeBasic-fare diff for your exact booked flight

monitor is the right tool for routine baseline tracking. check_change is useful when you want to see ALL alternatives across all fare classes, but only on non-CP reservations.

© borski, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 5 other files (scripts) in plugins/travel-hacking-toolkit/skills/southwest of borski/travel-hacking-toolkit.

  • SKILL.md
  • Dockerfile
  • scripts/check_change.py
  • scripts/entrypoint.sh
  • scripts/monitor.py
  • scripts/search_fares.py

Open the folder on GitHubat commit db82131

Compare with similar skills

Southwest next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Southwest compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Southwest this skillborski/travel-hacking-toolkit688—~3.8kAutomated safety check: PassMIT
Project Pull Requestswimmwatch/cloakbrowser-mcp164—~1kAutomated safety check: PassMIT
Scraper Builderjwynia/agent-skills170—~4kAutomated safety check: PassMIT
Project Releaseswimmwatch/cloakbrowser-mcp164—~1.9kAutomated safety check: PassMIT
Project Docs Maintainerswimmwatch/cloakbrowser-mcp164—~569Automated safety check: PassMIT
PlaywrightEliasOulkadi/shokunin114—~3.6kAutomated safety check: NotesMIT

Similar skills

  • Project Pull Request

    swimmwatch/cloakbrowser-mcp

    Create, update, prepare, or review a cloakbrowser-mcp GitHub Pull Request only when the user explicitly requests PR work.

    164 GitHub stars~1k tokensUpdated 2 days ago
    DevelopmentAuto-check passed
  • Scraper Builder

    jwynia/agent-skills

    Guide AI agents to generate complete PageObject pattern web scraper projects using Playwright and TypeScript with Docker deployment.

    170 GitHub stars~4k tokensUpdated 7 mo ago
    Data & AnalyticsAuto-check passed
  • Project Release

    swimmwatch/cloakbrowser-mcp

    Prepare, publish, verify, or recover a cloakbrowser-mcp release only when the user explicitly requests release work.

    164 GitHub stars~1.9k tokensUpdated 2 days ago
    Agent WorkflowsAuto-check passed
  • Project Docs Maintainer

    swimmwatch/cloakbrowser-mcp

    Maintain, organize, consolidate, or audit the cloakbrowser-mcp documentation set only when the user explicitly requests project documentation maintenance or an authorized public change requires it.

    164 GitHub stars~569 tokensUpdated 2 days ago
    DevelopmentAuto-check passed
  • Playwright

    EliasOulkadi/shokunin

    Browser automation, web scraping, E2E testing, and visual regression with Playwright.

    114 GitHub stars~3.6k tokensUpdated 6 days ago
    Testing & QAAuto-check: notes
  • Skyvern Browser Automation

    Skyvern-AI/skyvern

    Picks the right Skyvern CLI command for a web task, from quick yes/no checks to reusable multi-page workflows, instead of falling back to plain page fetching.

    23k GitHub starsUsed in 1 repo~2.9k tokens
    Productivity & AutomationAuto-check passed

More from borski/travel-hacking-toolkit

All 46 skills in this repo
  • Amex Travel

    borski/travel-hacking-toolkit

    Search Amex travel portal for cash prices, MR points pricing, IAP discounts, and FHR/THC hotel benefits via Patchright.

    688 GitHub stars~3.1k tokensUpdated 5 days ago
    Auto-check passed
  • Chase Travel

    borski/travel-hacking-toolkit

    Search Chase UR travel portal via Patchright for cash prices, points pricing, Points Boost offers, and Chase Edit hotel benefits.

    688 GitHub stars~2.8k tokensUpdated 5 days ago
    Auto-check passed
  • Deutsche Bahn

    borski/travel-hacking-toolkit

    Deutsche Bahn train schedules, journey planning, and departures across Germany and into neighboring countries (Austria, Switzerland, Netherlands, France, Belgium).

    688 GitHub stars~1.5k tokensUpdated 5 days ago
    Auto-check passed
  • Sutochno

    borski/travel-hacking-toolkit

    Search Sutochno.ru (СУТОЧНО.РУ), a Russian short-term apartment-rental platform where you book directly from owners and pay in rubles (Mir card / bank transfer).

    688 GitHub stars~2.1k tokensUpdated 5 days ago
    Auto-check passed
  • Ticketsatwork

    borski/travel-hacking-toolkit

    Search TicketsAtWork (EBG corporate perks) for hotels, theme park tickets, attractions, and rental cars via Patchright.

    688 GitHub stars~4.2k tokensUpdated 5 days ago
    Auto-check passed
  • Vrbo

    borski/travel-hacking-toolkit

    Search VRBO (Vrbo / Expedia Group) vacation rentals including entire homes, condos, and cabins via Patchright browser automation.

    688 GitHub stars~1.7k tokensUpdated 5 days ago
    Auto-check passed

Questions about Southwest

What does Southwest do?

Search Southwest Airlines fares and points pricing via Patchright browser automation. Southwest is an agent skill from borski/travel-hacking-toolkit. Search Southwest Airlines fares and points pricing via Patchright browser automation.

When should I use Southwest?

Southwest fits situations like: tasks that involve Browser automation.

How do I install Southwest in Claude Code?

Run `npx skills add borski/travel-hacking-toolkit --skill southwest -a claude-code`. Or copy the skill folder (plugins/travel-hacking-toolkit/skills/southwest in borski/travel-hacking-toolkit) into .claude/skills/southwest in your project. Claude Code loads it when a task matches its description.

How do I install Southwest in Codex?

Run `npx skills add borski/travel-hacking-toolkit --skill southwest -a codex`. Or copy the skill folder (plugins/travel-hacking-toolkit/skills/southwest in borski/travel-hacking-toolkit) into .agents/skills/southwest in your project. Codex loads it when a task matches its description.

Can I use Southwest in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add borski/travel-hacking-toolkit --skill southwest -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/southwest, .gemini/skills/southwest, .github/skills/southwest and .opencode/skills/southwest in your project.

What does Southwest need to run?

Going by SKILL.md and its folder, Southwest needs Python and a shell for the scripts in its folder, the command-line tools its instructions call (docker, python3 and pip) and credentials named SW_PASSWORD. Our summary lists: Python 3; A Bash shell; Docker. Its frontmatter pre-approves these tools: Bash(python3 *), Bash(docker *).

Does Southwest access the network?

SKILL.md contains no URLs. Its commands use docker and pip, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Southwest safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Southwest use?

Southwest is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Southwest use?

About 3.8k tokens (SKILL.md is roughly 15k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Southwest?

Skills that share tags, products or a category with Southwest: Project Pull Request (swimmwatch/cloakbrowser-mcp, 164 stars), Scraper Builder (jwynia/agent-skills, 170 stars), Project Release (swimmwatch/cloakbrowser-mcp, 164 stars) and Project Docs Maintainer (swimmwatch/cloakbrowser-mcp, 164 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Southwest?

borski (a GitHub user) maintains it in borski/travel-hacking-toolkit, which has 688 GitHub stars. The repository holds 46 skills in this directory. The repository was last updated on October 5, 2026.

Source: borski/travel-hacking-toolkit on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.