← Back to Skills Marketplace
abhayjb

BusLah - Singapore Bus Arrivals

by Abhay Bhat · GitHub ↗ · v1.0.0
cross-platform ⚠ suspicious
378
Downloads
0
Stars
0
Active Installs
2
Versions
Install in OpenClaw
/install buslah
Description
One-word trigger for next bus arrival to your destination
README (SKILL.md)

ArriveLah - Singapore Bus Arrivals

Natural language bus lookup for Singapore.

Trigger Format

bus from \x3Csource location> to \x3Cdestination location>

Examples:

  • "bus from Silat Road Sikh Temple to Queens condo"
  • "bus from Tanjong Pagar MRT to VivoCity"
  • "bus from my office to home"

Step-by-Step Workflow

Step 1: Geocode source location

Use web_fetch to resolve the source location to coordinates via OneMap API:

https://www.onemap.gov.sg/api/common/elastic/search?searchVal=\x3Csource>&returnGeom=Y&getAddrDetails=Y&pageNum=1

Extract LATITUDE and LONGITUDE from the first result.

Step 2: Find nearest bus stops to source

Fetch the full Singapore bus stop list and find stops closest to source coordinates:

https://busrouter.sg/data/2/bus-stops.json

This returns a JSON object where each key is a bus stop code, with fields: description, road, lat, lng.

Compute distance using: sqrt((lat2-lat1)^2 + (lng2-lng1)^2) (approximate is fine for short distances). Pick the 3 nearest stops within ~300m.

Step 3: Geocode destination location

Same as Step 1 for the destination. Extract its coordinates.

Step 4: Find which buses go from source stops toward destination

For each of the 3 nearest source stops, fetch arrivals:

https://arrivelah2.busrouter.sg/?id=\x3Cstop_code>

Then for each bus service at those stops, check if it passes near the destination using:

https://busrouter.sg/data/2/routes.json

This maps bus service numbers to arrays of stop codes in order. Cross-reference with bus-stops.json to get coordinates of each stop on the route, and check if any stop is within ~400m of the destination coordinates.

Keep only buses that:

  1. Have the source stop before the destination stop in their route (correct direction)
  2. Pass within ~400m of the destination

Step 5: Fetch live arrival times

For each matching bus at the source stop, get from the arrivelah2 response:

  • next.duration_ms → minutes until next bus
  • subsequent.duration_ms → minutes until bus after that
  • next.load → seat availability: SEA = Seats Available, SDA = Standing Available, LSD = Limited Standing
  • next.featureWAB = Wheelchair accessible
  • next.typeDD = Double decker, SD = Single deck, BD = Bendy

Step 6: Format and return

🚌 Buses from [Source Stop Name] → [Destination]

Bus [XX]
  ⏰ Next: X min | Then: Y min
  💺 [Seats Available / Standing / Limited Standing]
  🚌 [Double Decker / Single Deck]

Bus [YY]
  ⏰ Next: X min | Then: Y min
  💺 [Seats Available / Standing / Limited Standing]

📍 Stop: [Stop Description], [Road Name] (Stop code: XXXXX)

If no direct bus found, say so and suggest nearest MRT or alternative.

Load Code Reference

  • SEA = Seats Available 🟢
  • SDA = Standing Available 🟡
  • LSD = Limited Standing 🔴

Bus Type Reference

  • DD = Double Decker
  • SD = Single Deck
  • BD = Bendy Bus
  • WAB = Wheelchair Accessible Bus

API Endpoints (no auth needed)

  • OneMap geocode: https://www.onemap.gov.sg/api/common/elastic/search
  • Bus stops: https://busrouter.sg/data/2/bus-stops.json
  • Routes: https://busrouter.sg/data/2/routes.json
  • Live arrivals: https://arrivelah2.busrouter.sg/?id=\x3Cstop_code>
Usage Guidance
This skill's documentation promises a full natural-language bus-route lookup (geocoding, route direction checks, nearest stops), but the bundled script only looks up a single configured stop/service from arrivelah2 using the included config.json. If you expected the full 'bus from <source> to <destination>' behavior, this package will not deliver it. Practical checks before installing: 1) Confirm the source/author (SKILL.md references a GitHub repo but registry 'source' is unknown). 2) If you plan to run the shipped script, ensure curl and jq are installed. 3) Inspect or edit config.json to avoid accidental queries for a stop/service you don't intend. 4) If you want the full NL/geocoding features, ask the author for the implementation or a corrected skill — the current mismatch could be sloppy packaging or an incomplete submission. There are no requested secrets and the endpoints used are public, so immediate data-exfiltration risk is low, but the functional mismatch is a real concern.
Capability Analysis
Type: OpenClaw Skill Name: buslah Version: 1.0.0 The skill bundle is benign. It provides Singapore bus arrival information using public APIs. The `SKILL.md` provides clear, non-malicious instructions for the AI agent, outlining steps to geocode locations and fetch bus data. The `bus-arrival.sh` script uses `curl` to query a legitimate bus data API (`https://arrivelah2.busrouter.sg`), but all parameters for the `curl` command are derived from the `config.json` file, not from user input, thus preventing direct shell injection. There is no evidence of data exfiltration, malicious execution, persistence mechanisms, or prompt injection designed to harm the agent or system.
Capability Assessment
Purpose & Capability
SKILL.md describes a multi-step natural-language flow (geocoding via OneMap, scanning routes.json, choosing nearest stops, direction checks, etc.). The included bus-arrival.sh, however, only reads config.json and queries a single default stop/service from arrivelah2. That means the shipped code does not implement the claimed functionality. Additionally, SKILL.md metadata mentions 'curl' while the registry metadata listed no required binaries; the script actually requires both curl and jq but jq is not declared.
Instruction Scope
The instructions themselves (use public OneMap and busrouter endpoints, compute distances, fetch arrivals) stay within the stated purpose and reference only public APIs. They do not instruct reading unrelated system files or exfiltrating secrets. The problem is they describe behavior not implemented in the bundled script, so runtime behavior may differ from the documentation.
Install Mechanism
There is no install spec (instruction-only skill with a bundled script), so nothing is downloaded or installed automatically. This is low-risk from an install-mechanism perspective.
Credentials
The skill requests no environment variables or credentials (appropriate). However, the script requires command-line tools: curl (mentioned in SKILL.md metadata) and jq (used by the script) — jq is not declared in the metadata. No secrets or unrelated credentials are requested.
Persistence & Privilege
The skill is not always-enabled and is user-invocable only. It does not request elevated privileges, does not modify other skills' configs, and does not persist beyond its included files.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install buslah
  3. After installation, invoke the skill by name or use /buslah
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v1.0.0
Natural language Singapore bus lookup. Say 'bus from X to Y' — geocodes both ends via OneMap, finds nearest stop, cross-checks routes for direction, returns live arrivals with seat availability.
v0.0.1
- Initial release: quickly get the next Singapore bus arrival time with a single command. - Simple setup—configure your default stop, service, and destination in config.json. - Uses Arrivelah2 API, no API key needed. - Example output includes bus number, destination, arrival time, and stop location.
Metadata
Slug buslah
Version 1.0.0
License
All-time Installs 0
Active Installs 0
Total Versions 2
Frequently Asked Questions

What is BusLah - Singapore Bus Arrivals?

One-word trigger for next bus arrival to your destination. It is an AI Agent Skill for Claude Code / OpenClaw, with 378 downloads so far.

How do I install BusLah - Singapore Bus Arrivals?

Run "/install buslah" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.

Is BusLah - Singapore Bus Arrivals free?

Yes, BusLah - Singapore Bus Arrivals is completely free (open-source). You can download, install and use it at no cost.

Which platforms does BusLah - Singapore Bus Arrivals support?

BusLah - Singapore Bus Arrivals is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).

Who created BusLah - Singapore Bus Arrivals?

It is built and maintained by Abhay Bhat (@abhayjb); the current version is v1.0.0.

💬 Comments