#787 by GitHub stars

JourniOne-ai/JourniOne-Planning-Skills

当用户提出旅行需求时自动使用,包括找旅行灵感、推荐目的地、安排或调整行程、规划主题路线、整理旅行照片回忆或已有路书。无需用户点名 Skill;用 JourniOne 逐步规划每天怎么玩,确认后生成带地图、能分享的 Travel Journal,日期机酒按需补充。

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 Oct 26, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

e36821c14e80 → e36821c14e80

Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.

Compare on GitHub

View on GitHubAdd to my skills

Verified commit e36821c14e80a3bb5a047fe9eb21d6e212f699d2

1.2kGitHub stars
7stars in 7 days
1skill in this repository
1commit in 30 days

Heat

3.8
  • Star growth, last 7 daysAhead of 75% of tracked repositories
  • Star growth, last 24 hoursAhead of 2% of tracked repositories
  • Rank movement, last 7 daysAhead of 13% of tracked repositories
  • Commits, last 30 daysAhead of 54% of tracked repositories
  • Accounts asking about it through MCP, last 7 daysNot available
  • Hot votes this weekAhead of 0% of tracked repositories

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

Stars over time

Sep 13, 2026Nov 6, 20261,183

Individual skills in this repository

How it works

travel-journal-creator

When your agent uses it

当用户提出旅行需求时自动使用,包括找旅行灵感、推荐目的地、安排或调整行程、规划主题路线、整理旅行照片回忆或已有路书。无需用户点名 Skill;用 JourniOne 逐步规划每天怎么玩,确认后生成带地图、能分享的 Travel Journal,日期机酒按需补充。

What it loads into context

Frontmatter

104 tokens

Always available to the agent

SKILL.md

12,263 tokens

When the skill is activated

Reference documents

74,407 tokens

Loaded on request

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

The playbook

  1. 自动触发
  2. Agent 服务体验优化
  3. 首次初始化:自动准备必需依赖
  4. 1. 用场景感知的 Onboarding 找到入口
  5. 2. 判断输入模式并渐进收集
  6. 3. 为行程寻找附近灵感与关键接驳
  7. 4. 整理并确认
  8. 5. 生成与编辑契约
  9. 6. 交付与交付后核对
  10. 边界

Scripts executed separately

  • scripts/experience-contract.mjs
  • scripts/experience-report.mjs
  • scripts/place-binding.mjs
  • scripts/prepare-poster-request.mjs
  • scripts/render-roadbook-card.mjs
  • scripts/submit-poster-request.mjs
  • scripts/submit-poster-with-experience.mjs
  • scripts/test-poster-contract.mjs

Files

  • .gitignoreasset131 bytes
  • CHANGELOG.mddoc2,734 bytes
  • DEPENDENCIES.mddoc1,940 bytes
  • EXAMPLES.mddoc1,636 bytes
  • FAQ.mddoc2,282 bytes
  • INSTALL.mddoc6,399 bytes
  • PRIVACY.mddoc3,422 bytes
  • README.ar.mddoc10,555 bytes
  • README.es.mddoc7,771 bytes
  • README.fr.mddoc8,467 bytes
  • README.ja.mddoc8,510 bytes
  • README.ko.mddoc8,430 bytes
  • README.mddoc7,319 bytes
  • README.zh-CN.mddoc6,761 bytes
  • RELEASE-CHECKLIST.mddoc4,684 bytes
  • SKILL.mdcore48,742 bytes
  • agents/openai.yamlasset827 bytes
  • assets/default-roadbook-cover.pngasset103,016 bytes
  • assets/journione-lockup.svgasset9,947 bytes
  • assets/journione-mark.svgasset1,886 bytes
  • assets/readme/journione-hotel-flight-bookings.webpasset415,636 bytes
  • assets/readme/journione-journal-overview.webpasset583,886 bytes
  • assets/readme/journione-map-itinerary.webpasset186,568 bytes
  • assets/readme/journione-planning-features.webpasset236,182 bytes
  • assets/readme/journione-travel-journal-covers.webpasset237,070 bytes
  • playbooks/interest-discovery.mddoc11,729 bytes
  • playbooks/preview-progress.mddoc2,885 bytes
  • playbooks/progressive-planning.mddoc8,198 bytes
  • playbooks/service-to-journal.mddoc5,665 bytes
  • playbooks/setup-dependencies.mddoc5,380 bytes
  • references/accommodation-area-and-hotel-handoff.mddoc12,288 bytes
  • references/activity-bookings.mddoc2,501 bytes
  • references/activity-classification-contract.mddoc10,742 bytes
  • references/agent-experience.mddoc5,546 bytes
  • references/critical-transfer-search.mddoc9,374 bytes
  • references/currency-display-contract.mddoc2,947 bytes
  • references/delivery-contract.mddoc4,262 bytes
  • references/intake-contract.mddoc11,416 bytes
  • references/itinerary-confirmation-loop.mddoc13,656 bytes
  • references/itinerary-presentation.mddoc13,747 bytes
  • references/kiwi-flight-search.mddoc10,430 bytes
  • references/nearby-activity-and-dining.mddoc13,036 bytes
  • references/onboarding-contract.mddoc16,304 bytes
  • references/post-delivery-booking.mddoc3,918 bytes
  • references/research-and-agent-routing.mddoc10,225 bytes
  • references/roadbook-card-rendering.mddoc6,998 bytes
  • references/skill-debug-contract.mddoc8,318 bytes
  • references/tourmind-query-dependency.mddoc4,500 bytes
  • references/trip-snapshot-contract.mddoc14,648 bytes
  • references/user-experience-language.mddoc2,071 bytes
  • scripts/experience-config.jsonasset176 bytes
  • scripts/experience-contract.mjsruns2,844 bytes
  • scripts/experience-report.mjsruns8,978 bytes
  • scripts/place-binding.mjsruns2,201 bytes
  • scripts/prepare-poster-request.mjsruns11,528 bytes
  • scripts/render-roadbook-card.mjsruns11,511 bytes
  • scripts/submit-poster-request.mjsruns4,203 bytes
  • scripts/submit-poster-with-experience.mjsruns2,801 bytes
  • scripts/test-poster-contract.mjsruns22,163 bytes

No excerpt is shown for this license. Read the source on GitHub.

View the complete source on GitHub

Skills included

  • travel-journal-creator

Repository facts

License
No license detected
Created
Sep 16, 2026
Last pushed
Oct 28, 2026
Forks
174
Open issues
0
Project activity
Active

Rank over the last 12 weeks

Now #787 · best #659 · up 96 in 30 days

  1. #773 on Nov 2
  2. #777 on Nov 3
  3. #779 on Nov 4
  4. #781 on Nov 5
  5. #780 on Nov 6
  6. #787 since Nov 7
46 earlier periods
  1. #907 on Sep 13
  2. #943 on Sep 16
  3. #939 on Sep 17
  4. #924 on Sep 18
  5. #898 on Sep 19
  6. #916 on Sep 20
  7. #935 on Sep 21
  8. #952 on Sep 22
  9. #943 on Sep 23
  10. #906 on Sep 24
  11. #855 on Sep 25
  12. #877 on Sep 26
  13. #895 on Sep 27
  14. #940 on Sep 28
  15. #967 on Sep 29
  16. #935 on Sep 30
  17. #868 on Oct 1
  18. #881 on Oct 2
  19. #854 on Oct 3
  20. #894 on Oct 4
  21. #909 on Oct 5
  22. #894 on Oct 6
  23. #928 on Oct 7
  24. #961 on Oct 8
  25. #883 on Oct 9
  26. #817 on Oct 10
  27. #796 on Oct 11
  28. #808 on Oct 12
  29. #802 on Oct 13
  30. #783 on Oct 14
  31. #764 on Oct 15
  32. #758 on Oct 16
  33. #724 on Oct 17
  34. #708 on Oct 18
  35. #738 on Oct 19
  36. #734 on Oct 20
  37. #733 on Oct 21
  38. #702 on Oct 22
  39. #687 on Oct 23
  40. #659 on Oct 24
  41. #747 on Oct 25
  42. #756 on Oct 28
  43. #760 on Oct 29
  44. #763 on Oct 30
  45. #767 on Oct 31
  46. #769 on Nov 1

Before you install

Network or broad shell

Automated signals, not a guarantee

Checked Nov 3, 2026

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

Show 3 notes
  • assets/journione-lockup.svg:5 Analysis incomplete: physical or joined line exceeds character limit
  • assets/journione-lockup.svg:3 Analysis incomplete: physical or joined line exceeds character limit
  • assets/journione-lockup.svg:4 Analysis incomplete: physical or joined line exceeds character limit
Show all 166 signals by file

.gitignore

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

CHANGELOG.md

  • Network accessline 22
    - 默认生成请求切换为 `https://journione.ai/api/skill-roadbook`,不再要求普通用户选择测试环境。

DEPENDENCIES.md

  • Network accessline 3
    | 能力 | 提供方 | 使用条件 | |---|---|---| | 创建旅行日志 | [JourniOne](https://journione.ai/) | HTTPS 可达,无需用户登录或 Token |
  • Network accessline 4
    |---|---|---| | 创建旅行日志 | [JourniOne](https://journione.ai/) | HTTPS 可达,无需用户登录或 Token | | 酒店查询 | [TourMind Booking Skill](https://github.com/tourmind-com/Tourmind-Booking-Skills) | 必需安装;初始化时自动补齐,按实际官方契约查询 |
  • Network accessline 5
    | 创建旅行日志 | [JourniOne](https://journione.ai/) | HTTPS 可达,无需用户登录或 Token |
  • Network accessline 6
    | 酒店查询 | [TourMind Booking Skill](https://github.com/tourmind-com/Tourmind-Booking-Skills) | 必需安装;初始化时自动补齐,按实际官方契约查询 |
  • Network accessline 7
    | 航班查询 | [Kiwi.com MCP](https://mcp.kiwi.com) | 必需连接;初始化时自动配置并验证 `search-flight` 可被发现 |

INSTALL.md

  • Network accessline 5
    在客户端的 Skill 管理入口导入 [JourniOne-Planning-Skills 仓库](https://github.com/JourniOne-ai/JourniOne-Planning-Skills):
  • Network accessline 8
    https://github.com/JourniOne-ai/JourniOne-Planning-Skills.git
  • Network accessline 14
    git clone https://github.com/JourniOne-ai/JourniOne-Planning-Skills.git "<客户端技能目录>/travel-journal-creator"
  • Network accessline 50
    优先由安装 Agent 通过当前客户端安装工具自动导入完整的 [TourMind 官方仓库](https://github.com/tourmind-com/Tourmind-Booking-Skills),安装名称为 `tourmind-booking`。使用本地技能目录的客户端可执行:
  • Network accessline 53
    git clone https://github.com/tourmind-com/Tourmind-Booking-Skills.git "<客户端技能目录>/tourmind-booking"
  • Network accessline 63
    |---|---| | 名称 | `kiwi-com-flight-search` | | 服务地址 | `https://mcp.kiwi.com` |
  • Network accessline 64
    | 名称 | `kiwi-com-flight-search` | | 服务地址 | `https://mcp.kiwi.com` | | 传输方式 | `streamable_http` |
  • Network accessline 65
    | 服务地址 | `https://mcp.kiwi.com` |
  • Network accessline 82
    - 客户端能读取 Skill 与参考文件、搜索互联网、访问 HTTPS、运行 Node.js 22+ 脚本。 - 文档或照片输入需要客户端具备对应的读取、OCR 或视觉能力。 - JourniOne 默认连接 `https://journione.ai`,无需 JourniOne 密钥。
  • Network accessline 83
    - 文档或照片输入需要客户端具备对应的读取、OCR 或视觉能力。 - JourniOne 默认连接 `https://journione.ai`,无需 JourniOne 密钥。 - TourMind 酒店 Skill 和 Kiwi.com MCP 是必需安装项;安装后按用户旅行需求查询,详见 [依赖说明](DEPENDENCIES.md)。
  • Network accessline 84
    - JourniOne 默认连接 `https://journione.ai`,无需 JourniOne 密钥。

PRIVACY.md

  • Network accessline 5
    - 规划过程中,AI 客户端读取你提供的想法、文档或照片。确认生成后,已确认行程与允许上传的材料会发送到 `https://journione.ai`。
  • Network accessline 14
    1.0.3 默认开启轻量上报。Agent 在真实到达「开始规划」「完成首版逐日草稿」「提交 Journal」这三个节点时,尽力向 `https://journione.ai/api/skill-experience` 发送事件。每次规划使用随机会话与事件 ID;批次只包含节点、观察时间、当前 Agent 名称及已知来源、Skill 版本、正式环境标识,以及提交结果。没有安装完成、Skill 读取、对话开始或每轮消息事件,因此这些数据不能用于计算安装人数或对话次数;网络失败也可

README.ar.md

  • Network accessline 1
    <p align="center">   <a href="https://journione.ai/"><img src="assets/journione-lockup.svg" alt="JourniOne" width="360"></a>
  • Network accessline 2
    <a href="https://journione.ai/"><img src="assets/journione-lockup.svg" alt="JourniOne" width="360"></a>
  • Network accessline 13
    [الموقع الرسمي](https://journione.ai/) · [التثبيت](INSTALL.md) · [أمثلة الاستخدام](EXAMPLES.md) · [الأسئلة الشائعة](FAQ.md)
  • Network accessline 61
    1. استورد [JourniOne-Planning-Skills](https://github.com/JourniOne-ai/JourniOne-Planning-Skills) من مدير المهارات في تطبيقك، أو استخدم حزمة إصدار باتباع [دليل التثبيت](INSTALL.md). الاسم المعروض هو **Travel Journal Creator**.
  • Network accessline 65
    لا يتطلب إنشاء الدليل رمز وصول من JourniOne أو خدمة JourniOne MCP محلية. يتصل افتراضيًا بـ [journione.ai](https://journione.ai/). تحتاج البرامج النصية المرفقة إلى Node.js 22 أو أحدث، ويجب أن يدعم التطبيق البحث على الويب وقراءة الملفات وطلبا

README.es.md

  • Network accessline 1
    <p align="center">   <a href="https://journione.ai/"><img src="assets/journione-lockup.svg" alt="JourniOne" width="360"></a>
  • Network accessline 2
    <a href="https://journione.ai/"><img src="assets/journione-lockup.svg" alt="JourniOne" width="360"></a>
  • Network accessline 11
    [Sitio web](https://journione.ai/) · [Instalación](INSTALL.md) · [Ejemplos](EXAMPLES.md) · [Preguntas frecuentes](FAQ.md)
  • Network accessline 59
    1. Importa [JourniOne-Planning-Skills](https://github.com/JourniOne-ai/JourniOne-Planning-Skills) desde el gestor de Skills de tu cliente o utiliza un paquete siguiendo la [guía de instalación](INSTALL.md). El nombre visible es **Travel Jou
  • Network accessline 63
    Crear una guía no requiere un token de JourniOne ni un servicio local de JourniOne MCP. La conexión predeterminada es [journione.ai](https://journione.ai/). Los scripts incluidos requieren Node.js 22 o posterior; el cliente necesita búsqued

README.fr.md

  • Network accessline 1
    <p align="center">   <a href="https://journione.ai/"><img src="assets/journione-lockup.svg" alt="JourniOne" width="360"></a>
  • Network accessline 2
    <a href="https://journione.ai/"><img src="assets/journione-lockup.svg" alt="JourniOne" width="360"></a>
  • Network accessline 11
    [Site officiel](https://journione.ai/) · [Installation](INSTALL.md) · [Exemples](EXAMPLES.md) · [Questions fréquentes](FAQ.md)
  • Network accessline 59
    1. Importez [JourniOne-Planning-Skills](https://github.com/JourniOne-ai/JourniOne-Planning-Skills) depuis le gestionnaire de Skills de votre client, ou utilisez un paquet en suivant le [guide d'installation](INSTALL.md). Le nom affiché est 
  • Network accessline 63
    Créer un guide ne nécessite ni token JourniOne ni service MCP JourniOne local. La connexion par défaut utilise [journione.ai](https://journione.ai/). Les scripts fournis nécessitent Node.js 22 ou ultérieur ; le client doit prendre en charge

README.ja.md

  • Network accessline 1
    <p align="center">   <a href="https://journione.ai/"><img src="assets/journione-lockup.svg" alt="JourniOne" width="360"></a>
  • Network accessline 2
    <a href="https://journione.ai/"><img src="assets/journione-lockup.svg" alt="JourniOne" width="360"></a>
  • Network accessline 11
    [公式サイト](https://journione.ai/) · [インストール](INSTALL.md) · [使用例](EXAMPLES.md) · [よくある質問](FAQ.md)
  • Network accessline 59
    1. クライアントの Skill 管理画面から [JourniOne-Planning-Skills](https://github.com/JourniOne-ai/JourniOne-Planning-Skills) を導入するか、[インストール手順](INSTALL.md)に従ってリリースパッケージを利用します。表示名は **Travel Journal Creator** です。
  • Network accessline 63
    ガイド作成に JourniOne Token やローカルの JourniOne MCP サービスは不要です。既定の接続先は [journione.ai](https://journione.ai/) です。同梱スクリプトには Node.js 22 以降が必要で、クライアントにはウェブ検索、ファイル読み取り、HTTPS リクエスト、リモート MCP の対応が必要です。ホテル予約と支払いの認証は各チャネルの規定に従います。[依存関係](DEPENDENCIES.md)をご覧くださ

README.ko.md

  • Network accessline 1
    <p align="center">   <a href="https://journione.ai/"><img src="assets/journione-lockup.svg" alt="JourniOne" width="360"></a>
  • Network accessline 2
    <a href="https://journione.ai/"><img src="assets/journione-lockup.svg" alt="JourniOne" width="360"></a>
  • Network accessline 11
    [공식 웹사이트](https://journione.ai/) · [설치 안내](INSTALL.md) · [사용 예시](EXAMPLES.md) · [자주 묻는 질문](FAQ.md)
  • Network accessline 59
    1. 클라이언트의 Skill 관리 화면에서 [JourniOne-Planning-Skills](https://github.com/JourniOne-ai/JourniOne-Planning-Skills)를 가져오거나, [설치 안내](INSTALL.md)에 따라 배포 패키지를 사용하세요. 표시 이름은 **Travel Journal Creator**입니다.
  • Network accessline 63
    가이드 생성에는 JourniOne Token이나 로컬 JourniOne MCP 서비스가 필요하지 않습니다. 기본 연결 주소는 [journione.ai](https://journione.ai/)입니다. 포함된 스크립트는 Node.js 22 이상이 필요하며, 클라이언트는 웹 검색, 파일 읽기, HTTPS 요청, 원격 MCP를 지원해야 합니다. 호텔 예약과 결제 인증은 해당 채널의 규정을 따릅니다. [의존성 안내](DEPENDENC

README.md

  • Network accessline 1
    <p align="center">   <a href="https://journione.ai/"><img src="assets/journione-lockup.svg" alt="JourniOne" width="360"></a>
  • Network accessline 2
    <a href="https://journione.ai/"><img src="assets/journione-lockup.svg" alt="JourniOne" width="360"></a>
  • Network accessline 11
    [Website](https://journione.ai/) · [Installation](INSTALL.md) · [Examples](EXAMPLES.md) · [FAQ](FAQ.md)
  • Network accessline 59
    1. Import [JourniOne-Planning-Skills](https://github.com/JourniOne-ai/JourniOne-Planning-Skills) through your client's Skill manager, or follow the [installation guide](INSTALL.md) to use a release package. The display name is **Travel Jour
  • Network accessline 63
    Creating a JourniOne guide requires no JourniOne token or local JourniOne MCP service. It connects to [journione.ai](https://journione.ai/) by default. Bundled scripts require Node.js 22 or later; the client needs web search, file access, H

README.zh-CN.md

  • Network accessline 1
    <p align="center">   <a href="https://journione.ai/"><img src="assets/journione-lockup.svg" alt="JourniOne" width="360"></a>
  • Network accessline 2
    <a href="https://journione.ai/"><img src="assets/journione-lockup.svg" alt="JourniOne" width="360"></a>
  • Network accessline 11
    [官方网站](https://journione.ai/) · [安装说明](INSTALL.md) · [使用示例](EXAMPLES.md) · [常见问题](FAQ.md)
  • Network accessline 59
    1. 在客户端的 Skill 管理入口导入 [JourniOne-Planning-Skills](https://github.com/JourniOne-ai/JourniOne-Planning-Skills),或按 [安装说明](INSTALL.md) 使用发布包。Skill 显示名称为 **Travel Journal Creator**。
  • Network accessline 63
    创建 JourniOne 路书无需配置 JourniOne Token 或本地 JourniOne MCP 服务,默认连接 [journione.ai](https://journione.ai/)。运行随包脚本需要 Node.js 22 或更新版本,客户端需支持联网搜索、文件读取、HTTPS 请求与远程 MCP。酒店下单与支付的认证要求按对应通道执行,详见 [依赖说明](DEPENDENCIES.md)。

RELEASE-CHECKLIST.md

  • Network accessline 3
    2026-10-11:正式发布地址为 [JourniOne-ai/JourniOne-Planning-Skills](https://github.com/JourniOne-ai/JourniOne-Planning-Skills)。本次只分发 Skill 埋点及相关说明,保留正式仓库品牌、安装入口与 WebP 资源。
  • Network accessline 24
    - [x] 原开发 Skill、旧插件源和两份安装副本已分别归档,并附逐文件 SHA-256 清单。 - [x] 请求默认指向 `https://journione.ai/api/skill-roadbook`,保留接口 schema 与技术调用名。
  • Network accessline 25
    - [x] 请求默认指向 `https://journione.ai/api/skill-roadbook`,保留接口 schema 与技术调用名。
  • Network accessline 34
    - Python 默认 HTTP 客户端 GET 首页及接口返回 Cloudflare 403(1010),需结合实际 Node.js 请求结果判断客户端访问情况。 - [x] 实际 Node.js HTTP 客户端可到达正式生成路由。 - **上线阻塞:** `GET https://journione.ai/api/skill-roadbook` 返回 HTTP **503**,JSON 为 `{"error":"AGENTAUTH_APP_KEY 未配置。","reas
  • Network accessline 35
    - [x] 实际 Node.js HTTP 客户端可到达正式生成路由。 - **上线阻塞:** `GET https://journione.ai/api/skill-roadbook` 返回 HTTP **503**,JSON 为 `{"error":"AGENTAUTH_APP_KEY 未配置。","reason":"service_not_configured"}`。这是服务端配置名,不是要求旅行者提供的 Token;由站点维护者配置后复测。本任务未改云端配置。 - N
  • Network accessline 36
    - **上线阻塞:** `GET https://journione.ai/api/skill-roadbook` 返回 HTTP **503**,JSON 为 `{"error":"AGENTAUTH_APP_KEY 未配置。","reason":"service_not_configured"}`。这是服务端配置名,不是要求旅行者提供的 Token;由站点维护者配置后复测。本任务未改云端配置。

SKILL.md

  • Network accessline 140
    酒店查询依赖官方 `tourmind-booking`(本包按 `1.0.6` 查询契约对接,2026-09-08 官方已为 `1.0.7`;本次未安装或执行新版依赖),执行前读取 [TourMind 查询依赖](references/tourmind-query-dependency.md) 与该 Skill 的参数指南。无凭证时通过宿主 HTTPS 直接使用 `https://api.tourmind.com/skill/toc/*` 公开通道查询酒店、详情、实时报价和验
  • Network accessline 154
    航班搜索固定使用 `https://mcp.kiwi.com` 的免登录 `search-flight`,日期转成 `dd/mm/yyyy`,人数拆为 `adults`、`children`、`infants`,并传入统一展示币种和用户语言对应的 `locale`;不索取、传递或共享任何用户或开发者凭证。按用户已表达的舱等、航空公司、直飞或中转要求传参;未表达时不擅自添加硬筛选。默认按 `quality` 搜索,内部比较不超过 3 个真正影响选择的方案,只向用户展示一个主选航
  • Network accessline 209
    1. 正式版默认请求 `https://journione.ai/api/skill-roadbook`,普通用户无需提供域名或配置环境变量。仅在用户明确要求测试某个环境时,通过 `--base` 指定该站点;不读取旧环境变量、不从其他插件或网页来源切换环境。返回的 `preview_url` 必须与本次请求站点同源,沿用真实返回值,不能把旧域名替换成正式域名冒充成功。

agents/openai.yaml

  • Network accessline 12
    description: "必需依赖:初始化时连接并验证 Kiwi.com search-flight,按需免登录查询实时航班"       transport: "streamable_http"       url: "https://mcp.kiwi.com"
  • Network accessline 14
    url: "https://mcp.kiwi.com"

assets/journione-lockup.svg

  • Network accessline 1
    <svg width="780" height="186" viewBox="0 0 780 186" fill="none" xmlns="http://www.w3.org/2000/svg">

assets/journione-mark.svg

  • Network accessline 1
    <svg width="150" height="178" viewBox="0 0 150 178" fill="none" xmlns="http://www.w3.org/2000/svg">

playbooks/preview-progress.md

  • Network accessline 6
    ## 前提条件 - 已继承当前路线、确认范围、机酒和稳定幂等键。 - Node.js 22+ 可用;正式环境默认使用 https://journione.ai;只有用户要求生成时才提交。
  • Network accessline 7
    - 已继承当前路线、确认范围、机酒和稳定幂等键。 - Node.js 22+ 可用;正式环境默认使用 https://journione.ai;只有用户要求生成时才提交。 - 请求与响应放当前任务 .tmp,完整 Preview 不输出到公共日志。
  • Network accessline 8
    - Node.js 22+ 可用;正式环境默认使用 https://journione.ai;只有用户要求生成时才提交。

playbooks/setup-dependencies.md

  • Network accessline 9
    - 当前任务是安装、初始化或使用 Travel Journal Creator;只阅读文档、审查代码或排查接口时不触发安装。 - 使用宿主实际提供的 Skill 安装工具、目录和 MCP 管理接口;目录未知先检查客户端设置,不假定所有宿主都使用 Codex 路径。 - 官方来源为 [TourMind 仓库](https://github.com/tourmind-com/Tourmind-Booking-Skills),Kiwi 地址为 `https://mcp.kiwi.c
  • Network accessline 10
    - 使用宿主实际提供的 Skill 安装工具、目录和 MCP 管理接口;目录未知先检查客户端设置,不假定所有宿主都使用 Codex 路径。 - 官方来源为 [TourMind 仓库](https://github.com/tourmind-com/Tourmind-Booking-Skills),Kiwi 地址为 `https://mcp.kiwi.com`。 - 安装 Travel Journal Creator 的任务包含这两项必需依赖。沿用已有授权,不重复确认;宿主强制
  • Network accessline 11
    - 官方来源为 [TourMind 仓库](https://github.com/tourmind-com/Tourmind-Booking-Skills),Kiwi 地址为 `https://mcp.kiwi.com`。
  • Network accessline 20
    git clone https://github.com/tourmind-com/Tourmind-Booking-Skills.git "<客户端技能目录>/tourmind-booking"
  • Network accessline 23
    3. Kiwi 确认缺失后,直接调用宿主远程 MCP 添加接口:名称 `kiwi-com-flight-search`,URL `https://mcp.kiwi.com`,传输 `streamable_http`,无需 API Key。Codex CLI 可用时先检查现有连接(内部处理列表,不输出其他连接的配置或凭证),只有不存在同地址连接且名称未被占用时执行:
  • Network accessline 26
    codex mcp add kiwi-com-flight-search --url https://mcp.kiwi.com

references/agent-experience.md

  • Network accessline 22
    node scripts/submit-poster-with-experience.mjs --base https://journione.ai --request .tmp/current-trip/request.json --key ORIGINAL_KEY --output .tmp/current-trip/accepted.json --state .tmp/current-trip/experience.json --turn reply-2 --agent
  • Network accessline 43
    本正式安装固定 `environment: prod` 与正式端点。生产标识统一为 `prod`,对应 `https://journione.ai/api/skill-experience`;服务端须先部署支持版本,并显式配置 `SKILL_EXPERIENCE_ENVIRONMENT=prod`。本安装已按用户授权启用;不从当前对话或域名推断环境。客户端拒绝环境与端点错配,服务端拒绝跨环境批次;旧名称 `production` 不再接受。环境配置变更仅用于新规划,不复用另一

references/critical-transfer-search.md

  • Network accessline 135
    > 下午回酒店取行李,乘坐 [JR 新快速](https://www.westjr.co.jp/travel-information/en/plan-your-trip/routes-schedule/) 或 [阪急京都线](https://www.hankyu.co.jp/en/station/index.html) 前往大阪。最终选择取决于京都酒店位置与大阪住宿更靠近大阪站还是大阪梅田;出发前复核当天时刻与运行状态。

references/itinerary-confirmation-loop.md

  • Network accessline 113
    https://www.google.com/maps/dir/{lat},{lng}/{lat},{lng}/...

references/kiwi-flight-search.md

  • Network accessline 18
    - 远程 MCP 名称:`kiwi-com-flight-search`。 - Streamable HTTP 端点:`https://mcp.kiwi.com`。
  • Network accessline 19
    - Streamable HTTP 端点:`https://mcp.kiwi.com`。

references/research-and-agent-routing.md

  • Network accessline 105
    - 官方工具数据的时效与真实性由对应工具负责;JourniOne 只编排和展示,措辞保持中性。 - 行动链接只用官方工具返回值,不手拼预订、导航或叫车 deeplink / URL scheme。 - `mapUrl` 不是 `actionLink`:主 Agent 可以把已核验的 WGS-84 坐标按行程顺序确定性拼成 `https://www.google.com/maps/dir/{lat},{lng}/...`,并连同节点 `lat`、`lng` 回传 JourniO
  • Network accessline 106
    - 行动链接只用官方工具返回值,不手拼预订、导航或叫车 deeplink / URL scheme。 - `mapUrl` 不是 `actionLink`:主 Agent 可以把已核验的 WGS-84 坐标按行程顺序确定性拼成 `https://www.google.com/maps/dir/{lat},{lng}/...`,并连同节点 `lat`、`lng` 回传 JourniOne;不得用名称猜坐标,也不得改写官方工具返回的行动链接。 - 高德与腾讯通常返回 GCJ-02
  • Network accessline 107
    - `mapUrl` 不是 `actionLink`:主 Agent 可以把已核验的 WGS-84 坐标按行程顺序确定性拼成 `https://www.google.com/maps/dir/{lat},{lng}/...`,并连同节点 `lat`、`lng` 回传 JourniOne;不得用名称猜坐标,也不得改写官方工具返回的行动链接。

references/roadbook-card-rendering.md

  • Network accessline 26
    "overview": "从百年车站与多线并行,走到都电、车辆基地与东京单轨。",   "tags": ["东京", "铁路巡礼", "都电"],   "preview_url": "https://journione.ai/preview/trip_...",
  • Network accessline 27
    "tags": ["东京", "铁路巡礼", "都电"],   "preview_url": "https://journione.ai/preview/trip_...",   "cover_status": "placeholder",
  • Network accessline 28
    "preview_url": "https://journione.ai/preview/trip_...",
  • Network accessline 33
    "label": "Day 1",       "title": "Day 1|百年车站、多线并行与都电",       "map_url": "https://www.google.com/maps/dir/..."
  • Network accessline 34
    "title": "Day 1|百年车站、多线并行与都电",       "map_url": "https://www.google.com/maps/dir/..."     }
  • Network accessline 35
    "map_url": "https://www.google.com/maps/dir/..."

references/tourmind-query-dependency.md

  • Network accessline 5
    - 来源:[Tourmind-Booking-Skills](https://github.com/tourmind-com/Tourmind-Booking-Skills)。
  • Network accessline 14
    API 根地址为 `https://api.tourmind.com`,请求使用 HTTPS POST 和 JSON。

references/trip-snapshot-contract.md

  • Network accessline 5
    正式版默认使用 `POST https://journione.ai/api/skill-roadbook`,请求 schema 保持 `flipmind-skill-poster-request@2.0.0`。创建不需要登录、Authorization 或用户密钥,普通用户无需选择服务器。默认域名由提交脚本内的 `DEFAULT_BASE_URL` 固定。
  • Network accessline 123
    "trip_id": "skill-poster-example",   "status": "accepted",   "preview_url": "https://journione.ai/preview/skill-poster-example",
  • Network accessline 124
    "status": "accepted",   "preview_url": "https://journione.ai/preview/skill-poster-example",   "idempotent_replay": false
  • Network accessline 125
    "preview_url": "https://journione.ai/preview/skill-poster-example",

scripts/experience-config.json

  • Network accessline 2
    "experience_reporting": "on",   "environment": "prod",   "endpoint": "https://journione.ai/api/skill-experience",
  • Network accessline 3
    "environment": "prod",   "endpoint": "https://journione.ai/api/skill-experience",   "skill_version": "1.0.3",
  • Network accessline 4
    "endpoint": "https://journione.ai/api/skill-experience",

scripts/experience-contract.mjs

  • Executable scriptline 1
    Executable file

scripts/experience-report.mjs

  • Executable scriptline 1
    #!/usr/bin/env node
  • Network accessline 32
    function allowedEndpoint(value, environment) {   const endpoints = {     dev: 'https://flipmind-2503271672.asia-northeast1.run.app/api/skill-experience',
  • Network accessline 33
    const endpoints = {     dev: 'https://flipmind-2503271672.asia-northeast1.run.app/api/skill-experience',     prod: 'https://journione.ai/api/skill-experience',
  • Network accessline 34
    dev: 'https://flipmind-2503271672.asia-northeast1.run.app/api/skill-experience',
  • Network accessline 35
    prod: 'https://journione.ai/api/skill-experience',

scripts/place-binding.mjs

  • Executable scriptline 1
    Executable file

scripts/prepare-poster-request.mjs

  • Executable scriptline 1
    #!/usr/bin/env node
  • Access to secretsline 41
    [Credential-related source omitted]

scripts/render-roadbook-card.mjs

  • Executable scriptline 1
    #!/usr/bin/env node
  • Network accessline 74
    continue;       }       points.push({ title, lat, lng, map_url: `https://www.google.com/maps/search/?api=1&query=${lat},${lng}` });
  • Network accessline 75
    }       points.push({ title, lat, lng, map_url: `https://www.google.com/maps/search/?api=1&query=${lat},${lng}` });     }
  • Network accessline 76
    points.push({ title, lat, lng, map_url: `https://www.google.com/maps/search/?api=1&query=${lat},${lng}` });
  • Network accessline 77
    }     const mapUrl = points.length > 1       ? `https://www.google.com/maps/dir/${points.map(point => `${point.lat},${point.lng}`).join("/")}`
  • Network accessline 78
    const mapUrl = points.length > 1       ? `https://www.google.com/maps/dir/${points.map(point => `${point.lat},${point.lng}`).join("/")}`       : points[0]?.map_url || "";
  • Network accessline 79
    ? `https://www.google.com/maps/dir/${points.map(point => `${point.lat},${point.lng}`).join("/")}`

scripts/submit-poster-request.mjs

  • Executable scriptline 1
    #!/usr/bin/env node
  • Network accessline 11
    export const DEFAULT_BASE_URL = 'https://journione.ai';

scripts/submit-poster-with-experience.mjs

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

scripts/test-poster-contract.mjs

  • Executable scriptline 1
    #!/usr/bin/env node
  • Network accessline 24
    assert.equal(JSON.stringify(input),before);assert.deepEqual(r,preparePosterRequest(input,key));assert.equal(r.headers['Idempotency-Key'],key);assert.equal(Object.keys(r.headers).length,2); }); const services={flights:[{id:'flight-1',status:
  • Network accessline 25
    }); const services={flights:[{id:'flight-1',status:'suggested',flight_number:'TEST123',booking_url:'https://example.org/flight'}],hotel_stays:[{id:'hotel-1',status:'selected',hotel_name:'用户已选酒店',check_in:'2026-10-01',check_out:'2026-10-03'}
  • Network accessline 26
    const services={flights:[{id:'flight-1',status:'suggested',flight_number:'TEST123',booking_url:'https://example.org/flight'}],hotel_stays:[{id:'hotel-1',status:'selected',hotel_name:'用户已选酒店',check_in:'2026-10-01',check_out:'2026-10-03'}],ac
  • Network accessline 62
    assert.throws(()=>preparePosterRequest(input,'short')); }); const accepted={schema_version:ACCEPTED_SCHEMA,mode:'poster',job_id:'job-example',trip_id:'skill-poster-example',status:'accepted',idempotent_replay:false,preview_url:'https://exam
  • Network accessline 63
    }); const accepted={schema_version:ACCEPTED_SCHEMA,mode:'poster',job_id:'job-example',trip_id:'skill-poster-example',status:'accepted',idempotent_replay:false,preview_url:'https://example.org/preview/skill-poster-example'}; check('接受响应严格匹配行
  • Network accessline 64
    const accepted={schema_version:ACCEPTED_SCHEMA,mode:'poster',job_id:'job-example',trip_id:'skill-poster-example',status:'accepted',idempotent_replay:false,preview_url:'https://example.org/preview/skill-poster-example'};
  • Network accessline 66
    assert.equal(validatePosterAccepted(accepted),accepted.preview_url);  assert.equal(validatePosterAccepted({...accepted,idempotent_replay:true},200),accepted.preview_url);  for(const u of ['https://example.org/share/skill-poster-example','ht
  • Network accessline 67
    assert.equal(validatePosterAccepted({...accepted,idempotent_replay:true},200),accepted.preview_url);  for(const u of ['https://example.org/share/skill-poster-example','https://example.org/preview/other','https://example.org/preview/skill-po
  • Network accessline 68
    for(const u of ['https://example.org/share/skill-poster-example','https://example.org/preview/other','https://example.org/preview/skill-poster-example?x=1','https://example.org/preview/skill-poster-example#x','https://user:password@example.
  • Network accessline 69
    assert.throws(()=>validatePosterAccepted({...accepted,preview_url:undefined}));assert.throws(()=>validatePosterAccepted(accepted,503));assert.throws(()=>validatePosterAccepted({...accepted,mode:'invalid'}));  assert.equal(validatePreviewUrl
  • Network accessline 70
    assert.equal(validatePreviewUrl('http://127.0.0.1:5174/preview/local'),'http://127.0.0.1:5174/preview/local');
  • Network accessline 71
    }); check('卡片保留封面、转义、单一链接与地图折叠',()=>{  const data={title:'<旅行>',overview:'完整内容',preview_url:accepted.preview_url,mode:'poster',days:[{label:'Day 1',title:'Day 1|伏见',map_url:'https://www.google.com/maps/dir/1,2/3,4'}]};
  • Network accessline 72
    check('卡片保留封面、转义、单一链接与地图折叠',()=>{  const data={title:'<旅行>',overview:'完整内容',preview_url:accepted.preview_url,mode:'poster',days:[{label:'Day 1',title:'Day 1|伏见',map_url:'https://www.google.com/maps/dir/1,2/3,4'}]};  const html=renderRoadboo
  • Network accessline 73
    const data={title:'<旅行>',overview:'完整内容',preview_url:accepted.preview_url,mode:'poster',days:[{label:'Day 1',title:'Day 1|伏见',map_url:'https://www.google.com/maps/dir/1,2/3,4'}]};
  • Network accessline 82
    const before=JSON.stringify(mapSnapshot),days=buildGoogleMapsDays(mapSnapshot);  assert.equal(JSON.stringify(mapSnapshot),before);assert.equal(days.length,3);  assert.equal(days[0].map_url,'https://www.google.com/maps/dir/25.04123456,121.53
  • Network accessline 83
    assert.equal(JSON.stringify(mapSnapshot),before);assert.equal(days.length,3);  assert.equal(days[0].map_url,'https://www.google.com/maps/dir/25.04123456,121.53123456/25.06123456,121.51123456');  assert.deepEqual(days[0].points.map(p=>p.titl
  • Network accessline 84
    assert.equal(days[0].map_url,'https://www.google.com/maps/dir/25.04123456,121.53123456/25.06123456,121.51123456');
  • Network accessline 85
    assert.deepEqual(days[0].points.map(p=>p.title),['地点甲','地点乙']);assert.equal(days[0].label,'10月1日');  assert.equal(days[1].map_url,'https://www.google.com/maps/search/?api=1&query=25.05,121.52');assert.deepEqual(days[1].missing_points,['待核验小
  • Network accessline 86
    assert.equal(days[1].map_url,'https://www.google.com/maps/search/?api=1&query=25.05,121.52');assert.deepEqual(days[1].missing_points,['待核验小店']);
  • Network accessline 87
    assert.equal(days[2].map_url,'');assert.deepEqual(days[2].missing_points,['其他坐标系点位','无坐标系标记','无效坐标']);  const html=renderRoadbookCard({title:'地图模拟',overview:'仅供离线验证',preview_url:accepted.preview_url,trip_snapshot:mapSnapshot,days:[{title:'旧
  • Network accessline 88
    const html=renderRoadbookCard({title:'地图模拟',overview:'仅供离线验证',preview_url:accepted.preview_url,trip_snapshot:mapSnapshot,days:[{title:'旧版不应出现',map_url:'https://www.google.com/maps/dir/1,2/3,4'}]});
  • Network accessline 177
    const serialized=preparePosterRequest(input,key).serialized;  const calls=[],progress=[];  const accepted={schema_version:ACCEPTED_SCHEMA,mode:'poster',job_id:'job_fixture',trip_id:'fixture',status:'accepted',preview_url:'https://example.or
  • Network accessline 178
    const calls=[],progress=[];  const accepted={schema_version:ACCEPTED_SCHEMA,mode:'poster',job_id:'job_fixture',trip_id:'fixture',status:'accepted',preview_url:'https://example.org/preview/fixture',idempotent_replay:true};  const result=awai
  • Network accessline 179
    const accepted={schema_version:ACCEPTED_SCHEMA,mode:'poster',job_id:'job_fixture',trip_id:'fixture',status:'accepted',preview_url:'https://example.org/preview/fixture',idempotent_replay:true};
  • Network accessline 180
    const result=await submitPosterRequest({base:'https://example.org',serialized,key,pulseMs:2,onProgress:p=>progress.push(p),fetchImpl:async (url,init)=>{
  • Network accessline 191
    });  let calls429=0;  await assert.rejects(()=>submitPosterRequest({base:'https://example.org',serialized,key,fetchImpl:async ()=>{calls429++;return new Response('{}',{status:429,headers:{'retry-after':'30'}});}}),/HTTP 429.*30/);
  • Network accessline 192
    let calls429=0;  await assert.rejects(()=>submitPosterRequest({base:'https://example.org',serialized,key,fetchImpl:async ()=>{calls429++;return new Response('{}',{status:429,headers:{'retry-after':'30'}});}}),/HTTP 429.*30/);  assert.equal(
  • Network accessline 193
    await assert.rejects(()=>submitPosterRequest({base:'https://example.org',serialized,key,fetchImpl:async ()=>{calls429++;return new Response('{}',{status:429,headers:{'retry-after':'30'}});}}),/HTTP 429.*30/);
  • Network accessline 194
    assert.equal(calls429,1);  await assert.rejects(()=>submitPosterRequest({base:'https://example.org',serialized,key,fetchImpl:async ()=>new Response(JSON.stringify({...accepted,preview_url:'https://example.org/share/fixture'}),{status:202})}
  • Network accessline 195
    await assert.rejects(()=>submitPosterRequest({base:'https://example.org',serialized,key,fetchImpl:async ()=>new Response(JSON.stringify({...accepted,preview_url:'https://example.org/share/fixture'}),{status:202})}),/Preview/);
  • Network accessline 207
    {  const serialized=preparePosterRequest(input,key).serialized;  const accepted={schema_version:ACCEPTED_SCHEMA,mode:'poster',job_id:'job_release',trip_id:'release',status:'accepted',preview_url:'https://journione.ai/preview/release',idempo
  • Network accessline 208
    const serialized=preparePosterRequest(input,key).serialized;  const accepted={schema_version:ACCEPTED_SCHEMA,mode:'poster',job_id:'job_release',trip_id:'release',status:'accepted',preview_url:'https://journione.ai/preview/release',idempoten
  • Network accessline 209
    const accepted={schema_version:ACCEPTED_SCHEMA,mode:'poster',job_id:'job_release',trip_id:'release',status:'accepted',preview_url:'https://journione.ai/preview/release',idempotent_replay:false};
  • Network accessline 210
    const r=await submitPosterRequest({serialized,key,fetchImpl:async (url,init)=>{   assert.equal(String(url),'https://journione.ai/api/skill-roadbook');   assert.equal(init.body,serialized);assert.equal(init.headers['Idempotency-Key'],key);
  • Network accessline 211
    assert.equal(String(url),'https://journione.ai/api/skill-roadbook');
  • Network accessline 217
    passed++;console.log('通过:无域名参数时请求正式域名,保留原文原键且不发送认证凭证');  let calls=0;  for(const badUrl of ['https://old.example/preview/release','https://journione.ai.evil.example/preview/release','https://journione.ai:444/preview/release']){
  • Network accessline 218
    let calls=0;  for(const badUrl of ['https://old.example/preview/release','https://journione.ai.evil.example/preview/release','https://journione.ai:444/preview/release']){   await assert.rejects(()=>submitPosterRequest({serialized,key,fetchI
  • Network accessline 219
    for(const badUrl of ['https://old.example/preview/release','https://journione.ai.evil.example/preview/release','https://journione.ai:444/preview/release']){
  • Network accessline 221
    }  assert.equal(calls,3);  const local=await submitPosterRequest({base:'http://127.0.0.1:5174',serialized,key,fetchImpl:async(url)=>{
  • Network accessline 222
    assert.equal(calls,3);  const local=await submitPosterRequest({base:'http://127.0.0.1:5174',serialized,key,fetchImpl:async(url)=>{   assert.equal(String(url),'http://127.0.0.1:5174/api/skill-roadbook');
  • Network accessline 223
    const local=await submitPosterRequest({base:'http://127.0.0.1:5174',serialized,key,fetchImpl:async(url)=>{
  • Network accessline 224
    assert.equal(String(url),'http://127.0.0.1:5174/api/skill-roadbook');
  • Network accessline 225
    return new Response(JSON.stringify({...accepted,preview_url:'http://127.0.0.1:5174/preview/release'}),{status:202});
  • Network accessline 226
    }});  assert.equal(local.accepted.preview_url,'http://127.0.0.1:5174/preview/release');  passed++;console.log('通过:旧域名、相似域名和错误端口不交付不重试,显式本机测试仍可用');
  • Network accessline 227
    assert.equal(local.accepted.preview_url,'http://127.0.0.1:5174/preview/release');

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.

No combined signals at this commit.

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.

Explore alternatives and comparisons

Add this badge to your README

It updates every night and links to this page.

JourniOne-ai/JourniOne-Planning-Skills: #787 on hotskills, 1.2k stars

[![JourniOne-ai/JourniOne-Planning-Skills on hotskills](https://hotskills.dev/badge/journione-ai-journione-planning-skills.svg)](https://hotskills.dev/skill/journione-ai-journione-planning-skills/)