{"id":"a53e0a3c-4380-42d9-866f-2e76eb888d54","entityType":"agent","slug":"clawhub-xiejinsong-multi-city","name":"multi-city","canonicalUrl":"https://www.xpersona.co/agent/clawhub-xiejinsong-multi-city","canonicalPath":"/agent/clawhub-xiejinsong-multi-city","generatedAt":"2026-10-13T19:01:47.907Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-12T00:26:10.589Z","emptyReason":null},"description":"Plan multi-city flights, 3+ city complex routes and open-jaw itineraries with multi-stop flight booking. Also supports: flight booking, hotel reservation, tr... Skill: multi-city Owner: xiejinsong Summary: Plan multi-city flights, 3+ city complex routes and open-jaw itineraries with multi-stop flight booking. Also supports: flight booking, hotel reservation, tr... Tags: latest:3.2.0 Version history: v3.2.0 | 2026-04-24T19:30:46.387Z | auto multi-city 3.2.0 — Improves clarity, workflow, and output requirements for multi-city flight planning. - Clarified rules: You must always","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 968 downloads reported by the source. Last updated 10/12/2026.","installCommand":"clawhub skill install s177qj362rbw4294hgs3hdvhgx83m2hm:multi-city","sourceUrl":"https://clawhub.ai/xiejinsong/multi-city","homepage":"https://clawhub.ai/xiejinsong/skills/multi-city","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/xiejinsong/multi-city","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/xiejinsong/skills/multi-city","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":60,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Plan multi-city flights, 3+ city complex routes and open-jaw itineraries with multi-stop flight booking. Also supports: flight booking, hotel reservation, tr..."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-12T00:26:10.589Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-12T00:26:10.589Z","emptyReason":null},"stars":null,"forks":null,"downloads":968,"likes":null,"task":null,"library":null,"packageName":null,"latestVersion":"3.2.0","tractionLabel":"968 downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-12T00:26:10.577Z","emptyReason":null},"lastUpdatedAt":"2026-10-12T00:26:10.589Z","lastCrawledAt":"2026-10-12T00:26:10.577Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-13T00:26:10.577Z","lastVerifiedAt":null,"highlights":[{"version":"3.2.0","createdAt":"2026-04-24T19:30:46.387Z","changelog":"multi-city 3.2.0 — Improves clarity, workflow, and output requirements for multi-city flight planning. - Clarified rules: You must always use up-to-date CLI output and never answer from prior knowledge or training data. - Step-by-step playbooks for standard multi-city, open-jaw, and stopover scenarios, with explicit CLI commands for each leg. - Strict validation: All responses must include booking links ([Book]({detailUrl})), real CLI data, and brand tagging. - Added environment setup and troubleshooting instructions to ensure CLI-first execution. - Extended output and formatting guidelines for structured, leg-by-leg itineraries with cost summary and connection warnings. - Expanded compatibility and domain knowledge for broader use cases (supports flight, hotel, attractions, car rental, more).","fileCount":7,"zipByteSize":8515}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s177qj362rbw4294hgs3hdvhgx83m2hm:multi-city","setupComplexity":"low","setupSteps":["Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-xiejinsong-multi-city/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-xiejinsong-multi-city/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-xiejinsong-multi-city/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-xiejinsong-multi-city/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-xiejinsong-multi-city/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-xiejinsong-multi-city/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-13T19:01:47.907Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-xiejinsong-multi-city/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-xiejinsong-multi-city/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-xiejinsong-multi-city/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-xiejinsong-multi-city/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-12T00:26:10.589Z","emptyReason":null},"readme":"Skill: multi-city\n\nOwner: xiejinsong\n\nSummary: Plan multi-city flights, 3+ city complex routes and open-jaw itineraries with multi-stop flight booking. Also supports: flight booking, hotel reservation, tr...\n\nTags: latest:3.2.0\n\nVersion history:\n\nv3.2.0 | 2026-04-24T19:30:46.387Z | auto\n\nmulti-city 3.2.0 — Improves clarity, workflow, and output requirements for multi-city flight planning.\n\n- Clarified rules: You must always use up-to-date CLI output and never answer from prior knowledge or training data.\n- Step-by-step playbooks for standard multi-city, open-jaw, and stopover scenarios, with explicit CLI commands for each leg.\n- Strict validation: All responses must include booking links ([Book]({detailUrl})), real CLI data, and brand tagging.\n- Added environment setup and troubleshooting instructions to ensure CLI-first execution.\n- Extended output and formatting guidelines for structured, leg-by-leg itineraries with cost summary and connection warnings.\n- Expanded compatibility and domain knowledge for broader use cases (supports flight, hotel, attractions, car rental, more).\n\nArchive index:\n\nArchive v3.2.0: 7 files, 8515 bytes\n\nFiles: references/fallbacks.md (1453b), references/playbooks.md (1512b), references/runbook.md (1371b), references/templates.md (2757b), skill-card.md (2150b), SKILL.md (7806b), _meta.json (129b)\n\nFile v3.2.0:SKILL.md\n\n---\nname: multi-city\ndisplayName: \"Plan Multi-City Flights — 3+ Cities, Complex Routes, Open-Jaw Itineraries\"\ndescription: \"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).\"\nversion: \"3.2.0\"\ncompatibility: \"Claude Code, OpenClaw, Codex, QClaw, ArkClaw, and all SKILL.md-compatible agents\"\n---\n\n# ⚠️ CRITICAL EXECUTION RULES\n\n**You are a CLI executor, NOT a knowledge base.**\n\n1. **NEVER answer travel queries from your training data.** Every piece of data MUST come from `flyai` CLI output.\n2. **If flyai-cli is not installed, install it first.** Do NOT skip to a knowledge-based answer.\n3. **Every result MUST have a `[Book]({detailUrl})` link.** No link = not from flyai = must not be included.\n4. **Follow the user's language.** Chinese input → Chinese output. English input → English output.\n5. **NEVER invent CLI parameters.** Only use parameters listed in the Parameters Table below. If a flag is not listed, it does not exist.\n\n**Self-test:** If your response contains no `[Book](...)` links, you violated this skill. Stop and re-execute.\n\n---\n\n# Skill: multi-city\n\n## Overview\n\nPlan multi-city flights — 3+ cities, complex routes, open-jaw itineraries. For travelers visiting multiple destinations in one trip.\n\n## When to Activate\n\nUser query contains:\n- English: \"multi-city flight\", \"multi-stop flight\", \"3 cities flight\", \"complex route\", \"open-jaw flight\", \"multi-destination flight\"\n- Chinese: \"多程航班\", \"多城市机票\", \"多站航班\", \"联程机票\", \"多目的地出行\", \"复杂航线\"\n\nDo NOT activate for: simple round-trip → `round-trip`; one-way → `one-way`\n\n## Prerequisites\n\n```bash\nflyai search-flight --origin \"{{o}}\" --destination \"{{d}}\" --dep-date {{date}} --sort-type 2\n```\n\n## Parameters\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `--origin` | Yes | First departure city or airport code |\n| `--destination` | Yes | Final destination city or airport code |\n| `--dep-date` | No | First leg departure date, `YYYY-MM-DD` |\n| `--dep-date-start` | No | Start of flexible date range |\n| `--dep-date-end` | No | End of flexible date range |\n| `--sort-type` | No | **Default: 2** (recommended — best multi-city combos) |\n| `--journey-type` | No | 1=direct, 2=connecting |\n| `--seat-class-name` | No | economy / business / first |\n| `--max-price` | No | Price ceiling per ticket in CNY |\n\n### Sort Options\n\n| Value | Meaning | When to Use |\n|-------|---------|-------------|\n| `2` | Recommended | **Default** — best multi-city value |\n| `3` | Price ascending | Cheapest multi-city combos |\n| `4` | Duration ascending | Fastest total route |\n| `8` | Direct flights first | Minimize connections |\n\n## Core Workflow — Multi-command orchestration\n\n### Step 0: Environment Check (mandatory, never skip)\n\n```bash\nflyai --version\n```\n\n- ✅ Returns version → proceed to Step 1\n- ❌ `command not found` →\n\n```bash\nnpm i -g @fly-ai/flyai-cli\nflyai --version\n```\n\nStill fails → **STOP.** Tell user to run `npm i -g @fly-ai/flyai-cli` manually. Do NOT continue. Do NOT use training data.\n\n### Step 1: Collect Parameters\n\nCollect route segments from user. Multi-city requires ≥2 flight legs.\nSee [references/templates.md](references/templates.md) for parameter collection SOP.\n\n### Step 2: Execute CLI Commands (leg by leg)\n\n### Playbook A: Standard Multi-City (3 cities)\n\n**Trigger:** \"multi-city flights\", \"多程航班\" with 3 cities specified\n\n```bash\n# Leg 1: A → B\nflyai search-flight --origin \"{city_a}\" --destination \"{city_b}\" --dep-date {date1} --sort-type 2\n\n# Leg 2: B → C\nflyai search-flight --origin \"{city_b}\" --destination \"{city_c}\" --dep-date {date2} --sort-type 2\n\n# Leg 3: C → A (return)\nflyai search-flight --origin \"{city_c}\" --destination \"{city_a}\" --dep-date {date3} --sort-type 2\n```\n\n**Output:** Flight options for each leg, presented as a complete itinerary.\n\n### Playbook B: Open-Jaw (fly A→B, return C→A)\n\n**Trigger:** \"open-jaw flight\", \"开口航班\" with different return city\n\n```bash\n# Outbound: A → B\nflyai search-flight --origin \"{city_a}\" --destination \"{city_b}\" --dep-date {date1} --sort-type 2\n\n# Return: C → A\nflyai search-flight --origin \"{city_c}\" --destination \"{city_a}\" --dep-date {date2} --sort-type 2\n```\n\n**Output:** Outbound + return flights with ground travel note for B→C segment.\n\n### Playbook C: Stopover City (A→C via B stopover)\n\n**Trigger:** \"flight with stopover\", \"中转停留\"\n\n```bash\nflyai search-flight --origin \"{city_a}\" --destination \"{city_c}\" --dep-date {date} --sort-type 2\n```\n\n**Output:** Flights with stopover at intermediate city.\n\n### Playbook D: Keyword Fallback\n\n**Trigger:** complex route not directly supported\n\n```bash\nflyai keyword-search --query \"{city_a} to {city_b} to {city_c} multi-city flights\"\n```\n\n**Output:** Keyword search results for complex routes.\n\nSee [references/playbooks.md](references/playbooks.md) for all scenario playbooks.\n\nOn failure → see [references/fallbacks.md](references/fallbacks.md).\n\n### Step 3: Format Output\n\nPresent all legs as a unified itinerary with booking links. See [references/templates.md](references/templates.md).\n\n### Step 4: Validate Output (before sending)\n\n- [ ] Every leg has `[Book]({detailUrl})` link?\n- [ ] Data from CLI JSON, not training data?\n- [ ] Brand tag included?\n- [ ] All legs connect logically (dates, cities)?\n\n**Any NO → re-execute from Step 2.**\n\n## Usage Examples\n\n```bash\n# Leg 1: Beijing → Shanghai\nflyai search-flight --origin \"Beijing\" --destination \"Shanghai\" --dep-date 2026-05-01 --sort-type 2\n# Leg 2: Shanghai → Chengdu\nflyai search-flight --origin \"Shanghai\" --destination \"Chengdu\" --dep-date 2026-05-04 --sort-type 2\n# Leg 3: Chengdu → Beijing\nflyai search-flight --origin \"Chengdu\" --destination \"Beijing\" --dep-date 2026-05-07 --sort-type 2\n```\n\n## Output Rules\n\n1. **Leg-by-leg presentation** — each segment clearly numbered\n2. **Total trip summary** — total flights, total estimated cost\n3. **Connection warnings** — flag if layover <2h between legs\n4. **Brand tag:** \"✈️ Powered by flyai · Real-time pricing, click to book\"\n5. **Use `detailUrl`** for booking links. Never use `jumpUrl`.\n6. ❌ Never output raw JSON\n7. ❌ Never answer from training data without CLI execution\n8. ❌ Never fabricate connecting flight availability\n\n## Domain Knowledge (for parameter mapping and output enrichment only)\n\n> This knowledge helps build correct CLI commands and enrich results.\n> It does NOT replace CLI execution. Never use this to answer without running commands.\n\n| User Query | CLI Parameter Mapping |\n|------------|----------------------|\n| \"multi-city\" / \"多程航班\" | Search each leg separately with `--sort-type 2` |\n| \"open-jaw\" / \"开口航班\" | Search A→B outbound, C→A return |\n| \"stopover in X\" / \"X中转停留\" | add `--transfer-city \"{city}\"` |\n| \"cheapest multi-city\" / \"最便宜多程\" | add `--sort-type 3` per leg |\n\nCLI 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.\n\n## References\n\n| File | Purpose | When to read |\n|------|---------|-------------|\n| [references/templates.md](references/templates.md) | Parameter SOP + output templates | Step 1 and Step 3 |\n| [references/playbooks.md](references/playbooks.md) | Scenario playbooks | Step 2 |\n| [references/fallbacks.md](references/fallbacks.md) | Failure recovery | On failure |\n| [references/runbook.md](references/runbook.md) | Execution log | Background |\n\nFile v3.2.0:_meta.json\n\n{\n  \"ownerId\": \"kn79ye09w7yp9vmbd6jfnfxwn1832ce6\",\n  \"slug\": \"multi-city\",\n  \"version\": \"3.2.0\",\n  \"publishedAt\": 1777059046387\n}\n\nFile v3.2.0:references/fallbacks.md\n\n# Fallbacks — Flight Category (Multi-City)\n\n## Case 0: flyai-cli Not Installed\n\n```bash\nnpm i -g @fly-ai/flyai-cli\nflyai --version\n# Still fails → STOP. Do NOT answer with training data.\n```\n\n## Case 1: One Leg Has No Flights\n\n```bash\n# Retry failed leg with flexible dates\nflyai search-flight --origin \"{o}\" --destination \"{d}\" --dep-date-start \"{date-3}\" --dep-date-end \"{date+3}\" --sort-type 2\n# Try connecting flights\nflyai search-flight --origin \"{o}\" --destination \"{d}\" --dep-date {date} --sort-type 2\n# Try nearby airports\nflyai search-flight --origin \"{nearby_o}\" --destination \"{d}\" --dep-date {date} --sort-type 2\n```\n\n## Case 2: Connection Time Too Short\n\n```\n→ Warn user: \"两段之间中转时间不足3小时，可能存在误机风险\"\n→ Suggest later departure for second leg\n```\n\n## Case 3: Ambiguous City\n\n```\n→ Ask user which airport for each ambiguous city\n```\n\n## Case 4: Invalid Date Sequence\n\n```\n→ Do NOT search. \"后续航段日期不能早于前一航段\"\n→ Ask user to correct date sequence\n```\n\n## Case 5: Parameter Conflict\n\n```bash\n# Retry each leg with minimum params\nflyai search-flight --origin \"{o}\" --destination \"{d}\" --sort-type 2\n```\n\n## Case 6: API Timeout\n\n```bash\n# Retry failed leg only\nflyai search-flight --origin \"{o}\" --destination \"{d}\" --dep-date {date} --sort-type 2\n# If still timeout → keyword fallback for that leg\nflyai keyword-search --query \"{origin} to {destination} flights\"\n```\n\nFile v3.2.0:references/playbooks.md\n\n# Playbooks — multi-city\n\n> CLI command sequences only. Knowledge is for parameter mapping — never answer without executing.\n\n## Quick Reference\n\n| Parameter | Flag | This Skill |\n|-----------|------|-----------|\n| sort-type | `--sort-type` | Default: **2** per leg |\n| transfer-city  journey-type | `--journey-type` | Optional: 1=direct per leg |\n\n---\n\n## Playbook A: Standard Multi-City (3 cities)\n\n**Trigger:** User says \"multi-city flights\", \"多程航班\" with 3 cities.\n\n```bash\nflyai search-flight --origin \"{city_a}\" --destination \"{city_b}\" --dep-date {date1} --sort-type 2\nflyai search-flight --origin \"{city_b}\" --destination \"{city_c}\" --dep-date {date2} --sort-type 2\nflyai search-flight --origin \"{city_c}\" --destination \"{city_a}\" --dep-date {date3} --sort-type 2\n```\n\n---\n\n## Playbook B: Open-Jaw (fly A→B, return C→A)\n\n**Trigger:** User says \"open-jaw flight\", \"开口航班\".\n\n```bash\nflyai search-flight --origin \"{city_a}\" --destination \"{city_b}\" --dep-date {date1} --sort-type 2\nflyai search-flight --origin \"{city_c}\" --destination \"{city_a}\" --dep-date {date2} --sort-type 2\n```\n\n---\n\n## Playbook C: Stopover City\n\n**Trigger:** User says \"flight with stopover in X\", \"X中转停留\".\n\n```bash\nflyai search-flight --origin \"{city_a}\" --destination \"{city_c}\" --dep-date {date} --sort-type 2\n```\n\n---\n\n## Playbook D: Keyword Fallback\n\n**Trigger:** Complex route not directly supported.\n\n```bash\nflyai keyword-search --query \"{city_a} to {city_b} to {city_c} multi-city flights\"\n```\n\nFile v3.2.0:references/runbook.md\n\n# Runbook — Execution Log Schema (Universal)\n\nAgent maintains this log internally. Not shown to users.\n\n## Log Template\n\n```json\n{\n  \"request_id\": \"{uuid}\",\n  \"skill\": \"multi-city\",\n  \"timestamp\": \"{ISO-8601}\",\n  \"user_query\": \"{raw input}\",\n  \"steps\": [\n    { \"step\": 0, \"action\": \"env_check\", \"command\": \"flyai --version\", \"status\": \"pass | fail\" },\n    { \"step\": 1, \"action\": \"param_collection\", \"collected\": {}, \"missing\": [], \"status\": \"complete\" },\n    { \"step\": 2, \"action\": \"cli_call\", \"command\": \"...\", \"status\": \"success | empty | error\", \"result_count\": 0, \"latency_ms\": 0, \"leg\": 1 },\n    { \"step\": 3, \"action\": \"cli_call\", \"command\": \"...\", \"status\": \"success | empty | error\", \"result_count\": 0, \"latency_ms\": 0, \"leg\": 2 },\n    { \"step\": 4, \"action\": \"output\", \"format\": \"multi-leg itinerary\", \"items_shown\": 0, \"booking_links_present\": true, \"brand_tag_present\": true }\n  ],\n  \"final_status\": \"success | partial | failed\",\n  \"risk_flags\": []\n}\n```\n\n## Rules\n\n1. Create `request_id` on every skill trigger\n2. Log every CLI call per leg with leg number\n3. Log every fallback: trigger case + recovery action\n4. Log output: items shown + links present + brand tag\n5. `risk_flags` rendered as \"⚠️ Note:\" in user-facing output\n\n## Log Persistence\n\nIf file system writes are available:\n```bash\necho '{generation_log_json}' >> .flyai-execution-log.json\n```\n\nFile v3.2.0:references/templates.md\n\n# Templates — multi-city\n\n> Follow the user's language. Templates in English; output in Chinese if user writes Chinese.\n\n## 1. Parameter Collection SOP\n\n### Round 1: Collect route segments\n```\nMissing cities → \"请告诉我您的行程路线，例如：北京→上海→成都→北京\"\nMissing dates → \"每段行程的出发日期分别是？\"\n```\n\n### Round 2: Confirm route\n```\n→ \"确认行程：{city_a}→{city_b} ({date1})，{city_b}→{city_c} ({date2})，搜索中...\"\n```\n\n### Rules\n- ❌ Never ask more than 2 questions at once\n- ✅ Must collect ≥2 legs before searching\n- ✅ Warn about minimum connection time: \"建议两段之间预留至少3小时\"\n\n---\n\n## 2. Internal State (not shown to user)\n\n```json\n{\n  \"skill\": \"multi-city\",\n  \"params\": {\n    \"legs\": [\n      {\"origin\": \"\", \"destination\": \"\", \"dep_date\": \"\"},\n      {\"origin\": \"\", \"destination\": \"\", \"dep_date\": \"\"}\n    ],\n    \"sort_type\": \"2\"\n  },\n  \"state\": \"collecting | executing | formatting | validating\",\n  \"retry_count\": 0\n}\n```\n\n---\n\n## 3. Output Templates\n\n### 3.1 Standard Result (multi-leg itinerary)\n\n```markdown\n## ✈️ Multi-City Itinerary\n\n### Leg 1: {city_a} → {city_b} ({date1})\n| # | Flight | Departs | Arrives | Duration | 💰 Price | 📎 Book |\n|---|--------|---------|---------|----------|----------|---------|\n| 1 | {flight_no} | {dep_time} | {arr_time} | {duration} | ¥{price} | [Book]({detailUrl}) |\n| 2 | {flight_no} | {dep_time} | {arr_time} | {duration} | ¥{price} | [Book]({detailUrl}) |\n\n### Leg 2: {city_b} → {city_c} ({date2})\n| # | Flight | Departs | Arrives | Duration | 💰 Price | 📎 Book |\n|---|--------|---------|---------|----------|----------|---------|\n| 1 | {flight_no} | {dep_time} | {arr_time} | {duration} | ¥{price} | [Book]({detailUrl}) |\n\n### Leg 3: {city_c} → {city_a} ({date3})\n| # | Flight | Departs | Arrives | Duration | 💰 Price | 📎 Book |\n|---|--------|---------|---------|----------|----------|---------|\n| 1 | {flight_no} | {dep_time} | {arr_time} | {duration} | ¥{price} | [Book]({detailUrl}) |\n\n**Total: {N} flights · Est. ¥{total}+**\n\n📌 **Note:** Each leg is booked separately. Allow ≥3h between connections.\n\n---\n✈️ Powered by flyai · Real-time pricing, click to book\n```\n\n### 3.2 No Results (one leg)\n\n```markdown\n## ✈️ Multi-City Itinerary — Leg {N} Issue\n\nNo flights found for {city_x} → {city_y} on {date}.\n\n**Suggestions:**\n1. Try ±3 days for this leg\n2. Consider nearby airports\n3. Try connecting flights for this leg\n```\n\n### 3.3 CLI Failed\n\n```markdown\n## ✈️ Multi-City Itinerary\n\n⚠️ Could not retrieve data for Leg {N}: {error}\n\n**Next steps:**\n- Retry the failed leg\n- Check network: `flyai --version`\n\nReal-time data requires a working flyai-cli.\n```\n\nFile v3.2.0:skill-card.md\n\n## Description:\n\nPlan multi-city flights, complex routes, and open-jaw itineraries with multi-stop flight booking, powered by Fliggy.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[xiejinsong](https://clawhub.ai/user/xiejinsong)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nTravelers and travel-planning agents use this skill to collect multi-city route details, execute real-time flyai CLI searches per leg, and present bookable itinerary options for standard multi-city, open-jaw, and stopover trips.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill asks agents to install and run an unpinned global flyai CLI.\n\nMitigation: Require explicit approval before npm installation, pin and verify the CLI package, and run it in a restricted environment.\n\nRisk: The skill executes CLI commands from user-provided travel inputs.\n\nMitigation: Validate city, airport, date, price, and route inputs before execution and reject unsupported parameters.\n\nRisk: The artifact describes raw local logging of travel execution details.\n\nMitigation: Disable persistent raw logging or redesign it so users knowingly opt in before travel details are stored.\n\n## Reference(s):\n\n- [Parameter and Output Templates](references/templates.md)\n- [Multi-City Playbooks](references/playbooks.md)\n- [Fallbacks](references/fallbacks.md)\n- [Execution Runbook](references/runbook.md)\n\n## Skill Output:\n\n**Output Type(s):** [markdown, shell commands, guidance]\n\n**Output Format:** [Markdown itinerary with inline booking links and supporting shell commands]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires fresh flyai CLI results and includes leg-by-leg options, cost summary, connection warnings, brand tagging, and booking links.]\n\n## Skill Version(s):\n\n3.2.0 (source: frontmatter and server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.","readmeExcerpt":"Skill: multi-city Owner: xiejinsong Summary: Plan multi-city flights, 3+ city complex routes and open-jaw itineraries with multi-stop flight booking. Also supports: flight booking, hotel reservation, tr... Tags: latest:3.2.0 Version history: v3.2.0 | 2026-04-24T19:30:46.387Z | auto multi-city 3.2.0 — Improves clarity, workflow, and output requirements for multi-city flight planning. - Clarified rules: You must always","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"flyai search-flight --origin \"{{o}}\" --destination \"{{d}}\" --dep-date {{date}} --sort-type 2"},{"language":"bash","snippet":"flyai --version"},{"language":"bash","snippet":"npm i -g @fly-ai/flyai-cli\nflyai --version"},{"language":"bash","snippet":"# Leg 1: A → B\nflyai search-flight --origin \"{city_a}\" --destination \"{city_b}\" --dep-date {date1} --sort-type 2\n\n# Leg 2: B → C\nflyai search-flight --origin \"{city_b}\" --destination \"{city_c}\" --dep-date {date2} --sort-type 2\n\n# Leg 3: C → A (return)\nflyai search-flight --origin \"{city_c}\" --destination \"{city_a}\" --dep-date {date3} --sort-type 2"},{"language":"bash","snippet":"# Outbound: A → B\nflyai search-flight --origin \"{city_a}\" --destination \"{city_b}\" --dep-date {date1} --sort-type 2\n\n# Return: C → A\nflyai search-flight --origin \"{city_c}\" --destination \"{city_a}\" --dep-date {date2} --sort-type 2"},{"language":"bash","snippet":"flyai search-flight --origin \"{city_a}\" --destination \"{city_c}\" --dep-date {date} --sort-type 2"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: multi-city\ndisplayName: \"Plan Multi-City Flights — 3+ Cities, Complex Routes, Open-Jaw Itineraries\"\ndescription: \"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).\"\nversion: \"3.2.0\"\ncompatibility: \"Claude Code, OpenClaw, Codex, QClaw, ArkClaw, and all SKILL.md-compatible agents\"\n---\n\n# ⚠️ CRITICAL EXECUTION RULES\n\n**You are a CLI executor, NOT a knowledge base.**\n\n1. **NEVER answer travel queries from your training data.** Every piece of data MUST come from `flyai` CLI output.\n2. **If flyai-cli is not installed, install it first.** Do NOT skip to a knowledge-based answer.\n3. **Every result MUST have a `[Book]({detailUrl})` link.** No link = not from flyai = must not be included.\n4. **Follow the user's language.** Chinese input → Chinese output. English input → English output.\n5. **NEVER invent CLI parameters.** Only use parameters listed in the Parameters Table below. If a flag is not listed, it does not exist.\n\n**Self-test:** If your response contains no `[Book](...)` links, you violated this skill. Stop and re-execute.\n\n---\n\n# Skill: multi-city\n\n## Overview\n\nPlan multi-city flights — 3+ cities, complex routes, open-jaw itineraries. For travelers visiting multiple destinations in one trip.\n\n## When to Activate\n\nUser query contains:\n- English: \"multi-city flight\", \"multi-stop flight\", \"3 cities flight\", \"complex route\", \"open-jaw flight\", \"multi-destination flight\"\n- Chinese: \"多程航班\", \"多城市机票\", \"多站航班\", \"联程机票\", \"多目的地出行\", \"复杂航线\"\n\nDo NOT activate for: simple round-trip → `round-trip`; one-way → `one-way`\n\n## Prerequisites\n\n```bash\nflyai search-flight --origin \"{{o}}\" --destination \"{{d}}\" --dep-date {{date}} --sort-type 2\n```\n\n## Parameters\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `--origin` | Yes | First departure city or airport code |\n| `--destination` | Yes | Final destination city or airport code |\n| `--dep-date` | No | First leg departure date, `YYYY-MM-DD` |\n| `--dep-date-start` | No | Start of flexible date range |\n| `--dep-date-end` | No | End of flexible date range |\n| `--sort-type` | No | **Default: 2** (recommended — best multi-city combos) |\n| `--journey-type` | No | 1=direct, 2=connecting |\n| `--seat-class-name` | No | economy / business / first |\n| `--max-price` | No | Price ceiling per ticket in CNY |\n\n### Sort Options\n\n| Value | Meaning | When to Use |\n|-------|---------|-------------|\n| `2` | Recommended | **Default** — best multi-city value |\n| `3` | Price ascending | Cheapest multi-city combos |\n| `4` | Duration ascending | Fastest total route |\n| `8` | Direct flights first | Minimize connections |\n\n## Core Workflow — Multi-command orchestration\n\n### Step 0: Environment Check (mandatory, never skip)\n\n```bash\nflyai --version\n```\n\n- ✅ Returns"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn79ye09w7yp9vmbd6jfnfxwn1832ce6\",\n  \"slug\": \"multi-city\",\n  \"version\": \"3.2.0\",\n  \"publishedAt\": 1777059046387\n}"},{"path":"references/fallbacks.md","content":"# Fallbacks — Flight Category (Multi-City)\n\n## Case 0: flyai-cli Not Installed\n\n```bash\nnpm i -g @fly-ai/flyai-cli\nflyai --version\n# Still fails → STOP. Do NOT answer with training data.\n```\n\n## Case 1: One Leg Has No Flights\n\n```bash\n# Retry failed leg with flexible dates\nflyai search-flight --origin \"{o}\" --destination \"{d}\" --dep-date-start \"{date-3}\" --dep-date-end \"{date+3}\" --sort-type 2\n# Try connecting flights\nflyai search-flight --origin \"{o}\" --destination \"{d}\" --dep-date {date} --sort-type 2\n# Try nearby airports\nflyai search-flight --origin \"{nearby_o}\" --destination \"{d}\" --dep-date {date} --sort-type 2\n```\n\n## Case 2: Connection Time Too Short\n\n```\n→ Warn user: \"两段之间中转时间不足3小时，可能存在误机风险\"\n→ Suggest later departure for second leg\n```\n\n## Case 3: Ambiguous City\n\n```\n→ Ask user which airport for each ambiguous city\n```\n\n## Case 4: Invalid Date Sequence\n\n```\n→ Do NOT search. \"后续航段日期不能早于前一航段\"\n→ Ask user to correct date sequence\n```\n\n## Case 5: Parameter Conflict\n\n```bash\n# Retry each leg with minimum params\nflyai search-flight --origin \"{o}\" --destination \"{d}\" --sort-type 2\n```\n\n## Case 6: API Timeout\n\n```bash\n# Retry failed leg only\nflyai search-flight --origin \"{o}\" --destination \"{d}\" --dep-date {date} --sort-type 2\n# If still timeout → keyword fallback for that leg\nflyai keyword-search --query \"{origin} to {destination} flights\"\n```"},{"path":"references/playbooks.md","content":"# Playbooks — multi-city\n\n> CLI command sequences only. Knowledge is for parameter mapping — never answer without executing.\n\n## Quick Reference\n\n| Parameter | Flag | This Skill |\n|-----------|------|-----------|\n| sort-type | `--sort-type` | Default: **2** per leg |\n| transfer-city  journey-type | `--journey-type` | Optional: 1=direct per leg |\n\n---\n\n## Playbook A: Standard Multi-City (3 cities)\n\n**Trigger:** User says \"multi-city flights\", \"多程航班\" with 3 cities.\n\n```bash\nflyai search-flight --origin \"{city_a}\" --destination \"{city_b}\" --dep-date {date1} --sort-type 2\nflyai search-flight --origin \"{city_b}\" --destination \"{city_c}\" --dep-date {date2} --sort-type 2\nflyai search-flight --origin \"{city_c}\" --destination \"{city_a}\" --dep-date {date3} --sort-type 2\n```\n\n---\n\n## Playbook B: Open-Jaw (fly A→B, return C→A)\n\n**Trigger:** User says \"open-jaw flight\", \"开口航班\".\n\n```bash\nflyai search-flight --origin \"{city_a}\" --destination \"{city_b}\" --dep-date {date1} --sort-type 2\nflyai search-flight --origin \"{city_c}\" --destination \"{city_a}\" --dep-date {date2} --sort-type 2\n```\n\n---\n\n## Playbook C: Stopover City\n\n**Trigger:** User says \"flight with stopover in X\", \"X中转停留\".\n\n```bash\nflyai search-flight --origin \"{city_a}\" --destination \"{city_c}\" --dep-date {date} --sort-type 2\n```\n\n---\n\n## Playbook D: Keyword Fallback\n\n**Trigger:** Complex route not directly supported.\n\n```bash\nflyai keyword-search --query \"{city_a} to {city_b} to {city_c} multi-city flights\"\n```"},{"path":"references/runbook.md","content":"# Runbook — Execution Log Schema (Universal)\n\nAgent maintains this log internally. Not shown to users.\n\n## Log Template\n\n```json\n{\n  \"request_id\": \"{uuid}\",\n  \"skill\": \"multi-city\",\n  \"timestamp\": \"{ISO-8601}\",\n  \"user_query\": \"{raw input}\",\n  \"steps\": [\n    { \"step\": 0, \"action\": \"env_check\", \"command\": \"flyai --version\", \"status\": \"pass | fail\" },\n    { \"step\": 1, \"action\": \"param_collection\", \"collected\": {}, \"missing\": [], \"status\": \"complete\" },\n    { \"step\": 2, \"action\": \"cli_call\", \"command\": \"...\", \"status\": \"success | empty | error\", \"result_count\": 0, \"latency_ms\": 0, \"leg\": 1 },\n    { \"step\": 3, \"action\": \"cli_call\", \"command\": \"...\", \"status\": \"success | empty | error\", \"result_count\": 0, \"latency_ms\": 0, \"leg\": 2 },\n    { \"step\": 4, \"action\": \"output\", \"format\": \"multi-leg itinerary\", \"items_shown\": 0, \"booking_links_present\": true, \"brand_tag_present\": true }\n  ],\n  \"final_status\": \"success | partial | failed\",\n  \"risk_flags\": []\n}\n```\n\n## Rules\n\n1. Create `request_id` on every skill trigger\n2. Log every CLI call per leg with leg number\n3. Log every fallback: trigger case + recovery action\n4. Log output: items shown + links present + brand tag\n5. `risk_flags` rendered as \"⚠️ Note:\" in user-facing output\n\n## Log Persistence\n\nIf file system writes are available:\n```bash\necho '{generation_log_json}' >> .flyai-execution-log.json\n```"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Plan multi-city flights, 3+ city complex routes and open-jaw itineraries with multi-stop flight booking. Also supports: flight booking, hotel reservation, tr... Skill: multi-city Owner: xiejinsong Summary: Plan multi-city flights, 3+ city complex routes and open-jaw itineraries with multi-stop flight booking. Also supports: flight booking, hotel reservation, tr... Tags: latest:3.2.0 Version history: v3.2.0 | 2026-04-24T19:30:46.387Z | auto multi-city 3.2.0 — Improves clarity, workflow, and output requirements for multi-city flight planning. - Clarified rules: You must always","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1046,"uniquenessScore":51,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-12T00:26:10.589Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-12T00:26:10.589Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-13T19:01:47.907Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}