Agent skill

Oebb Scotty

by mitsuhiko in mitsuhiko/agent-stuff

Austrian rail travel planner (ÖBB Scotty). An agent skill from mitsuhiko/agent-stuff.

Apache-2.0Auto-check passed

Install Oebb Scotty

skills CLI
$ npx skills add mitsuhiko/agent-stuff --skill oebb-scotty -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install mitsuhiko/agent-stuff oebb-scotty --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/mitsuhiko/agent-stuff.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/oebb-scotty .claude/skills/oebb-scotty && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
oebb-scotty
GitHub stars
3.2k
Token cost
~2.4k tokens
SKILL.md length
480 words
Files
6
Skills in repo
16
Repo updated
First seen
Licence
Apache-2.0

At a glance

Austrian rail travel planner (ÖBB Scotty). An agent skill from mitsuhiko/agent-stuff.

  • Works in 4 steps: Location Search (LocMatch) → Trip Search (TripSearch) → Station Board (StationBoard) → …
  • Planning train journeys in Austria
  • SKILL.md covers Quick Reference, Authentication, 1. Location Search (LocMatch) and 2. Trip Search (TripSearch), plus 6 more sections
  • Runs Shell scripts from its folder; calls curl and jq; reaches fahrplan.oebb.at

What it does

Oebb Scotty is an agent skill from mitsuhiko/agent-stuff. 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.

Its SKILL.md is about 2.4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 5 other files (for example `arrivals.sh`, `departures.sh` and `disruptions.sh`).

The repository describes itself as: These are commands I use with agents, mostly Claude. The licence is Apache-2.0.

When your agent uses it

  • Planning train journeys in Austria
  • Checking departures/arrivals at stations
  • Looking for service disruptions

Example prompts

  • “/oebb-scotty”

Requirements

  • A Bash shell

Workflow steps

4 steps, taken from the step headings in SKILL.md.

  1. Location Search (LocMatch)
  2. Trip Search (TripSearch)
  3. Station Board (StationBoard)
  4. Service Alerts (HimSearch)

What it can do on your machine

Read from SKILL.md and the folder at commit 0865c84. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships script files (Shell), which the agent can run.

    Shell commands in SKILL.md call:

    • curl
    • jq

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • fahrplan.oebb.at

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Oebb Scotty loads about 2.4k tokens when it runs. Until then it costs about 66 tokens; SKILL.md has 480 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~66
When it runs · the whole SKILL.md, loaded when a task matches
~2.4k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from mitsuhiko/agent-stuff at commit 0865c84, republished under its Apache-2.0 licence (© mitsuhiko). 480 words, ~2,438 tokens.

Download SKILL.mdSave it as .claude/skills/oebb-scotty/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.
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.

ÖBB Scotty API

Query Austria's public transport for trip planning, station departures, and service alerts via the HAFAS mgate API.

Quick Reference

MethodPurpose
LocMatchSearch for stations/stops by name
TripSearchPlan a journey between two locations
StationBoardGet departures/arrivals at a station
HimSearchGet service alerts and disruptions

Base URL: https://fahrplan.oebb.at/bin/mgate.exe


Authentication

All requests require these headers in the JSON body:

json
{
  "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": [...]
}

1. Location Search (LocMatch)

Search for stations, stops, addresses, or POIs by name.

Request
bash
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"
    }]
  }'
Response Structure
json
{
  "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
        }]
      }
    }
  }]
}
Location Types
TypeDescription
SStation/Stop
AAddress
PPOI (Point of Interest)
Key Fields
FieldDescription
lidLocation ID string (use in TripSearch)
extIdExternal station ID
nameStation name
crd.x/yCoordinates (x=lon, y=lat, scaled by 10^6)
pClsProduct class bitmask

2. Trip Search (TripSearch)

Plan a journey between two locations.

Request
bash
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"
    }]
  }'
Parameters
ParamDescription
depLocLDeparture location(s) - use lid from LocMatch
arrLocLArrival location(s)
outDateDeparture date (YYYYMMDD)
outTimeDeparture time (HHMMSS)
outFrwdtrue = search forward, false = search backward
numFNumber of connections to return
jnyFltrLProduct filter (see below)
getPasslistInclude intermediate stops
Product Filter Values
BitValueProduct
01ICE/RJX (High-speed)
12IC/EC (InterCity)
24NJ (Night trains)
38D/EN (Express)
416REX/R (Regional Express)
532S-Bahn
664Bus
7128Ferry
8256U-Bahn
9512Tram

Use 1023 for all products, or sum specific bits.

Response Structure
json
{
  "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": [...]
      }
    }
  }]
}
Key Connection Fields
FieldDescription
durDuration (HHMMSS)
chgNumber of changes
dTimeSScheduled departure
dTimeRReal-time departure (if available)
aTimeSScheduled arrival
aTimeRReal-time arrival (if available)
dPltfS.txtDeparture platform
aPltfS.txtArrival platform
secLJourney sections (legs)
secL[].jny.prodXIndex into common.prodL[] for train name
Show full SKILL.md (207 more words)Show less
Understanding prodX (Product Index)

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.

Extracting Trip Summaries with jq

The raw TripSearch response is very verbose. Use this jq filter to extract a concise summary with resolved train names:

bash
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: [.secL[] | select(.type == "JNY") | {
        train: $prods[.jny.prodX].name,
        dir: .jny.dirTxt,
        dep: .dep.dTimeS,
        arr: .arr.aTimeS,
        depPlatform: .dep.dPltfS.txt,
        arrPlatform: .arr.aPltfS.txt
      }]
    }]'

Example output:

json
[
  {
    "dep": "213900",
    "arr": "221100",
    "depPlatform": "1",
    "arrPlatform": "3A-B",
    "dur": "003200",
    "chg": 0,
    "legs": [{"train": "S 7", "dir": "Flughafen Wien Bahnhof", "dep": "213900", "arr": "221100", ...}]
  }
]

3. Station Board (StationBoard)

Get departures or arrivals at a station.

Request
bash
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":{
        "stbLoc":{"lid":"A=1@O=Wien Hbf@L=8103000@","type":"S"},
        "date":"20260109",
        "time":"080000",
        "type":"DEP",
        "maxJny":20
      },
      "meth":"StationBoard"
    }]
  }'
Parameters
ParamDescription
stbLocStation location
dateDate (YYYYMMDD)
timeTime (HHMMSS)
typeDEP (departures) or ARR (arrivals)
maxJnyMaximum number of journeys
Response Structure
json
{
  "svcResL": [{
    "res": {
      "jnyL": [{
        "prodX": 0,
        "dirTxt": "Salzburg Hbf",
        "stbStop": {
          "dTimeS": "080000",
          "dPltfS": {"txt": "8A-B"}
        }
      }],
      "common": {
        "prodL": [{
          "name": "RJX 662",
          "cls": 1,
          "prodCtx": {"catOutL": "Railjet Xpress"}
        }]
      }
    }
  }]
}

4. Service Alerts (HimSearch)

Get current disruptions and service information.

Request
bash
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":{
        "himFltrL":[{"type":"PROD","mode":"INC","value":"255"}],
        "maxNum":20
      },
      "meth":"HimSearch"
    }]
  }'
Response Structure
json
{
  "svcResL": [{
    "res": {
      "msgL": [{
        "hid": "HIM_FREETEXT_843858",
        "head": "Verringertes Sitzplatzangebot",
        "text": "Wegen einer technischen Störung...",
        "prio": 0,
        "sDate": "20260108",
        "eDate": "20260108"
      }]
    }
  }]
}

Common Station IDs

StationextId
Wien Hbf8103000
Wien Meidling8100514
Wien Westbahnhof8101003
Salzburg Hbf8100002
Linz Hbf8100013
Graz Hbf8100173
Innsbruck Hbf8100108
Klagenfurt Hbf8100085
St. Pölten Hbf8100008
Wr. Neustadt Hbf8100516

Time Format

  • Dates: YYYYMMDD (e.g., 20260109)
  • Times: HHMMSS (e.g., 080000 = 08:00:00)
  • Duration: HHMMSS (e.g., 025200 = 2h 52m)

Error Handling

Check err field in response:

json
{
  "err": "OK",           // Success
  "err": "PARSE",        // Invalid request format
  "err": "NO_MATCH",     // No results found
  "errTxt": "..."        // Error details
}

Product Classes (cls values)

clsProduct
1ICE/RJX
2IC/EC
4Night trains
8NJ/EN
16REX/Regional
32S-Bahn
64Bus
128Ferry
256U-Bahn
512Tram
1024On-demand
2048Other

© mitsuhiko, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 5 other files in skills/oebb-scotty of mitsuhiko/agent-stuff.

  • SKILL.md
  • arrivals.sh
  • departures.sh
  • disruptions.sh
  • search-station.sh
  • trip.sh

Open the folder on GitHubat commit 0865c84

Compare with similar skills

Oebb Scotty next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Oebb Scotty compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Oebb Scotty this skillmitsuhiko/agent-stuff3.2k—~2.4kAutomated safety check: PassApache-2.0
Travel Plannersickn33/agentic-awesome-skills47k1 repos~2kAutomated safety check: PassMIT
Plannerpenpot/penpot61k—~2.7kAutomated safety check: PassMPL-2.0
Rails Patternsaffaan-m/ECC276k—~4.1kAutomated safety check: PassMIT
Accessible Travel Plannermohitagw15856/pm-claude-skills1.4k—~257Automated safety check: PassMIT
Agent Plannerruvnet/ruflo74k2 repos~1.2kAutomated safety check: PassMIT

Similar skills

  • Travel Planner

    sickn33/agentic-awesome-skills

    旅行/行程规划需求时使用:规划去某地旅行、X天X城、带老人孩子、自驾、假期安排等。产出逐日行程表、预算估算(经济/舒适/奢华三档)、交通住宿建议、景点美食清单。必须先问预算,预算未确认只输出问题清单;事实数据带来源和查询日期。

    47k GitHub starsUsed in 1 repo~2k tokens
    Auto-check passed
  • Planner

    penpot/penpot

    Read-only planning and architecture analysis — produce a structured implementation plan with task breakdown, acceptance criteria, sizing, and checkpoints.

    61k GitHub stars~2.7k tokensUpdated today
    Agent WorkflowsAuto-check passed
  • Rails Patterns

    affaan-m/ECC

    Ruby on Rails framework patterns for Rails 7.1+ and 8.x apps.

    276k GitHub stars~4.1k tokensUpdated today
    Backend & APIsAuto-check passed
  • Accessible Travel Planner

    mohitagw15856/pm-claude-skills

    Summarise what Accessible Travel Planner does in one line. An agent skill from mohitagw15856/pm-claude-skills.

    1.4k GitHub stars~257 tokensUpdated yesterday
    Frontend & DesignAuto-check passed
  • Agent Planner

    ruvnet/ruflo

    Agent skill for planner - invoke with $agent-planner. An agent skill from ruvnet/ruflo.

    74k GitHub starsUsed in 2 repos~1.2k tokens
    Agent WorkflowsAuto-check passed
  • Travel Planner

    ailabs-393/ai-labs-claude-skills

    This skill should be used whenever users need help planning trips, creating travel itineraries, managing travel budgets, or seeking destination advice.

    455 GitHub stars~3.7k tokensUpdated 11 mo ago
    Auto-check passed

More from mitsuhiko/agent-stuff

All 16 skills in this repo
  • Anachb

    mitsuhiko/agent-stuff

    Austrian public transport (VOR AnachB) for all of Austria. An agent skill from mitsuhiko/agent-stuff.

    3.2k GitHub starsUsed in 2 repos~1.2k tokens
    Auto-check passed
  • Librarian

    mitsuhiko/agent-stuff

    Cache and refresh remote git repositories under ~/.cache/checkouts/<host/<org/<repo so future references can reuse a local copy.

    3.2k GitHub starsUsed in 1 repo~519 tokens
    Auto-check passed
  • Web Browser

    mitsuhiko/agent-stuff

    Automate and interact with web pages through Chrome or Chromium using the Chrome DevTools Protocol (CDP): navigate, click, fill forms, inspect content, take screenshots, and debug console or network…

    3.2k GitHub stars~1.5k tokensUpdated 12 days ago
    Auto-check: warnings
  • Google Workspace

    mitsuhiko/agent-stuff

    Access Google Workspace APIs (Drive, Docs, Calendar, Gmail, Sheets, Slides, Chat, People) via local helper scripts without MCP.

    3.2k GitHub stars~919 tokensUpdated 12 days ago
    Auto-check passed
  • Sentry

    mitsuhiko/agent-stuff

    Fetch and analyze Sentry issues, events, transactions, and logs.

    3.2k GitHub stars~1.8k tokensUpdated 12 days ago
    Auto-check passed
  • Tmux

    mitsuhiko/agent-stuff

    Remote control tmux sessions for interactive CLIs (python, gdb, etc.) by sending keystrokes and scraping pane output.

    3.2k GitHub stars~1.4k tokensUpdated 12 days ago
    Auto-check passed

Questions about Oebb Scotty

What does Oebb Scotty do?

Austrian rail travel planner (ÖBB Scotty). An agent skill from mitsuhiko/agent-stuff. Oebb Scotty is an agent skill from mitsuhiko/agent-stuff. Austrian rail travel planner (ÖBB Scotty).

When should I use Oebb Scotty?

Oebb Scotty fits situations like: planning train journeys in Austria; checking departures/arrivals at stations; looking for service disruptions.

How do I install Oebb Scotty in Claude Code?

Run `npx skills add mitsuhiko/agent-stuff --skill oebb-scotty -a claude-code`. Or copy the skill folder (skills/oebb-scotty in mitsuhiko/agent-stuff) into .claude/skills/oebb-scotty in your project. Claude Code loads it when a task matches its description.

How do I install Oebb Scotty in Codex?

Run `npx skills add mitsuhiko/agent-stuff --skill oebb-scotty -a codex`. Or copy the skill folder (skills/oebb-scotty in mitsuhiko/agent-stuff) into .agents/skills/oebb-scotty in your project. Codex loads it when a task matches its description.

Can I use Oebb Scotty in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add mitsuhiko/agent-stuff --skill oebb-scotty -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/oebb-scotty, .gemini/skills/oebb-scotty, .github/skills/oebb-scotty and .opencode/skills/oebb-scotty in your project.

What does Oebb Scotty need to run?

Going by SKILL.md and its folder, Oebb Scotty needs a shell for the scripts in its folder and the command-line tools its instructions call (curl and jq). Our summary lists: A Bash shell.

Does Oebb Scotty access the network?

SKILL.md names 1 domain. In commands or code: fahrplan.oebb.at; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.

Is Oebb Scotty safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Oebb Scotty use?

Oebb Scotty is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Oebb Scotty use?

About 2.4k tokens (SKILL.md is roughly 9.8k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Oebb Scotty?

Skills that share tags, products or a category with Oebb Scotty: Travel Planner (sickn33/agentic-awesome-skills, 47k stars), Planner (penpot/penpot, 61k stars), Rails Patterns (affaan-m/ECC, 276k stars) and Accessible Travel Planner (mohitagw15856/pm-claude-skills, 1.4k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Oebb Scotty?

mitsuhiko (a GitHub user) maintains it in mitsuhiko/agent-stuff, which has 3,181 GitHub stars. The repository holds 16 skills in this directory. The repository was last updated on September 27, 2026.

Source: mitsuhiko/agent-stuff on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.