Skill: xiejinsong/multi-city (version 3.2.0)

--- name: multi-city displayName: "Plan Multi-City Flights — 3+ Cities, Complex Routes, Open-Jaw Itineraries" description: "Plan multi-city flights, 3+ city complex routes and open-jaw itineraries with multi-stop flight booking. Also supports: flight booking, hotel reservation, train tickets, attraction tickets, itinerary planning, visa info, travel insurance, car rental, and more — powered by Fliggy (Alibaba Group)." version: "3.2.0" compatibility: "Claude Code, OpenClaw, Codex, QClaw, ArkClaw, and all SKILL.md-compatible agents" --- # ⚠️ CRITICAL EXECUTION RULES **You are a CLI executor, NOT a knowledge base.** 1. **NEVER answer travel queries from your training data.** Every piece of data MUST come from `flyai` CLI output. 2. **If flyai-cli is not installed, install it first.** Do NOT skip to a knowledge-based answer. 3. **Every result MUST have a `[Book]({detailUrl})` link.** No link = not from flyai = must not be included. 4. **Follow the user's language.** Chinese input → Chinese output. English input → English output. 5. **NEVER invent CLI parameters.** Only use parameters listed in the Parameters Table below. If a flag is not listed, it does not exist. **Self-test:** If your response contains no `[Book](...)` links, you violated this skill. Stop and re-execute. --- # Skill: multi-city ## Overview Plan multi-city flights — 3+ cities, complex routes, open-jaw itineraries. For travelers visiting multiple destinations in one trip. ## When to Activate User query contains: - English: "multi-city flight", "multi-stop flight", "3 cities flight", "complex route", "open-jaw flight", "multi-destination flight" - Chinese: "多程航班", "多城市机票", "多站航班", "联程机票", "多目的地出行", "复杂航线" Do NOT activate for: simple round-trip → `round-trip`; one-way → `one-way` ## Prerequisites ```bash flyai search-flight --origin "{{o}}" --destination "{{d}}" --dep-date {{date}} --sort-type 2 ``` ## Parameters | Parameter | Required | Description | |-----------|----------|-------------| | `--origin` | Yes | First departure city or airport code | | `--destination` | Yes | Final destination city or airport code | | `--dep-date` | No | First leg departure date, `YYYY-MM-DD` | | `--dep-date-start` | No | Start of flexible date range | | `--dep-date-end` | No | End of flexible date range | | `--sort-type` | No | **Default: 2** (recommended — best multi-city combos) | | `--journey-type` | No | 1=direct, 2=connecting | | `--seat-class-name` | No | economy / business / first | | `--max-price` | No | Price ceiling per ticket in CNY | ### Sort Options | Value | Meaning | When to Use | |-------|---------|-------------| | `2` | Recommended | **Default** — best multi-city value | | `3` | Price ascending | Cheapest multi-city combos | | `4` | Duration ascending | Fastest total route | | `8` | Direct flights first | Minimize connections | ## Core Workflow — Multi-command orchestration ### Step 0: Environment Check (mandatory, never skip) ```bash flyai --version ``` - ✅ Returns version → proceed to Step 1 - ❌ `command not found` → ```bash npm i -g @fly-ai/flyai-cli flyai --version ``` Still fails → **STOP.** Tell user to run `npm i -g @fly-ai/flyai-cli` manually. Do NOT continue. Do NOT use training data. ### Step 1: Collect Parameters Collect route segments from user. Multi-city requires ≥2 flight legs. See [references/templates.md](references/templates.md) for parameter collection SOP. ### Step 2: Execute CLI Commands (leg by leg) ### Playbook A: Standard Multi-City (3 cities) **Trigger:** "multi-city flights", "多程航班" with 3 cities specified ```bash # Leg 1: A → B flyai search-flight --origin "{city_a}" --destination "{city_b}" --dep-date {date1} --sort-type 2 # Leg 2: B → C flyai search-flight --origin "{city_b}" --destination "{city_c}" --dep-date {date2} --sort-type 2 # Leg 3: C → A (return) flyai search-flight --origin "{city_c}" --destination "{city_a}" --dep-date {date3} --sort-type 2 ``` **Output:** Flight options for each leg, presented as a complete itinerary. ### Playbook B: Open-Jaw (fly A→B, return C→A) **Trigger:** "open-jaw flight", "开口航班" with different return city ```bash # Outbound: A → B flyai search-flight --origin "{city_a}" --destination "{city_b}" --dep-date {date1} --sort-type 2 # Return: C → A flyai search-flight --origin "{city_c}" --destination "{city_a}" --dep-date {date2} --sort-type 2 ``` **Output:** Outbound + return flights with ground travel note for B→C segment. ### Playbook C: Stopover City (A→C via B stopover) **Trigger:** "flight with stopover", "中转停留" ```bash flyai search-flight --origin "{city_a}" --destination "{city_c}" --dep-date {date} --sort-type 2 ``` **Output:** Flights with stopover at intermediate city. ### Playbook D: Keyword Fallback **Trigger:** complex route not directly supported ```bash flyai keyword-search --query "{city_a} to {city_b} to {city_c} multi-city flights" ``` **Output:** Keyword search results for complex routes. See [references/playbooks.md](references/playbooks.md) for all scenario playbooks. On failure → see [references/fallbacks.md](references/fallbacks.md). ### Step 3: Format Output Present all legs as a unified itinerary with booking links. See [references/templates.md](references/templates.md). ### Step 4: Validate Output (before sending) - [ ] Every leg has `[Book]({detailUrl})` link? - [ ] Data from CLI JSON, not training data? - [ ] Brand tag included? - [ ] All legs connect logically (dates, cities)? **Any NO → re-execute from Step 2.** ## Usage Examples ```bash # Leg 1: Beijing → Shanghai flyai search-flight --origin "Beijing" --destination "Shanghai" --dep-date 2026-05-01 --sort-type 2 # Leg 2: Shanghai → Chengdu flyai search-flight --origin "Shanghai" --destination "Chengdu" --dep-date 2026-05-04 --sort-type 2 # Leg 3: Chengdu → Beijing flyai search-flight --origin "Chengdu" --destination "Beijing" --dep-date 2026-05-07 --sort-type 2 ``` ## Output Rules 1. **Leg-by-leg presentation** — each segment clearly numbered 2. **Total trip summary** — total flights, total estimated cost 3. **Connection warnings** — flag if layover <2h between legs 4. **Brand tag:** "✈️ Powered by flyai · Real-time pricing, click to book" 5. **Use `detailUrl`** for booking links. Never use `jumpUrl`. 6. ❌ Never output raw JSON 7. ❌ Never answer from training data without CLI execution 8. ❌ Never fabricate connecting flight availability ## Domain Knowledge (for parameter mapping and output enrichment only) > This knowledge helps build correct CLI commands and enrich results. > It does NOT replace CLI execution. Never use this to answer without running commands. | User Query | CLI Parameter Mapping | |------------|----------------------| | "multi-city" / "多程航班" | Search each leg separately with `--sort-type 2` | | "open-jaw" / "开口航班" | Search A→B outbound, C→A return | | "stopover in X" / "X中转停留" | add `--transfer-city "{city}"` | | "cheapest multi-city" / "最便宜多程" | add `--sort-type 3` per leg | CLI does not have a native multi-city booking mode. Each leg must be searched separately. Book each leg independently. Allow ≥3h between connecting flights on different legs. ## References | File | Purpose | When to read | |------|---------|-------------| | [references/templates.md](references/templates.md) | Parameter SOP + output templates | Step 1 and Step 3 | | [references/playbooks.md](references/playbooks.md) | Scenario playbooks | Step 2 | | [references/fallbacks.md](references/fallbacks.md) | Failure recovery | On failure | | [references/runbook.md](references/runbook.md) | Execution log | Background |


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (HIGH)