技能详情(站内镜像,无评论)
作者:Abhay Bhat @abhayjb
许可证:MIT-0
MIT-0 ·免费使用、修改和重新分发。无需归因。
版本:v1.0.0
统计:⭐ 0 · 243 · 0 current installs · 0 all-time installs
⭐ 0
安装量(当前) 0
🛡 VirusTotal :良性 · OpenClaw :可疑
Package:abhayjb/buslah
安全扫描(ClawHub)
- VirusTotal :良性
- OpenClaw :可疑
OpenClaw 评估
The skill's documentation describes a full natural-language geocoding + route-checking bus lookup, but the included code is a much smaller helper that only queries a single configured stop/service — the pieces are inconsistent.
目的
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 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.
安装机制
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.
证书
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.
持久
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.
安装(复制给龙虾 AI)
将下方整段复制到龙虾中文库对话中,由龙虾按 SKILL.md 完成安装。
请把本段交给龙虾中文库(龙虾 AI)执行:为本机安装 OpenClaw 技能「BusLah - Singapore Bus Arrivals」。简介:One-word trigger for next bus arrival to your destination。
请 fetch 以下地址读取 SKILL.md 并按文档完成安装:https://raw.githubusercontent.com/openclaw/skills/refs/heads/main/skills/abhayjb/buslah/SKILL.md
(来源:yingzhi8.cn 技能库)
SKILL.md
---
name: arrivelah
description: Get Singapore bus arrivals from a source location to a destination. Trigger: "bus from <source> to <destination>"
homepage: https://github.com/abhay/arrivelah
metadata: {"openclaw":{"emoji":"🚌","requires":{"bins":["curl"]},"tags":["singapore","transport","bus","sg"]}}
---
# ArriveLah - Singapore Bus Arrivals
Natural language bus lookup for Singapore.
## Trigger Format
```
bus from <source location> to <destination 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=<source>&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=<stop_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.feature` → `WAB` = Wheelchair accessible
- `next.type` → `DD` = 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=<stop_code>`