Not in the top 1,000 by GitHub stars

SquirrelSong5/travel-planner-skill

面向中国大陆行程的 AI Agent Skill:整合官方、高德、小红书、美团和国内 OTA,生成可校验的对话攻略与响应式 HTML,支持 npx 安装和引导式线上部署。

History

Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.

View weekly changes

SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

bf15ddd25069 → bf15ddd25069

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → bf15ddd25069

No earlier version was observed for comparison.

Compare on GitHub

View on GitHubAdd to my skills

Verified commit bf15ddd25069493863dcd4b58e2edd2ef739bf30

12GitHub stars
0stars in 7 days
1skill in this repository
0commits in 30 days

Heat

0.3
  • Star growth, last 7 daysNot available
  • Star growth, last 24 hoursNot available
  • Rank movement, last 7 daysNot available
  • Commits, last 30 daysNot available
  • Accounts asking about it through MCP, last 7 daysNot available
  • Hot votes this weekNot available

Heat never changes the order by stars, and sponsorship never touches it. How heat works

Stars over time

Oct 25, 2026Oct 25, 202612

30-day change not yet available: not enough history.

Individual skills in this repository

How it works

travel-planner

When your agent uses it

面向中国大陆行程的旅行规划、行前复核与临场调整 Skill。使用地图、官方渠道、OTA、目的地攻略和餐饮指南等实时信息,生成并校验包含路线、餐饮、预算、预订状态、Plan B 和安全提醒的对话版攻略与响应式单文件 HTML。Use when the user asks to plan, optimize, review, update, recheck, or publish a domestic trip itinerary, including requests based on flight, train, hotel, attraction, restaurant, weather, safety, or route details.

What it loads into context

Frontmatter

126 tokens

Always available to the agent

SKILL.md

3,132 tokens

When the skill is activated

Reference documents

31,371 tokens

Loaded on request

Token counts are estimates. Scripts run separately; they are not counted as reference context.

The playbook

  1. 工作原则
  2. 信息源
  3. 能力发现
  4. 标准流程
  5. 行前复核与临场调整
  6. 增量修改
  7. 资源索引

Scripts executed separately

  • scripts/add_hotel_legs.py
  • scripts/render_html.py
  • scripts/render_markdown.py
  • scripts/seed_prices.py
  • scripts/test_day_route_urls.py
  • scripts/trip_slug.py
  • scripts/validate.py
  • tests/test_cli_safety.py
  • tests/test_render_html.py
  • tests/test_render_markdown.py
  • tests/test_template.py
  • tests/test_travel_scenarios.py
  • tests/test_validate.py

Files

  • .github/workflows/validate.ymlasset948 bytes
  • .gitignoreasset313 bytes
  • CHANGELOG.mddoc55,681 bytes
  • LICENSEasset1,075 bytes
  • README.mddoc7,444 bytes
  • SKILL.mdcore11,748 bytes
  • SKILL.mdcore11,748 bytes
  • SKILL.mdcore11,748 bytes
  • SKILL.mdcore11,748 bytes
  • agents/openai.yamlasset360 bytes
  • assets/template.htmlasset133,815 bytes
  • examples/README.mddoc1,409 bytes
  • examples/chengdu-2026-09-18.jsonasset46,976 bytes
  • references/amap-mcp-usage.mddoc2,047 bytes
  • references/data-sources.mddoc6,694 bytes
  • references/deployment.mddoc3,686 bytes
  • references/dianping-research.mddoc602 bytes
  • references/hotel-planning.mddoc1,624 bytes
  • references/iteration-rounds.mddoc1,681 bytes
  • references/meituan-guide-research.mddoc1,123 bytes
  • references/multi-turn-protocol.mddoc2,398 bytes
  • references/planning.mddoc4,230 bytes
  • references/price-research.mddoc1,544 bytes
  • references/recheck-and-safety.mddoc2,576 bytes
  • references/setup-guide.mddoc4,108 bytes
  • references/trip-schema.jsonasset8,442 bytes
  • references/validation-rules.mddoc3,574 bytes
  • references/xhs-research.mddoc1,387 bytes
  • scripts/add_hotel_legs.pyruns19,630 bytes
  • scripts/render_html.pyruns4,167 bytes
  • scripts/render_markdown.pyruns13,792 bytes
  • scripts/seed_prices.pyruns18,648 bytes
  • scripts/test_day_route_urls.pyruns8,381 bytes
  • scripts/trip_slug.pyruns3,265 bytes
  • scripts/validate.pyruns51,624 bytes
  • tests/test_cli_safety.pyruns1,596 bytes
  • tests/test_render_html.pyruns1,721 bytes
  • tests/test_render_markdown.pyruns3,301 bytes
  • tests/test_template.pyruns2,371 bytes
  • tests/test_travel_scenarios.pyruns6,230 bytes
  • tests/test_validate.pyruns3,755 bytes
Read SKILL.md

# Travel Planner

把旅行需求变成可执行、可校验、可继续修改的中国大陆行程。每次必须同时交付可独立使用的对话版攻略与本地单文件 HTML;两者同等重要,并由同一份已校验 JSON 生成。只有用户明确希望分享,并确认隐私影响后,才额外发布公开链接。

## 工作原则

1. **实时信息不靠记忆。** 营业时间、闭园、票价、班次、天气、酒店和餐厅状态必须查询;查不到就标注未知或估算,不得伪造来源。
2. **硬事实优先官方。** 开放时间、预约、临时关闭、票务和交通规则以景区、场馆、铁路、航司、政府或运营方为准。
3. **路线必须可行。** POI 要有坐标,主要移动段要有查询所得的方式与时长;字符串 `source` 只是记录,不是外部查询已经发生的证明。
4. **区分事实、体验和估算。** 攻略用于发现候选与软信号,不能覆盖官方硬事实;价格区间必须带来源和查询时间。
5. **最少打扰用户。** 先利用已有信息和工具,只询问会实质改变方案的缺项。
6. **保护隐私。** 不把 API Key 写进 JSON、HTML、URL 或仓库;公开发布前明确提示页面可能暴露城市、日期、酒店和路线。
7. **不擅自改环境。** 不自动安装 MCP、浏览器扩展或 CLI;缺能力时说明影响,并提供可继续的降级方案。
8. **双输出保持一致。** 对话版攻略与 HTML 必须包含相同的核心行程事实;缺少任一输出、仅返回摘要或链接、两者版本不一致,都不算完成。
View the complete source on GitHub

Skills included

  • travel-planner

Repository facts

License
MIT
Created
Jun 17, 2026
Last pushed
Aug 24, 2026
Forks
1
Open issues
0
Project activity
Slowing

Before you install

Network or broad shell

Automated signals, not a guarantee

Checked Nov 6, 2026

Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.

Show 3 notes
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
Show all 160 signals by file

.gitignore

  • Access to secretsline 21
    [Credential-related source omitted]

CHANGELOG.md

  • Network accessline 3
    本 skill 遵循 [Semantic Versioning](https://semver.org/lang/zh-CN/)。
  • Network accessline 236
    - Cursor 官方文档([cursor.com/cn/docs/context/mcp](https://cursor.com/cn/docs/context/mcp))—— 确认 `~/.cursor/mcp.json` 位置 + Cmd+Shift+P Reload Window 机制
  • Network accessline 424
    [WebFetch: https://guide.meituan.com/chengdu/canyin]
  • Network accessline 463
    - **Step 7 改为 GitHub Pages 部署**:返回公开 URL(如 `https://squirrelsong5.github.io/travel-plans/{trip}.html`),手机点开即看活地图,替代本地 HTML 文件
  • Network accessline 494
    - **目标**:把"开浏览器、点按钮、填表单"这种步骤让 AI 用 [Playwright MCP](https://github.com/microsoft/playwright-mcp) 自己跑,用户**只在 2-3 个真人物理动作上介入**(收短信 / 扫码 / 重启 Claude Code)

README.md

  • Network accessline 7
    [![CI](https://github.com/SquirrelSong5/travel-planner-skill/actions/workflows/validate.yml/badge.svg)](https://github.com/SquirrelSong5/travel-planner-skill/actions/workflows/validate.yml)
  • Network accessline 8
    [![GitHub stars](https://img.shields.io/github/stars/SquirrelSong5/travel-planner-skill?style=flat)](https://github.com/SquirrelSong5/travel-planner-skill/stargazers)
  • Network accessline 9
    [![Install with npx](https://img.shields.io/badge/install-npx%20skills%20add-CB3837?logo=npm)](#快速开始)
  • Network accessline 10
    [![Version](https://img.shields.io/badge/version-3.3.0-blue.svg)](CHANGELOG.md)
  • Network accessline 11
    [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
  • Network accessline 13
    [在线预览](https://squirrelsong5.github.io/travel-plans/chengdu-2026-09-18.html) ·
  • Network accessline 45
    安装命令使用 [Skills CLI](https://github.com/vercel-labs/skills),会识别当前使用的 AI Agent。需要在所有项目中使用时加 `--global`。
  • Network accessline 51
    git clone https://github.com/SquirrelSong5/travel-planner-skill.git travel-planner
  • Network accessline 97
    - **网页搜索或浏览器**:查询官方通知、OTA 页面和餐饮攻略,通常由 Agent 自带; - **高德地图 MCP**:查询 POI、坐标和路线,见[高德官方接入文档](https://lbs.amap.com/api/mcp-server/gettingstarted);
  • Network accessline 98
    - **高德地图 MCP**:查询 POI、坐标和路线,见[高德官方接入文档](https://lbs.amap.com/api/mcp-server/gettingstarted);
  • Network accessline 133
    <a href="https://www.star-history.com/?repos=SquirrelSong5%2Ftravel-planner-skill&amp;type=date&amp;legend=top-left">
  • Network accessline 134
    [Credential-related source omitted]
  • Network accessline 135
    [Credential-related source omitted]
  • Network accessline 136
    [Credential-related source omitted]
  • Network accessline 137
    [Credential-related source omitted]
  • Network accessline 141
    如果它帮你省下了做攻略和反复核对的时间,欢迎点一个 [Star](https://github.com/SquirrelSong5/travel-planner-skill)。问题和真实旅行场景可以提交到 [Issues](https://github.com/SquirrelSong5/travel-planner-skill/issues)。

assets/template.html

  • Network accessline 1526
    if (/机票|航班/.test(item)) {           const dates = [start, end].filter(Boolean).join(' ');           return `https://www.ctrip.com/search/searchresult?keyword=${encodeURIComponent(`${item} ${D.city || ''} ${dates}`.trim())}`;
  • Network accessline 1527
    const dates = [start, end].filter(Boolean).join(' ');           return `https://www.ctrip.com/search/searchresult?keyword=${encodeURIComponent(`${item} ${D.city || ''} ${dates}`.trim())}`;         }
  • Network accessline 1528
    return `https://www.ctrip.com/search/searchresult?keyword=${encodeURIComponent(`${item} ${D.city || ''} ${dates}`.trim())}`;
  • Network accessline 1529
    }         if (/高铁|火车/.test(item)) {           return `https://trains.ctrip.com/`;
  • Network accessline 1530
    if (/高铁|火车/.test(item)) {           return `https://trains.ctrip.com/`;         }
  • Network accessline 1531
    return `https://trains.ctrip.com/`;
  • Network accessline 1533
    if (/酒店|宾馆|民宿/.test(item)) {           const kw = encodeURIComponent(item.split(/[((]/)[0].trim());           return `https://hotels.ctrip.com/hotels/list?keyword=${kw}${city ? `&cityname=${city}` : ''}`;
  • Network accessline 1534
    const kw = encodeURIComponent(item.split(/[((]/)[0].trim());           return `https://hotels.ctrip.com/hotels/list?keyword=${kw}${city ? `&cityname=${city}` : ''}`;         }
  • Network accessline 1535
    return `https://hotels.ctrip.com/hotels/list?keyword=${kw}${city ? `&cityname=${city}` : ''}`;
  • Network accessline 1536
    }         if (/船票|轮渡/.test(item) && /鼓浪屿|厦门/.test(item)) {           return 'https://www.xiamenferry.com/';
  • Network accessline 1537
    if (/船票|轮渡/.test(item) && /鼓浪屿|厦门/.test(item)) {           return 'https://www.xiamenferry.com/';         }
  • Network accessline 1538
    return 'https://www.xiamenferry.com/';
  • Network accessline 1539
    }         if (/门票|预约|入校/.test(item)) {           return `https://www.ctrip.com/search/searchresult?keyword=${q}`;
  • Network accessline 1540
    if (/门票|预约|入校/.test(item)) {           return `https://www.ctrip.com/search/searchresult?keyword=${q}`;         }
  • Network accessline 1541
    return `https://www.ctrip.com/search/searchresult?keyword=${q}`;
  • Network accessline 1542
    }         return `https://www.ctrip.com/search/searchresult?keyword=${q}`;       }
  • Network accessline 1543
    return `https://www.ctrip.com/search/searchresult?keyword=${q}`;
  • Network accessline 1641
    const fromName = encodeURIComponent(naviPlaceName(from) || '起点');         const toName = encodeURIComponent(naviPlaceName(to) || '终点');         return `https://uri.amap.com/navigation?from=${f.lng},${f.lat},${fromName}&to=${t.lng},${t.lat},
  • Network accessline 1642
    const toName = encodeURIComponent(naviPlaceName(to) || '终点');         return `https://uri.amap.com/navigation?from=${f.lng},${f.lat},${fromName}&to=${t.lng},${t.lat},${toName}&mode=${amapMode(mode)}&callnative=1`;       }
  • Network accessline 1643
    return `https://uri.amap.com/navigation?from=${f.lng},${f.lat},${fromName}&to=${t.lng},${t.lat},${toName}&mode=${amapMode(mode)}&callnative=1`;
  • Network accessline 1738
    ];         if (q.length < 5) return null;         return `https://ditu.amap.com/dir?${q.filter(Boolean).join('&')}`;
  • Network accessline 1739
    if (q.length < 5) return null;         return `https://ditu.amap.com/dir?${q.filter(Boolean).join('&')}`;       }
  • Network accessline 1740
    return `https://ditu.amap.com/dir?${q.filter(Boolean).join('&')}`;
  • Network accessline 3001
    }         const script = document.createElement('script');         script.src = `https://webapi.amap.com/maps?v=2.0&key=${window.AMAP_KEY}&plugin=AMap.Marker,AMap.InfoWindow`;
  • Network accessline 3002
    const script = document.createElement('script');         script.src = `https://webapi.amap.com/maps?v=2.0&key=${window.AMAP_KEY}&plugin=AMap.Marker,AMap.InfoWindow`;         script.onload = () => {
  • Network accessline 3003
    script.src = `https://webapi.amap.com/maps?v=2.0&key=${window.AMAP_KEY}&plugin=AMap.Marker,AMap.InfoWindow`;

examples/chengdu-2026-09-18.json

  • Network accessline 20
    "lng": 104.081,     "lat": 30.658,     "amap_uri": "https://uri.amap.com/marker?position=104.0810,30.6580&name=春熙路亚朵酒店",
  • Network accessline 21
    "lat": 30.658,     "amap_uri": "https://uri.amap.com/marker?position=104.0810,30.6580&name=春熙路亚朵酒店",     "why": "地铁 2/3 号线春熙路站步行 3 分钟;春熙路/太古里商圈内,IFS/远洋太古里吃购一站。",
  • Network accessline 22
    "amap_uri": "https://uri.amap.com/marker?position=104.0810,30.6580&name=春熙路亚朵酒店",
  • Network accessline 1379
    "id_required": true,       "channel": "official",       "url": "https://www.panda.org.cn/",
  • Network accessline 1380
    "channel": "official",       "url": "https://www.panda.org.cn/",       "note": "Day 3 上午 7:30 必到;提前 1 天 0 点放票,越早越好"
  • Network accessline 1381
    "url": "https://www.panda.org.cn/",
  • Network accessline 1389
    "id_required": true,       "channel": "ota",       "url": "https://hotels.ctrip.com/hotels/list?cityname=%E6%88%90%E9%83%BD&keyword=%E6%98%A5%E7%86%95%E8%B7%AF%E4%BA%9A%E6%A0%BC%E9%85%92%E5%BA%97",
  • Network accessline 1390
    "channel": "ota",       "url": "https://hotels.ctrip.com/hotels/list?cityname=%E6%88%90%E9%83%BD&keyword=%E6%98%A5%E7%86%95%E8%B7%AF%E4%BA%9A%E6%A0%BC%E9%85%92%E5%BA%97",       "note": "Booking / 携程对比价;9 月旺季提前订",
  • Network accessline 1391
    "url": "https://hotels.ctrip.com/hotels/list?cityname=%E6%88%90%E9%83%BD&keyword=%E6%98%A5%E7%86%95%E8%B7%AF%E4%BA%9A%E6%A0%BC%E9%85%92%E5%BA%97",
  • Network accessline 1411
    "id_required": true,       "channel": "ota",       "url": "https://flights.ctrip.com/itinerary/oneway/sha-ctu?date=2026-09-18",
  • Network accessline 1412
    "channel": "ota",       "url": "https://flights.ctrip.com/itinerary/oneway/sha-ctu?date=2026-09-18",       "note": "双流机场近市区(地铁 10 号线 45 分钟);天府机场远(地铁 18 号线 1.5 小时)",
  • Network accessline 1413
    "url": "https://flights.ctrip.com/itinerary/oneway/sha-ctu?date=2026-09-18",
  • Network accessline 1434
    "id_required": true,       "channel": "ota",       "url": "https://flights.ctrip.com/itinerary/oneway/ctu-sha?date=2026-09-20",
  • Network accessline 1435
    "channel": "ota",       "url": "https://flights.ctrip.com/itinerary/oneway/ctu-sha?date=2026-09-20",       "note": "建议返程 18:00 之后航班,留 3 小时机场缓冲",
  • Network accessline 1436
    "url": "https://flights.ctrip.com/itinerary/oneway/ctu-sha?date=2026-09-20",
  • Network accessline 1458
    "checked_at": "2026-08-24T15:30:00+08:00",       "source_refs": [         "https://www.xiaohongshu.com/search_result?keyword=%E6%88%90%E9%83%BD%E4%B8%89%E6%97%A5%E6%B8%B8"
  • Network accessline 1459
    "source_refs": [         "https://www.xiaohongshu.com/search_result?keyword=%E6%88%90%E9%83%BD%E4%B8%89%E6%97%A5%E6%B8%B8"       ],
  • Network accessline 1460
    "https://www.xiaohongshu.com/search_result?keyword=%E6%88%90%E9%83%BD%E4%B8%89%E6%97%A5%E6%B8%B8"
  • Network accessline 1469
    "checked_at": "2026-08-24T15:30:00+08:00",       "source_refs": [         "https://www.panda.org.cn/",
  • Network accessline 1470
    "source_refs": [         "https://www.panda.org.cn/",         "https://www.weather.com.cn/weather/101270101.shtml"
  • Network accessline 1471
    "https://www.panda.org.cn/",
  • Network accessline 1472
    "https://www.weather.com.cn/weather/101270101.shtml"
  • Network accessline 1480
    "checked_at": "2026-08-24T15:30:00+08:00",       "source_refs": [         "https://www.amap.com/"
  • Network accessline 1481
    "source_refs": [         "https://www.amap.com/"       ]
  • Network accessline 1482
    "https://www.amap.com/"
  • Network accessline 1490
    "checked_at": "2026-08-24T15:30:00+08:00",       "source_refs": [         "https://guide.meituan.com/chengdu/canyin"
  • Network accessline 1491
    "source_refs": [         "https://guide.meituan.com/chengdu/canyin"       ],
  • Network accessline 1492
    "https://guide.meituan.com/chengdu/canyin"
  • Network accessline 1501
    "checked_at": "2026-08-24T15:30:00+08:00",       "source_refs": [         "https://hotels.ctrip.com/",
  • Network accessline 1502
    "source_refs": [         "https://hotels.ctrip.com/",         "https://flights.ctrip.com/"
  • Network accessline 1503
    "https://hotels.ctrip.com/",
  • Network accessline 1504
    "https://flights.ctrip.com/"
  • Network accessline 1513
    "applies_to": "全体同行人",       "source": "official-weather",       "source_ref": "https://www.weather.com.cn/weather/101270101.shtml",
  • Network accessline 1514
    "source": "official-weather",       "source_ref": "https://www.weather.com.cn/weather/101270101.shtml",       "checked_at": "2026-08-24T15:30:00+08:00"
  • Network accessline 1515
    "source_ref": "https://www.weather.com.cn/weather/101270101.shtml",
  • Network accessline 1535
    "recheck_at": "2026-09-17T09:00:00+08:00",       "source": "official-site",       "source_ref": "https://www.panda.org.cn/",
  • Network accessline 1536
    "source": "official-site",       "source_ref": "https://www.panda.org.cn/",       "note": "出发前一天再次核对放票与临时闭园通知"
  • Network accessline 1537
    "source_ref": "https://www.panda.org.cn/",
  • Network accessline 1575
    "recheck_at": "2026-09-17T09:00:00+08:00",       "source": "official-weather",       "source_ref": "https://www.weather.com.cn/weather/101270101.shtml",
  • Network accessline 1576
    "source": "official-weather",       "source_ref": "https://www.weather.com.cn/weather/101270101.shtml",       "note": "提前一天决定是否启用 Day 2 Plan B"
  • Network accessline 1577
    "source_ref": "https://www.weather.com.cn/weather/101270101.shtml",
  • Network accessline 1585
    "recheck_at": "2026-09-17T09:00:00+08:00",       "source": "official-weather",       "source_ref": "https://www.weather.com.cn/weather/101270101.shtml",
  • Network accessline 1586
    "source": "official-weather",       "source_ref": "https://www.weather.com.cn/weather/101270101.shtml",       "note": "出现高级别预警时取消户外活动,不用原计划硬顶"
  • Network accessline 1587
    "source_ref": "https://www.weather.com.cn/weather/101270101.shtml",

references/data-sources.md

  • Network accessline 47
    "purpose": "发现近期分区、排队和避雷信号",   "checked_at": "2026-08-24T15:30:00+08:00",   "source_refs": ["https://www.xiaohongshu.com/..."],
  • Network accessline 48
    "checked_at": "2026-08-24T15:30:00+08:00",   "source_refs": ["https://www.xiaohongshu.com/..."],   "note": "只作为体验信号"
  • Network accessline 49
    "source_refs": ["https://www.xiaohongshu.com/..."],
  • Network accessline 143
    {   "source": "official-site",   "source_ref": "https://example.org/notice/123",
  • Network accessline 144
    "source": "official-site",   "source_ref": "https://example.org/notice/123",   "checked_at": "2026-08-24T15:30:00+08:00",
  • Network accessline 145
    "source_ref": "https://example.org/notice/123",

references/deployment.md

  • Network accessline 39
    | --- | --- | --- | | GitHub 已连接 | GitHub Pages | 适合长期链接和版本记录 | | Cloudflare 已配置 | [Pages Direct Upload](https://developers.cloudflare.com/pages/get-started/direct-upload/) | 上传预构建文件,不要求 Git 集成 |
  • Network accessline 40
    | GitHub 已连接 | GitHub Pages | 适合长期链接和版本记录 | | Cloudflare 已配置 | [Pages Direct Upload](https://developers.cloudflare.com/pages/get-started/direct-upload/) | 上传预构建文件,不要求 Git 集成 | | 用户希望手动拖放 | [Netlify Drop](https://docs.netlify.com/start/quick
  • Network accessline 41
    | Cloudflare 已配置 | [Pages Direct Upload](https://developers.cloudflare.com/pages/get-started/direct-upload/) | 上传预构建文件,不要求 Git 集成 |
  • Network accessline 42
    | 用户希望手动拖放 | [Netlify Drop](https://docs.netlify.com/start/quickstarts/netlify-drop-quickstart/) 或 [Vercel Drop](https://vercel.com/docs/drop) | 上传含 `index.html` 的目录即可 |

references/recheck-and-safety.md

  • Network accessline 26
    "recheck_at": "2026-09-17T09:00:00+08:00",   "source": "official-site",   "source_ref": "https://example.org/notice",
  • Network accessline 27
    "source": "official-site",   "source_ref": "https://example.org/notice",   "note": "出发前一天再看临时闭馆"
  • Network accessline 28
    "source_ref": "https://example.org/notice",

references/setup-guide.md

  • Network accessline 64
    优先使用宿主已提供的高德工具。若用户选择配置,先参考[高德地图 MCP Server 官方快速接入](https://lbs.amap.com/api/mcp-server/gettingstarted):
  • Access to secretsline 72
    [Credential-related source omitted]

references/trip-schema.json

  • Network accessline 1
    {   "$schema": "https://json-schema.org/draft/2020-12/schema",
  • Network accessline 2
    "$schema": "https://json-schema.org/draft/2020-12/schema",
  • Network accessline 3
    "$id": "https://github.com/SquirrelSong5/travel-planner-skill/references/trip-schema.json",

scripts/add_hotel_legs.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 19
    [Credential-related source omitted]
  • Network accessline 172
    if mode == "transit":         url = (             f"https://restapi.amap.com/v3/direction/transit/integrated"
  • Network accessline 173
    url = (             f"https://restapi.amap.com/v3/direction/transit/integrated"             f"?key={key}&origin={o}&destination={d}&city={urllib.parse.quote(city)}"
  • Network accessline 174
    f"https://restapi.amap.com/v3/direction/transit/integrated"             f"?key={key}&origin={o}&destination={d}&city={urllib.parse.quote(city)}"         )
  • Network accessline 175
    f"?key={key}&origin={o}&destination={d}&city={urllib.parse.quote(city)}"         )         rest = json.loads(urllib.request.urlopen(url, timeout=20).read())
  • Network accessline 176
    )         rest = json.loads(urllib.request.urlopen(url, timeout=20).read())         transits = rest.get("route", {}).get("transits") or []
  • Network accessline 177
    rest = json.loads(urllib.request.urlopen(url, timeout=20).read())
  • Network accessline 199
    "biking": "bicycling",     }.get(mode, "driving")     url = f"https://restapi.amap.com/v3/direction/{endpoint}?key={key}&origin={o}&destination={d}"
  • Network accessline 200
    }.get(mode, "driving")     url = f"https://restapi.amap.com/v3/direction/{endpoint}?key={key}&origin={o}&destination={d}"     rest = json.loads(urllib.request.urlopen(url, timeout=20).read())
  • Network accessline 201
    url = f"https://restapi.amap.com/v3/direction/{endpoint}?key={key}&origin={o}&destination={d}"     rest = json.loads(urllib.request.urlopen(url, timeout=20).read())     paths = rest.get("route", {}).get("paths") or []
  • Network accessline 202
    rest = json.loads(urllib.request.urlopen(url, timeout=20).read())

scripts/render_html.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/render_markdown.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/seed_prices.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/test_day_route_urls.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 187
    + ["type=car", "src=uriapi", "innersrc=uriapi", "policy=1"]     )     return f"https://ditu.amap.com/dir?{'&'.join(q)}"
  • Network accessline 189
    return f"https://ditu.amap.com/dir?{'&'.join(q)}"
  • Network accessline 230
    issues.append("ACTIVITY_NAME")             url = dir_url(route["start"], route["vias"], route["end"], hotel_name)             if not url.startswith("https://ditu.amap.com/dir?"):
  • Network accessline 231
    url = dir_url(route["start"], route["vias"], route["end"], hotel_name)             if not url.startswith("https://ditu.amap.com/dir?"):                 issues.append("BAD_URL")
  • Network accessline 232
    if not url.startswith("https://ditu.amap.com/dir?"):

scripts/trip_slug.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/validate.py

  • Executable scriptline 1
    #!/usr/bin/env python3

tests/test_cli_safety.py

  • Executable scriptline 1
    Executable file

tests/test_render_html.py

  • Executable scriptline 1
    Executable file

tests/test_render_markdown.py

  • Executable scriptline 1
    Executable file
  • Network accessline 26
    "purpose": "核对开放和天气",                 "checked_at": "2026-08-24T10:00:00+08:00",                 "source_refs": ["https://example.com/official"],
  • Network accessline 27
    "checked_at": "2026-08-24T10:00:00+08:00",                 "source_refs": ["https://example.com/official"],             }],
  • Network accessline 28
    "source_refs": ["https://example.com/official"],

tests/test_template.py

  • Executable scriptline 1
    Executable file

tests/test_travel_scenarios.py

  • Executable scriptline 1
    Executable file
  • Network accessline 25
    "recheck_at": "2026-10-01T09:00:00+08:00",         "source": "official-site",         "source_ref": "https://example.com/official",
  • Network accessline 26
    "source": "official-site",         "source_ref": "https://example.com/official",     }
  • Network accessline 27
    "source_ref": "https://example.com/official",
  • Network accessline 44
    "purpose": f"{platform} 场景证据",             "checked_at": "2026-08-24T10:00:00+08:00",             "source_refs": [f"https://example.com/{platform}"],
  • Network accessline 45
    "checked_at": "2026-08-24T10:00:00+08:00",             "source_refs": [f"https://example.com/{platform}"],         }
  • Network accessline 46
    "source_refs": [f"https://example.com/{platform}"],
  • Network accessline 80
    "applies_to": "全体同行人",             "source": "official-site",             "source_ref": "https://example.com/official",
  • Network accessline 81
    "source": "official-site",             "source_ref": "https://example.com/official",             "checked_at": "2026-08-24T10:00:00+08:00",
  • Network accessline 82
    "source_ref": "https://example.com/official",
  • Network accessline 161
    "status": "not_booked",             "id_required": True,             "url": "https://flights.ctrip.com/",
  • Network accessline 162
    "id_required": True,             "url": "https://flights.ctrip.com/",         }]
  • Network accessline 163
    "url": "https://flights.ctrip.com/",

tests/test_validate.py

  • Executable scriptline 1
    Executable file
  • Network accessline 69
    "recheck_at": "2026-08-24" if category == "price" else "2026-09-17",                     "source": "official-site",                     "source_ref": "https://example.com/source",
  • Network accessline 70
    "source": "official-site",                     "source_ref": "https://example.com/source",                 }
  • Network accessline 71
    "source_ref": "https://example.com/source",
  • Network accessline 89
    "recheck_at": "2026-09-17",                     "source": "official-site",                     "source_ref": "https://example.com/source",
  • Network accessline 90
    "source": "official-site",                     "source_ref": "https://example.com/source",                 }
  • Network accessline 91
    "source_ref": "https://example.com/source",

How the signals fit together

Facts from a static read of the files at the pinned commit. They describe what the code does, not why.

Some files could not be read; the facts below still hold.

Signal confidence: 86 facts

and 36 more

Works with

Agent compatibility, from the files in this repository
AgentStatusEvidenceInstall to
Claude CodeCompatibleStandard SKILL.md SKILL.md.claude/skills/<skill-name>/
CodexCompatibleStandard SKILL.md SKILL.md.agents/skills/<skill-name>/
CursorCompatibleStandard SKILL.md SKILL.md.cursor/skills/<skill-name>/
Gemini CLICompatibleStandard SKILL.md SKILL.md.gemini/skills/<skill-name>/
GitHub CopilotCompatibleStandard SKILL.md SKILL.md.github/skills/<skill-name>/
OpenCodeCompatibleStandard SKILL.md SKILL.md.opencode/skills/<skill-name>/
  • Native The repository ships a manifest, folder or frontmatter field for this agent.
  • Compatible A standard SKILL.md that this agent can read.
  • Unknown No evidence either way.

Derived automatically from paths, manifests and frontmatter. Not tested on each agent.