Get real-time SEPTA Regional Rail train schedules, departures, arrival times, delays, and status between stations in the Philadelphia area
Get real-time SEPTA Regional Rail train information including departures from any station, direct train schedules between stations, live status of all active trains, and detailed schedules for specific trains.
Execution: This skill uses the septacli executable.
Output Format: Returns markdown tables by default for LLM-friendly parsing. Add flag for structured JSON output.
--jsonThere are four main commands:
Command: ~/.openclaw/skills/septa_cli/septacli departures "<station>" [results] [--json]
Command: ~/.openclaw/skills/septa_cli/septacli to "<fromStation>" "<toStation>" [results] [--json]
Command: ~/.openclaw/skills/septa_cli/septacli trains [--json]
Command: ~/.openclaw/skills/septa_cli/septacli train "<trainNumber>" [--json]
Station names MUST be exact (including spaces and capitalization).
Common stations:
Full list available at: https://www3.septa.org/VIRegionalRail.html
User: "When is the next train from Suburban Station?"
Command: ~/.openclaw/skills/septa_cli/septacli departures "Suburban Station" 5
Output: Markdown table with northbound and southbound trains:
# Departures from Suburban Station
*Suburban Station Departures: February 23, 2026, 10:47 am*
## Northbound
| Train | Origin | Destination | Line | Path | Depart | Track | Platform | Service | Status |
|-------|--------|-------------|------|------|--------|-------|----------|---------|--------|
| 4224 | Airport Terminal E-F | Norristown | Airport | R4/2N | 2026-02-23 11:05:00.000 | 1 | A | LOCAL | 9 min |
User: "When does the next train to the airport leave from 30th Street?"
Command: ~/.openclaw/skills/septa_cli/septacli to "30th Street Station" "Airport Terminal A" 3
Output: Markdown table with direct trains:
# Trains from 30th Street Station to Airport Terminal A
| Train | Line | Depart | Arrive | Direct | Status |
|-------|------|--------|---------|--------|--------|
| 5432 | Airport | 3:55 PM | 4:12 PM | Yes | On time |
User: "What trains are running right now?"
Command: ~/.openclaw/skills/septa_cli/septacli trains
Output: Markdown table with all active trains:
# Active Regional Rail Trains
| Train | Line | Origin | Destination | Current | Next Stop | Service | Track | GPS | Heading | Consist | Status |
|-------|------|--------|-------------|---------|-----------|---------|-------|-----|---------|---------|--------|
| 1711 | Trenton | Market East | Trenton | Jefferson Station | Market East | LOCAL | 3 | 39.9538889,-75.1677778 | 120.1deg | - | 20 min late |
User: "Show me all the stops for train 2335"
Command: ~/.openclaw/skills/septa_cli/septacli train "2335"
Output: Markdown table with complete schedule:
# Schedule for Train 2335
| Station | Scheduled | Estimated | Actual |
|---------|-----------|-----------|--------|
| Suburban Station | 10:59 pm | 10:56 pm | 10:56 pm |
| Gray 30th Street | 11:03 pm | 11:02 pm | 11:02 pm |
An LLM can chain commands together for comprehensive answers:
Scenario: User asks "I need to get from 30th Street to Suburban Station, which train should I take and when does it stop at each station?"
Workflow:
Step 1: Run septacli to "30th Street Station" "Suburban Station"
Step 2: Run septacli train "435"
Step 3: Present comprehensive answer to user:
Another Scenario: User asks "Are there any delays on trains to the airport right now?"
Workflow:
septacli trains to get all active trainsDefault: Markdown tables (shown in examples above)
JSON Mode: Add --json flag to any command for structured JSON output
{
"station": "Suburban Station",
"timestamp": "Suburban Station Departures: February 13, 2026, 3:45 pm",
"northbound": [
{
"direction": "N",
"train_id": "435",
"destination": "Thorndale",
"line": "Paoli/Thorndale",
"depart_time": "3:51 PM",
"track": "4",
"status": "On Time"
}
],
"southbound": [...]
}
{
"from": "30th Street Station",
"to": "Airport Terminal A",
"trains": [
{
"orig_train": "5432",
"orig_line": "Airport",
"orig_departure_time": "3:55 PM",
"orig_arrival_time": "4:12 PM",
"orig_delay": "On time"
}
]
}
[
{
"lat": "40.0123",
"lon": "-75.1234",
"trainno": "2335",
"service": "LOCAL",
"dest": "Elwyn Station",
"currentstop": "Suburban Station",
"nextstop": "Gray 30th Street",
"line": "Media/Elwyn",
"consist": "4",
"heading": "S",
"late": 2,
"SOURCE": "02/18/2026 10:56:00 PM",
"TRACK": "4",
"TRACK_CHANGE": ""
}
]
{
"train_number": "2335",
"schedule": [
{
"station": "Suburban Station",
"sched_tm": "10:59 pm",
"est_tm": "10:56 pm",
"act_tm": "10:56 pm"
},
{
"station": "Gray 30th Street",
"sched_tm": "11:03 pm",
"est_tm": "11:02 pm",
"act_tm": "11:02 pm"
}
]
}
fetch (requires Node 18+)https://www3.septa.org/apiseptacli executable (made with Node.js shebang)trains + train commands for detailed journey planninghttps://www3.septa.org/api/Arrivals/index.php?station={station}&results={n}/NextToArrive/index.php?req1={from}&req2={to}&req3={n}/TrainView/index.php/RRSchedules/index.php?req1={trainNumber}