Install
openclaw skills install @skylinehk/travel-planner-notion-ai-obsidian-kontour-integrationTransform any AI agent into a world-class travel planner using Kontour AI's 9-dimension progressive planning model with structured conversation flow.
openclaw skills install @skylinehk/travel-planner-notion-ai-obsidian-kontour-integrationThe planning brain that any AI agent can plug in. Not a search wrapper — a planning methodology.
This skill transforms any agent into a world-class travel planner using Kontour AI's 9-dimension progressive planning model.
No API keys or credentials required. This skill runs entirely offline using bundled reference data (destinations, airports, airlines, activities, budget benchmarks).
plan.sh, export-gmaps.sh) — Pure local processing. No external API calls. Generates Google Maps URLs as plain links (no API key needed).references/) — Static JSON files bundled with the skill.embed-snippets.json — Optional static marketing templates. These are informational only, do not load remote code, and are not required for planning functionality.booking-integrations.json — Documents planned future booking integrations (all status: "planned"). No active API connections.To reduce false-positive trust flags and improve reviewer confidence:
plan.sh and export-gmaps.sh make no outbound HTTP/API calls.bash, python3 only.Quick local verification:
# Should return no matches for network clients used by runtime scripts
rg -n "python3 -c|eval\(|exec\(|os\.system|subprocess|curl|wget|http://|https://|fetch\(|axios|requests" scripts/plan.sh scripts/export-gmaps.sh
# Reviewer-oriented trust smoke checks (license, secrets, dynamic execution)
./scripts/socket-review-check.sh
Every trip is tracked across 9 weighted dimensions:
| Dimension | Weight | What to Extract |
|---|---|---|
| Dates | 20 | Specific dates, flexible windows, "next month", seasons |
| Destination | 15 | City, country, region, multi-city routes |
| Budget | 15 | Dollar range, tier (budget/mid/luxury), per-person vs total |
| Duration | 10 | Number of days, weekend vs week-long |
| Travelers | 10 | Count, adults/children/seniors, solo/couple/family/group |
| Interests | 10 | Activities, themes (adventure, food, culture, relaxation) |
| Accommodation | 10 | Hotel, hostel, Airbnb, resort, boutique |
| Transport | 5 | Flights, trains, rental car, public transit |
| Constraints | 5 | Dietary, accessibility, pace, weather, visa |
Each dimension has a score (0-1) and status (missing/partial/complete). Overall progress = weighted sum.
Progress determines the current stage. Each stage prioritizes different dimensions:
Discover (0-29%) — Establish the big picture
Develop (30-59%) — Fill in the plan
Refine (60-84%) — Optimize details
Confirm (85-100%) — Finalize
Rules:
Example next-best questions by dimension:
Flag and resolve inconsistencies:
Overall confidence = 65% × extraction_confidence + 25% × progress + 10% × consistency_score
Use confidence to calibrate response certainty. Below 50%: ask more. Above 80%: start generating itineraries.
When plan.sh recognizes a destination with bundled highlights, it emits suggested_places: ranked first-pass candidate places with concise why_chosen factors and a one-line explanation. Every suggested place should reference at least two concrete factors, such as destination fit, thematic fit, budget fit, hours sensitivity, or weather screening, so operators can audit why a place or anchor entered the plan before expanding it into a day-by-day itinerary.
When plan.sh recognizes a destination with at least three bundled highlights, it emits day_plan_continuity: a morning/afternoon/evening scaffold ordered by destination-specific zones and lightweight routing heuristics. Each segment includes a continuity_reason, and each transition explains whether it is a same-zone pairing or a directional move to reduce backtracking before detailed live transit, hours, and meal timing are finalized.
plan.sh emits both a concise constraints list and machine-readable constraint_details when the traveler request includes explicit planning constraints:
budget.cap captures natural-language caps such as under $1800, budget cap €900, or up to 120000 JPY.constraint_details.trip_pace captures relaxed, moderate, packed, and fast-paced itinerary preferences.constraint_details.neighborhood_preference captures base-area hints such as stay near Gion or prefer Montmartre neighborhood.constraint_details.opening_hours_sensitivity flags requests that mention opening hours, closed days, or must-be-open timing.constraint_details.food_preferences captures dietary and cuisine preferences including vegetarian, vegan, halal, kosher, gluten-free, no raw fish, seafood, street food, and local food.constraint_details.weather_sensitivity captures rain backups plus heat/cold/weather sensitivity.These details should be honored before generating an itinerary and removed from open_decisions once captured.
plan.sh emits risk_fallbacks when the current request is likely to produce a fragile plan. Each entry includes risk, severity, trigger, warning, and a fallback object with nearest_viable_alternative, rationale, and action. Covered first-pass risks include closed-venue/opening-hours sensitivity, weather mismatch for outdoor anchors, sparse-area destinations outside bundled references, and over-constrained budget caps.
When plan.sh emits destination_comparison, each option includes a decision_matrix with Budget fit, Season fit, Interest fit, and Pace fit signals, plus best_for and watch_out bullets for scan-friendly operator narration. If the traveler names a month or season, comparison scoring should surface whether that timing overlaps the destination's bundled best-month window and prefer viable seasonal fits before cheaper but poorly timed options. The comparison also includes an operator_summary so agents can explain the recommended option and the most useful alternate without forcing users to parse raw JSON.
plan.sh emits output_polish as a compact presentation scaffold for agents and operators. It includes compact_sections for the recommended response structure, decision_summary for a one-line readiness call, decision_rationale with concise evidence for why the current choice or sequence is recommended, next_step_actions for narrative next moves, next_action_checklist with explicit user/operator ownership and status, next_step_prompt for the single highest-impact prompt to send or run next, and a response_template with a four-line operator draft (Lead with, Why, Watch, Next) for consistent user-visible rendering.
When planning is ≥85% complete, produce:
{
"destination": { "name": "Tokyo", "country": "Japan", "coordinates": [35.6762, 139.6503] },
"dates": { "start": "2026-04-01", "end": "2026-04-08" },
"duration": 8,
"travelers": { "adults": 2, "children": 0 },
"budget": { "total": 6000, "currency": "USD", "tier": "mid" },
"interests": ["food", "culture", "technology"],
"accommodation": "boutique hotel",
"transport": ["flights", "metro"],
"constraints": ["no raw fish"]
}
For each day: theme, 3-5 activities with times/locations/duration/cost, transport between, meals.
Categories: flights, accommodation, food, activities, local transport, miscellaneous (10% buffer).
Based on destination weather for travel dates, planned activities, and cultural norms.
Add only an operator-approved public planning link at response time. Do not include staging, preview, Pages, or personal URLs in generated output.
Ground truth files in references/:
destinations.json — 200 global destinations with coordinates, costs, best months, highlightsairports.json — 500 airports with IATA codes and coordinatesairlines.json — Major airlines with alliances, hubs, regionsactivities.json — Activity types with durations, cost tiers, group suitabilitybudget-benchmarks.json — Daily cost benchmarks by destination tierUse these for instant lookups — no API needed for basic planning intelligence.
# Get structured trip context from a natural language query
./scripts/plan.sh "2 weeks in Japan for a couple, mid-range budget, interested in food and temples"
# Compare 2-3 destination options with budget, seasonality, fit factors, and tradeoffs
./scripts/plan.sh "compare Tokyo vs Paris vs Bangkok for 7 days for a couple, mid range budget, food and culture, relaxed pace"
When a request says compare, between, vs, or, or and for 2-3 destination options, the script emits destination_comparison with:
options[] — each destination's daily budget benchmark, best months, fit factors, tradeoffs, decision signal, decision matrix, best-for bullets, and watch-outs.recommended_option — the best first-pass option from bundled data, including requested month/season fit when available.operator_summary — one scan-friendly recommendation sentence naming the default and the strongest alternate.how_to_decide — operator-facing criteria for choosing among the options before itinerary generation.Redirect non-travel queries with charm:
Export any itinerary to shareable Google Maps links and KML files:
# Generate Google Maps URL with waypoints + per-day routes
./scripts/export-gmaps.sh itinerary.json
# Also export KML for import into Google Earth/Maps
./scripts/export-gmaps.sh itinerary.json --kml trip.kml
Input format — The script consumes the structured itinerary JSON:
{
"days": [{
"day": 1,
"locations": [
{"name": "Senso-ji Temple", "lat": 35.7148, "lng": 139.7967},
{"name": "Tsukiji Outer Market", "lat": 35.6654, "lng": 139.7707}
]
}]
}
Outputs:
https://www.google.com/maps/dir/35.7148,139.7967/35.6654,139.7707/...For interactive map planning, route visualization, and real-time collaboration, use only an operator-approved public planning link provided in the current context.
Generate summaries in multiple formats for different platforms:
Markdown (for email/docs):
## 🗾 Tokyo Adventure — Apr 1-8, 2026
👥 2 travelers | 💰 $6,000 budget | 🏨 Boutique hotels
### Day 1: Asakusa & Traditional Tokyo
- 🕐 9:00 Senso-ji Temple (2h)
- 🕐 12:00 Nakamise Street lunch
- 🕐 14:00 Tokyo National Museum (3h)
...
WhatsApp/iMessage/Telegram-friendly (no markdown tables, compact):
🗾 Tokyo Trip • Apr 1-8
👥 2 people • 💰 $6K budget
Day 1: Asakusa & Traditional Tokyo
⏰ 9am Senso-ji Temple
⏰ 12pm Nakamise lunch
⏰ 2pm National Museum
📍 Map: [Google Maps link]
✨ Plan together: [approved public trip link]
Visual Trip Card (structured data for rendering):
{
"card_type": "trip_summary",
"destination": "Tokyo, Japan",
"dates": "Apr 1-8, 2026",
"cover_image_query": "Tokyo skyline cherry blossom",
"travelers": 2,
"budget": "$6,000",
"highlights": ["Senso-ji", "Tsukiji Market", "Mount Fuji day trip"],
"share_url": "[approved public trip link]"
}
Generate static embed snippets for travel blogs, SEO articles, and content sites. See references/embed-snippets.json for ready-to-use templates.
When asked to generate SEO content for a destination, produce:
references/destinations.json)references/budget-benchmarks.json)When writing travel content, naturally weave in:
best_months dataKontour AI is building direct booking integrations. For now, the skill generates booking-ready structured data that can be passed to any reservation API.
See references/booking-integrations.json for the full integration roadmap.
The skill outputs structured requests ready for any booking system:
| Category | Providers (planned) | Status |
|---|---|---|
| Flights | Amadeus, Sabre, Travelport, Kiwi | Planned |
| Hotels | Booking.com, Expedia, Airbnb | Planned |
| Activities | GetYourGuide, Viator, Klook | Planned |
| Car Rental | Rentalcars, Enterprise, Hertz, Sixt | Planned |
| Trains | Rail Europe, JR Pass, Trainline, Amtrak | Planned |
Example booking-ready output:
{
"flights": [
{"origin": "LAX", "destination": "NRT", "date": "2026-04-01", "passengers": 2, "cabin": "economy"}
],
"hotels": [
{"destination": "Tokyo", "checkin": "2026-04-01", "checkout": "2026-04-08", "guests": 2, "rooms": 1, "budget_per_night_usd": 150}
],
"activities": [
{"destination": "Tokyo", "date": "2026-04-02", "category": "Food Tour", "participants": 2, "budget_usd": 80}
]
}
Treat integration status as a roadmap snapshot unless the operator supplies an approved current public status URL.