{"id":"6023fd45-06cd-47fe-81ba-47e0012d0bb5","shortId":"N2yAN3","kind":"skill","title":"travel-guidebook","tagline":"Create beautifully designed travel guidebook PDFs from trip itineraries. End-to-end workflow from deep research to Playwright PDF export, featuring zero AI-generated images, Tabler Icons, inline SVG decorations, and Claude's warm parchment aesthetic. Use this skill whenever the u","description":"# Travel Guidebook Maker\n\n从调研到成书的一站式旅游路书生成引擎——**零 AI 插图、零 emoji、纯 CDN 引入**。通过 Tabler Icons + 内联 SVG 装饰 + Claude 设计美学，打造有温度、有设计感的旅行指南 PDF。\n\n## 设计哲学\n\n> **Monocle 的编辑品味 + DK 的视觉叙事 + Lonely Planet 的信息深度 + Claude 的温暖美学**\n\n这不是一本冰冷的导航手册，而是一本有温度的旅行伙伴——在羊皮纸般的暖色底上，用衬线体讲述目的地的故事，用图标系统标记功能信息，用装饰元素营造编辑出版感。\n\n**核心理念：排版即设计。** 不依赖 AI 生图或照片，通过字体层级、功能色系统、内联 SVG 装饰、CSS 伪元素，让路书本身就具备设计感。\n\n---\n\n## 总体流程\n\n```\nStage 0 环境准备 → Stage 1 需求确认\n→ Stage 2 深度调研 [5 个 explore agent 并行]\n→ Stage 3 路线架构\n→ Stage 4 内容写作 [专职 general-purpose agent]\n→ Stage 5 HTML 交付与检查 → Stage 6 PDF 导出\n```\n\nStage 0 自动检测 Node.js + Playwright 环境；Stage 2 并行调研加速信息收集；Stage 4 专职 agent 在干净上下文中写 HTML 保证一致性；Stage 5 是 HTML 检查点——用户确认满意后再执行 Stage 6 导出 PDF。\n\n---\n\n# Stage 0: 环境准备\n\n> 在路书制作开始前，确保 PDF 导出环境就绪。\n\n按以下顺序逐项检测，任一步骤失败则停止并提示用户：\n\n### 1. Node.js\n\n```bash\nnode --version\n```\n\n- ✅ v18.x 或更高 → 继续\n- ❌ 命令不存在 → 停止，提示安装：https://nodejs.org/\n\n### 2. package.json\n\n```bash\nls package.json\n```\n\n- ✅ 存在 → 继续\n- ❌ 不存在 → `npm init -y`\n\n### 3. Playwright\n\n```bash\nnode -e \"require('playwright')\"\n```\n\n- ✅ 无报错 → 继续\n- ❌ 报错 → `npm install playwright && npx playwright install chromium`\n\n### 4. html2pdf.mjs\n\n已 bundled 在 `scripts/html2pdf.mjs`，Stage 6 时复制到工作目录。\n\n### 5. 高德地图 MCP（可选增强）\n\n尝试调用高德 MCP 工具验证可用性：\n\n```\n调用 maps_whether(\"{目的地城市}\")\n```\n\n- ✅ 返回天气数据 → 标记 `AMAP_AVAILABLE = true`\n- ❌ 工具不存在或报错 → 标记 `AMAP_AVAILABLE = false`\n\n> 高德 MCP 是**增强层**——不可用时路书照常生成，仅精确数据降级为 LLM 估算。\n\n**用户未配置时的提示**（仅提一次，不阻塞流程）：\n\n> \"💡 检测到高德地图 MCP 未配置。路书仍会正常生成，但距离/交通/天气数据将使用估算值。如需精确数据，可在 MCP 配置中添加 `@amap/amap-maps-mcp-server`。\"\n\n## 环境就绪确认\n\n所有检测通过后输出：\n\n> \"✅ 环境准备就绪（Node.js {版本} + Playwright + Chromium{高德可用时加：+ 高德地图 MCP}）。开始制作路书。\"\n\n---\n\n# Stage 1: 需求确认\n\n向用户确认以下参数（能从指令推断的不问，推断不了的才问）：\n\n> **收到，准备制作旅游路书。请确认以下信息：**\n>\n> 1. **路线名称**：「{从指令推断}」，可以吗？\n> 2. **旅行类型**：自驾游 / 徒步 / 城市漫游 / 混合？\n> 3. **目标读者**：深度文化游 / 轻松休闲游 / 探险挑战游？\n> 4. **总天数**：{推断天数}，对吗？\n> 5. **个性化信息**：需要在封面或末尾加上个人/团队信息吗？\n>\n> 直接回复修改项即可，没问题的我直接开始。\n\n**快捷模式**：用户已说明足够信息时，跳过确认直接执行。\n\n**默认值**：旅行类型=自驾游，目标读者=深度文化游，天数=根据路线推断，个性化信息=无。\n\n## 智能路由\n\n需求确认后，根据用户输入决定起始 Stage：\n\n| 用户提供的内容 | 跳转到 | 说明 |\n|---------------|--------|------|\n| 仅目的地/天数 | Stage 2 | 标准全流程 |\n| 已有行程文件（Markdown/文本） | Stage 3 | 读取行程提取架构，跳过调研 |\n| 已有行程 + \"已确认/不用调研\" | Stage 4 | 直接进入写作排版 |\n| 已有 HTML 路书 | Stage 5 | 直接进入检查，可修改后导出 PDF |\n\n判断依据：用户是否附带了 `@文件名` 引用、是否明确说\"行程已确认\"、\"不需要调研\"等。遇到不确定的情况，默认走完整流程，但主动问一句\"需要我做调研还是直接开始写？\"。\n\n---\n\n# Stage 2: 深度调研（并行 Sub-Agent）\n\n旅游路书的调研需要同时覆盖**实用信息**和**文化深度**。采用 **并行 explore agent** 加速调研——每个方向一个独立 agent，同时出发，互不阻塞。\n\n## 并行调研架构\n\n```\n主 Agent                         explore agent 池（并行）\n┌──────────┐                    ┌─────────────────────────┐\n│ 构造 5+1  │  ── background ──→│ research-transport       │\n│ agent     │  ── background ──→│ research-attractions     │\n│ prompt    │  ── background ──→│ research-food            │\n│          │  ── background ──→│ research-culture         │\n│          │  ── background ──→│ research-practical       │\n│          │  ── background ──→│ research-spatial (高德)   │\n│          │                    └─────────────────────────┘\n│ 等通知    │  ←── 自动通知 ───  (各 agent 完成后)\n│ 收集合并   │  ── read_agent ──→ 获取每个 agent 结果\n│ 输出报告   │\n└──────────┘\n```\n\n> `research-spatial` 仅在 `AMAP_AVAILABLE = true` 时启动。不可用时只启 5 个 agent。\n```\n\n### Agent 分工\n\n使用 `task` 工具，`agent_type: \"explore\"`，`mode: \"background\"`，同时启动 5+1 个 agent：\n\n| Agent 名 | 调研方向 | 搜索关键词示例（中英结合） |\n|----------|---------|----------------------|\n| `research-transport` | 交通路线 | \"{起点}到{终点} 高铁/自驾 时刻 价格\", \"{destination} transport\" |\n| `research-attractions` | 核心景点 | \"{目的地} 必去景点 门票 开放时间 TOP10\", \"{destination} attractions\" |\n| `research-food` | 当地美食 | \"{目的地} 特色美食 推荐餐厅 美食街 人均\", \"{destination} local food\" |\n| `research-culture` | 文化历史 | \"{目的地} 历史 文化 典故 民俗 方言\", \"{destination} history culture\" |\n| `research-practical` | 实用信息 | \"{目的地} {月份}天气 预算 安全 注意事项\", \"{destination} travel tips\" |\n\n> 自驾游加第 7 个 agent `research-road`（路况、加油站、海拔变化）。\n\n### 高德空间数据 Agent（AMAP_AVAILABLE = true 时）\n\n第 6 个 agent `research-spatial`，专职采集高德地图数据：\n\n```\n你是空间数据采集专员。使用高德地图 MCP 工具采集以下数据。\n\n目的地：{目的地}\n已知景点列表：{从需求确认中提取的所有景点名称}\n\n## 任务 1: 景点 POI 数据\n对每个景点调用 maps_text_search(\"{景点名}\")，提取：\n- POI ID, 名称, 完整地址, 经纬度, 评分, 营业时间, 联系电话\n\n## 任务 2: 周边发现\n对每个核心景点（每天的主要景点）调用 maps_around_search：\n- 关键词=\"餐厅|小吃\", location={景点坐标}, radius=1000 → 附近餐厅 top 5\n- 关键词=\"便利店|药店\", location={景点坐标}, radius=500 → 应急设施\n\n## 任务 3: 天气预报\nmaps_whether(\"{目的地城市名称或 adcode}\")\n\n## 任务 4: 地理编码\n对所有地名调用 maps_gep 获取精确坐标，供 Stage 3 路径规划使用\n\n## 输出格式\n### 景点 POI 汇总\n| 景点 | 地址 | 经纬度 | 评分 | 营业时间 |\n|------|------|--------|------|---------|\n| ... | ... | ... | ... | ... |\n\n### 周边发现\n#### {景点名} 周边\n| 名称 | 类型 | 距离 | 评分 |\n|------|------|------|------|\n| ... | ... | ... | ... |\n\n### 天气预报\n| 日期 | 天气 | 温度 | 风力 |\n|------|------|------|------|\n| ... | ... | ... | ... |\n```\n\n> 自驾游加第 6 个 agent `research-road`（路况、加油站、海拔变化）。\n\n### Agent Prompt 模板\n\n每个 agent 的 prompt 遵循以下结构：\n\n```\n你是旅游调研专员，负责【{方向}】调研。\n\n## 任务参数\n- 目的地：{目的地}\n- 出发地：{出发地}\n- 日期：{具体日期}\n- 天数：{N} 天\n- 旅行类型：{自驾/高铁/混合}\n\n## 调研要求\n1. 使用 bash 执行 curl 或 web_fetch 获取以下 URL（逐个尝试，失败跳过）：\n   - {预设 URL 列表，3-5 个相关网站}\n2. 每个信源提取关键数据点\n3. 如果所有 URL 都失败，基于已有知识整理，标注\"⚠️ 模型知识\"\n\n## 输出格式（严格遵循）\n### {方向名}\n#### 核心发现\n- 发现1：{具体数据}（来源：{URL}）\n- 发现2：...\n\n#### 推荐列表\n| 名称 | 详情 | 价格 | 备注 |\n|------|------|------|------|\n| ... | ... | ... | ... |\n\n#### 信源\n- {URL1}\n- {URL2}\n\n#### 数据时效\n- 以上信息获取于 {当前日期}，建议出行前复核价格和开放时间\n```\n\n### 结果收集与合并\n\n所有 agent 完成后：\n\n1. 逐个 `read_agent` 获取结果\n2. 合并为统一调研报告，按方向分章节\n3. 标注每个数据点的来源（URL 或\"模型知识\"）\n4. 如果某个 agent 失败，主 agent 补充该方向的 LLM 知识\n\n### 降级策略\n\n| 场景 | 处理方式 |\n|------|---------|\n| task 工具不可用 | 退回**串行模式**：主 agent 逐方向 web_fetch |\n| 部分 agent 超时/失败 | 主 agent 用 LLM 知识补充失败方向 |\n| research-spatial 失败 | 距离/时间用 LLM 估算，标注\"约\"前缀 |\n| 完全无法联网 | **离线模式**：全部基于 LLM 知识，标注\"⚠️ 建议出行前核实\" |\n\n## 调研质量要求\n\n- 并行模式：每个 agent 至少 3 个有效信源，总计 ≥ 15 个\n- 串行模式：信源总数 ≥ 20 个（≤3 天短途：≥ 10 个）\n- 离线模式：尽可能丰富，标注数据时效不确定\n- 优先：官方旅游网站、资深旅行博主、当地媒体、专业论坛\n- 价格信息须注明时效性\n- 关键事实至少 2 个独立信源交叉验证\n\n---\n\n# Stage 3: 路线架构\n\n基于调研结果生成每日行程架构。当高德空间数据可用时，使用**真实路径规划**替代 LLM 估算。\n\n## 高德路径规划（AMAP_AVAILABLE = true 时）\n\nStage 2 的 `research-spatial` agent 已提供所有景点的精确坐标。在此基础上，主 agent 调用高德路径规划 API：\n\n```\n对每日行程中的连续景点对，根据旅行类型选择 API：\n\n旅行类型   │  API                                  │  说明\n──────────┼──────────────────────────────────────┼──────────\n自驾游     │  maps_direction_driving(A坐标, B坐标)  │  里程/用时/过路费\n城市漫游   │  maps_direction_walking (≤3km)         │  步行距离/用时\n           │  maps_direction_transit_integrated (>3km)│  地铁/公交方案\n骑行段     │  maps_bicycling                        │  骑行路线/距离\n跨城移动   │  maps_direction_transit_integrated      │  火车/大巴方案\n所有模式   │  maps_distance                         │  每日总距离验证\n```\n\n> 高德不可用时，使用 LLM 知识估算距离和时间，在路书中用\"约\"前缀标注。\n\n## Stage 3.1: 行程可行性门控（Feasibility Gate）\n\n> **第一性原理**：行程是物理约束下的规划，不是景点的自由组合。  \n> 在写入任何每日行程前，必须通过以下验证——不通过则强制拆分或删除景点。\n\n### 规则一：单日往返可行性公式\n\n```\n可用总时长 = 出发时间到返回时间（一般 12h，高原区域 10h）\n\n验证公式：\n  出发点 → 景点A（单程用时）× 2          ← 来回交通\n  + 各景点游览时间之和\n  + 景点间交通用时之和\n  + 缓冲时间（1h）\n  ≤ 可用总时长\n\n不满足 → 必须拆分为多天 或 删去最远景点\n```\n\n**计算工具**（优先级）：\n- AMAP_AVAILABLE = true → 调用 `maps_direction_driving` / `maps_distance` 获取真实用时\n- AMAP_AVAILABLE = false → 用 LLM 知识估算，并在路书中标注\"约\"\n\n### 规则二：跨城景点强制隔离\n\n| 距出发地单程距离 | 强制规则 |\n|----------------|---------|\n| ≤ 80km | 可与其他景点同天 |\n| 80–150km | 同天内只能有该景点，无其他目的地 |\n| > 150km | **强制独立成一天，或安排沿途住宿** |\n\n> 典型陷阱：拉萨出发，羊卓雍错（100km）可单独一日游；日喀则扎什伦布寺/白居寺（280km）**绝对不可**与任何拉萨景点或羊湖捆绑在同一天。\n\n### 规则三：特殊目的地约束\n\n**高原地区（海拔 3500m+）**：\n\n| 到达后天数 | 允许活动范围 | 禁止 |\n|-----------|------------|------|\n| Day 1 | 酒店周边步行，≤1h | 一切景区游览 |\n| Day 2 | 市区平坦景点，≤3h | 海拔 4000m+ 景点 |\n| Day 3+ | 正常游览市区 | 海拔 4500m+ 建议 Day 4 以后 |\n| Day 4+ | 可前往高海拔（羊湖 4441m） | — |\n| Day 5+ | 可尝试极高海拔（纳木错 4718m） | 仍需带氧气 |\n\n**强制执行**：高原行程的 Day 1 不得安排任何收费景点，违反时自动将景点后移一天。\n\n### 规则四：生成后审核清单\n\n每日行程草稿生成后，必须逐一校验：\n\n```\n□ 当日总里程（往返）是否在可行范围？\n□ 所有景点是否在同一合理区域内？（不可跨越多个城市）\n□ 是否存在隐含的\"长距离跳跃\"？（如 A→B→C 看似相邻实则绕远）\n□ 高原行程：是否违反海拔适应规则？\n□ 含包车/自驾的一日游：是否有足够的观景/停留时间（≥2h）？\n□ 返程时间是否预留充足？（天黑前返回）\n```\n\n如任何一项不通过 → **红色警示**，重新规划该天行程后方可进入 Stage 4。\n\n---\n\n## 节奏设计\n\n- **张弛有度**：长途驾驶日 + 深度游览日交替\n- **高潮设计**：最精华目的地安排在行程中段（Day 3-5）\n- **缓冲时间**：每 3-4 天安排\"自由日\"或\"休整日\"\n- **情绪曲线**：出发兴奋 → 适应期 → 高潮 → 回味 → 离别不舍\n\n## 每日行程结构\n\n```\nDay X: [起点] → [终点]\n├─ 里程：XXkm（高德实测 / LLM 估算）\n├─ 预计用时：Xh（含游览时间）\n├─ 交通方案（高德可用时）：\n│   ├─ 景点A→景点B：步行 12min / 0.9km\n│   ├─ 景点B→景点C：地铁2号线 3站 / 15min\n│   └─ 景点C→酒店：公交 537路 / 25min\n├─ 天气（高德可用时）：☁️ 多云 26°C\n├─ 今日亮点：一句话概括\n├─ 必停点：2-3 个精选（含高德评分）\n├─ 周边发现（高德可用时）：景点周边高分餐厅/咖啡馆\n├─ 美食推荐：1-2 个\n├─ 住宿推荐：1-2 个\n└─ 贴士：含天气建议 + 实际交通建议\n```\n\n> 标注\"高德可用时\"的字段在 `AMAP_AVAILABLE = false` 时省略或用 LLM 估算替代。\n\n## 用户确认\n\n展示行程架构供确认或修改，确认后进入 Stage 4。\n\n**快捷模式**：用户要求\"直接写不用确认\"时跳过。\n\n---\n\n# Stage 4: 内容写作与排版\n\n这是路书的核心阶段——将调研和架构转化为设计精美的 HTML 路书。\n\n## 执行模式选择\n\n根据可用工具自动选择最优模式：\n\n| 条件 | 模式 | 说明 |\n|------|------|------|\n| task 工具可用 | **专职 Agent 模式**（推荐） | 启动 1 个 general-purpose agent 在干净上下文中写全部 HTML |\n| task 不可用 | **主 Agent 直写模式** | 主 agent 用 heredoc 分批写入（传统方式） |\n\n### 专职 Agent 模式（推荐）\n\n**核心优势**：HTML 写作 agent 拥有干净上下文——不含调研过程、历史对话、路线讨论的噪音。从第一行写到最后一行，风格完全统一。\n\n启动 1 个 `general-purpose` agent（`mode: \"background\"`），将以下内容**完整传入** prompt：\n\n```\n你是旅游路书 HTML 写作专家。请生成一个完整的单文件 HTML 路书。\n\n## 路书参数\n- 路线名称：{名称}\n- 文件名：{名称}_guidebook.html\n- 旅行日期：{日期}\n- 天数：{N} 天\n- 旅行类型：{类型}\n\n## CSS 规范（完整复制 references/layout-css.md 内容）\n{layout-css.md 全文}\n\n## 章节模板（完整复制 references/chapter-templates.md 内容）\n{chapter-templates.md 全文}\n\n## 调研数据（Stage 2 合并报告）\n{调研报告全文}\n\n## 路线架构（Stage 3 确认版）\n{每日行程架构}\n\n## 写作风格\n三层需求驱动：\n- 定向（Where）——精准清晰：地名、方向、里程用时准确\n- 决策（What）——替用户筛选：每天 2-3 个必停点\n- 情感（Why）——赋予意义：融入历史故事和当地人视角\n\n## 技术要求\n1. 使用 heredoc 分批写入（cat > 首批，cat >> 后续），单引号 << 'HTMLEOF'\n2. ¥ 用 &#165; 替代，— 用 &#8212;，→ 用 &#8594;，° 用 &#176;\n3. 每批写完后 wc -c 确认文件增长\n4. 总批次 3-5 批，按逻辑段落分割\n5. 所有 CSS 内嵌 <style>，所有 SVG 内联，零外部图片\n6. 最后一批必须包含 </body></html> 闭合标签\n```\n\n**主 agent 在等待期间**：可做其他轻量工作或提示用户\"正在生成 HTML，预计 2-3 分钟\"。\n\nAgent 完成后：\n1. `read_agent` 获取结果，确认 HTML 文件已生成\n2. `wc -c` 验证文件大小（5 天行程应在 50-80KB）\n3. 进入 Stage 5\n\n### 主 Agent 直写模式（降级）\n\n当 task 工具不可用时，主 agent 直接使用 heredoc 分批写入。\n\n## 章节结构\n\n路书采用五部分结构。阅读 `references/chapter-templates.md` 获取每个章节的完整 HTML 模板：\n\n1. **出发前**：封面 / 旅程概览 / 行前准备\n2. **每日行程**：Day-by-Day（核心主体）——日程卡片、路线描述、必停点、美食、住宿、贴士、笔记区\n3. **目的地深度**：2-3 个重要目的地的深度介绍\n4. **实用附录**：紧急联系、常用语言、费用明细、推荐歌单\n5. **封底**：旅行语录 + 个性化信息 + 旅行感言空间\n\n## 排版规范\n\n路书视觉设计继承 Claude 暖色调美学。阅读 `references/layout-css.md` 获取完整 CSS 规范，涵盖：\n\n- 外部资源（仅 Google Fonts + Tabler Icons CDN）\n- 页面布局（A4, max-width 680px）\n- 字体系统（Noto Serif SC / Noto Sans SC / JetBrains Mono）\n- 配色方案（Parchment 羊皮纸底 + Terracotta 赤陶色 + 功能色系统）\n- 装饰元素（指南针、分隔线、DAY 徽章、卡片角标、首字下沉）\n- 分页控制（封面独占、Day 新页、卡片不拆分）\n- 打印适配（保留暖色调背景）\n\n## 写作风格\n\n三层需求驱动写作：\n\n- **定向（Where）**——精准清晰：地名、方向、里程用时必须准确，使用具身化描述（\"左手边\"、\"前方 200 米\"）\n- **决策（What）**——替用户筛选：每个目的地只推荐 2-3 个必停点，用\"必停/可选/时间充裕可去\"标记优先级\n- **情感（Why）**——赋予意义：每个地点讲\"为什么值得来\"，融入历史故事和当地人视角，用文学化语言描述风景\n\n### 情感增强写作（高德数据驱动）\n\n当高德空间数据可用时，应用以下四种情感增强模式：\n\n**1. 距离叙事**——将精确距离转化为可感知的体验：\n- ≤500m → \"几分钟脚程\" + 途中能看到/闻到/听到什么\n- 500m-2km → \"散步的距离\" + 沿途风景描述\n- \\>2km → 交通建议 + 车窗外的风景\n- 示例：\"出黄鹤楼南门左转，沿武珞路走 600 米——大约一首歌的时间——就到了户部巷。\"\n\n**2. 周边惊喜**——呈现高德发现的高分 POI（LLM 可能不知道的新店/小店）：\n- 用\"💡 旅途发现\"卡片呈现\n- 包含：名称、距离、评分、一句推荐理由\n\n**3. 时间感知**——天气 + 距离 + 时间段 = 具体体验建议：\n- 示例：\"今日 26°C 多云——步行长江大桥的完美天气。桥面 1.6km，不急不慢走完约 22 分钟。建议 16:00 出发，走到桥中央正好赶上日落。\"\n\n**4. 安心感**——在每日贴士中嵌入周边便利设施：\n- 示例：\"今晚住宿 200m 内有全家便利店（24h），最近药房在 400m 外武珞路上。\"\n\n> 高德不可用时，这四种模式自动省略——路书仍有完整的文化叙事和 LLM 估算数据。\n\n## HTML 生成（heredoc 分批策略）\n\n生成一个完整的单 HTML 文件，所有 CSS 内嵌 `<style>`，所有 SVG 装饰内联，零外部图片。\n\n> 以下 heredoc 策略适用于**专职 Agent 的内部执行**和**主 Agent 直写降级模式**。\n\n### 大文件写入策略\n\n路书 HTML 通常 50-80KB（5 天行程约 30 页），超出 write/create 工具的单次上限。采用 **heredoc 分批追加**策略：\n\n```bash\n# 第 1 批：HTML head + 完整 CSS（<style> 标签）\ncat > {文件名}_guidebook.html << 'HTMLEOF'\n<!DOCTYPE html>\n<html lang=\"zh-CN\">\n<head>...</head>\n<style>/* 全部 CSS，参照 references/layout-css.md */</style>\n<body>\nHTMLEOF\n\n# 第 2 批：封面 + 概览 + 行前准备\ncat >> {文件名}_guidebook.html << 'HTMLEOF'\n<div class=\"cover\">...</div>\n<div class=\"overview\">...</div>\n<div class=\"preparation\">...</div>\nHTMLEOF\n\n# 第 3-N 批：每日行程（每天一批或每 2 天一批）\ncat >> {文件名}_guidebook.html << 'HTMLEOF'\n<div class=\"day-chapter\">...</div>\nHTMLEOF\n\n# 最后一批：深度游 + 附录 + 封底 + 闭合标签\ncat >> {文件名}_guidebook.html << 'HTMLEOF'\n<div class=\"deep-dive\">...</div>\n<div class=\"appendix\">...</div>\n<div class=\"back-cover\">...</div>\n</body></html>\nHTMLEOF\n```\n\n**关键注意**：\n- 使用**单引号** heredoc（`<< 'HTMLEOF'`）防止 shell 变量展开\n- `¥` 符号在 heredoc 中用 `&#165;` 替代，避免编码问题\n- 每批写完后用 `wc -c` 确认文件增长正常\n- 总批次控制在 3-5 批，按逻辑段落分割（不要在 HTML 标签中间断开）\n\n---\n\n# Stage 5: HTML 交付与检查\n\n## 交付内容\n\n1. **HTML 文件**：`{路线名称}_guidebook.html`（单文件，零外部依赖）\n2. **工作报告**：制作过程记录（模板见 `references/report-template.md`）\n\n## HTML 检查点\n\nHTML 完成后，必须先让用户检查，不能直接跳到 PDF：\n\n> \"HTML 路书已生成：`{文件名}_guidebook.html`。请在浏览器中打开检查内容和排版。满意后告诉我，我会导出 PDF。如果需要调整，告诉我哪里需要改。\"\n\n- 用户说\"OK / 满意 / 导出 PDF\" → 进入 Stage 6\n- 用户说\"修改 xxx\" → 回到 Stage 4 修改后重新提示检查\n\n---\n\n# Stage 6: PDF 导出\n\n> 用户在 Stage 5 确认 HTML 满意后方可执行。\n\n## 执行步骤\n\n### 1. 准备导出脚本\n\n确保工作目录有 `html2pdf.mjs`。查找方式：\n\n```bash\n# 优先检查当前目录\nls html2pdf.mjs 2>/dev/null || \\\n  # 查找 skill 目录下的 bundled 脚本\n  find ~/.agents/skills/travel-guidebook -name \"html2pdf.mjs\" 2>/dev/null | head -1 | xargs -I{} cp {} ./html2pdf.mjs || \\\n  find . -path \"*/travel-guidebook/scripts/html2pdf.mjs\" 2>/dev/null | head -1 | xargs -I{} cp {} ./html2pdf.mjs\n```\n\n如果仍找不到，用以下最小脚本创建：\n\n```javascript\n// html2pdf.mjs — Playwright A4 PDF export\nimport { chromium } from 'playwright';\nimport { resolve } from 'path';\nconst html = resolve(process.argv[2]);\nconst pdf = html.replace(/\\.html$/, '.pdf');\nconst b = await chromium.launch();\nconst p = await b.newPage();\nawait p.goto('file://' + html, { waitUntil: 'networkidle' });\nawait p.waitForTimeout(2000);\nawait p.pdf({ path: pdf, format: 'A4', margin: { top: '2cm', right: '1.8cm', bottom: '2.5cm', left: '1.8cm' }, printBackground: true });\nawait b.close();\nconsole.log('PDF saved:', pdf);\n```\n\n### 2. 执行导出\n\n```bash\nnode html2pdf.mjs {文件名}_guidebook.html\n```\n\n### 3. 验证与交付\n\n检查 PDF 存在并显示大小，提示用户打开查看：\n\n> \"✅ PDF 路书已导出：`{文件名}_guidebook.pdf`（{页数}页，{文件大小}）。\"\n\n## PDF 参数\n\n| 参数 | 值 | 说明 |\n|------|----|------|\n| 纸张 | A4 | 标准打印尺寸 |\n| 上边距 | 2cm | |\n| 下边距 | 2.5cm | 为页码留空间 |\n| 左右边距 | 1.8cm | |\n| 页脚 | 居中页码 | 9pt JetBrains Mono |\n| 等待策略 | networkidle + 2s | 确保 CDN 资源加载 |\n| 背景 | printBackground: true | 保留羊皮纸暖色纹理 |\n\n## 备用方案\n\nPlaywright 失败时引导浏览器手动打印：Chrome/Edge 打开 HTML → Cmd/Ctrl+P → 另存为 PDF → 勾选\"背景图形\"。\n\n---\n\n# 全局规则\n\n## 文件命名\n\n- 调研报告：`【路线名称】-调研报告`\n- 路书 HTML：`{路线名称}_guidebook.html`\n- PDF 路书：`{路线名称}_guidebook.pdf`\n- 导出脚本：`html2pdf.mjs`（从 scripts/ 复制）\n- 工作报告：`【路线名称】-工作报告`\n\n## 质量保证\n\n### 调研\n- 信源 ≥ 20 个，优先权威信源\n- 路况信息近 6 个月内\n- 交叉验证关键事实\n\n### 内容\n- 每天 2-3 个必停点，精选而非堆砌\n- 通俗易懂，融入文化背景和当地人视角\n- 实用信息（价格、时间、地址）准确无误\n\n### 排版\n- 字号略大于普通电子书（户外可读性）\n- 对比度增强（户外光线）\n- 分页正确，打印保留暖色调\n\n## 稳定性\n\n- 搜索失败时重试或跳过\n- 任何错误不中断整体流程\n\n## 用户体验\n\n- 每个 Stage 开始时告知进度\n- 关键步骤完成后反馈\n- 确认点：Stage 1 需求（可跳过）、Stage 3 路线（可跳过）、Stage 5 HTML（必须）\n\n---\n\n# 执行检查清单\n\n**Stage 0 前**\n- [ ] Node.js >= 18\n- [ ] Playwright + Chromium\n\n**Stage 1 前**\n- [ ] 理解用户需求\n- [ ] 确认所有参数\n\n**Stage 2 调研**\n- [ ] 判断 task 工具是否可用\n- [ ] 可用：启动 5 个并行 explore agent\n- [ ] 不可用：退回串行 web_fetch 模式\n- [ ] 所有 agent 完成后合并调研报告\n\n**Stage 4 前**\n- [ ] 路线架构已确认\n- [ ] 调研内容充分\n- [ ] 判断 task 工具是否可用\n- [ ] 可用：读取 layout-css.md + chapter-templates.md 全文，构造 HTML agent prompt\n- [ ] 不可用：主 agent 直接 heredoc 写入\n\n**Stage 5 交付前**\n- [ ] HTML 文件完整（wc -c 确认 50-80KB）\n- [ ] SVG 装饰已内联\n- [ ] 暖色调排版检查通过\n- [ ] 打印 CSS 完整（orphans/widows、break-inside）\n- [ ] 工作报告已生成\n\n**Stage 6 导出前**\n- [ ] 用户确认 HTML 满意\n- [ ] html2pdf.mjs 已就绪\n- [ ] PDF 生成且大小合理（通常 3-10 MB）\n\n---\n\n# 设计原则\n\n1. **秒级可达** — 关键信息 3 秒内找到。日程卡片、地名、方向是最高优先级。\n2. **三速阅读** — 支持扫视（3s）、浏览（30s）、沉浸（3min）三种模式。\n3. **温暖如纸** — Claude 羊皮纸暖色调，数字路书拥有纸质书温度。\n4. **编辑品味** — 像 Monocle 精选，不堆砌。每个推荐都带立场和温度。\n5. **时空网格** — \"天 × 地点\"网格架构，支持随机访问。\n6. **双重身份** — 旅行前是规划工具，旅行后是记忆载体。\n7. **大地色系** — 赤陶、琥珀、橄榄、鼠尾草。没有冷色，没有荧光。","tags":["travel","guidebook","geekjourneyx","agent-skills","ai-agents","claude-skills","html-to-pdf","openclaw-skills","playwright","skills","travel-guidebook","travel-planner"],"capabilities":["skill","source-geekjourneyx","skill-travel-guidebook","topic-agent-skills","topic-ai-agents","topic-claude-skills","topic-html-to-pdf","topic-openclaw-skills","topic-playwright","topic-skills","topic-travel-guidebook","topic-travel-planner"],"categories":["travel-guidebook"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/geekjourneyx/travel-guidebook","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add geekjourneyx/travel-guidebook","source_repo":"https://github.com/geekjourneyx/travel-guidebook","install_from":"skills.sh"}},"qualityScore":"0.473","qualityRationale":"deterministic score 0.47 from registry signals: · indexed on github topic:agent-skills · 47 github stars · SKILL.md body (15,403 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-22T06:56:26.320Z","embedding":null,"createdAt":"2026-04-21T01:37:25.497Z","updatedAt":"2026-04-22T06:56:26.320Z","lastSeenAt":"2026-04-22T06:56:26.320Z","tsv":"'+1':393,457 '-1':1456,1467 '-10':1766 '-2':1129,1133 '-3':1120,1275,1638 '-4':1069 '-5':697,1065,1306,1367 '-80':1741 '/.agents/skills/travel-guidebook':1450 '/dev/null':1443,1454,1465 '/html2pdf.mjs':1460,1471 '/travel-guidebook/scripts/html2pdf.mjs':1463 '0':102,135,161,1678 '0.9':1099 '1':105,169,274,282,560,681,733,990,1024,1128,1132,1175,1209,1282,1378,1433,1665,1685,1769 '1.8':1524,1530,1575 '10':810 '1000':593 '100km':974 '10h':922 '12h':920 '12min':1098 '15':802 '150km':965,968 '15min':1105 '18':1681 '1h':932,992 '2':108,141,181,286,329,365,579,699,738,822,840,927,995,1119,1254,1274,1292,1315,1331,1385,1442,1453,1464,1492,1540,1637,1690,1777 '2.5':1527,1571 '20':806,1628 '2000':1513 '25min':1110 '26':1114 '280km':978 '2cm':1522,1569 '2h':1049 '2s':1584 '3':116,192,292,335,606,621,696,701,741,799,808,825,1002,1064,1068,1259,1298,1305,1326,1366,1547,1669,1765,1772,1786 '3.1':905 '30s':1782 '3500m':985 '3h':997 '3km':871,878 '3min':1784 '3s':1780 '3站':1104 '4':119,144,209,297,342,613,746,1008,1011,1056,1151,1157,1303,1420,1710,1791 '4000m':999 '4441m':1014 '4500m':1005 '4718m':1019 '5':110,127,151,218,301,348,392,442,456,596,1016,1309,1374,1428,1673,1697,1733,1798 '50':1740 '500':603 '537路':1109 '6':131,157,216,544,645,1414,1423,1632,1755,1804 '7':528,1808 '80':964 '80km':962 '9pt':1579 'a4':1477,1519,1566 'adcod':611 'aesthet':41 'agent':113,125,146,370,378,381,386,388,398,424,428,430,444,445,450,459,460,530,538,546,647,654,658,731,736,748,751,763,768,772,797,845,849,1171,1180,1186,1189,1195,1201,1214,1700,1707,1724,1728 'ai':28,53,90 'ai-gener':27 'amap':231,236,437,539,835,940,950,1141 'amap/amap-maps-mcp-server':261 'api':851,854,856 'around':585 'attract':402,480,488 'avail':232,237,438,540,836,941,951,1142 'await':1500,1504,1506,1511,1514,1534 'a坐标':862 'b':1040,1499 'b.close':1535 'b.newpage':1505 'background':394,399,404,408,412,416,454,1216 'bash':171,183,194,683,1438,1542 'beauti':5 'bicycl':883 'bottom':1526 'break':1751 'break-insid':1750 'bundl':212,1447 'b坐标':863 'c':1041,1115,1301,1363,1738 'cat':1286,1288,1320,1333,1343 'cdn':58,1586 'chapter-templates.md':1250,1720 'chrome/edge':1595 'chromium':208,268,1481,1683 'chromium.launch':1501 'claud':37,66,79,1788 'cm':1525,1528,1531,1572,1576 'cmd/ctrl':1598 'console.log':1536 'const':1488,1493,1498,1502 'cp':1459,1470 'creat':4 'css':97,1239,1311,1747 'cultur':411,503,513 'curl':685 'day':989,994,1001,1007,1010,1015,1023,1063,1081 'decor':35 'deep':19 'design':6 'destin':476,487,498,511,524 'direct':860,869,875,888,945 'distanc':895,948 'dk':74 'drive':861,946 'e':196 'emoji':56 'end':14,16 'end-to-end':13 'explor':112,377,387,452,1699 'export':24,1479 'fals':238,952,1143 'feasibl':907 'featur':25 'fetch':688,766,1704 'find':1449,1461 'food':407,491,500 'format':1518 'gate':908 'general':123,1178,1212 'general-purpos':122,1177,1211 'generat':29 'gep':617 'guidebook':3,8,49 'guidebook.html':1231,1322,1335,1345,1382,1400,1546,1612 'guidebook.pdf':1556,1616 'head':1455,1466 'heredoc':1191,1284,1351,1357,1730 'histori':512 'html':128,148,153,345,1161,1182,1199,1221,1224,1371,1375,1379,1390,1392,1397,1430,1489,1496,1508,1597,1610,1674,1723,1735,1758 'html.replace':1495 'html2pdf.mjs':210,1436,1441,1452,1475,1544,1618,1760 'htmleof':1291,1313,1323,1324,1336,1337,1346,1347,1352 'icon':32,62 'id':571 'imag':30 'import':1480,1484 'init':190 'inlin':33 'insid':1752 'instal':203,207 'integr':877,890 'itinerari':12 'javascript':1474 'jetbrain':1580 'kb':1742 'km':1100 'layout-css.md':1244,1719 'left':1529 'llm':245,753,774,782,790,832,899,954,1088,1145 'local':499 'locat':590,600 'lone':76 'ls':184,1440 'maker':50 'map':226,565,584,608,616,859,868,874,882,887,894,944,947 'margin':1520 'markdown':332 'mb':1767 'mcp':220,223,240,251,259,271,553 'mode':453,1215 'mono':1581 'monocl':72,1794 'n':674,1235,1327 'name':1451 'networkidl':1510,1583 'node':172,195,1543 'node.js':137,170,265,1680 'nodejs.org':180 'npm':189,202 'npx':205 'ok':1408 'orphans/widows':1749 'p':1503,1599 'p.goto':1507 'p.pdf':1515 'p.waitfortimeout':1512 'package.json':182,185 'parchment':40 'path':1462,1487,1516 'pdf':23,70,132,159,165,351,1396,1404,1411,1424,1478,1494,1497,1517,1537,1539,1550,1553,1560,1601,1613,1762 'pdfs':9 'planet':77 'playwright':22,138,193,198,204,206,267,1476,1483,1593,1682 'poi':562,570,625 'practic':415,516 'printbackground':1532,1589 'process.argv':1491 'prompt':403,655,660,1219,1725 'purpos':124,1179,1213 'radius':592,602 'read':427,735 'references/chapter-templates.md':1248 'references/layout-css.md':1242 'references/report-template.md':1389 'requir':197 'research':20,396,401,406,410,414,418,434,466,479,490,502,515,532,548,649,777,843 'research-attract':400,478 'research-cultur':409,501 'research-food':405,489 'research-pract':413,514 'research-road':531,648 'research-spati':417,433,547,776,842 'research-transport':395,465 'resolv':1485,1490 'right':1523 'road':533,650 'save':1538 'script':1620 'scripts/html2pdf.mjs':214 'search':567,586 'shell':1354 'skill':44,1445 'skill-travel-guidebook' 'source-geekjourneyx' 'spatial':419,435,549,778,844 'stage':101,104,107,115,118,126,130,134,140,143,150,156,160,215,273,322,328,334,341,347,364,620,824,839,904,1055,1150,1156,1253,1258,1373,1413,1419,1422,1427,1660,1664,1668,1672,1677,1684,1689,1709,1732,1754 'sub':369 'sub-ag':368 'svg':34,64,95,1743 'tabler':31,61 'task':448,758,1168,1183,1693,1715 'text':566 'tip':526 'top':595,1521 'top10':486 'topic-agent-skills' 'topic-ai-agents' 'topic-claude-skills' 'topic-html-to-pdf' 'topic-openclaw-skills' 'topic-playwright' 'topic-skills' 'topic-travel-guidebook' 'topic-travel-planner' 'transit':876,889 'transport':397,467,477 'travel':2,7,48,525 'travel-guidebook':1 'trip':11 'true':233,439,541,837,942,1533,1590 'type':451 'u':47 'url':690,694,703,715,743 'url1':723 'url2':724 'use':42 'v18.x':174 'version':173 'waituntil':1509 'walk':870 'warm':39 'wc':1300,1362,1737 'web':687,765,1703 'whenev':45 'whether':227,609 'workflow':17 'x':1082 'xarg':1457,1468 'xh':1091 'xxkm':1086 'xxx':1417 'y':191 'zero':26 '一切景区游览':993 '一句话概括':1117 '一般':919 '三层需求驱动':1263 '三种模式':1785 '三速阅读':1778 '上边距':1568 '下边距':1570 '不依赖':89 '不可用':1184,1701,1726 '不可用时只启':441 '不可用时路书照常生成':243 '不可跨越多个城市':1035 '不含调研过程':1203 '不堆砌':1796 '不存在':188 '不得安排任何收费景点':1025 '不是景点的自由组合':911 '不满足':934 '不用调研':340 '不能直接跳到':1395 '不要在':1370 '不通过则强制拆分或删除景点':914 '不阻塞流程':249 '不需要调研':358 '与任何拉萨景点或羊湖捆绑在同一天':980 '专业论坛':819 '专职':121,145,1170,1194 '专职采集高德地图数据':550 '严格遵循':709 '个':111,443,458,529,545,646,803,807,811,1130,1134,1176,1210,1629 '个并行':1698 '个必停点':1276,1639 '个性化信息':302,317 '个月内':1633 '个有效信源':800 '个独立信源交叉验证':823 '个相关网站':698 '个精选':1121 '中用':1358 '中英结合':464 '串行模式':761,804 '为页码留空间':1573 '主':385,750,762,771,848,1185,1188,1727 '互不阻塞':383 '交付与检查':129,1376 '交付内容':1377 '交付前':1734 '交叉验证关键事实':1634 '交通':255 '交通方案':1093 '交通路线':468 '人均':497 '仅在':436 '仅提一次':248 '仅目的地':326 '仅精确数据降级为':244 '今日亮点':1116 '仍需带氧气':1020 '从':1619 '从指令推断':284 '从第一行写到最后一行':1206 '从调研到成书的一站式旅游路书生成引擎':51 '从需求确认中提取的所有景点名称':558 '以上信息获取于':726 '以后':1009 '价格':475,720,1644 '价格信息须注明时效性':820 '任一步骤失败则停止并提示用户':168 '任何错误不中断整体流程':1657 '任务':559,578,605,612 '任务参数':666 '休整日':1073 '优先':815 '优先权威信源':1630 '优先检查当前目录':1439 '优先级':939 '传统方式':1193 '伪元素':98 '估算':246,783,833,1089 '估算替代':1146 '但主动问一句':362 '但距离':254 '住宿推荐':1131 '你是旅游调研专员':662 '你是旅游路书':1220 '你是空间数据采集专员':551 '使用':447,682,829,898,1283,1349 '使用高德地图':552 '供':619 '便利店':598 '保留羊皮纸暖色纹理':1591 '保证一致性':149 '信源':722,1627 '信源总数':805 '修改':1416 '修改后重新提示检查':1421 '值':1563 '停止':178 '停留时间':1048 '像':1793 '允许活动范围':987 '全局规则':1604 '全文':1245,1251,1721 '全部基于':789 '公交':1108 '公交方案':880 '关键事实至少':821 '关键信息':1771 '关键步骤完成后反馈':1662 '关键注意':1348 '关键词':587,597 '具体数据':713 '具体日期':672 '典型陷阱':971 '典故':508 '内容':1243,1249,1635 '内容写作':120 '内容写作与排版':1158 '内嵌':1312 '内联':63,94 '写作':1200 '写作专家':1222 '写作风格':1262 '写入':1731 '决策':1270 '准备制作旅游路书':280 '准备导出脚本':1434 '准确无误':1647 '出发兴奋':1075 '出发地':669,670 '出发时间到返回时间':918 '出发点':924 '分工':446 '分批写入':1192,1285 '分页正确':1653 '列表':695 '删去最远景点':937 '判断':1692,1714 '判断依据':352 '到':470 '到达后天数':986 '制作过程记录':1387 '前':1679,1686,1711 '前缀':786 '前缀标注':903 '功能色系统':93 '加油站':535,652 '加速调研':379 '勾选':1602 '单引号':1290,1350 '单文件':1383 '单日往返可行性公式':916 '单程用时':926 '历史':506 '历史对话':1204 '参数':1561,1562 '双重身份':1805 '发现1':712 '发现2':716 '变量展开':1355 '另存为':1600 '可与其他景点同天':963 '可以吗':285 '可修改后导出':350 '可前往高海拔':1012 '可单独一日游':975 '可在':258 '可尝试极高海拔':1017 '可用':1695,1717 '可用总时长':917,933 '可跳过':1667,1671 '可选增强':221 '各':423 '各景点游览时间之和':929 '合并为统一调研报告':739 '合并报告':1255 '同天内只能有该景点':966 '同时出发':382 '同时启动':455 '名':461 '名称':572,635,718,1228,1230 '后续':1289 '向用户确认以下参数':276 '含包车':1045 '含天气建议':1136 '含游览时间':1092 '含高德评分':1122 '启动':1174,1208,1696 '告诉我哪里需要改':1406 '周边':634 '周边发现':580,632,1123 '命令不存在':177 '和':373 '咖啡馆':1126 '回到':1418 '回味':1078 '团队信息吗':304 '在':213 '在写入任何每日行程前':912 '在干净上下文中写':147 '在干净上下文中写全部':1181 '在此基础上':847 '在羊皮纸般的暖色底上':83 '在路书中用':901 '在路书制作开始前':163 '地名':1267,1775 '地址':628,1646 '地点':1801 '地理编码':614 '地铁':879 '地铁2号线':1103 '场景':756 '城市漫游':290,867 '基于已有知识整理':705 '基于调研结果生成每日行程架构':827 '增强层':242 '处理方式':757 '备注':721 '备用方案':1592 '复制':1621 '多云':1113 '大地色系':1809 '大巴方案':892 '天':675,1236,1800 '天一批':1332 '天安排':1070 '天数':315,327,673,1234 '天气':520,641,1111 '天气数据将使用估算值':256 '天气预报':607,639 '天短途':809 '天黑前返回':1051 '失败':749,770,779 '失败时引导浏览器手动打印':1594 '失败跳过':692 '如':1038 '如任何一项不通过':1052 '如果仍找不到':1472 '如果所有':702 '如果某个':747 '如果需要调整':1405 '如需精确数据':257 '字号略大于普通电子书':1649 '存在':186 '存在并显示大小':1551 '安全':522 '完全无法联网':787 '完成后':425,732,1393 '完成后合并调研报告':1708 '完整':1748 '完整传入':1218 '完整地址':573 '完整复制':1241,1247 '官方旅游网站':816 '定向':1264 '实用信息':372,517,1643 '实际交通建议':1137 '对吗':300 '对所有地名调用':615 '对每个景点调用':564 '对每个核心景点':581 '对每日行程中的连续景点对':852 '对比度增强':1651 '导出':133,158,1410,1425 '导出前':1756 '导出环境就绪':166 '导出脚本':1617 '封底':1341 '封面':1317 '将以下内容':1217 '将调研和架构转化为设计精美的':1160 '小吃':589 '尝试调用高德':222 '尽可能丰富':813 '居中页码':1578 '展示行程架构供确认或修改':1148 '工作报告':1386,1622,1624 '工作报告已生成':1753 '工具':449 '工具不可用':759 '工具不存在或报错':234 '工具可用':1169 '工具是否可用':1694,1716 '工具采集以下数据':554 '工具验证可用性':224 '左右边距':1574 '已':211 '已就绪':1761 '已提供所有景点的精确坐标':846 '已有':344 '已有行程':338 '已有行程文件':331 '已知景点列表':557 '已确认':339 '市区平坦景点':996 '并在路书中标注':956 '并行':114,367,376,390 '并行模式':795 '并行调研加速信息收集':142 '并行调研架构':384 '应急设施':604 '建议':1006 '建议出行前复核价格和开放时间':728 '建议出行前核实':793 '开始制作路书':272 '开始时告知进度':1661 '开放时间':485 '引入':59 '引用':355 '张弛有度':1058 '强制执行':1021 '强制独立成一天':969 '强制规则':961 '当前日期':727 '当地媒体':818 '当地美食':492 '当日总里程':1031 '当高德空间数据可用时':828 '往返':1032 '徒步':289 '必停点':1118 '必去景点':483 '必须':1675 '必须先让用户检查':1394 '必须拆分为多天':935 '必须逐一校验':1030 '必须通过以下验证':913 '快捷模式':307,1152 '总体流程':100 '总天数':298 '总批次':1304 '总批次控制在':1365 '总计':801 '情感':1277 '情绪曲线':1074 '我会导出':1403 '或':686,744,936,1072 '或安排沿途住宿':970 '或更高':175 '户外光线':1652 '户外可读性':1650 '所有':730,1310,1706 '所有景点是否在同一合理区域内':1034 '所有检测通过后输出':263 '所有模式':893 '打印':1746 '打印保留暖色调':1654 '打开':1596 '打造有温度':68 '执行':684 '执行导出':1541 '执行检查清单':1676 '执行模式选择':1163 '执行步骤':1432 '批':1307,1316,1328,1368 '技术要求':1281 '报错':201 '拉萨出发':972 '拥有干净上下文':1202 '按以下顺序逐项检测':167 '按方向分章节':740 '按逻辑段落分割':1308,1369 '排版':1648 '排版即设计':88 '探险挑战游':296 '推断不了的才问':278 '推断天数':299 '推荐':1173,1197 '推荐列表':717 '推荐餐厅':495 '提取':569 '提示安装':179 '提示用户打开查看':1552 '插图':54 '搜索关键词示例':463 '搜索失败时重试或跳过':1656 '支持扫视':1779 '支持随机访问':1803 '收到':279 '收集合并':426 '数字路书拥有纸质书温度':1790 '数据':563 '数据时效':725 '文件':1380 '文件名':354,1229,1321,1334,1344,1399,1545,1555 '文件命名':1605 '文件大小':1559 '文件完整':1736 '文化':507 '文化历史':504 '文化深度':374 '文本':333 '方向':664,1268 '方向名':710 '方向是最高优先级':1776 '方言':510 '旅游路书的调研需要同时覆盖':371 '旅行前是规划工具':1806 '旅行后是记忆载体':1807 '旅行日期':1232 '旅行类型':287,311,676,855,1237 '无':318 '无其他目的地':967 '无报错':199 '日喀则扎什伦布寺':976 '日期':640,671,1233 '日程卡片':1774 '时':542,838 '时刻':474 '时启动':440 '时复制到工作目录':217 '时省略或用':1144 '时空网格':1799 '时跳过':1155 '时间':1645 '时间用':781 '是':152,241 '是否在可行范围':1033 '是否存在隐含的':1036 '是否明确说':356 '是否有足够的观景':1047 '是否违反海拔适应规则':1044 '景点':561,624,627,1000 '景点a':925,1095 '景点b':1096,1101 '景点c':1102,1106 '景点名':568,633 '景点周边高分餐厅':1125 '景点坐标':591,601 '景点间交通用时之和':930 '智能路由':319 '暖色调排版检查通过':1745 '替代':831,1294,1359 '替用户筛选':1272 '最后一批':1338 '最精华目的地安排在行程中段':1062 '月份':519 '有设计感的旅行指南':69 '未配置':252 '条件':1165 '来回交通':928 '来源':714 '构造':391,1722 '查找':1444 '查找方式':1437 '标准全流程':330 '标准打印尺寸':1567 '标注':706,784,792,1138 '标注数据时效不确定':814 '标注每个数据点的来源':742 '标签中间断开':1372 '标记':230,235 '核心优势':1198 '核心发现':711 '核心景点':481 '核心理念':87 '根据可用工具自动选择最优模式':1164 '根据旅行类型选择':853 '根据用户输入决定起始':321 '根据路线推断':316 '检查':1549 '检查点':154,1391 '检测到高德地图':250 '概览':1318 '模型知识':707,745 '模式':1166,1172,1196,1705 '模板':656 '模板见':1388 '橄榄':1812 '正常游览市区':1003 '步行':1097 '步行距离':872 '每':1067 '每个':657,796,1659 '每个信源提取关键数据点':700 '每个推荐都带立场和温度':1797 '每个方向一个独立':380 '每天':1273,1636 '每天一批或每':1330 '每天的主要景点':582 '每批写完后':1299 '每批写完后用':1361 '每日总距离验证':896 '每日行程':1329 '每日行程架构':1261 '每日行程结构':1080 '每日行程草稿生成后':1029 '民俗':509 '汇总':626 '池':389 '沉浸':1783 '没有冷色':1814 '没有荧光':1815 '没问题的我直接开始':306 '注意事项':523 '浏览':1781 '海拔':984,998,1004 '海拔变化':536,653 '深度文化游':294,314 '深度游':1339 '深度游览日交替':1060 '深度调研':109,366 '混合':291,679 '温度':642 '温暖如纸':1787 '满意':1409,1759 '满意后告诉我':1402 '满意后方可执行':1431 '火车':891 '版本':266 '特殊目的地约束':982 '特色美食':494 '环境':139 '环境准备':103,162 '环境准备就绪':264 '环境就绪确认':262 '理解用户需求':1687 '琥珀':1811 '生图或照片':91 '生成且大小合理':1763 '生成后审核清单':1028 '用':773,953,1190,1293,1295,1296,1297 '用以下最小脚本创建':1473 '用图标系统标记功能信息':85 '用户体验':1658 '用户在':1426 '用户已说明足够信息时':308 '用户提供的内容':323 '用户是否附带了':353 '用户未配置时的提示':247 '用户确认':1147,1757 '用户确认满意后再执行':155 '用户要求':1153 '用户说':1407,1415 '用时':865,873 '用衬线体讲述目的地的故事':84 '用装饰元素营造编辑出版感':86 '白居寺':977 '的':659,841 '的信息深度':78 '的字段在':1140 '的温暖美学':80 '的编辑品味':73 '的视觉叙事':75 '目录下的':1446 '目标读者':293,313 '目的地':482,493,505,518,555,556,667,668 '目的地城市':228 '目的地城市名称或':610 '直写模式':1187 '直接':1729 '直接写不用确认':1154 '直接回复修改项即可':305 '直接进入写作排版':343 '直接进入检查':349 '看似相邻实则绕远':1042 '真实路径规划':830 '知识':754,791 '知识估算':955 '知识估算距离和时间':900 '知识补充失败方向':775 '确保':164,1585 '确保工作目录有':1435 '确认':1429,1739 '确认后进入':1149 '确认所有参数':1688 '确认文件增长':1302 '确认文件增长正常':1364 '确认点':1663 '确认版':1260 '禁止':988 '离别不舍':1079 '离线模式':788,812 '秒内找到':1773 '秒级可达':1770 '稳定性':1655 '章节模板':1246 '符号在':1356 '第':543,1314,1325 '第一性原理':909 '等':359 '等待策略':1582 '等通知':421 '类型':636,1238 '精准清晰':1266 '精选':1795 '精选而非堆砌':1640 '红色警示':1053 '约':785,902,957 '纯':57 '纳木错':1018 '纸张':1565 '终点':471,1084 '经纬度':574,629 '结果':431 '结果收集与合并':729 '绝对不可':979 '继续':176,187,200 '缓冲时间':931,1066 '编辑品味':1792 '网格架构':1802 '羊卓雍错':973 '羊湖':1013 '羊皮纸暖色调':1789 '美食推荐':1127 '美食街':496 '而是一本有温度的旅行伙伴':82 '联系电话':577 '背景':1588 '背景图形':1603 '能从指令推断的不问':277 '脚本':1448 '自动检测':136 '自动通知':422 '自由日':1071 '自驾':473,677 '自驾游':288,312,858 '自驾游加第':527,644 '自驾的一日游':1046 '至少':798 '节奏设计':1057 '药店':599 '获取以下':689 '获取每个':429 '获取真实用时':949 '获取精确坐标':618 '获取结果':737 '营业时间':576,631 '融入历史故事和当地人视角':1280 '融入文化背景和当地人视角':1642 '行前准备':1319 '行程可行性门控':906 '行程已确认':357 '行程是物理约束下的规划':910 '补充该方向的':752 '装饰':65,96 '装饰已内联':1744 '规则一':915 '规则三':981 '规则二':958 '规则四':1027 '规范':1240 '计算工具':938 '让路书本身就具备设计感':99 '设计原则':1768 '设计哲学':71 '设计美学':67 '评分':575,630,638 '详情':719 '说明':325,857,1167,1564 '请在浏览器中打开检查内容和排版':1401 '请生成一个完整的单文件':1223 '请确认以下信息':281 '读取':1718 '读取行程提取架构':336 '调用':225,583,943 '调用高德路径规划':850 '调研':665,1626,1691 '调研内容充分':1713 '调研报告':1606,1608 '调研报告全文':1256 '调研数据':1252 '调研方向':462 '调研要求':680 '调研质量要求':794 '负责':663 '质量保证':1625 '贴士':1135 '资深旅行博主':817 '资源加载':1587 '赋予意义':1279 '赤陶':1810 '起点':469,1083 '超时':769 '距出发地单程距离':960 '距离':637,780,885 '跨城景点强制隔离':959 '跨城移动':886 '路书':346,1162,1225,1609,1614 '路书仍会正常生成':253 '路书参数':1226 '路书已导出':1554 '路书已生成':1398 '路况':534,651 '路况信息近':1631 '路径规划使用':622 '路线':1670 '路线名称':283,1227,1381,1607,1611,1615,1623 '路线架构':117,826,1257 '路线架构已确认':1712 '路线讨论的噪音':1205 '跳转到':324 '跳过确认直接执行':309 '跳过调研':337 '轻松休闲游':295 '输出报告':432 '输出格式':623,708 '过路费':866 '返回天气数据':229 '返程时间是否预留充足':1050 '这不是一本冰冷的导航手册':81 '这是路书的核心阶段':1159 '进入':1412 '违反时自动将景点后移一天':1026 '退回':760 '退回串行':1702 '适应期':1076 '逐个':734 '逐个尝试':691 '逐方向':764 '通俗易懂':1641 '通常':1764 '通过':60 '通过字体层级':92 '遇到不确定的情况':360 '遵循以下结构':661 '避免编码问题':1360 '部分':767 '都失败':704 '配置中添加':260 '酒店':1107 '酒店周边步行':991 '采用':375 '里程':864,1085 '里程用时准确':1269 '重新规划该天行程后方可进入':1054 '长距离跳跃':1037 '长途驾驶日':1059 '门票':484 '闭合标签':1342 '防止':1353 '附录':1340 '附近餐厅':594 '降级策略':755 '零':52,55 '零外部依赖':1384 '需求':1666 '需求确认':106,275 '需求确认后':320 '需要在封面或末尾加上个人':303 '需要我做调研还是直接开始写':363 '页':1558 '页数':1557 '页脚':1577 '预算':521 '预计用时':1090 '预设':693 '风力':643 '风格完全统一':1207 '餐厅':588 '首批':1287 '验证与交付':1548 '验证公式':923 '骑行段':881 '骑行路线':884 '高原区域':921 '高原地区':983 '高原行程':1043 '高原行程的':1022 '高德':239,420 '高德不可用时':897 '高德可用时':1094,1112,1124,1139 '高德可用时加':269 '高德地图':219,270 '高德实测':1087 '高德空间数据':537 '高德路径规划':834 '高潮':1077 '高潮设计':1061 '高铁':472,678 '默认值':310 '默认走完整流程':361 '鼠尾草':1813","prices":[{"id":"82a9bb7c-0cb0-4275-a57a-b96e88ccb71b","listingId":"6023fd45-06cd-47fe-81ba-47e0012d0bb5","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"geekjourneyx","category":"travel-guidebook","install_from":"skills.sh"},"createdAt":"2026-04-21T01:37:25.497Z"}],"sources":[{"listingId":"6023fd45-06cd-47fe-81ba-47e0012d0bb5","source":"github","sourceId":"geekjourneyx/travel-guidebook","sourceUrl":"https://github.com/geekjourneyx/travel-guidebook","isPrimary":false,"firstSeenAt":"2026-04-21T01:37:25.497Z","lastSeenAt":"2026-04-22T06:56:26.320Z"}],"details":{"listingId":"6023fd45-06cd-47fe-81ba-47e0012d0bb5","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"geekjourneyx","slug":"travel-guidebook","github":{"repo":"geekjourneyx/travel-guidebook","stars":47,"topics":["agent-skills","ai-agents","claude-skills","html-to-pdf","openclaw-skills","playwright","skills","travel-guidebook","travel-planner"],"license":"mit","html_url":"https://github.com/geekjourneyx/travel-guidebook","pushed_at":"2026-04-19T09:33:48Z","description":"AI agent skill that generates beautifully typeset travel guidebook PDFs —  from research to print, powered by parallel agents and Amap MCP.","skill_md_sha":"1c08335d2e8002c65a4a708b01b887c66ac9cf99","skill_md_path":"SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/geekjourneyx/travel-guidebook"},"layout":"root","source":"github","category":"travel-guidebook","frontmatter":{"name":"travel-guidebook","description":"Create beautifully designed travel guidebook PDFs from trip itineraries. End-to-end workflow from deep research to Playwright PDF export, featuring zero AI-generated images, Tabler Icons, inline SVG decorations, and Claude's warm parchment aesthetic. Use this skill whenever the user mentions 路书, 旅行指南, travel guidebook, 行程手册, trip planner, 自驾游攻略, itinerary book, 攻略, 出行指南, 旅行计划, 行程规划, or wants to turn trip notes into a printable guide. Also triggers for multi-day travel planning, route guides, road trip planners, 旅行攻略制作, 旅行PDF, or converting travel research into a professionally designed document."},"skills_sh_url":"https://skills.sh/geekjourneyx/travel-guidebook"},"updatedAt":"2026-04-22T06:56:26.320Z"}}