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
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.
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
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 tokensAlways available to the agent
SKILL.md
3,132 tokensWhen the skill is activated
Reference documents
31,371 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 工作原则
- 信息源
- 能力发现
- 标准流程
- 行前复核与临场调整
- 增量修改
- 资源索引
Scripts executed separately
scripts/add_hotel_legs.pyscripts/render_html.pyscripts/render_markdown.pyscripts/seed_prices.pyscripts/test_day_route_urls.pyscripts/trip_slug.pyscripts/validate.pytests/test_cli_safety.pytests/test_render_html.pytests/test_render_markdown.pytests/test_template.pytests/test_travel_scenarios.pytests/test_validate.py
Files
.github/workflows/validate.ymlasset948 bytes.gitignoreasset313 bytesCHANGELOG.mddoc55,681 bytesLICENSEasset1,075 bytesREADME.mddoc7,444 bytesSKILL.mdcore11,748 bytesSKILL.mdcore11,748 bytesSKILL.mdcore11,748 bytesSKILL.mdcore11,748 bytesagents/openai.yamlasset360 bytesassets/template.htmlasset133,815 bytesexamples/README.mddoc1,409 bytesexamples/chengdu-2026-09-18.jsonasset46,976 bytesreferences/amap-mcp-usage.mddoc2,047 bytesreferences/data-sources.mddoc6,694 bytesreferences/deployment.mddoc3,686 bytesreferences/dianping-research.mddoc602 bytesreferences/hotel-planning.mddoc1,624 bytesreferences/iteration-rounds.mddoc1,681 bytesreferences/meituan-guide-research.mddoc1,123 bytesreferences/multi-turn-protocol.mddoc2,398 bytesreferences/planning.mddoc4,230 bytesreferences/price-research.mddoc1,544 bytesreferences/recheck-and-safety.mddoc2,576 bytesreferences/setup-guide.mddoc4,108 bytesreferences/trip-schema.jsonasset8,442 bytesreferences/validation-rules.mddoc3,574 bytesreferences/xhs-research.mddoc1,387 bytesscripts/add_hotel_legs.pyruns19,630 bytesscripts/render_html.pyruns4,167 bytesscripts/render_markdown.pyruns13,792 bytesscripts/seed_prices.pyruns18,648 bytesscripts/test_day_route_urls.pyruns8,381 bytesscripts/trip_slug.pyruns3,265 bytesscripts/validate.pyruns51,624 bytestests/test_cli_safety.pyruns1,596 bytestests/test_render_html.pyruns1,721 bytestests/test_render_markdown.pyruns3,301 bytestests/test_template.pyruns2,371 bytestests/test_travel_scenarios.pyruns6,230 bytestests/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 GitHubSkills 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 shellAutomated 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:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- No broad tool permissions
- No dangerous shell commands
- 144 network referencesin 14 files: examples/chengdu-2026-09-18.json:20 assets/template.html:1526 README.md:7 and 11 more
- No hidden or obfuscated text
- No instruction overrides
- 13 executable scriptsin 13 files: scripts/add_hotel_legs.py:1 scripts/render_html.py:1 scripts/render_markdown.py:1 and 10 more
- 3 references to secretsin 3 files: .gitignore:21 references/setup-guide.md:72 scripts/add_hotel_legs.py:19
- No requests to vote in Hot
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
[](https://github.com/SquirrelSong5/travel-planner-skill/actions/workflows/validate.yml) - Network accessline 8
[](https://github.com/SquirrelSong5/travel-planner-skill/stargazers) - Network accessline 9
[](#快速开始) - Network accessline 10
[](CHANGELOG.md) - Network accessline 11
[](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&type=date&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
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
- Network access in prose of documentationCHANGELOG.md:3Low confidence
- Network access in prose of documentationCHANGELOG.md:236Low confidence
- Network access in code of documentationCHANGELOG.md:424Low confidence
- Network access in prose of documentationCHANGELOG.md:463Low confidence
- Network access in prose of documentationCHANGELOG.md:494Low confidence
- Network access in prose of documentationREADME.md:7Low confidence
- Network access in prose of documentationREADME.md:8Low confidence
- Network access in prose of documentationREADME.md:9Low confidence
- Network access in prose of documentationREADME.md:10Low confidence
- Network access in prose of documentationREADME.md:11Low confidence
- Network access in prose of documentationREADME.md:13Low confidence
- Network access in prose of documentationREADME.md:45Low confidence
- Network access in code of documentationREADME.md:51Low confidence
- Network access in prose of documentationREADME.md:97Low confidence
- Network access in prose of documentationREADME.md:98Low confidence
- Network access in prose of documentationREADME.md:133Low confidence
- Network access in prose of documentationREADME.md:134Low confidence
- Network access in prose of documentationREADME.md:135Low confidence
- Network access in prose of documentationREADME.md:136Low confidence
- Network access in prose of documentationREADME.md:137Low confidence
- Network access in prose of documentationREADME.md:141Low confidence
- Network access in code of documentationreferences/data-sources.md:47Low confidence
- Network access in code of documentationreferences/data-sources.md:48Low confidence
- Network access in code of documentationreferences/data-sources.md:49Low confidence
- Network access in code of documentationreferences/data-sources.md:143Low confidence
- Network access in code of documentationreferences/data-sources.md:144Low confidence
- Network access in code of documentationreferences/data-sources.md:145Low confidence
- Network access in prose of documentationreferences/deployment.md:39Low confidence
- Network access in prose of documentationreferences/deployment.md:40Low confidence
- Network access in prose of documentationreferences/deployment.md:41Low confidence
- Network access in prose of documentationreferences/deployment.md:42Low confidence
- Network access in code of documentationreferences/recheck-and-safety.md:26Low confidence
- Network access in code of documentationreferences/recheck-and-safety.md:27Low confidence
- Network access in code of documentationreferences/recheck-and-safety.md:28Low confidence
- Network access in prose of documentationreferences/setup-guide.md:64Low confidence
- Access to secrets in prose of documentationreferences/setup-guide.md:72Low confidence
- Executable script in code of a file that runsscripts/add_hotel_legs.py:1High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valuescripts/add_hotel_legs.py:19Low confidence
- Network access in code of a file that runsscripts/add_hotel_legs.py:172High confidence
- Network access in code of a file that runsscripts/add_hotel_legs.py:173High confidence
- Network access in code of a file that runsscripts/add_hotel_legs.py:174High confidence
- Network access in code of a file that runsscripts/add_hotel_legs.py:175High confidence
- Network access in code of a file that runsscripts/add_hotel_legs.py:176High confidence
- Network access in code of a file that runsscripts/add_hotel_legs.py:177High confidence
- Network access in code of a file that runsscripts/add_hotel_legs.py:199High confidence
- Network access in code of a file that runsscripts/add_hotel_legs.py:200High confidence
- Network access in code of a file that runsscripts/add_hotel_legs.py:201High confidence
- Network access in code of a file that runsscripts/add_hotel_legs.py:202High confidence
- Executable script in code of a file that runsscripts/render_html.py:1High confidence
- Executable script in code of a file that runsscripts/render_markdown.py:1High confidence
and 36 more
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Compatible | Standard SKILL.md SKILL.md | .claude/skills/<skill-name>/ |
| Codex | Compatible | Standard SKILL.md SKILL.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard 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.