← 返回 Skills 市场
abhayjb

BusLah - Singapore Bus Arrivals

作者 Abhay Bhat · GitHub ↗ · v1.0.0
cross-platform ⚠ suspicious
378
总下载
0
收藏
0
当前安装
2
版本数
在 OpenClaw 中安装
/install buslah
功能描述
One-word trigger for next bus arrival to your destination
使用说明 (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>
安全使用建议
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.
功能分析
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.
能力评估
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.
如何使用
  1. 确保已安装 OpenClaw(本地或 Docker 部署)
  2. 在对话框中输入安装命令:/install buslah
  3. 安装完成后,直接呼叫该 Skill 的名称或使用 /buslah 触发
  4. 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
版本历史
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.
元数据
Slug buslah
版本 1.0.0
许可证
累计安装 0
当前安装数 0
历史版本数 2
常见问题

BusLah - Singapore Bus Arrivals 是什么?

One-word trigger for next bus arrival to your destination. 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 378 次。

如何安装 BusLah - Singapore Bus Arrivals?

在 OpenClaw 或 Claude Code 对话框中运行命令「/install buslah」即可一键安装,无需额外配置。

BusLah - Singapore Bus Arrivals 是免费的吗?

是的,BusLah - Singapore Bus Arrivals 完全免费(开源免费),可自由下载、安装和使用。

BusLah - Singapore Bus Arrivals 支持哪些平台?

BusLah - Singapore Bus Arrivals 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。

谁开发了 BusLah - Singapore Bus Arrivals?

由 Abhay Bhat(@abhayjb)开发并维护,当前版本 v1.0.0。

💬 留言讨论