Linz Public Transport
/install linz-public-transport
Linz Public Transport
Use this skill to interact with Linz Linien EFA endpoints:
GET /efa/XML_STOPFINDER_REQUESTGET /efa/XML_DM_REQUEST
Read endpoint details in {baseDir}/references/endpoints.md before implementation.
Use {baseDir}/scripts/linz_transport.py as the default execution path.
Workflow
- Resolve the API base URL.
- Run the script subcommand that matches the task.
- Return a compact, user-facing summary.
Primary Tooling
- Script path:
{baseDir}/scripts/linz_transport.py - Runtime: Python 3, standard library only.
- Base URL input:
--base-url \x3Curl>argument, orLINZ_TRANSPORT_API_BASE_URLenvironment variable, or- default
http://www.linzag.at/linz2.
Preferred commands:
- Search stops:
python {baseDir}/scripts/linz_transport.py stops "taubenmarkt"
- Fetch departures by stop ID:
python {baseDir}/scripts/linz_transport.py departures --stop-id 60501160 --limit 10
- Resolve stop and fetch departures in one call:
python {baseDir}/scripts/linz_transport.py next "taubenmarkt" --limit 10 --pick-first
Step 1: Resolve Base URL
- Use user-provided base URL first.
- Otherwise use
LINZ_TRANSPORT_API_BASE_URLif available. - If neither exists, use
http://www.linzag.at/linz2.
Step 2: Present Output
- Sort by
countdownInMinutesascending if needed. - Show the next 5-10 departures unless user asks for more.
- Include both relative (
countdownInMinutes) and absolute (time) times. - Keep field names stable when returning JSON.
Error Handling
- If stop search returns empty list, suggest nearby spellings and retry with a shorter query token.
- If multiple stop matches are returned, rerun with explicit
--stop-idor usenext ... --pick-firstonly when ambiguity is acceptable. - If departures response is empty, state that no upcoming departures are currently available.
- If HTTP request fails, report status code, endpoint, and retry guidance.
- If EFA response includes a
messagecode, include that code in diagnostics.
Minimal Examples
python {baseDir}/scripts/linz_transport.py stops "taubenmarkt"
python {baseDir}/scripts/linz_transport.py departures --stop-id 60501160 --limit 10
python {baseDir}/scripts/linz_transport.py next "taubenmarkt" --limit 10 --pick-first
python "{baseDir}/scripts/linz_transport.py" stops "taubenmarkt"
python "{baseDir}/scripts/linz_transport.py" departures --stop-id 60501160 --limit 10
python "{baseDir}/scripts/linz_transport.py" next "taubenmarkt" --limit 10 --pick-first
- Make sure OpenClaw is installed (local or Docker)
- Run the install command in chat:
/install linz-public-transport - After installation, invoke the skill by name or use
/linz-public-transport - Provide required inputs per the skill's parameter spec and get structured output
What is Linz Public Transport?
Query Linz public transport stops for IDs and fetch live upcoming departures using Linz Linien EFA endpoints. It is an AI Agent Skill for Claude Code / OpenClaw, with 713 downloads so far.
How do I install Linz Public Transport?
Run "/install linz-public-transport" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.
Is Linz Public Transport free?
Yes, Linz Public Transport is completely free (open-source). You can download, install and use it at no cost.
Which platforms does Linz Public Transport support?
Linz Public Transport is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).
Who created Linz Public Transport?
It is built and maintained by fjrevoredo (@fjrevoredo); the current version is v1.0.1.