Install
openclaw skills install hkrouteSmart public transport routing for Hong Kong with real-time bus ETAs. Queries Google Maps for transit alternatives, enriches bus legs with live arrival times, and ranks routes by effective total time.
openclaw skills install hkrouteFinds the best public transport route in Hong Kong by combining Google Maps directions with real-time bus ETAs. Routes are ranked by effective total time (real-time wait + travel duration), not just schedule data.
| Requirement | Details |
|---|---|
GOOGLE_MAPS_API_KEY | Google Maps API key with Directions API enabled |
node >= 18 | Runtime for the bundled script |
This skill makes network requests to:
| Endpoint | Purpose | Credentials |
|---|---|---|
maps.googleapis.com (Google Directions API) | Transit route planning | GOOGLE_MAPS_API_KEY |
| HK government & operator APIs via hk-bus-eta (DATA.GOV.HK, KMB, CTB, etc.) | Real-time bus arrival times | None (public APIs) |
No other network calls are made. The ETA database is cached locally at ~/.cache/hk-route/etaDb.json (refreshed every 24h).
The bundled scripts/hk-route.cjs is built from readable TypeScript source at github.com/7ito/hkroute. Build command: esbuild src/index.ts --bundle --platform=node --format=cjs.
node /path/to/skill/scripts/hk-route.cjs \
--origin "<origin>" \
--destination "<destination>"
The
scripts/hk-route.cjsbundle is self-contained — nonpm installneeded. Justnode>= 18.
--departure-time "<ISO 8601 datetime>" — plan a future trip (e.g., --departure-time "2026-03-26T08:00:00+08:00")"22.2822,114.1875" (lat,lng — no space after comma)"Causeway Bay", "Hong Kong Airport", "Stanley Market"User: "How do I get from Causeway Bay to Stanley?"
→ Run the CLI with --origin "Causeway Bay" --destination "Stanley", format the output.
/hkroute22.2822,114.1875) or text (e.g., "Tin Hau MTR")If the user provides invalid input at any step, ask them to try again with a valid location.
Activate this skill when the user asks about getting somewhere in Hong Kong by public transport, even without using /hkroute. Look for intent like "how do I get to...", "best way to...", "bus from...", etc., in a Hong Kong context.
The CLI outputs JSON to stdout. Format it for the user as follows:
🚌 **Routes from {origin} to {destination}**
⭐ **Route 1 (Recommended)** — {effective_total_min} min
{for each leg:}
🚶 Walk {duration_seconds/60} min — {instructions}
🚌 Bus {route_number} from {departure_stop} — **Next bus: {etas[0] formatted as relative time}** (then {etas[1]})
{num_stops} stops → {arrival_stop}
🚇 MTR {route_number} from {departure_stop}
{num_stops} stops → {arrival_stop}
⛴️ Ferry ...
🚊 Light Rail / Tram ...
📍 Route 2 — {effective_total_min} min
{same leg format}
📍 Route 3 — {effective_total_min} min
{same leg format}
actionable: true is the one that determines when the user needs to leave. Call it out prominently: "Next bus in X min — leave now!" or "Next bus in X min — you have time."eta_source is "unavailable", show "ETA unavailable (scheduled: {departure_time})" instead of a real-time ETA.eta_source is "schedule", show the scheduled departure time without a real-time label.If the CLI returns error: true:
NO_TRANSIT_ROUTES: Tell the user no transit routes were found. Suggest trying a different departure time or considering a taxi.GOOGLE_API_ERROR: Tell the user there was an issue fetching routes. Suggest trying again.INVALID_INPUT: Tell the user what was wrong with their input.