anachb
Austrian public transport (VOR AnachB) for all of Austria. Query real-time departures, search…
Austrian rail travel planner (ÖBB Scotty). Use when planning train journeys in Austria, checking departures/arrivals at stations, or looking for service disruptions. Covers ÖBB trains, S-Bahn, regional trains, and connections to neighboring countries.
$ npx -y skills add mitsuhiko/agent-stuff --skill oebb-scotty --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/oebb-scottyContext preview
The summary Claude sees to decide when to auto-load this skill.
Austrian rail travel planner (ÖBB Scotty). Use when planning train journeys in Austria, checking departures/arrivals at stations, or looking for service disruptions. Covers ÖBB trains, S-Bahn, regional trains, and connections to neighboring countries.
name: oebb-scotty description: Austrian rail travel planner (ÖBB Scotty). Use when planning train journeys in Austria, checking departures/arrivals at stations, or looking for service disruptions. Covers ÖBB trains, S-Bahn, regional trains, and connections to neighboring countries.
Query Austria's public transport for trip planning, station departures, and service alerts via the HAFAS mgate API.
| Method | Purpose | |--------|---------| | `LocMatch` | Search for stations/stops by name | | `TripSearch` | Plan a journey between two locations | | `StationBoard` | Get departures/arrivals at a station | | `HimSearch` | Get service alerts and disruptions |
**Base URL:** `https://fahrplan.oebb.at/bin/mgate.exe`
---
All requests require these headers in the JSON body:
{
"id": "1",
"ver": "1.67",
"lang": "deu",
"auth": {"type": "AID", "aid": "OWDL4fE4ixNiPBBm"},
"client": {"id": "OEBB", "type": "WEB", "name": "webapp", "l": "vs_webapp"},
"formatted": false,
"svcReqL": [...]
}---
Search for stations, stops, addresses, or POIs by name.
curl -s -X POST "https://fahrplan.oebb.at/bin/mgate.exe" \
-H "Content-Type: application/json" \
-d '{
"id":"1","ver":"1.67","lang":"deu",
"auth":{"type":"AID","aid":"OWDL4fE4ixNiPBBm"},
"client":{"id":"OEBB","type":"WEB","name":"webapp","l":"vs_webapp"},
"formatted":false,
"svcReqL":[{
"req":{"input":{"field":"S","loc":{"name":"Wien Hbf","type":"ALL"},"maxLoc":10}},
"meth":"LocMatch"
}]
}'{
"svcResL": [{
"res": {
"match": {
"locL": [{
"lid": "A=1@O=Wien Hbf (U)@X=16377950@Y=48184986@U=181@L=1290401@",
"type": "S",
"name": "Wien Hbf (U)",
"extId": "1290401",
"crd": { "x": 16377950, "y": 48184986 },
"pCls": 6015
}]
}
}
}]
}| Type | Description | |------|-------------| | `S` | Station/Stop | | `A` | Address | | `P` | POI (Point of Interest) |
| Field | Description | |-------|-------------| | `lid` | Location ID string (use in TripSearch) | | `extId` | External station ID | | `name` | Station name | | `crd.x/y` | Coordinates (x=lon, y=lat, scaled by 10^6) | | `pCls` | Product class bitmask |
---
Plan a journey between two locations.
curl -s -X POST "https://fahrplan.oebb.at/bin/mgate.exe" \
-H "Content-Type: application/json" \
-d '{
"id":"1","ver":"1.67","lang":"deu",
"auth":{"type":"AID","aid":"OWDL4fE4ixNiPBBm"},
"client":{"id":"OEBB","type":"WEB","name":"webapp","l":"vs_webapp"},
"formatted":false,
"svcReqL":[{
"req":{
"depLocL":[{"lid":"A=1@O=Wien Hbf@L=8103000@","type":"S"}],
"arrLocL":[{"lid":"A=1@O=Salzburg Hbf@L=8100002@","type":"S"}],
"jnyFltrL":[{"type":"PROD","mode":"INC","value":"1023"}],
"getPolyline":false,
"getPasslist":true,
"outDate":"20260109",
"outTime":"080000",
"outFrwd":true,
"numF":5
},
"meth":"TripSearch"
}]
}'| Param | Description | |-------|-------------| | `depLocL` | Departure location(s) - use `lid` from LocMatch | | `arrLocL` | Arrival location(s) | | `outDate` | Departure date (YYYYMMDD) | | `outTime` | Departure time (HHMMSS) | | `outFrwd` | `true` = search forward, `false` = search backward | | `numF` | Number of connections to return | | `jnyFltrL` | Product filter (see below) | | `getPasslist` | Include intermediate stops |
| Bit | Value | Product | |-----|-------|---------| | 0 | 1 | ICE/RJX (High-speed) | | 1 | 2 | IC/EC (InterCity) | | 2 | 4 | NJ (Night trains) | | 3 | 8 | D/EN (Express) | | 4 | 16 | REX/R (Regional Express) | | 5 | 32 | S-Bahn | | 6 | 64 | Bus | | 7 | 128 | Ferry | | 8 | 256 | U-Bahn | | 9 | 512 | Tram |
Use `1023` for all products, or sum specific bits.
{
"svcResL": [{
"res": {
"outConL": [{
"date": "20260109",
"dur": "025200",
"chg": 0,
"dep": {
"dTimeS": "075700",
"dPltfS": {"txt": "8A-B"}
},
"arr": {
"aTimeS": "104900",
"aPltfS": {"txt": "7"}
},
"secL": [{
"type": "JNY",
"jny": {
"prodX": 0,
"dirTxt": "Salzburg Hbf",
"stopL": [...]
}
}]
}],
"common": {
"locL": [...],
"prodL": [...]
}
}
}]
}| Field | Description | |-------|-------------| | `dur` | Duration (HHMMSS) | | `chg` | Number of changes | | `dTimeS` | Scheduled departure | | `dTimeR` | Real-time departure (if available) | | `aTimeS` | Scheduled arrival | | `aTimeR` | Real-time arrival (if available) | | `dPltfS.txt` | Departure platform | | `aPltfS.txt` | Arrival platform | | `secL` | Journey sections (legs) | | `secL[].jny.prodX` | Index into `common.prodL[]` for train name |
**Important:** The `prodX` field in journey sections is an index into the `common.prodL[]` array, NOT the train name itself. To get the actual train name (e.g., "S7", "RJX 662"), you must look up `common.prodL[prodX].name`.
The raw TripSearch response is very verbose. Use this jq filter to extract a concise summary with resolved train names:
curl -s -X POST "https://fahrplan.oebb.at/bin/mgate.exe" \
-H "Content-Type: application/json" \
-d '{ ... }' | jq '
.svcResL[0].res as $r |
$r.common.prodL as $prods |
[$r.outConL[] | {
dep: .dep.dTimeS,
arr: .arr.aTimeS,
depPlatform: .dep.dPltfS.txt,
arrPlatform: .arr.aPltfS.txt,
dur: .dur,
chg: .chg,
legs:Armin's personal Pi Coding Agent package: reusable skills, extensions, prompt commands, themes, and a few supporting utilities that I use across projects. The package is published to npm as mitsupi.
Repo: mitsuhiko/agent-stuff
Austrian public transport (VOR AnachB) for all of Austria. Query real-time departures, search…
Search, read, and extract attachments from Apple Mail's local storage. Query emails by…
Transcribe local audio/video and Apple Voice Memos quickly with cached MLX Whisper models,…
Reverse engineer binaries using Ghidra's headless analyzer. Decompile executables, extract…
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for…