Plan up-to-date walking sightseeing trips anywhere. Generates 1-3 personalized walking itineraries (views, landmarks, museums, parks, food) with an optimized walking route, schedule, and checklist. Use for trip planning, day plans, and route building. Triggers on phrases like "plan a walk in X", "what to see in X in N hours", "sightseeing route", "walking itinerary", "best places to visit in X today".
This skill produces walking sightseeing itineraries for any city or location, personalized to user interests, with an optimized walking route and a ready-to-send trip brief.
It uses a multi-source enrichment pipeline to ensure the best possible stop selection:
OSM/Overpass — primary POI source (open data, global coverage)
Wikidata SPARQL — adds globally-famous places that OSM may under-tag; contributes sitelink popularity counts
Wikipedia pageviews — monthly view counts as a real-world tourist-interest signal
Claude LLM curation — final quality pass: flags poor stops, notes missing iconic attractions
Each enrichment step degrades gracefully — the skill always produces output even if one or more sources are unreachable.
All step scripts emit runtime monitoring markers on stderr in the format
TRIP_PROGRESS {json} (geocoding, discovery, ranking, curation, routing, output).
map-poi-agent uses these markers to send live progress updates to the chat.
Step 5. Quality checks before sending
No duplicate places
Total walking time fits the budget (or call out the overage)
Stops match the user's interests
Check summary.notes in the itinerary for any curation warnings or missing famous places
Provide at least 1 backup option (rainy day or shorter loop)
If the user gave a date/time, also check top 2-3 places:
Are they open? (museum closures are common on Mondays)
Are there tickets needed? Pre-booking advised for very popular attractions?
Step 6. Deliver
Send:
A short summary (best option, why it fits, highlights)
The stop list with total walking time and total duration
A few tips (best time for viewpoints, lunch timing, any curation notes)
Data sources and configuration
Default sources are open and global:
Geocoding: Nominatim (OpenStreetMap)
POIs: Overpass API (OpenStreetMap, with automatic fallback mirrors) + Wikidata SPARQL
Popularity signals: Wikipedia Pageviews API (Wikimedia)
Routing: OSRM public demo by default (replace for production)
LLM curation: Anthropic Claude API (optional, highly recommended)
See $SKILL_DIR/references/data_sources.md for details and production notes.
How the enrichment pipeline improves stop quality
Wikidata sitelink counts
Each place in Wikidata has a "sitelinks" count — the number of Wikipedia language editions that have an article about it. The Eiffel Tower has 200+ sitelinks; a random café has 0. This is a strong proxy for worldwide fame and tourist interest.
Wikipedia pageview signals
For stops that have a wikipedia tag, the Wikimedia pageviews API returns monthly view counts for the last 3 months. A place with 500k+ monthly views is genuinely world-famous; one with 2k is locally known. The score boost uses a log10 scale.
Claude LLM curation
The curation step is the final safety net. Claude reviews the proposed stop list and:
Flags stops that are not genuine tourist attractions
Notes world-famous attractions in the area that should be considered
Returns a ranked order by must-see value for a tourist
The curation only removes flagged stops if confidence ≥ 70%. All curation actions are recorded in summary.notes.
Common edge cases
Tiny time budget (<= 60 min): pick 3-5 stops max, keep it compact.
Rural areas: prefer viewpoints, trails, natural features, and historic sites.
OSM sparse coverage: Wikidata fill-in becomes especially valuable; output will be smaller but accurate.
Overpass API overloaded (504): automatically retries with fallback mirrors; user is notified of the switch.
Routing failure: fall back to haversine distances and label as approximate.
Wikidata/pageviews timeout: gracefully skipped; OSM-only result still delivered.
No ANTHROPIC_API_KEY: LLM curation skipped; a note is added to summary.