Flight Tracker Skill
"Where's that flight right now?" has a genuinely open answer: hobbyist ADS-B receiver networks share live aircraft transponder data keylessly — adsb.lol serves it clean, OpenSky backs it up. This skill queries by callsign, hex, or area, and translates transponder math into human answers ("over Poland at 38,000 ft, ~40 minutes from Warsaw-ish airspace"). It's equally honest about the boundary: this is positions, not airline operations — gate changes, delays, and cancellations live in keyed commercial services, and pretending otherwise produces confident fiction.
What This Skill Produces
- The position — where the aircraft is now: location in words, altitude, ground speed, heading, climb/descent
- The overhead list — aircraft above/near a point, sorted by distance
- The interpretation — cruise vs. descent, direction of travel, rough progress — labeled as inference from position data
- The command — exact curl, rerunnable — and the boundary line when the question was schedule-shaped
Required Inputs
Ask for these if not provided:
- The identifier — callsign (what ATC uses:
BAW123, often ≈ flight number with the airline's ICAO prefix — BA→BAW, LH→DLH, UA→UAL; do the mapping and say so), registration/tail number, or ICAO hex
- Or the place — lat/lon for "what's overhead" questions, with a radius
- What they actually want — position/curiosity vs. "is it delayed / when does it land" — the second gets the honest redirect plus what positions can infer
Framework: The Network and the Boundary
- adsb.lol — primary: by callsign:
curl -s "https://api.adsb.lol/v2/callsign/BAW123" · by registration: .../v2/reg/G-XLEB · by hex: .../v2/hex/4075a2 · overhead: .../v2/lat/51.5/lon/-0.12/dist/25 (nm). Fields per aircraft: flight (callsign), alt_baro (ft), gs (knots), track (° heading), baro_rate (ft/min climb/descent), lat/lon, t (type).
- OpenSky — fallback:
curl -s "https://opensky-network.org/api/states/all?lamin=51.4&lamax=51.6&lomin=-0.4&lomax=0.2" — anonymous access, tighter rate limits; state vectors as positional arrays (index 1 callsign, 5/6 lon/lat, 7 baro alt m, 9 velocity m/s). Units differ between the two (ft/knots vs. m and m/s) — convert deliberately, never mix.
- Interpret the physics:
baro_rate near 0 at 35,000+ ft = cruise; sustained −1,500 ft/min = descent (landing within ~30–45 min, framed as an estimate); track + position = direction in words ("heading east over Poland"). All labeled inference.
- Coverage honesty: ADS-B networks depend on volunteer ground receivers — coverage is excellent over Europe/NA, patchy over oceans and parts of Africa/Asia. "Not found" means not currently received or not airborne, and the answer says both possibilities, not "the flight doesn't exist."
- The schedule boundary: delays, gates, cancellations, scheduled times → keyed services (airline apps, FlightAware/FR24) — name them, don't fake them. What positions legitimately infer (airborne yes/no, descent begun, rough progress) is offered as the keyless consolation, labeled as inference.
Output Format
Flight: [callsign/reg] — [fetch time]
[The answer: "Airborne — over [area] at [alt] ft, [speed] kn, heading [direction]; descending, likely landing within ~[range]." or the honest not-received line.]
| Field |
Value |
| [Position (words + coords) · altitude · speed · heading · climb/descent · aircraft type] |
|
[Overhead mode: table sorted by distance]
Source: [adsb.lol / OpenSky] community ADS-B · as of [time] · rerun: [exact curl]
[Schedule-shaped questions: the boundary line + what position data can and can't infer]
Quality Checks
Anti-Patterns
1---2name: flight-tracker3description: Track live aircraft positions with zero API keys — adsb.lol's open ADS-B network primary, OpenSky fallback, via curl: by callsign, registration, or area. Use when asked where is this flight right now, what planes are overhead, track a tail number, or is that flight in the air. Produces the live position with altitude, speed, and heading interpreted, the overhead list for a location, and the rerunnable command — with the positions-not-schedules boundary stated honestly.4---5
6# Flight Tracker Skill
7
8"Where's that flight right now?" has a genuinely open answer: hobbyist ADS-B receiver networks share live aircraft transponder data keylessly — adsb.lol serves it clean, OpenSky backs it up. This skill queries by callsign, hex, or area, and translates transponder math into human answers ("over Poland at 38,000 ft, ~40 minutes from Warsaw-ish airspace"). It's equally honest about the boundary: this is *positions*, not airline operations — gate changes, delays, and cancellations live in keyed commercial services, and pretending otherwise produces confident fiction.
9
10## What This Skill Produces
11
12- **The position** — where the aircraft is now: location in words, altitude, ground speed, heading, climb/descent
13- **The overhead list** — aircraft above/near a point, sorted by distance
14- **The interpretation** — cruise vs. descent, direction of travel, rough progress — labeled as inference from position data
15- **The command** — exact curl, rerunnable — and the boundary line when the question was schedule-shaped
16
17## Required Inputs
18
19Ask for these if not provided:
20- **The identifier** — callsign (what ATC uses: `BAW123`, often ≈ flight number with the airline's ICAO prefix — BA→BAW, LH→DLH, UA→UAL; do the mapping and say so), registration/tail number, or ICAO hex
21- **Or the place** — lat/lon for "what's overhead" questions, with a radius
22- **What they actually want** — position/curiosity vs. "is it delayed / when does it land" — the second gets the honest redirect plus what positions *can* infer
23
24## Framework: The Network and the Boundary
25
261. **adsb.lol — primary:** by callsign: `curl -s "https://api.adsb.lol/v2/callsign/BAW123"` · by registration: `.../v2/reg/G-XLEB` · by hex: `.../v2/hex/4075a2` · overhead: `.../v2/lat/51.5/lon/-0.12/dist/25` (nm). Fields per aircraft: `flight` (callsign), `alt_baro` (ft), `gs` (knots), `track` (° heading), `baro_rate` (ft/min climb/descent), `lat/lon`, `t` (type).
272. **OpenSky — fallback:** `curl -s "https://opensky-network.org/api/states/all?lamin=51.4&lamax=51.6&lomin=-0.4&lomax=0.2"` — anonymous access, tighter rate limits; state vectors as positional arrays (index 1 callsign, 5/6 lon/lat, 7 baro alt m, 9 velocity m/s). **Units differ between the two** (ft/knots vs. m and m/s) — convert deliberately, never mix.
283. **Interpret the physics:** `baro_rate` near 0 at 35,000+ ft = cruise; sustained −1,500 ft/min = descent (landing within ~30–45 min, framed as an estimate); track + position = direction in words ("heading east over Poland"). All labeled inference.
294. **Coverage honesty:** ADS-B networks depend on volunteer ground receivers — coverage is excellent over Europe/NA, patchy over oceans and parts of Africa/Asia. "Not found" means *not currently received or not airborne*, and the answer says both possibilities, not "the flight doesn't exist."
305. **The schedule boundary:** delays, gates, cancellations, scheduled times → keyed services (airline apps, FlightAware/FR24) — name them, don't fake them. What positions legitimately infer (airborne yes/no, descent begun, rough progress) is offered as the keyless consolation, labeled as inference.
31
32## Output Format
33
34# Flight: [callsign/reg] — [fetch time]
35
36**[The answer: "Airborne — over [area] at [alt] ft, [speed] kn, heading [direction]; descending, likely landing within ~[range]." or the honest not-received line.]**
37
38| Field | Value |
39|---|---|
40[Position (words + coords) · altitude · speed · heading · climb/descent · aircraft type]
41
42[Overhead mode: table sorted by distance]
43
44Source: [adsb.lol / OpenSky] community ADS-B · as of [time] · rerun: `[exact curl]`
45[Schedule-shaped questions: the boundary line + what position data can and can't infer]
46
47## Quality Checks
48
49- [ ] Flight numbers were mapped to ICAO callsigns with the mapping shown
50- [ ] Units are consistent and stated (the two sources differ)
51- [ ] Inferences (descent, ETA-ish) are labeled as inferences from position
52- [ ] "Not found" answers include the coverage explanation, both possibilities
53- [ ] Schedule questions get the honest boundary, not improvised delay data
54
55## Anti-Patterns
56
57- [ ] Do not fake schedule data — delays and gates are not in ADS-B, and confident fiction here strands people
58- [ ] Do not mix the two sources' units — a 10,000 m cruise is not a 10,000 ft one
59- [ ] Do not present patchy coverage as "flight doesn't exist"
60- [ ] Do not track people — flights and public transponder data, not persistent monitoring of individuals' movements
61- [ ] Do not answer from memory — a remembered aircraft position is nonsense by construction