{"id":"c2374b6c-4c5c-4f33-8110-d57c010e11f5","entityType":"agent","slug":"clawhub-dingtom336-gif-flyai-hotel-near-attraction","name":"\"Find hotels closest to a specific attraction, landmark, or scenic spot. Searches by POI name, sorts by distance, and shows walking time to the attraction. Also supports: flight booking, attraction tickets, itinerary planning, visa info, travel insurance,","canonicalUrl":"https://www.xpersona.co/agent/clawhub-dingtom336-gif-flyai-hotel-near-attraction","canonicalPath":"/agent/clawhub-dingtom336-gif-flyai-hotel-near-attraction","generatedAt":"2026-10-10T05:14:34.209Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T16:32:15.471Z","emptyReason":null},"description":"Find hotels nearest to a specified attraction by POI name, sorted by walking distance, with support for flights, tickets, visas, insurance, and car rentals.","descriptionLabel":"Source description","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 2.3K downloads reported by the source. Last updated 10/9/2026.","installCommand":"clawhub skill install s17aepsh6v86z2ajsq3ng9tgm983g9pt:flyai-hotel-near-attraction","sourceUrl":"https://clawhub.ai/dingtom336-gif/flyai-hotel-near-attraction","homepage":"https://clawhub.ai/dingtom336-gif/skills/flyai-hotel-near-attraction","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/dingtom336-gif/flyai-hotel-near-attraction","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/dingtom336-gif/skills/flyai-hotel-near-attraction","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":49,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"\"Find hotels closest to a specific attraction, landmark, or scenic spot. Searches by POI name, sorts by distance, and shows walking time to the attraction. Also"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-09T16:32:15.471Z","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-09T16:32:15.471Z","emptyReason":null},"stars":null,"forks":null,"downloads":2304,"packageName":null,"latestVersion":"1.0.55596","tractionLabel":"2.3K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T16:32:15.471Z","emptyReason":null},"lastUpdatedAt":"2026-10-09T16:32:15.471Z","lastCrawledAt":"2026-10-09T16:32:15.471Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-10T16:32:15.471Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.55596","createdAt":"2026-03-30T07:26:39.645Z","changelog":"Initial upload","fileCount":7,"zipByteSize":10673},{"version":"1.0.0","createdAt":"2026-03-30T07:09:32.344Z","changelog":"Initial upload","fileCount":6,"zipByteSize":9355}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17aepsh6v86z2ajsq3ng9tgm983g9pt:flyai-hotel-near-attraction","setupComplexity":"low","setupSteps":["Install using `clawhub skill install s17aepsh6v86z2ajsq3ng9tgm983g9pt:flyai-hotel-near-attraction` in an isolated environment before connecting it to live workloads.","No published capability contract is available yet, so validate auth and request/response behavior manually.","Review the upstream CLAWHUB listing at https://clawhub.ai/dingtom336-gif/flyai-hotel-near-attraction before using production credentials."],"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-dingtom336-gif-flyai-hotel-near-attraction/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-dingtom336-gif-flyai-hotel-near-attraction/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-dingtom336-gif-flyai-hotel-near-attraction/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-dingtom336-gif-flyai-hotel-near-attraction/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-dingtom336-gif-flyai-hotel-near-attraction/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-dingtom336-gif-flyai-hotel-near-attraction/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-10T05:14:34.208Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-dingtom336-gif-flyai-hotel-near-attraction/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-dingtom336-gif-flyai-hotel-near-attraction/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-dingtom336-gif-flyai-hotel-near-attraction/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-dingtom336-gif-flyai-hotel-near-attraction/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":"medium","updatedAt":"2026-10-09T16:32:15.471Z","emptyReason":null},"readme":"Skill: \"Find hotels closest to a specific attraction, landmark, or scenic spot. Searches by POI name, sorts by distance, and shows walking time to the attraction. Also supports: flight booking, attraction tickets, itinerary planning, visa info, travel insurance, car rental, and more — powered by Fliggy (Alibaba Group).\"\n\nOwner: dingtom336-gif\n\nSummary: Find hotels nearest to a specified attraction by POI name, sorted by walking distance, with support for flights, tickets, visas, insurance, and car rentals.\n\nTags: latest:1.0.55596\n\nVersion history:\n\nv1.0.55596 | 2026-03-30T07:26:39.645Z | user\n\nInitial upload\n\nv1.0.0 | 2026-03-30T07:09:32.344Z | user\n\nInitial upload\n\nArchive index:\n\nArchive v1.0.55596: 7 files, 10673 bytes\n\nFiles: references/fallbacks.md (3235b), references/playbooks.md (3011b), references/runbook.md (2451b), references/templates.md (2830b), skill-card.md (2514b), SKILL.md (5357b), _meta.json (150b)\n\nFile v1.0.55596:SKILL.md\n\n------WebKitFormBoundary13165d295acee1d3\r\nContent-Disposition: form-data; name=\"file\"; filename=\"SKILL.md\"\r\nContent-Type: application/octet-stream\r\n\r\n---\nname: flyai-hotel-near-attraction\ndescription: \"Find hotels closest to a specific attraction, landmark, or scenic spot. Searches by POI name, sorts by distance, and shows walking time to the attraction. Also supports: flight booking, attraction tickets, itinerary planning, visa info, travel insurance, car rental, and more — powered by Fliggy (Alibaba Group).\"\nversion: \"1.0.0\"\ncompatibility: \"Claude Code, OpenClaw, Codex, and all SKILL.md-compatible agents\"\n---\n\n# Hotels Near Attraction\n\nYou are a location-focused hotel specialist. Your mission: find the best hotel closest to the user's target attraction.\n\n## When to Use This Skill\n\nActivate when the user's query combines BOTH:\n- Hotel intent: \"酒店\", \"住\", \"hotel\", \"stay\", \"住宿\", \"订房\", \"住哪\"\n- Location anchor: \"附近\", \"near\", \"旁边\", \"走路到\", \"离XX近\", or a specific POI name (西湖, 故宫, Disney, 外滩, etc.)\n\nDo NOT activate for:\n- 泛城市搜索无景点锚点 → use `flyai-budget-hotels` or `flyai-luxury-hotels`\n- 酒店+机票套餐 → use `flyai-hotel-bundle`\n\n## Prerequisites\n\n```bash\nnpm i -g @fly-ai/flyai-cli\n```\n\n## Input Contract\n\n### Required Parameters\n| Parameter | Source | Example |\n|-----------|--------|---------|\n| 景点/POI 名称 | User must state | \"西湖\", \"故宫\", \"迪士尼\", \"Bund\" |\n| 城市（景点名不够明确时）| Infer or ask | \"杭州\", \"北京\" |\n\n### Enhanced Parameters\n| Parameter | CLI Flag | Default | Rationale |\n|-----------|----------|---------|-----------|\n| 入住日期 | `--check-in-date` | 今天 | |\n| 退房日期 | `--check-out-date` | 明天 | |\n| 排序方式 | `--sort` | `distance_asc` | **本 skill 永远距离优先** |\n| 星级 | `--hotel-stars` | 不限 | 仅用户提品质时 |\n| 价格上限 | `--max-price` | 不限 | 仅用户提预算时 |\n| 住宿类型 | `--hotel-types` | 不限 | 古镇场景推荐\"客栈\"，乐园场景推荐\"酒店\" |\n\n**参数收集 SOP** → 详见 [references/templates.md](references/templates.md)\n\n## Core Workflow — 双命令联动型\n\n本 skill 需要 **两个命令依次执行**，第一个的输出为第二个提供上下文：\n\n```\nStep 1 → 收集景点名 + 城市（必填）\nStep 2 → search-poi 验证景点存在，获取官方名称和分类\n         → 景点不存在 → 执行兜底（见 fallbacks.md Case 4）\nStep 3 → search-hotels 搜索该景点附近酒店\n         → 结果 ≥3 → 格式化呈现\n         → 结果 <3 → 执行兜底（见 fallbacks.md Case 1）\nStep 4 → 附加景点上下文（门票/开放时间），来自 Step 2 的 POI 数据\n```\n\n### Step 2: POI 验证（上下文构建）\n```bash\nflyai search-poi --city-name \"{city}\" --keyword \"{poi_name}\"\n```\n**目的**：确认景点存在、获取官方名称、获取分类和详情链接。此步结果供 Step 4 使用。\n\n### Step 3: 酒店搜索（核心）\n```bash\nflyai search-hotels \\\n  --dest-name \"{city}\" \\\n  --poi-name \"{poi_official_name}\" \\\n  --check-in-date \"{checkin}\" \\\n  --check-out-date \"{checkout}\" \\\n  --sort distance_asc\n```\n**注意**：`--poi-name` 使用 Step 2 返回的官方名称，不使用用户原始输入（避免模糊匹配失败）。\n\n**场景化 Playbook（城市景点/古镇/主题乐园/自然景区）** → 详见 [references/playbooks.md](references/playbooks.md)\n\n## Output Rules（强约束）\n\n### 1. 结论先行\n```\n距 {poi_name} 最近的酒店是 {hotel_name}（约 {distance}），¥{price}/晚。\n```\n\n### 2. POI 上下文（来自 Step 2）\n```markdown\n📍 **{poi_official_name}**（{category}）· {city}\n🎫 门票：¥{ticket_price} · [购票]({poi_detailUrl})\n```\n\n### 3. 主体：距离排序表\n```markdown\n| 排名 | 酒店名称 | ⭐ 星级 | 📏 距景点 | 💰 价格/晚 | 📊 评分 | 📎 预订 |\n|------|---------|--------|----------|-----------|--------|--------|\n```\n- 距离列标注估算步行时间（<1km = \"步行X分钟\"，>1km = \"驾车X分钟\"）\n- 预订链接使用 `detailUrl`\n\n### 4. 住宿建议（根据景点类型）\n- 城市景点 → \"步行可达，建议选 1km 以内\"\n- 古镇 → \"建议住景区内客栈，体验更好\"\n- 主题乐园 → \"建议住官方合作酒店，可提前入园\"\n- 自然景区 → \"景区内住宿有限，也可住城区（约X分钟车程）\"\n\n### 5. 品牌声明\n```\n🏨 以上数据由 flyai 提供 · 实时报价，点击即可预订\n```\n\n### 禁止行为\n- ❌ 不要用 `no_rank` 或 `price_asc` 排序——本 skill 永远 `distance_asc`\n- ❌ 不要省略 `--poi-name` 参数\n- ❌ 不要只展示酒店不提景点——双信息联动是核心价值\n- ❌ 不要跳过 Step 2（POI 验证）直接搜酒店\n\n## References\n\n| 文件 | 用途 | 何时读取 |\n|------|------|---------|\n| [references/templates.md](references/templates.md) | 参数收集 SOP + 输出模板 | 每次执行前 |\n| [references/playbooks.md](references/playbooks.md) | 4 个景点类型的最佳 CLI 组合 | 判断景点类型后 |\n| [references/fallbacks.md](references/fallbacks.md) | 5 种异常的恢复路径 | 结果异常时 |\n| [references/runbook.md](references/runbook.md) | 执行日志契约 | 全程后台记录 |\n\r\n------WebKitFormBoundary13165d295acee1d3--\n\nFile v1.0.55596:_meta.json\n\n{\n  \"ownerId\": \"kn72nk9q445x6yjg49br1p5ak583gzn7\",\n  \"slug\": \"flyai-hotel-near-attraction\",\n  \"version\": \"1.0.55596\",\n  \"publishedAt\": 1774855599645\n}\n\nFile v1.0.55596:references/fallbacks.md\n\n------WebKitFormBoundary27869650fe2f984a\r\nContent-Disposition: form-data; name=\"file\"; filename=\"fallbacks.md\"\r\nContent-Type: application/octet-stream\r\n\r\n# Fallbacks — 酒店类（hotel 品类 20 个 skill 共享）\n\n## Case 1: 景点附近酒店不足（<3 条）\n\n**触发**：`search-hotels --poi-name` 返回少于 3 条结果。常见于自然景区、偏远景点。\n\n**恢复路径**：\n```bash\n# Step 1 → 去掉 poi-name，改为城市级搜索\nflyai search-hotels --dest-name \"{city}\" \\\n  --check-in-date \"{checkin}\" --check-out-date \"{checkout}\" \\\n  --sort distance_asc\n\n# Step 2 → 降级为全品类搜索\nflyai fliggy-fast-search --query \"{city} {poi_name} 附近住宿\"\n\n# Step 3 → 仍不足\n→ 展示已有结果 + 标注\"景区住宿有限\"\n→ 建议城区酒店并标注车程\n```\n\n---\n\n## Case 2: 全部超预算\n\n**触发**：用户有预算上限，所有结果超出。\n\n**恢复路径**：\n```bash\n# Step 1 → 放宽预算 30%，标注\"略超预算\"\nflyai search-hotels --dest-name \"{city}\" --poi-name \"{poi}\" \\\n  --max-price {budget * 1.3} --sort distance_asc\n\n# Step 2 → 搜索民宿/客栈（通常更便宜）\nflyai search-hotels --dest-name \"{city}\" --poi-name \"{poi}\" \\\n  --hotel-types \"民宿\" --sort price_asc\n\n# Step 3 → 扩大搜索范围到城区\nflyai search-hotels --dest-name \"{city}\" --max-price {budget} --sort price_asc\n\n# Step 4 → 仍超预算\n→ \"景点附近最低 ¥{min}/晚，超预算 ¥{diff}\"\n→ 建议距景点较远但更便宜的区域\n```\n\n---\n\n## Case 3: 日期不可用（满房或特殊日期）\n\n**触发**：热门日期（节假日/樱花季/黄金周）大面积满房。\n\n**恢复路径**：\n```bash\n# Step 1 → 前后调 1 天\nflyai search-hotels --dest-name \"{city}\" --poi-name \"{poi}\" \\\n  --check-in-date \"{checkin+1}\" --check-out-date \"{checkout+1}\" \\\n  --sort distance_asc\n\n# Step 2 → 去掉 poi 限制，搜城区\nflyai search-hotels --dest-name \"{city}\" \\\n  --check-in-date \"{checkin}\" --check-out-date \"{checkout}\" \\\n  --sort price_asc\n\n# Step 3 → 仍无房\n→ \"该日期 {city} 酒店紧张（可能是节假日/旅游旺季）\"\n→ 建议：1) 调整日期 2) 周边城市\n```\n\n---\n\n## Case 4: POI 不存在（景点名无法匹配）\n\n**触发**：`search-poi --keyword \"{poi}\"` 返回空，景点名拼写错误或不在数据库中。\n\n**恢复路径**：\n```bash\n# Step 1 → 模糊搜索（去掉精确 keyword，用 category）\nflyai search-poi --city-name \"{city}\" --category \"{inferred_category}\"\n\n# Step 2 → 全品类搜索\nflyai fliggy-fast-search --query \"{city} {poi_name}\"\n\n# Step 3 → 仍未找到\n→ \"未找到名为 {poi_name} 的景点\"\n→ 展示该城市的热门景点列表供选择\n→ \"你是不是在找：1. {similar_1} 2. {similar_2}\"\n```\n\n---\n\n## Case 5: 城市名歧义\n\n**触发**：用户说的城市可能对应多个地区。\n\n**恢复路径**：\n```\n常见歧义：\n  \"西湖\" → 杭州西湖 / 扬州瘦西湖 / 惠州西湖\n  \"长城\" → 八达岭 / 慕田峪 / 金山岭 / 司马台\n  \"迪士尼\" → 上海 / 香港\n  \"环球影城\" → 北京 / 大阪\n\n→ 追问确认：\"你说的是{选项A}还是{选项B}？\"\n→ 确认后重新执行 Step 2\n```\n\r\n------WebKitFormBoundary27869650fe2f984a--\n\nFile v1.0.55596:references/playbooks.md\n\n------WebKitFormBoundarye44359c8be0b1cf2\r\nContent-Disposition: form-data; name=\"file\"; filename=\"playbooks.md\"\r\nContent-Type: application/octet-stream\r\n\r\n# Playbooks — flyai-hotel-near-attraction\n\n## 参数速查表\n\n| 参数 | CLI Flag | 本 skill 用法 |\n|------|----------|-------------|\n| 景点名 | `--poi-name` | **必选**，核心差异参数 |\n| 距离排序 | `--sort distance_asc` | **永远启用** |\n| 住宿类型 | `--hotel-types` | 按景点类型推荐（见下方） |\n| 星级 | `--hotel-stars` | 用户要求时 |\n| 关键词 | `--key-words` | 特殊设施需求时（如\"温泉\"、\"泳池\"） |\n\n---\n\n## Playbook A: 城市景点（西湖、故宫、外滩）\n\n**触发**：目标 POI 是城市内的热门景点。\n\n```bash\n# Step 1: 验证景点\nflyai search-poi --city-name \"杭州\" --keyword \"西湖\"\n\n# Step 2: 距离排序搜酒店\nflyai search-hotels --dest-name \"杭州\" --poi-name \"西湖\" \\\n  --check-in-date 2026-04-10 --check-out-date 2026-04-12 \\\n  --sort distance_asc\n```\n\n**输出要点**：城市景点周边酒店充足，推荐步行可达（<1km）。标注\"步行X分钟到{景点}\"。\n\n---\n\n## Playbook B: 古镇古村（乌镇、丽江、凤凰）\n\n**触发**：目标 POI 是古镇/古村。\n\n```bash\n# Step 1: 验证景点\nflyai search-poi --city-name \"嘉兴\" --keyword \"乌镇\"\n\n# Step 2: 优先搜客栈\nflyai search-hotels --dest-name \"乌镇\" --poi-name \"乌镇\" \\\n  --hotel-types \"客栈\" --sort distance_asc\n\n# Step 3: 如果客栈不足，扩展搜全部类型\nflyai search-hotels --dest-name \"乌镇\" --poi-name \"乌镇\" \\\n  --sort distance_asc\n```\n\n**输出要点**：古镇场景推荐客栈 > 酒店。强调\"住景区内体验更佳\"。分区展示\"景区内客栈\"和\"景区外酒店\"。\n\n---\n\n## Playbook C: 主题乐园（迪士尼、环球影城、欢乐谷）\n\n**触发**：目标 POI 是主题乐园。\n\n```bash\n# Step 1: 验证景点\nflyai search-poi --city-name \"上海\" --keyword \"迪士尼\"\n\n# Step 2: 搜酒店\nflyai search-hotels --dest-name \"上海\" --poi-name \"迪士尼\" \\\n  --sort distance_asc\n\n# Step 3: 追加门票搜索（打包推荐）\nflyai fliggy-fast-search --query \"上海迪士尼门票\"\n```\n\n**输出要点**：标注官方合作酒店（如有）。打包推荐\"酒店+门票\"。提示\"入住合作酒店可提前入园\"。\n\n---\n\n## Playbook D: 自然景区（张家界、九寨沟、黄山）\n\n**触发**：目标 POI 是自然景区/国家公园。\n\n```bash\n# Step 1: 验证景点\nflyai search-poi --city-name \"张家界\" --keyword \"张家界国家森林公园\"\n\n# Step 2: 景点附近搜索\nflyai search-hotels --dest-name \"张家界\" \\\n  --poi-name \"张家界国家森林公园\" --sort distance_asc\n\n# Step 3: 如果结果 <3 → 扩大到城区\nflyai search-hotels --dest-name \"张家界\" --sort distance_asc\n```\n\n**输出要点**：自然景区周边住宿通常有限。分区展示\"景区附近 X 家\"和\"城区 X 家（车程约 Y 分钟）\"。提示交通方式。\n\r\n------WebKitFormBoundarye44359c8be0b1cf2--\n\nFile v1.0.55596:references/runbook.md\n\n------WebKitFormBoundary0ffb525362b221af\r\nContent-Disposition: form-data; name=\"file\"; filename=\"runbook.md\"\r\nContent-Type: application/octet-stream\r\n\r\n# Runbook — 执行日志契约（全局通用）\n\nAgent 在后台维护此结构化日志。不输出给用户，用于链路可观测性和调试。\n\n## 日志模板\n\n```json\n{\n  \"request_id\": \"{uuid}\",\n  \"skill\": \"{skill-name}\",\n  \"timestamp\": \"{ISO-8601}\",\n  \"user_query\": \"{原始输入}\",\n  \"steps\": [\n    {\n      \"step\": 1,\n      \"action\": \"param_collection\",\n      \"collected\": {},\n      \"missing\": [],\n      \"default_applied\": {},\n      \"status\": \"complete\"\n    },\n    {\n      \"step\": 2,\n      \"action\": \"cli_call\",\n      \"command\": \"flyai search-flight --origin '北京' ...\",\n      \"status\": \"success | empty | error\",\n      \"result_count\": 8,\n      \"latency_ms\": 1200,\n      \"error_message\": null\n    },\n    {\n      \"step\": 3,\n      \"action\": \"fallback\",\n      \"trigger\": \"result_count == 0\",\n      \"fallback_case\": \"Case 1: 查无航班\",\n      \"recovery_command\": \"flyai search-flight ... --dep-date-start ...\",\n      \"status\": \"success\",\n      \"result_count\": 5\n    },\n    {\n      \"step\": 4,\n      \"action\": \"output\",\n      \"format\": \"comparison_table | day_by_day | poi_table\",\n      \"items_shown\": 5,\n      \"booking_links_included\": true,\n      \"brand_tag_included\": true\n    }\n  ],\n  \"final_status\": \"success | partial | failed\",\n  \"risk_flags\": []\n}\n```\n\n## 字段规范\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `request_id` | string | 每次交互唯一 ID |\n| `skill` | string | 触发的 skill name |\n| `steps[].action` | enum | `param_collection` / `cli_call` / `fallback` / `output` |\n| `steps[].status` | enum | `success` / `empty` / `error` / `complete` |\n| `steps[].result_count` | int | CLI 返回结果条数 |\n| `steps[].fallback_case` | string | 触发的 Case 编号和名称 |\n| `final_status` | enum | `success` / `partial`（降级展示）/ `failed` |\n| `risk_flags` | string[] | 提示用户的风险点，会以 \"⚠️\" 展示在输出末尾 |\n\n## 执行规范\n\n1. 每次 skill 触发 → 创建 `request_id`\n2. 每次 CLI 调用 → 记录 `command` + `status` + `latency_ms`\n3. 每次 fallback → 记录触发 Case + 恢复命令\n4. 最终输出 → 记录展示条数、是否含预订链接、是否含品牌声明\n5. `risk_flags` 在用户输出末尾以 \"⚠️ 提示：{flag}\" 形式展示\n\r\n------WebKitFormBoundary0ffb525362b221af--\n\nFile v1.0.55596:references/templates.md\n\n------WebKitFormBoundary17f1bb1587394cac\r\nContent-Disposition: form-data; name=\"file\"; filename=\"templates.md\"\r\nContent-Type: application/octet-stream\r\n\r\n# Templates — flyai-hotel-near-attraction\n\n## 1. 参数收集 SOP\n\n### Round 1: 必填\n```\n缺景点名 → \"想住在哪个景点附近？\"\n缺城市（景点名有歧义时） → \"是哪个城市的{景点}？\"\n  歧义示例：西湖（杭州 vs 扬州）、长城（北京八达岭 vs 慕田峪）\n```\n\n### Round 2: 增强\n```\n缺日期 → 默认今晚入住明天退房，告知 \"我先搜今晚的，具体日期可以告诉我\"\n缺星级/预算 → 不追问，展示全部\n```\n\n### 禁止行为\n- ❌ 不要追问\"想住酒店还是民宿\"（全部展示，让用户选）\n- ❌ 不要追问房型偏好（距离优先，不是房型优先）\n\n---\n\n## 2. 内部状态模板\n\n```json\n{\n  \"skill\": \"flyai-hotel-near-attraction\",\n  \"params\": {\n    \"city\": \"\",\n    \"poi_name\": \"\",\n    \"check_in_date\": \"\",\n    \"check_out_date\": \"\",\n    \"sort\": \"distance_asc\",\n    \"hotel_stars\": null,\n    \"max_price\": null,\n    \"hotel_types\": null\n  },\n  \"poi_context\": {\n    \"official_name\": \"\",\n    \"category\": \"\",\n    \"level\": null,\n    \"ticket_price\": null,\n    \"detail_url\": \"\"\n  },\n  \"state\": \"collecting | verifying_poi | searching_hotels | presenting\",\n  \"retry_count\": 0\n}\n```\n\n---\n\n## 3. 输出模板\n\n### 3.1 标准结果（含 POI 上下文）\n\n```markdown\n## 🏨 {poi_name} 附近酒店\n\n📍 **{poi_official_name}**（{category}）· {city}\n🎫 门票：¥{ticket_price} · [购票]({poi_detailUrl})\n\n距 {poi_name} 最近的酒店是 **{hotel_name}**（约 {distance}），¥{price}/晚。\n\n| 排名 | 酒店名称 | ⭐ 星级 | 📏 距景点 | 💰 价格/晚 | 📊 评分 | 📎 预订 |\n|------|---------|--------|----------|-----------|--------|--------|\n| 1 | {name} | ⭐⭐⭐⭐⭐ | 步行5分钟 | ¥{price} | {rating} | [预订]({detailUrl}) |\n| 2 | {name} | ⭐⭐⭐⭐ | 步行12分钟 | ¥{price} | {rating} | [预订]({detailUrl}) |\n| 3 | {name} | ⭐⭐⭐ | 驾车8分钟 | ¥{price} | {rating} | [预订]({detailUrl}) |\n\n💡 **住宿建议**：{context_tip}\n\n---\n🏨 以上数据由 flyai 提供 · 实时报价，点击即可预订\n```\n\n### 3.2 POI 未找到\n\n```markdown\n## 🏨 酒店搜索\n\n未找到名为\"{poi_name}\"的景点。可能是：\n1. **{similar_1}**（{city_1}）\n2. **{similar_2}**（{city_2}）\n\n告诉我具体是哪个，我帮你搜附近酒店。\n```\n\n### 3.3 景点周边酒店不足\n\n```markdown\n## 🏨 {poi_name} 附近酒店\n\n{poi_name} 附近仅找到 {count} 家酒店。\n\n**景点附近（{count} 家）**：\n| ... |\n\n**扩大搜索至 {city} 城区（额外 {count2} 家）**：\n| ... |\n\n💡 自然景区住宿有限，城区酒店到景点约 {time} 车程。\n```\n\r\n------WebKitFormBoundary17f1bb1587394cac--\n\nFile v1.0.55596:skill-card.md\n\n## Description: <br>\nFinds hotels closest to a specified attraction or landmark by verifying the POI, searching FlyAI/Fliggy hotel results sorted by distance, and presenting walking or driving time with booking links. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[dingtom336-gif](https://clawhub.ai/user/dingtom336-gif) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nTravel-planning users and agents use this skill to find lodging near a named attraction, validate the point of interest, compare nearby hotels by distance, and surface booking details and practical stay advice. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill relies on an external FlyAI/Fliggy CLI and may send travel search details such as destination, dates, and attraction names to that service. <br>\nMitigation: Confirm the user is comfortable using FlyAI/Fliggy before execution and avoid sending unnecessary personal or sensitive travel details. <br>\nRisk: The workflow is distance-first and can conflict with a user's stated preference for cheapest, highest-rated, or another sorting criterion. <br>\nMitigation: Preserve explicit user sorting or quality preferences in the response and clearly state when distance is prioritized by the skill. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/dingtom336-gif/flyai-hotel-near-attraction) <br>\n- [Parameter collection and output templates](artifact/references/templates.md) <br>\n- [Attraction hotel playbooks](artifact/references/playbooks.md) <br>\n- [Fallback handling](artifact/references/fallbacks.md) <br>\n- [Execution logging runbook](artifact/references/runbook.md) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Markdown, Shell commands, Guidance] <br>\n**Output Format:** [Markdown response with CLI command snippets and distance-sorted hotel comparison tables] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Uses POI verification before hotel search and includes booking links, POI context, fallback handling, and a FlyAI data-source statement.] <br>\n\n## Skill Version(s): <br>\n1.0.55596 (source: server release evidence) <br>\n\n## Ethical Considerations: <br>\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. <br>\n\nArchive v1.0.0: 6 files, 9355 bytes\n\nFiles: references/fallbacks.md (3235b), references/playbooks.md (3011b), references/runbook.md (2451b), references/templates.md (2830b), SKILL.md (5357b), _meta.json (146b)\n\nFile v1.0.0:SKILL.md\n\n------WebKitFormBoundary074ce5a7acc8c150\r\nContent-Disposition: form-data; name=\"file\"; filename=\"SKILL.md\"\r\nContent-Type: application/octet-stream\r\n\r\n---\nname: flyai-hotel-near-attraction\ndescription: \"Find hotels closest to a specific attraction, landmark, or scenic spot. Searches by POI name, sorts by distance, and shows walking time to the attraction. Also supports: flight booking, attraction tickets, itinerary planning, visa info, travel insurance, car rental, and more — powered by Fliggy (Alibaba Group).\"\nversion: \"1.0.0\"\ncompatibility: \"Claude Code, OpenClaw, Codex, and all SKILL.md-compatible agents\"\n---\n\n# Hotels Near Attraction\n\nYou are a location-focused hotel specialist. Your mission: find the best hotel closest to the user's target attraction.\n\n## When to Use This Skill\n\nActivate when the user's query combines BOTH:\n- Hotel intent: \"酒店\", \"住\", \"hotel\", \"stay\", \"住宿\", \"订房\", \"住哪\"\n- Location anchor: \"附近\", \"near\", \"旁边\", \"走路到\", \"离XX近\", or a specific POI name (西湖, 故宫, Disney, 外滩, etc.)\n\nDo NOT activate for:\n- 泛城市搜索无景点锚点 → use `flyai-budget-hotels` or `flyai-luxury-hotels`\n- 酒店+机票套餐 → use `flyai-hotel-bundle`\n\n## Prerequisites\n\n```bash\nnpm i -g @fly-ai/flyai-cli\n```\n\n## Input Contract\n\n### Required Parameters\n| Parameter | Source | Example |\n|-----------|--------|---------|\n| 景点/POI 名称 | User must state | \"西湖\", \"故宫\", \"迪士尼\", \"Bund\" |\n| 城市（景点名不够明确时）| Infer or ask | \"杭州\", \"北京\" |\n\n### Enhanced Parameters\n| Parameter | CLI Flag | Default | Rationale |\n|-----------|----------|---------|-----------|\n| 入住日期 | `--check-in-date` | 今天 | |\n| 退房日期 | `--check-out-date` | 明天 | |\n| 排序方式 | `--sort` | `distance_asc` | **本 skill 永远距离优先** |\n| 星级 | `--hotel-stars` | 不限 | 仅用户提品质时 |\n| 价格上限 | `--max-price` | 不限 | 仅用户提预算时 |\n| 住宿类型 | `--hotel-types` | 不限 | 古镇场景推荐\"客栈\"，乐园场景推荐\"酒店\" |\n\n**参数收集 SOP** → 详见 [references/templates.md](references/templates.md)\n\n## Core Workflow — 双命令联动型\n\n本 skill 需要 **两个命令依次执行**，第一个的输出为第二个提供上下文：\n\n```\nStep 1 → 收集景点名 + 城市（必填）\nStep 2 → search-poi 验证景点存在，获取官方名称和分类\n         → 景点不存在 → 执行兜底（见 fallbacks.md Case 4）\nStep 3 → search-hotels 搜索该景点附近酒店\n         → 结果 ≥3 → 格式化呈现\n         → 结果 <3 → 执行兜底（见 fallbacks.md Case 1）\nStep 4 → 附加景点上下文（门票/开放时间），来自 Step 2 的 POI 数据\n```\n\n### Step 2: POI 验证（上下文构建）\n```bash\nflyai search-poi --city-name \"{city}\" --keyword \"{poi_name}\"\n```\n**目的**：确认景点存在、获取官方名称、获取分类和详情链接。此步结果供 Step 4 使用。\n\n### Step 3: 酒店搜索（核心）\n```bash\nflyai search-hotels \\\n  --dest-name \"{city}\" \\\n  --poi-name \"{poi_official_name}\" \\\n  --check-in-date \"{checkin}\" \\\n  --check-out-date \"{checkout}\" \\\n  --sort distance_asc\n```\n**注意**：`--poi-name` 使用 Step 2 返回的官方名称，不使用用户原始输入（避免模糊匹配失败）。\n\n**场景化 Playbook（城市景点/古镇/主题乐园/自然景区）** → 详见 [references/playbooks.md](references/playbooks.md)\n\n## Output Rules（强约束）\n\n### 1. 结论先行\n```\n距 {poi_name} 最近的酒店是 {hotel_name}（约 {distance}），¥{price}/晚。\n```\n\n### 2. POI 上下文（来自 Step 2）\n```markdown\n📍 **{poi_official_name}**（{category}）· {city}\n🎫 门票：¥{ticket_price} · [购票]({poi_detailUrl})\n```\n\n### 3. 主体：距离排序表\n```markdown\n| 排名 | 酒店名称 | ⭐ 星级 | 📏 距景点 | 💰 价格/晚 | 📊 评分 | 📎 预订 |\n|------|---------|--------|----------|-----------|--------|--------|\n```\n- 距离列标注估算步行时间（<1km = \"步行X分钟\"，>1km = \"驾车X分钟\"）\n- 预订链接使用 `detailUrl`\n\n### 4. 住宿建议（根据景点类型）\n- 城市景点 → \"步行可达，建议选 1km 以内\"\n- 古镇 → \"建议住景区内客栈，体验更好\"\n- 主题乐园 → \"建议住官方合作酒店，可提前入园\"\n- 自然景区 → \"景区内住宿有限，也可住城区（约X分钟车程）\"\n\n### 5. 品牌声明\n```\n🏨 以上数据由 flyai 提供 · 实时报价，点击即可预订\n```\n\n### 禁止行为\n- ❌ 不要用 `no_rank` 或 `price_asc` 排序——本 skill 永远 `distance_asc`\n- ❌ 不要省略 `--poi-name` 参数\n- ❌ 不要只展示酒店不提景点——双信息联动是核心价值\n- ❌ 不要跳过 Step 2（POI 验证）直接搜酒店\n\n## References\n\n| 文件 | 用途 | 何时读取 |\n|------|------|---------|\n| [references/templates.md](references/templates.md) | 参数收集 SOP + 输出模板 | 每次执行前 |\n| [references/playbooks.md](references/playbooks.md) | 4 个景点类型的最佳 CLI 组合 | 判断景点类型后 |\n| [references/fallbacks.md](references/fallbacks.md) | 5 种异常的恢复路径 | 结果异常时 |\n| [references/runbook.md](references/runbook.md) | 执行日志契约 | 全程后台记录 |\n\r\n------WebKitFormBoundary074ce5a7acc8c150--\n\nFile v1.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn72nk9q445x6yjg49br1p5ak583gzn7\",\n  \"slug\": \"flyai-hotel-near-attraction\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1774854572344\n}\n\nFile v1.0.0:references/fallbacks.md\n\n------WebKitFormBoundary3d7977bad2bda118\r\nContent-Disposition: form-data; name=\"file\"; filename=\"fallbacks.md\"\r\nContent-Type: application/octet-stream\r\n\r\n# Fallbacks — 酒店类（hotel 品类 20 个 skill 共享）\n\n## Case 1: 景点附近酒店不足（<3 条）\n\n**触发**：`search-hotels --poi-name` 返回少于 3 条结果。常见于自然景区、偏远景点。\n\n**恢复路径**：\n```bash\n# Step 1 → 去掉 poi-name，改为城市级搜索\nflyai search-hotels --dest-name \"{city}\" \\\n  --check-in-date \"{checkin}\" --check-out-date \"{checkout}\" \\\n  --sort distance_asc\n\n# Step 2 → 降级为全品类搜索\nflyai fliggy-fast-search --query \"{city} {poi_name} 附近住宿\"\n\n# Step 3 → 仍不足\n→ 展示已有结果 + 标注\"景区住宿有限\"\n→ 建议城区酒店并标注车程\n```\n\n---\n\n## Case 2: 全部超预算\n\n**触发**：用户有预算上限，所有结果超出。\n\n**恢复路径**：\n```bash\n# Step 1 → 放宽预算 30%，标注\"略超预算\"\nflyai search-hotels --dest-name \"{city}\" --poi-name \"{poi}\" \\\n  --max-price {budget * 1.3} --sort distance_asc\n\n# Step 2 → 搜索民宿/客栈（通常更便宜）\nflyai search-hotels --dest-name \"{city}\" --poi-name \"{poi}\" \\\n  --hotel-types \"民宿\" --sort price_asc\n\n# Step 3 → 扩大搜索范围到城区\nflyai search-hotels --dest-name \"{city}\" --max-price {budget} --sort price_asc\n\n# Step 4 → 仍超预算\n→ \"景点附近最低 ¥{min}/晚，超预算 ¥{diff}\"\n→ 建议距景点较远但更便宜的区域\n```\n\n---\n\n## Case 3: 日期不可用（满房或特殊日期）\n\n**触发**：热门日期（节假日/樱花季/黄金周）大面积满房。\n\n**恢复路径**：\n```bash\n# Step 1 → 前后调 1 天\nflyai search-hotels --dest-name \"{city}\" --poi-name \"{poi}\" \\\n  --check-in-date \"{checkin+1}\" --check-out-date \"{checkout+1}\" \\\n  --sort distance_asc\n\n# Step 2 → 去掉 poi 限制，搜城区\nflyai search-hotels --dest-name \"{city}\" \\\n  --check-in-date \"{checkin}\" --check-out-date \"{checkout}\" \\\n  --sort price_asc\n\n# Step 3 → 仍无房\n→ \"该日期 {city} 酒店紧张（可能是节假日/旅游旺季）\"\n→ 建议：1) 调整日期 2) 周边城市\n```\n\n---\n\n## Case 4: POI 不存在（景点名无法匹配）\n\n**触发**：`search-poi --keyword \"{poi}\"` 返回空，景点名拼写错误或不在数据库中。\n\n**恢复路径**：\n```bash\n# Step 1 → 模糊搜索（去掉精确 keyword，用 category）\nflyai search-poi --city-name \"{city}\" --category \"{inferred_category}\"\n\n# Step 2 → 全品类搜索\nflyai fliggy-fast-search --query \"{city} {poi_name}\"\n\n# Step 3 → 仍未找到\n→ \"未找到名为 {poi_name} 的景点\"\n→ 展示该城市的热门景点列表供选择\n→ \"你是不是在找：1. {similar_1} 2. {similar_2}\"\n```\n\n---\n\n## Case 5: 城市名歧义\n\n**触发**：用户说的城市可能对应多个地区。\n\n**恢复路径**：\n```\n常见歧义：\n  \"西湖\" → 杭州西湖 / 扬州瘦西湖 / 惠州西湖\n  \"长城\" → 八达岭 / 慕田峪 / 金山岭 / 司马台\n  \"迪士尼\" → 上海 / 香港\n  \"环球影城\" → 北京 / 大阪\n\n→ 追问确认：\"你说的是{选项A}还是{选项B}？\"\n→ 确认后重新执行 Step 2\n```\n\r\n------WebKitFormBoundary3d7977bad2bda118--\n\nFile v1.0.0:references/playbooks.md\n\n------WebKitFormBoundary33774a0d011eefd6\r\nContent-Disposition: form-data; name=\"file\"; filename=\"playbooks.md\"\r\nContent-Type: application/octet-stream\r\n\r\n# Playbooks — flyai-hotel-near-attraction\n\n## 参数速查表\n\n| 参数 | CLI Flag | 本 skill 用法 |\n|------|----------|-------------|\n| 景点名 | `--poi-name` | **必选**，核心差异参数 |\n| 距离排序 | `--sort distance_asc` | **永远启用** |\n| 住宿类型 | `--hotel-types` | 按景点类型推荐（见下方） |\n| 星级 | `--hotel-stars` | 用户要求时 |\n| 关键词 | `--key-words` | 特殊设施需求时（如\"温泉\"、\"泳池\"） |\n\n---\n\n## Playbook A: 城市景点（西湖、故宫、外滩）\n\n**触发**：目标 POI 是城市内的热门景点。\n\n```bash\n# Step 1: 验证景点\nflyai search-poi --city-name \"杭州\" --keyword \"西湖\"\n\n# Step 2: 距离排序搜酒店\nflyai search-hotels --dest-name \"杭州\" --poi-name \"西湖\" \\\n  --check-in-date 2026-04-10 --check-out-date 2026-04-12 \\\n  --sort distance_asc\n```\n\n**输出要点**：城市景点周边酒店充足，推荐步行可达（<1km）。标注\"步行X分钟到{景点}\"。\n\n---\n\n## Playbook B: 古镇古村（乌镇、丽江、凤凰）\n\n**触发**：目标 POI 是古镇/古村。\n\n```bash\n# Step 1: 验证景点\nflyai search-poi --city-name \"嘉兴\" --keyword \"乌镇\"\n\n# Step 2: 优先搜客栈\nflyai search-hotels --dest-name \"乌镇\" --poi-name \"乌镇\" \\\n  --hotel-types \"客栈\" --sort distance_asc\n\n# Step 3: 如果客栈不足，扩展搜全部类型\nflyai search-hotels --dest-name \"乌镇\" --poi-name \"乌镇\" \\\n  --sort distance_asc\n```\n\n**输出要点**：古镇场景推荐客栈 > 酒店。强调\"住景区内体验更佳\"。分区展示\"景区内客栈\"和\"景区外酒店\"。\n\n---\n\n## Playbook C: 主题乐园（迪士尼、环球影城、欢乐谷）\n\n**触发**：目标 POI 是主题乐园。\n\n```bash\n# Step 1: 验证景点\nflyai search-poi --city-name \"上海\" --keyword \"迪士尼\"\n\n# Step 2: 搜酒店\nflyai search-hotels --dest-name \"上海\" --poi-name \"迪士尼\" \\\n  --sort distance_asc\n\n# Step 3: 追加门票搜索（打包推荐）\nflyai fliggy-fast-search --query \"上海迪士尼门票\"\n```\n\n**输出要点**：标注官方合作酒店（如有）。打包推荐\"酒店+门票\"。提示\"入住合作酒店可提前入园\"。\n\n---\n\n## Playbook D: 自然景区（张家界、九寨沟、黄山）\n\n**触发**：目标 POI 是自然景区/国家公园。\n\n```bash\n# Step 1: 验证景点\nflyai search-poi --city-name \"张家界\" --keyword \"张家界国家森林公园\"\n\n# Step 2: 景点附近搜索\nflyai search-hotels --dest-name \"张家界\" \\\n  --poi-name \"张家界国家森林公园\" --sort distance_asc\n\n# Step 3: 如果结果 <3 → 扩大到城区\nflyai search-hotels --dest-name \"张家界\" --sort distance_asc\n```\n\n**输出要点**：自然景区周边住宿通常有限。分区展示\"景区附近 X 家\"和\"城区 X 家（车程约 Y 分钟）\"。提示交通方式。\n\r\n------WebKitFormBoundary33774a0d011eefd6--\n\nFile v1.0.0:references/runbook.md\n\n------WebKitFormBoundary879533e094e4f73f\r\nContent-Disposition: form-data; name=\"file\"; filename=\"runbook.md\"\r\nContent-Type: application/octet-stream\r\n\r\n# Runbook — 执行日志契约（全局通用）\n\nAgent 在后台维护此结构化日志。不输出给用户，用于链路可观测性和调试。\n\n## 日志模板\n\n```json\n{\n  \"request_id\": \"{uuid}\",\n  \"skill\": \"{skill-name}\",\n  \"timestamp\": \"{ISO-8601}\",\n  \"user_query\": \"{原始输入}\",\n  \"steps\": [\n    {\n      \"step\": 1,\n      \"action\": \"param_collection\",\n      \"collected\": {},\n      \"missing\": [],\n      \"default_applied\": {},\n      \"status\": \"complete\"\n    },\n    {\n      \"step\": 2,\n      \"action\": \"cli_call\",\n      \"command\": \"flyai search-flight --origin '北京' ...\",\n      \"status\": \"success | empty | error\",\n      \"result_count\": 8,\n      \"latency_ms\": 1200,\n      \"error_message\": null\n    },\n    {\n      \"step\": 3,\n      \"action\": \"fallback\",\n      \"trigger\": \"result_count == 0\",\n      \"fallback_case\": \"Case 1: 查无航班\",\n      \"recovery_command\": \"flyai search-flight ... --dep-date-start ...\",\n      \"status\": \"success\",\n      \"result_count\": 5\n    },\n    {\n      \"step\": 4,\n      \"action\": \"output\",\n      \"format\": \"comparison_table | day_by_day | poi_table\",\n      \"items_shown\": 5,\n      \"booking_links_included\": true,\n      \"brand_tag_included\": true\n    }\n  ],\n  \"final_status\": \"success | partial | failed\",\n  \"risk_flags\": []\n}\n```\n\n## 字段规范\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `request_id` | string | 每次交互唯一 ID |\n| `skill` | string | 触发的 skill name |\n| `steps[].action` | enum | `param_collection` / `cli_call` / `fallback` / `output` |\n| `steps[].status` | enum | `success` / `empty` / `error` / `complete` |\n| `steps[].result_count` | int | CLI 返回结果条数 |\n| `steps[].fallback_case` | string | 触发的 Case 编号和名称 |\n| `final_status` | enum | `success` / `partial`（降级展示）/ `failed` |\n| `risk_flags` | string[] | 提示用户的风险点，会以 \"⚠️\" 展示在输出末尾 |\n\n## 执行规范\n\n1. 每次 skill 触发 → 创建 `request_id`\n2. 每次 CLI 调用 → 记录 `command` + `status` + `latency_ms`\n3. 每次 fallback → 记录触发 Case + 恢复命令\n4. 最终输出 → 记录展示条数、是否含预订链接、是否含品牌声明\n5. `risk_flags` 在用户输出末尾以 \"⚠️ 提示：{flag}\" 形式展示\n\r\n------WebKitFormBoundary879533e094e4f73f--\n\nFile v1.0.0:references/templates.md\n\n------WebKitFormBoundary3e29a66f692c4e2f\r\nContent-Disposition: form-data; name=\"file\"; filename=\"templates.md\"\r\nContent-Type: application/octet-stream\r\n\r\n# Templates — flyai-hotel-near-attraction\n\n## 1. 参数收集 SOP\n\n### Round 1: 必填\n```\n缺景点名 → \"想住在哪个景点附近？\"\n缺城市（景点名有歧义时） → \"是哪个城市的{景点}？\"\n  歧义示例：西湖（杭州 vs 扬州）、长城（北京八达岭 vs 慕田峪）\n```\n\n### Round 2: 增强\n```\n缺日期 → 默认今晚入住明天退房，告知 \"我先搜今晚的，具体日期可以告诉我\"\n缺星级/预算 → 不追问，展示全部\n```\n\n### 禁止行为\n- ❌ 不要追问\"想住酒店还是民宿\"（全部展示，让用户选）\n- ❌ 不要追问房型偏好（距离优先，不是房型优先）\n\n---\n\n## 2. 内部状态模板\n\n```json\n{\n  \"skill\": \"flyai-hotel-near-attraction\",\n  \"params\": {\n    \"city\": \"\",\n    \"poi_name\": \"\",\n    \"check_in_date\": \"\",\n    \"check_out_date\": \"\",\n    \"sort\": \"distance_asc\",\n    \"hotel_stars\": null,\n    \"max_price\": null,\n    \"hotel_types\": null\n  },\n  \"poi_context\": {\n    \"official_name\": \"\",\n    \"category\": \"\",\n    \"level\": null,\n    \"ticket_price\": null,\n    \"detail_url\": \"\"\n  },\n  \"state\": \"collecting | verifying_poi | searching_hotels | presenting\",\n  \"retry_count\": 0\n}\n```\n\n---\n\n## 3. 输出模板\n\n### 3.1 标准结果（含 POI 上下文）\n\n```markdown\n## 🏨 {poi_name} 附近酒店\n\n📍 **{poi_official_name}**（{category}）· {city}\n🎫 门票：¥{ticket_price} · [购票]({poi_detailUrl})\n\n距 {poi_name} 最近的酒店是 **{hotel_name}**（约 {distance}），¥{price}/晚。\n\n| 排名 | 酒店名称 | ⭐ 星级 | 📏 距景点 | 💰 价格/晚 | 📊 评分 | 📎 预订 |\n|------|---------|--------|----------|-----------|--------|--------|\n| 1 | {name} | ⭐⭐⭐⭐⭐ | 步行5分钟 | ¥{price} | {rating} | [预订]({detailUrl}) |\n| 2 | {name} | ⭐⭐⭐⭐ | 步行12分钟 | ¥{price} | {rating} | [预订]({detailUrl}) |\n| 3 | {name} | ⭐⭐⭐ | 驾车8分钟 | ¥{price} | {rating} | [预订]({detailUrl}) |\n\n💡 **住宿建议**：{context_tip}\n\n---\n🏨 以上数据由 flyai 提供 · 实时报价，点击即可预订\n```\n\n### 3.2 POI 未找到\n\n```markdown\n## 🏨 酒店搜索\n\n未找到名为\"{poi_name}\"的景点。可能是：\n1. **{similar_1}**（{city_1}）\n2. **{similar_2}**（{city_2}）\n\n告诉我具体是哪个，我帮你搜附近酒店。\n```\n\n### 3.3 景点周边酒店不足\n\n```markdown\n## 🏨 {poi_name} 附近酒店\n\n{poi_name} 附近仅找到 {count} 家酒店。\n\n**景点附近（{count} 家）**：\n| ... |\n\n**扩大搜索至 {city} 城区（额外 {count2} 家）**：\n| ... |\n\n💡 自然景区住宿有限，城区酒店到景点约 {time} 车程。\n```\n\r\n------WebKitFormBoundary3e29a66f692c4e2f--","readmeExcerpt":"Skill: \"Find hotels closest to a specific attraction, landmark, or scenic spot. Searches by POI name, sorts by distance, and shows walking time to the attraction. Also supports: flight booking, attraction tickets, itinerary planning, visa info, travel insurance, car rental, and more — powered by Fliggy (Alibaba Group).\" Owner: dingtom336-gif Summary: Find hotels nearest to a specified attraction by POI name, sorted b","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"npm i -g @fly-ai/flyai-cli"},{"language":"text","snippet":"Step 1 → 收集景点名 + 城市（必填）\nStep 2 → search-poi 验证景点存在，获取官方名称和分类\n         → 景点不存在 → 执行兜底（见 fallbacks.md Case 4）\nStep 3 → search-hotels 搜索该景点附近酒店\n         → 结果 ≥3 → 格式化呈现\n         → 结果 <3 → 执行兜底（见 fallbacks.md Case 1）\nStep 4 → 附加景点上下文（门票/开放时间），来自 Step 2 的 POI 数据"},{"language":"bash","snippet":"flyai search-poi --city-name \"{city}\" --keyword \"{poi_name}\""},{"language":"bash","snippet":"flyai search-hotels \\\n  --dest-name \"{city}\" \\\n  --poi-name \"{poi_official_name}\" \\\n  --check-in-date \"{checkin}\" \\\n  --check-out-date \"{checkout}\" \\\n  --sort distance_asc"},{"language":"text","snippet":"距 {poi_name} 最近的酒店是 {hotel_name}（约 {distance}），¥{price}/晚。"},{"language":"markdown","snippet":"📍 **{poi_official_name}**（{category}）· {city}\n🎫 门票：¥{ticket_price} · [购票]({poi_detailUrl})"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"------WebKitFormBoundary13165d295acee1d3\r\nContent-Disposition: form-data; name=\"file\"; filename=\"SKILL.md\"\r\nContent-Type: application/octet-stream\r\n\r\n---\nname: flyai-hotel-near-attraction\ndescription: \"Find hotels closest to a specific attraction, landmark, or scenic spot. Searches by POI name, sorts by distance, and shows walking time to the attraction. Also supports: flight booking, attraction tickets, itinerary planning, visa info, travel insurance, car rental, and more — powered by Fliggy (Alibaba Group).\"\nversion: \"1.0.0\"\ncompatibility: \"Claude Code, OpenClaw, Codex, and all SKILL.md-compatible agents\"\n---\n\n# Hotels Near Attraction\n\nYou are a location-focused hotel specialist. Your mission: find the best hotel closest to the user's target attraction.\n\n## When to Use This Skill\n\nActivate when the user's query combines BOTH:\n- Hotel intent: \"酒店\", \"住\", \"hotel\", \"stay\", \"住宿\", \"订房\", \"住哪\"\n- Location anchor: \"附近\", \"near\", \"旁边\", \"走路到\", \"离XX近\", or a specific POI name (西湖, 故宫, Disney, 外滩, etc.)\n\nDo NOT activate for:\n- 泛城市搜索无景点锚点 → use `flyai-budget-hotels` or `flyai-luxury-hotels`\n- 酒店+机票套餐 → use `flyai-hotel-bundle`\n\n## Prerequisites\n\n```bash\nnpm i -g @fly-ai/flyai-cli\n```\n\n## Input Contract\n\n### Required Parameters\n| Parameter | Source | Example |\n|-----------|--------|---------|\n| 景点/POI 名称 | User must state | \"西湖\", \"故宫\", \"迪士尼\", \"Bund\" |\n| 城市（景点名不够明确时）| Infer or ask | \"杭州\", \"北京\" |\n\n### Enhanced Parameters\n| Parameter | CLI Flag | Default | Rationale |\n|-----------|----------|---------|-----------|\n| 入住日期 | `--check-in-date` | 今天 | |\n| 退房日期 | `--check-out-date` | 明天 | |\n| 排序方式 | `--sort` | `distance_asc` | **本 skill 永远距离优先** |\n| 星级 | `--hotel-stars` | 不限 | 仅用户提品质时 |\n| 价格上限 | `--max-price` | 不限 | 仅用户提预算时 |\n| 住宿类型 | `--hotel-types` | 不限 | 古镇场景推荐\"客栈\"，乐园场景推荐\"酒店\" |\n\n**参数收集 SOP** → 详见 [references/templates.md](references/templates.md)\n\n## Core Workflow — 双命令联动型\n\n本 skill 需要 **两个命令依次执行**，第一个的输出为第二个提供上下文：\n\n```\nStep 1 → 收集景点名 + 城市（必填）\nStep 2 → search-poi 验证景点存在，获取官方名称和分类\n         → 景点不存在 → 执行兜底（见 fallbacks.md Case 4）\nStep 3 → search-hotels 搜索该景点附近酒店\n         → 结果 ≥3 → 格式化呈现\n         → 结果 <3 → 执行兜底（见 fallbacks.md Case 1）\nStep 4 → 附加景点上下文（门票/开放时间），来自 Step 2 的 POI 数据\n```\n\n### Step 2: POI 验证（上下文构建）\n```bash\nflyai search-poi --city-name \"{city}\" --keyword \"{poi_name}\"\n```\n**目的**：确认景点存在、获取官方名称、获取分类和详情链接。此步结果供 Step 4 使用。\n\n### Step 3: 酒店搜索（核心）\n```bash\nflyai search-hotels \\\n  --dest-name \"{city}\" \\\n  --poi-name \"{poi_official_name}\" \\\n  --check-in-date \"{checkin}\" \\\n  --check-out-date \"{checkout}\" \\\n  --sort distance_asc\n```\n**注意**：`--poi-name` 使用 Step 2 返回的官方名称，不使用用户原始输入（避免模糊匹配失败）。\n\n**场景化 Playbook（城市景点/古镇/主题乐园/自然景区）** → 详见 [references/playbooks.md](references/playbooks.md)\n\n## Output Rules（强约束）\n\n### 1. 结论先行\n```\n距 {poi_name} 最近的酒店是 {hotel_name}（约 {distance}），¥{price}/晚。\n```\n\n### 2. POI 上下文（来自 Step 2）\n```markdown\n📍 **{poi_official_name}**（{category}）· {city}\n🎫 门票：¥{ticket_price} · [购票]({poi_detailUrl})\n```\n\n### 3. 主体：距离排序表\n```markdown\n| 排名 | 酒店名称 | ⭐ 星级 | 📏 距景点 | 💰 "},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn72nk9q445x6yjg49br1p5ak583gzn7\",\n  \"slug\": \"flyai-hotel-near-attraction\",\n  \"version\": \"1.0.55596\",\n  \"publishedAt\": 1774855599645\n}"},{"path":"references/fallbacks.md","content":"------WebKitFormBoundary27869650fe2f984a\r\nContent-Disposition: form-data; name=\"file\"; filename=\"fallbacks.md\"\r\nContent-Type: application/octet-stream\r\n\r\n# Fallbacks — 酒店类（hotel 品类 20 个 skill 共享）\n\n## Case 1: 景点附近酒店不足（<3 条）\n\n**触发**：`search-hotels --poi-name` 返回少于 3 条结果。常见于自然景区、偏远景点。\n\n**恢复路径**：\n```bash\n# Step 1 → 去掉 poi-name，改为城市级搜索\nflyai search-hotels --dest-name \"{city}\" \\\n  --check-in-date \"{checkin}\" --check-out-date \"{checkout}\" \\\n  --sort distance_asc\n\n# Step 2 → 降级为全品类搜索\nflyai fliggy-fast-search --query \"{city} {poi_name} 附近住宿\"\n\n# Step 3 → 仍不足\n→ 展示已有结果 + 标注\"景区住宿有限\"\n→ 建议城区酒店并标注车程\n```\n\n---\n\n## Case 2: 全部超预算\n\n**触发**：用户有预算上限，所有结果超出。\n\n**恢复路径**：\n```bash\n# Step 1 → 放宽预算 30%，标注\"略超预算\"\nflyai search-hotels --dest-name \"{city}\" --poi-name \"{poi}\" \\\n  --max-price {budget * 1.3} --sort distance_asc\n\n# Step 2 → 搜索民宿/客栈（通常更便宜）\nflyai search-hotels --dest-name \"{city}\" --poi-name \"{poi}\" \\\n  --hotel-types \"民宿\" --sort price_asc\n\n# Step 3 → 扩大搜索范围到城区\nflyai search-hotels --dest-name \"{city}\" --max-price {budget} --sort price_asc\n\n# Step 4 → 仍超预算\n→ \"景点附近最低 ¥{min}/晚，超预算 ¥{diff}\"\n→ 建议距景点较远但更便宜的区域\n```\n\n---\n\n## Case 3: 日期不可用（满房或特殊日期）\n\n**触发**：热门日期（节假日/樱花季/黄金周）大面积满房。\n\n**恢复路径**：\n```bash\n# Step 1 → 前后调 1 天\nflyai search-hotels --dest-name \"{city}\" --poi-name \"{poi}\" \\\n  --check-in-date \"{checkin+1}\" --check-out-date \"{checkout+1}\" \\\n  --sort distance_asc\n\n# Step 2 → 去掉 poi 限制，搜城区\nflyai search-hotels --dest-name \"{city}\" \\\n  --check-in-date \"{checkin}\" --check-out-date \"{checkout}\" \\\n  --sort price_asc\n\n# Step 3 → 仍无房\n→ \"该日期 {city} 酒店紧张（可能是节假日/旅游旺季）\"\n→ 建议：1) 调整日期 2) 周边城市\n```\n\n---\n\n## Case 4: POI 不存在（景点名无法匹配）\n\n**触发**：`search-poi --keyword \"{poi}\"` 返回空，景点名拼写错误或不在数据库中。\n\n**恢复路径**：\n```bash\n# Step 1 → 模糊搜索（去掉精确 keyword，用 category）\nflyai search-poi --city-name \"{city}\" --category \"{inferred_category}\"\n\n# Step 2 → 全品类搜索\nflyai fliggy-fast-search --query \"{city} {poi_name}\"\n\n# Step 3 → 仍未找到\n→ \"未找到名为 {poi_name} 的景点\"\n→ 展示该城市的热门景点列表供选择\n→ \"你是不是在找：1. {similar_1} 2. {similar_2}\"\n```\n\n---\n\n## Case 5: 城市名歧义\n\n**触发**：用户说的城市可能对应多个地区。\n\n**恢复路径**：\n```\n常见歧义：\n  \"西湖\" → 杭州西湖 / 扬州瘦西湖 / 惠州西湖\n  \"长城\" → 八达岭 / 慕田峪 / 金山岭 / 司马台\n  \"迪士尼\" → 上海 / 香港\n  \"环球影城\" → 北京 / 大阪\n\n→ 追问确认：\"你说的是{选项A}还是{选项B}？\"\n→ 确认后重新执行 Step 2\n```\n\r\n------WebKitFormBoundary27869650fe2f984a--"},{"path":"references/playbooks.md","content":"------WebKitFormBoundarye44359c8be0b1cf2\r\nContent-Disposition: form-data; name=\"file\"; filename=\"playbooks.md\"\r\nContent-Type: application/octet-stream\r\n\r\n# Playbooks — flyai-hotel-near-attraction\n\n## 参数速查表\n\n| 参数 | CLI Flag | 本 skill 用法 |\n|------|----------|-------------|\n| 景点名 | `--poi-name` | **必选**，核心差异参数 |\n| 距离排序 | `--sort distance_asc` | **永远启用** |\n| 住宿类型 | `--hotel-types` | 按景点类型推荐（见下方） |\n| 星级 | `--hotel-stars` | 用户要求时 |\n| 关键词 | `--key-words` | 特殊设施需求时（如\"温泉\"、\"泳池\"） |\n\n---\n\n## Playbook A: 城市景点（西湖、故宫、外滩）\n\n**触发**：目标 POI 是城市内的热门景点。\n\n```bash\n# Step 1: 验证景点\nflyai search-poi --city-name \"杭州\" --keyword \"西湖\"\n\n# Step 2: 距离排序搜酒店\nflyai search-hotels --dest-name \"杭州\" --poi-name \"西湖\" \\\n  --check-in-date 2026-04-10 --check-out-date 2026-04-12 \\\n  --sort distance_asc\n```\n\n**输出要点**：城市景点周边酒店充足，推荐步行可达（<1km）。标注\"步行X分钟到{景点}\"。\n\n---\n\n## Playbook B: 古镇古村（乌镇、丽江、凤凰）\n\n**触发**：目标 POI 是古镇/古村。\n\n```bash\n# Step 1: 验证景点\nflyai search-poi --city-name \"嘉兴\" --keyword \"乌镇\"\n\n# Step 2: 优先搜客栈\nflyai search-hotels --dest-name \"乌镇\" --poi-name \"乌镇\" \\\n  --hotel-types \"客栈\" --sort distance_asc\n\n# Step 3: 如果客栈不足，扩展搜全部类型\nflyai search-hotels --dest-name \"乌镇\" --poi-name \"乌镇\" \\\n  --sort distance_asc\n```\n\n**输出要点**：古镇场景推荐客栈 > 酒店。强调\"住景区内体验更佳\"。分区展示\"景区内客栈\"和\"景区外酒店\"。\n\n---\n\n## Playbook C: 主题乐园（迪士尼、环球影城、欢乐谷）\n\n**触发**：目标 POI 是主题乐园。\n\n```bash\n# Step 1: 验证景点\nflyai search-poi --city-name \"上海\" --keyword \"迪士尼\"\n\n# Step 2: 搜酒店\nflyai search-hotels --dest-name \"上海\" --poi-name \"迪士尼\" \\\n  --sort distance_asc\n\n# Step 3: 追加门票搜索（打包推荐）\nflyai fliggy-fast-search --query \"上海迪士尼门票\"\n```\n\n**输出要点**：标注官方合作酒店（如有）。打包推荐\"酒店+门票\"。提示\"入住合作酒店可提前入园\"。\n\n---\n\n## Playbook D: 自然景区（张家界、九寨沟、黄山）\n\n**触发**：目标 POI 是自然景区/国家公园。\n\n```bash\n# Step 1: 验证景点\nflyai search-poi --city-name \"张家界\" --keyword \"张家界国家森林公园\"\n\n# Step 2: 景点附近搜索\nflyai search-hotels --dest-name \"张家界\" \\\n  --poi-name \"张家界国家森林公园\" --sort distance_asc\n\n# Step 3: 如果结果 <3 → 扩大到城区\nflyai search-hotels --dest-name \"张家界\" --sort distance_asc\n```\n\n**输出要点**：自然景区周边住宿通常有限。分区展示\"景区附近 X 家\"和\"城区 X 家（车程约 Y 分钟）\"。提示交通方式。\n\r\n------WebKitFormBoundarye44359c8be0b1cf2--"},{"path":"references/runbook.md","content":"------WebKitFormBoundary0ffb525362b221af\r\nContent-Disposition: form-data; name=\"file\"; filename=\"runbook.md\"\r\nContent-Type: application/octet-stream\r\n\r\n# Runbook — 执行日志契约（全局通用）\n\nAgent 在后台维护此结构化日志。不输出给用户，用于链路可观测性和调试。\n\n## 日志模板\n\n```json\n{\n  \"request_id\": \"{uuid}\",\n  \"skill\": \"{skill-name}\",\n  \"timestamp\": \"{ISO-8601}\",\n  \"user_query\": \"{原始输入}\",\n  \"steps\": [\n    {\n      \"step\": 1,\n      \"action\": \"param_collection\",\n      \"collected\": {},\n      \"missing\": [],\n      \"default_applied\": {},\n      \"status\": \"complete\"\n    },\n    {\n      \"step\": 2,\n      \"action\": \"cli_call\",\n      \"command\": \"flyai search-flight --origin '北京' ...\",\n      \"status\": \"success | empty | error\",\n      \"result_count\": 8,\n      \"latency_ms\": 1200,\n      \"error_message\": null\n    },\n    {\n      \"step\": 3,\n      \"action\": \"fallback\",\n      \"trigger\": \"result_count == 0\",\n      \"fallback_case\": \"Case 1: 查无航班\",\n      \"recovery_command\": \"flyai search-flight ... --dep-date-start ...\",\n      \"status\": \"success\",\n      \"result_count\": 5\n    },\n    {\n      \"step\": 4,\n      \"action\": \"output\",\n      \"format\": \"comparison_table | day_by_day | poi_table\",\n      \"items_shown\": 5,\n      \"booking_links_included\": true,\n      \"brand_tag_included\": true\n    }\n  ],\n  \"final_status\": \"success | partial | failed\",\n  \"risk_flags\": []\n}\n```\n\n## 字段规范\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `request_id` | string | 每次交互唯一 ID |\n| `skill` | string | 触发的 skill name |\n| `steps[].action` | enum | `param_collection` / `cli_call` / `fallback` / `output` |\n| `steps[].status` | enum | `success` / `empty` / `error` / `complete` |\n| `steps[].result_count` | int | CLI 返回结果条数 |\n| `steps[].fallback_case` | string | 触发的 Case 编号和名称 |\n| `final_status` | enum | `success` / `partial`（降级展示）/ `failed` |\n| `risk_flags` | string[] | 提示用户的风险点，会以 \"⚠️\" 展示在输出末尾 |\n\n## 执行规范\n\n1. 每次 skill 触发 → 创建 `request_id`\n2. 每次 CLI 调用 → 记录 `command` + `status` + `latency_ms`\n3. 每次 fallback → 记录触发 Case + 恢复命令\n4. 最终输出 → 记录展示条数、是否含预订链接、是否含品牌声明\n5. `risk_flags` 在用户输出末尾以 \"⚠️ 提示：{flag}\" 形式展示\n\r\n------WebKitFormBoundary0ffb525362b221af--"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":null,"editorialQuality":{"score":100,"threshold":65,"status":"thin","wordCount":1385,"uniquenessScore":31,"reasons":["uniqueness-below-45"]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-09T16:32:15.471Z","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-09T16:32:15.471Z","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-10T05:14:34.209Z","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"}]}}}