gabrielAHN/gtfs-tools

Importieren Sie GTFS-Fahrpläne, fragen Sie Stations-/Haltestellen-/Weg-/Routen-/Fahrten-/Kalender-/Formdaten ab, bearbeiten Sie Verbindungen, Knoten, Routen, Fahrten und Haltestellenzeiten, exportieren Sie Änderungen in GTFS-CSV und öffnen Sie ein lokales Browser-Dashboard mit der gtfs-tools CLI. Verwenden Sie dies bei der Arbeit mit GTFS-Daten, Transitstationen, Wegen, Routen, Fahrten, Fahrplänen oder Zugänglichkeitsprüfungen.

Was ist gtfs-tools?

Dieses Skill für KI-Agenten (wie Claude Code, Cursor, Codex) bietet eine leistungsstarke Kommandozeilenschnittstelle (CLI) zur Arbeit mit GTFS-Daten (General Transit Feed Specification). Es ermöglicht das Importieren von GTFS-Feeds aus lokalen Dateien, URLs, S3- oder R2-Buckets, das umfassende Abfragen von Transitdaten (Stationen, Haltestellen, Routen, Fahrten, Kalender, Formen) sowie deren Bearbeitung. Sie können Verbindungen und Knoten in Stationen verwalten, Fahrten umleiten, Fahrpläne ändern und Änderungen als GTFS-CSV exportieren. Ein Dashboard wird im Browser geöffnet, um Daten visuell zu erkunden. Das Skill ist besonders nützlich für Entwickler und Datenanalysten, die mit öffentlichen Verkehrsdaten arbeiten, Zugänglichkeitsprüfungen durchführen oder Fahrplanänderungen vornehmen müssen. Es basiert auf Node.js und kann global installiert werden, unterstützt mehrere KI-Anbieter (OpenAI, Anthropic, Google) und enthält umfangreiche Referenzen für SQL-Abfragen, Befehle und das GTFS-Schema.

Funktioniert mit✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/gabrielAHN/gtfs-tools/tree/HEAD/skills/gtfs-tools

Installed? Explore more Produktivität & Zusammenarbeit skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

GTFS Tools CLI

Importieren Sie GTFS-Feeds, fragen Sie Transitdaten ab, durchsuchen Sie Routen/Fahrten/Kalender/Formen, vergleichen Sie Fahrpläne, bearbeiten Sie Stationen/Wege/Routen/Fahrten/Haltestellenzeiten, exportieren Sie Änderungen oder öffnen Sie das lokale Dashboard.

Referenzdateien

Lesen Sie diese, wenn Sie genaue Spaltennamen, SQL-Syntax oder Flag-Details benötigen:

Installieren

Installieren Sie die CLI global und registrieren Sie das Skill:

npm install -g @gabrielahn/gtfs-tools
gtfs-tools install-skill openai

Oder installieren Sie nur das Skill über npx:

npx skills add gabrielAHN/gtfs-tools

Verwenden Sie anthropic, openai, google oder generic für den KI-Anbieter. Führen Sie gtfs-tools install-skill --list-providers aus, um die aufgelösten Installationspfade zu sehen. --provider <name> entspricht dem positionellen Anbieternamen, und --target-dir <dir> überschreibt den Standard. Die nicht-interaktive Nutzung erfordert dennoch einen Anbieter, wenn --target-dir gesetzt ist. Ein älteres gtfs-viz-Skill-Verzeichnis daneben bleibt erhalten und wird als veraltet gemeldet; entfernen Sie es selbst, sobald dieses Skill installiert ist.

Verwenden Sie gtfs-tools h für allgemeine Hilfe oder gtfs-tools h <command> für die gleiche befehlsspezifische Hilfe wie gtfs-tools help <command> und gtfs-tools <command> -h.

Zeigen Sie die installierte CLI an oder aktualisieren Sie sie:

gtfs-tools --version
gtfs-tools update --check
gtfs-tools update
gtfs-tools update --provider openai

update bewahrt den importierten Datensatz und die Sitzung. Fügen Sie --provider hinzu, um das installierte Skill für diesen Anbieter nach dem CLI-Update zu aktualisieren.

Aus einem Checkout von gabrielAHN/gtfs-tools:

npm ci
npm run build
npm install -g .

Schnellstart

gtfs-tools import /pfad/zu/feed.zip
gtfs-tools status
gtfs-tools stations
gtfs-tools station "Park Street"
gtfs-tools station_pathways "Park Street" --data

Importieren

gtfs-tools import /absoluter/pfad/zu/feed.zip
gtfs-tools import https://example.com/gtfs/feed.zip
gtfs-tools import s3://my-bucket/gtfs/feed.zip      # auch s3a://, s3n://
gtfs-tools import r2://my-bucket/gtfs/feed.zip

Verwenden Sie einfache oder in Anführungszeichen gesetzte Pfade oder URLs. Verwenden Sie keine Backticks. Der Import ist einmalig; ein neuer Import ersetzt den aktuellen Datensatz. Daten werden unter ~/.gtfs-viz-cli/current gespeichert. Datensätze laufen automatisch nach 7 Tagen ab.

Remote-Feeds werden zunächst nach ~/.gtfs-viz-cli/downloads/ heruntergeladen, müssen ein Zip-Archiv sein und werden nach dem Import gelöscht. Download- und Validierungsfehler (kein Zip, keine stops.txt) lassen den aktuellen Datensatz unberührt; ein Fehler während des DuckDB-Imports selbst löscht ihn dennoch, wie bei lokalen Dateien. Abfragezeichenfolgen (pre-signed URLs) werden für den Download verwendet, aber niemals gespeichert oder ausgegeben. URLs mit eingebettetem Benutzernamen oder Passwort werden abgelehnt, und andere Schemata (gs://, az://, hf://, …) werden nicht unterstützt. Ein nicht kodiertes @ in einem http(s)-URL-Pfad wird ebenfalls abgelehnt: Kodieren Sie es als %40, und setzen Sie niemals Anmeldeinformationen in eine URL.

s3://- und r2://-Objekte authentifizieren sich über DuckDB-Secrets: zuerst ein passendes Secret (einschließlich persistenter Secrets, z.B. duckdb -c "CREATE PERSISTENT SECRET (TYPE s3, KEY_ID '…', SECRET '…', REGION 'us-east-1')"); dann, für s3://, AWS-Umgebungsvariablen, ein AWS-Profil oder SSO über ein temporäres credential_chain-Secret; danach eine anonyme Anfrage. r2:// benötigt CREATE PERSISTENT SECRET (TYPE r2, KEY_ID '…', SECRET '…', ACCOUNT_ID '…'). MinIO und andere S3-kompatible Speicher verwenden ein s3-Secret mit ENDPOINT, URL_STYLE 'path' und USE_SSL. Fragen Sie den Benutzer niemals, Geheimniswerte in einen von Ihnen ausgeführten Befehl einzufügen; bitten Sie ihn, das Geheimnis selbst zu erstellen.

Durchsuchen & Filtern

Filtern Sie Stationen oder Haltestellen direkt in der CLI:

gtfs-tools stations                                # Alle Stationen
gtfs-tools stations --name "Park"                  # Name enthält "Park"
gtfs-tools stations --pathways "no"                # Keine Wege
gtfs-tools stations --wheelchair "accessible"      # Barrierefrei
gtfs-tools stations --station-id place-pktrm       # Exakte ID
gtfs-tools stations --name "Park" --pathways "yes" # Kombiniert

gtfs-tools stops                                   # Alle eigenständigen Haltestellen
gtfs-tools stops --name "Albany"                   # Name enthält "Albany"
gtfs-tools stops --location-type "Stop"            # Nach Typ
gtfs-tools stops --wheelchair "unknown"            # Nach Rollstuhlstatus
gtfs-tools trips                                   # Fahrtenansicht öffnen
gtfs-tools trips --route R1 --data                 # Fahrten für eine Route
gtfs-tools trip trip-123 --data                    # Haltestellenzeiten für eine Fahrt
gtfs-tools trip trip-123 --view timeline           # Zeitleistenansicht öffnen
gtfs-tools trip trip-123 --compare trip-456        # Zwei Fahrten vergleichen

gtfs-tools calendar --data                         # Alle Dienste auflisten
gtfs-tools calendar SAT-1 --data                   # Kalender für einen Dienst

gtfs-tools shapes --data                           # Alle Formen auflisten
gtfs-tools shapes shape-123 --data                 # Punkte für eine Form

Fügen Sie --format json für JSON-Ausgabe hinzu.

Dashboard

Befehle öffnen standardmäßig das Dashboard. Fügen Sie --data hinzu, um Zeilen stattdessen auszugeben.

gtfs-tools station "Park Street"                    # Öffnet Stationsinfo
gtfs-tools station "Park Street" --data             # Gibt Zeilen aus
gtfs-tools stop-info "Trade Center"                 # Öffnet Haltestellenkarte mit Popup + Zoom
gtfs-tools station_connections "Park Street"         # Öffnet Flussdiagramm
gtfs-tools station_pathways place-pktrm --node-id node-pktrm-stair7-gl
gtfs-tools view --view stations/map --map-focus 42.355,-71.06,12
gtfs-tools view --view export --url-only

Geben Sie die Dashboard-URL an den Benutzer zurück.

Stationssuche

gtfs-tools station "Park Street"
gtfs-tools station --id place-pktrm --data
gtfs-tools station --id place-pktrm --format json

Verwenden Sie --station-id oder --station-name, wenn der Werttyp bekannt ist. Verwenden Sie --selected-station oder das positionelle Argument, wenn es beides sein könnte.

Wege & Verbindungen

gtfs-tools station_connections "Park Street" --data
gtfs-tools station_pathways "Park Street" --data
gtfs-tools station_pathways place-pktrm --node-id node-pktrm-stair7-gl --data

--node-id zielt auf Bahnsteige, Ausgänge/Eingänge oder Wegknoten innerhalb einer Station.

Wenn Sie nach fehlenden Stationskomponenten oder unterbrochener interner Konnektivität suchen, verwenden Sie nur Stationskomponenten- und Netzwerkfunktionen. Beginnen Sie mit get_station_stops(station_id), überprüfen Sie dann get_station_pathways(station_id), get_station_routes(station_id), find_shortest_path oder find_reachable_stops. Prüfen Sie die interne Konnektivität einer Station nicht von StopsTable aus, da diese Tabelle für eigenständige Haltestellen ist. Siehe references/gtfs-schedule-reference.md.

Routen & Service

gtfs-tools routes                                   # Alle Routen auflisten
gtfs-tools routes --type Bus                        # Nach Typ filtern
gtfs-tools routes --route-name "Metro"              # Nach Name filtern
gtfs-tools routes --route-id ROUTE_ID               # Nach ID filtern
gtfs-tools route "Line 1"                           # Routeninfo öffnen
gtfs-tools route --route-id ROUTE_ID --data         # Routendaten ausgeben
gtfs-tools route "Line 1" --view service            # Serviceansicht öffnen

Fahrten & Haltestellenzeiten

gtfs-tools trips --data                             # Alle Fahrten auflisten
gtfs-tools trips --route R1 --data                  # Fahrten für eine Route
gtfs-tools trip trip-123 --data                     # Haltestellenzeiten mit Haltestellennamen
gtfs-tools trip trip-123 --data --view info          # Fahrtenmetadaten
gtfs-tools trip trip-123 --view timeline             # Zeitleistenansicht öffnen
gtfs-tools trip trip-123 --view map                  # Kartenansicht öffnen
gtfs-tools trip trip-123 --compare trip-456 --data   # Haltestellenzeiten vergleichen
gtfs-tools trip trip-123 --compare trip-456,trip-789 --view map # 3 Fahrten auf Karte vergleichen
gtfs-tools trips --compare trip-1,trip-2,trip-3      # Fahrten im Dashboard vergleichen

Ansichten: timetable (Standard), timeline (Zeitdiagramm), map (Ort), info (Metadaten mit --data).

Kalender & Formen

gtfs-tools calendar --data                          # Dienste mit Fahrtenanzahl auflisten
gtfs-tools calendar --route R1 --data               # Dienste für eine Route
gtfs-tools calendar SAT-1 --data                    # Kalender + Daten für einen Dienst
gtfs-tools shapes --data                            # Formen mit Punktanzahl auflisten
gtfs-tools shapes --route R1 --data                 # Formen für eine Route
gtfs-tools shapes shape-123 --data                  # Punkte für eine Form

Routenlinienbänder

gtfs-tools route-bands                              # Parallele Routenlinienbänder erstellen (Separate Route(s))
gtfs-tools route-bands --data                       # band_rows, routes, widest_bundle ausgeben
gtfs-tools route-bands --status --data              # Vorhandene Bandanzahl melden, ohne neu zu erstellen

Erstellt RouteShapeBandsTable allein aus den GTFS-shapes: Routen, die sich einen Korridor teilen, werden auf eine Mittellinie konvergiert und mit seitlichen Spuren versehen, damit die Separate-Route(s)-Ansicht des Dashboards sie als parallele Bänder zeichnet. Verwenden Sie dies anstelle von query, um die Korridor-Makros auszuführen – sie benötigen eine beschreibbare räumliche Sitzung.

Stationsrouten & Pfadfindung

gtfs-tools station_routes "South Station" --data
gtfs-tools station_routes "South Station" --data --time-interval 60
gtfs-tools station_routes "South Station" --data --connection-type "Exit/Entrance"
gtfs-tools station_routes "South Station" --data --node-id door-sstat-dewey
gtfs-tools station_shortest_route "South Station" --data

station_shortest_route findet die schnellste Eingang-zu-Ausgang-Route nach Zeit.

Datenbearbeitung (Verbindungen)

gtfs-tools add_connection --from NODE_A --to NODE_B --traversal-time 45
gtfs-tools add_connection --from NODE_A --to NODE_B --bidirectional --pathway-mode 2 --stair-count 12
gtfs-tools update_connection --pathway-id PATHWAY_ID --traversal-time 60
gtfs-tools delete_connection --pathway-id PATHWAY_ID

Wegmodi: 1=Gehweg, 2=Treppen, 3=Rollsteig, 4=Rolltreppe, 5=Aufzug, 6=Tarifschranke, 7=Ausgangsschranke.

Finden Sie zuerst Weg-IDs:

gtfs-tools station_pathways "Park Street" --data
gtfs-tools query --sql "SELECT pathway_id, from_stop_id, to_stop_id, traversal_time FROM PathwaysView WHERE from_stop_id LIKE '%pktrm%'"

Datenbearbeitung (Knoten)

gtfs-tools add_node --stop-id NEW_ID --lat 42.35 --lon -71.06 --parent-station place-pktrm
gtfs-tools add_node --stop-id door-new --stop-name "Neuer Eingang" --lat 42.35 --lon -71.06 --location-type "Exit/Entrance" --parent-station place-pktrm
gtfs-tools update_node --stop-id NODE_ID --stop-name "Hauptlobby"
gtfs-tools delete_node --stop-id NODE_ID

Standorttypen: Station, Stop, Exit/Entrance, Generic Node, Boarding Area.

Finden Sie zuerst Haltestellen-IDs:

gtfs-tools query --name station-stops --args-json '{"stationId":"place-pktrm"}' --data

Fahrten, Fahrpläne & Service bearbeiten

Wenden Sie Serviceänderungen (z.B. von einer Alarmseite) auf den importierten Feed an. Die CLI liest keine Alarme – Sie übersetzen die Änderung in Bearbeitungen. Siehe references/edits.md für das vollständige Changeset-Format, den Lesen → Prüfen → Bestätigen → Implementieren → Überprüfen-Workflow und das Alarmvalidierungs- Berichtsformat (In-Daten-Status + Alarmbeschreibung + Quelllink + ein klickbarer, CLI-validierter Dashboard-Link). Es behandelt auch das Umleiten einer Fahrt auf eine andere Linie (z.B. "A/C fährt via F") mit gtfs-tools reroute – das die Haltestellen der Spenderroute mit skalierter Taktung einfügt, anstatt nur Haltestellen auszulassen – und das Anzeigen mit gtfs-tools trip <id> --compare <spender_fahrt> --view map.

gtfs-tools add_trip --trip-id T2 --route-id R1 --service-id WKD --headsign "Uptown Express" --direction-id 0
gtfs-tools update_trip --trip-id T2 --headsign "Express"        # nur angegebene Felder ändern
gtfs-tools delete_trip --trip-id T2                             # kaskadiert zu stop_times

gtfs-tools set_stop_times --trip-id T2 --stops-json '[{"stop_sequence":1,"stop_id":"S1","arrival_time":"09:00:00","departure_time":"09:00:00"}]'
gtfs-tools reroute --trip A_TRIP   # betroffene Fahrt direkt im Umleitungsformular öffnen
gtfs-tools reroute --trip A_TRIP --via F_TRIP --from "W 4 St-Wash Sq" --to "Jay St-MetroTech"   # A via F zwischen diesen Haltestellen fahren
gtfs-tools remove_stops --trip T2 --stops "Spring St,Canal St"                # überspringen/express, Stationsumfahrung
gtfs-tools truncate_trip --trip T2 --to "14 St"                                # vorzeitige Wendung / endet früh
gtfs-tools split_trip --trip T2 --gap-from "Crescent St" --gap-to "Broadway Junction" --new-trip-id T2_SEC2  # Zweiteilung

gtfs-tools add_calendar --service-id WKND --days sat,sun --start-date 20260101 --end-date 20261231
gtfs-tools update_calendar --service-id WKD --days mon,tue,wed,thu,fri,sat
gtfs-tools delete_calendar --service-id WKND

gtfs-tools add_calendar_date --service-id WKD --date 20260906 --exception-type 1   # 1=hinzufügen, 2=Service an diesem Datum entfernen
gtfs-tools delete_cal

…

[gekürzt zur Übersetzung]

Verwandte Skills