Install
openclaw skills install @sundiraman/flights-overheadSee what flights are above you right now. Identify contrails, planes overhead, and nearby air traffic using OpenSky Network (free, no key).
openclaw skills install @sundiraman/flights-overheadSee what flights are currently above you. Identify contrails, planes overhead, and nearby air traffic using OpenSky Network (free, no API key needed).
scripts/flights_overhead.py# Show flights within 50 km (default)
python3 scripts/flights_overhead.py --lat 47.68 --lng -122.21
# Smaller radius, JSON output
python3 scripts/flights_overhead.py --lat 47.68 --lng -122.21 --radius 30 --json
# Limit results
python3 scripts/flights_overhead.py --lat 47.68 --lng -122.21 --limit 5 --json
| Flag | Required | Default | Description |
|---|---|---|---|
--lat | Yes | — | Observer latitude |
--lng | Yes | — | Observer longitude |
--radius | No | 50 | Search radius in km |
--limit | No | 20 | Max flights to return |
--json | No | — | Output as JSON |
{
"count": 8,
"flights": [
{
"callsign": "ASA640",
"airline": "Alaska Airlines",
"flight_number": "AS640",
"lat": 47.65,
"lng": -122.30,
"altitude_ft": 4875,
"altitude_m": 1486,
"speed_kmh": 464.9,
"heading": 355,
"vertical_rate_ms": -5.2,
"distance_km": 8.2,
"origin_country": "United States"
}
]
}
| Field | Description |
|---|---|
callsign | ICAO callsign (e.g. ASA640) |
airline | Resolved airline name (if recognized) |
flight_number | IATA flight number (e.g. AS640) |
altitude_ft | Altitude in feet |
speed_kmh | Ground speed |
heading | Direction of travel (degrees, 0=north) |
distance_km | Distance from observer |
vertical_rate_ms | Climb/descent rate (negative = descending) |
Options (in priority order):
nodes → location_get. Requires user to have granted location permission on their paired device. Best option when the user may be away from home.Note: Device location requires explicit user permission on the paired mobile device. If not granted, the call will fail — fall back to option 2 or 3. For mobile users who are frequently away from home, device location gives accurate results. For stationary/home use, the address from USER.md is sufficient.
python3 scripts/flights_overhead.py --lat <lat> --lng <lng> --radius 30 --json
Use radius 5 km for "what's over me" / "what's that plane" (actually audible/visible). Use radius 30 km for "what's that contrail" (high altitude, visible far away). Use radius 20 km for "what flights are near me" or general area queries.
For identified commercial flights, look up origin/destination:
# Web search for flight route
web_search "<airline> <flight_number> flight route origin destination today"
FlightAware (flightaware.com/live/flight/<ICAO_CALLSIGN>) and FlightStats typically show the route. Extract origin → destination from the search snippet.
Skip route lookup for:
For "what's that contrail?" or "what plane is that?":
For "what flights are above me?":
For identifying a specific plane:
If user wants more info about a specific flight:
flight_tracker.py to get route (origin/destination) if callsign is known"What flights are above me?"
Right now within 30 km of Kirkland, I can see 8 flights:
- AS640 (Alaska Airlines) at 4,875 ft, 8 km away, heading north
- DL2980 (Delta) at 3,850 ft, 9 km away, heading south
- WN1713 (Southwest) at 7,000 ft, 7 km away, heading north ... Mostly arrivals/departures from SEA-TAC.
"What's that contrail heading east?"
That's likely UA2271 (United Airlines) at 35,000 ft, heading 208° (southwest). It's about 13 km from you.
The script recognizes 40+ airlines by ICAO callsign prefix and resolves them to human-readable names and IATA flight numbers. Unrecognized callsigns display as-is (often private/cargo aircraft with registration numbers like N262BS).