Unofficial · macOS · single binary

Your flights.
Now in the terminal.

flightydeck reads the flights you already track in the Flighty Mac app, straight from its local database, and adds or follows new ones through the same API the app uses. One command line for you, one MCP server for your AI agent.

See it

Plain tables for you. JSON for everything else.

$ flightydeck list --upcoming
DATE        FLIGHT  ROUTE      DEPARTS          ARRIVES          STATUS
2031-03-14  QR111   PRG → DOH  22:10 +01        05:45 +03 +1d  on time
2031-03-18  VN333   HAN → SGN  14:05 +07        16:15 +07      +25 min
2031-04-02  LX1486  PRG → ZRH  07:25 +02        08:40 +02      scheduled

$ flightydeck status VN333
VN333  Hanoi (HAN) → Ho Chi Minh City (SGN)   Wed 18 Mar 2031
           scheduled   estimated   actual   gate   terminal
departs    14:05       14:30       —        22     T1
arrives    16:15       16:40       —        —      T1   belt 7
delayed 25 min · times are local to each airport

$ flightydeck search --to zurich -o json | jq '.[0].departure.scheduled'
{
  "utc": "2031-04-02T05:25:00Z",
  "local": "2031-04-02T07:25:00+02:00",
  "tz": "Europe/Prague"
}

Example output with invented flights. Exact columns may differ between versions.

Features

Everything Flighty knows, one command away.

Reads, never writes, your data

Flights, friends, stats and connections come from the app's local SQLite database, opened read-only. No sync server, no scraping.

Times that make sense

Every time is shown in the airport's own zone. JSON carries utc, local and tz, so nothing is ambiguous.

Search the way you type

Accent-insensitive matching on airports, cities and airlines: con dao finds Côn Đảo, zurich finds Zürich.

Built for scripts and agents

-o json on every command and stable exit codes, so a shell script or an AI agent can branch on the result instead of parsing prose.

Add and follow flights

flightydeck add QR111 2031-03-14 adds a flight you're on; follow tracks someone else's. They show up on your phone like any other.

Stats, delays, connections

Distance and time in the air, delay history for a route, layover lengths between your flights, and what your Flighty Friends are flying.

An MCP server included

flightydeck mcp exposes the same functions as tools to Claude and other MCP clients. Same code path as the CLI, same safety rules.

One static binary

Written in Rust. No Node, no Python, no runtime to install. Your auth token is read per call, never logged, and wiped from memory after use.

Install

Ready before boarding.

Needs macOS and the Flighty Mac app, installed and signed in. Or build from source with cargo install --git https://github.com/theanhgen/flightydeck.

  1. 1

    Install the binary

    brew install theanhgen/tap/flightydeck
  2. 2

    Check it can see Flighty

    flightydeck about
  3. 3

    List what's coming up

    flightydeck list --upcoming

MCP

Give your agent a window seat.

Register the built-in MCP server with Claude Code, or point any MCP client at flightydeck mcp over stdio.

claude mcp add flightydeck -- flightydeck mcp

Prefer fewer tools in context? The repo ships an agent skill (skills/flightydeck/SKILL.md) that teaches agents to use the CLI with -o json instead.

  • flightydeck_list_flights
  • flightydeck_get_flight
  • flightydeck_search_flights
  • flightydeck_current_flights
  • flightydeck_get_flight_status
  • flightydeck_get_delay_forecast
  • flightydeck_list_friend_flights
  • flightydeck_get_flight_stats
  • flightydeck_get_connections
  • flightydeck_search_airports
  • flightydeck_search_airlines
  • flightydeck_about
  • flightydeck_export_ics
  • flightydeck_add_flight
  • flightydeck_follow_flight
  • flightydeck_remove_flight

Safety

Cleared for reads. Writes need clearance.

Every command belongs to one safety class. The policy lives in the shared library, so the CLI and the MCP server enforce exactly the same rules.

Read

Always on

list, get, search, current, status, delay, ics, friends, stats, connections, airports, airlines, about.

Write

On unless read-only

add, follow. Checks the flight isn't already tracked, and spaces out calls to the API. --dry-run looks the flight up without adding it.

FLIGHTY_READ_ONLY=1 turns off every write, and overrides everything else.

Destructive · experimental

Off by default

remove. Needs FLIGHTY_ALLOW_REMOVE=1 and --yes. The sync semantics it relies on aren't fully verified yet.

  • Talks only to https://api.flightyapp.com, with redirects disabled.
  • The auth token is read from the local database per call, never logged or printed, and zeroized after use.
  • Bad input is rejected before any network call.

Exit codes

CodeMeaning
0OK
1Error (including "Flighty is syncing, retry")
2Bad input, caught before any network call
3Not ready: Flighty not installed or signed in, token expired, schema changed, owner unresolved
4Flighty API error
5Refused by policy (read-only, remove not enabled)
6Not found

FAQ

Before you fly.

Is this made by Flighty?

No. flightydeck is an independent, unofficial project. It isn't made by, endorsed by, or affiliated with Flighty.

Do I need a Flighty subscription?

You need the Flighty Mac app installed and signed in. flightydeck can only see and do what your account in the app can.

Does it work on Linux, Windows or iPhone?

No. It reads the Mac app's local database, so it runs on macOS only.

Can it break my Flighty data?

Reads open the database read-only. Adding and following go through the same API the app uses. Removing flights is off unless you explicitly enable it, and FLIGHTY_READ_ONLY=1 turns off all writes.

What happens when Flighty updates?

The app's database and API are private and can change without notice. flightydeck checks the schema before each query and exits with code 3, naming the missing column, rather than returning wrong data.

Where does my token go?

Only to api.flightyapp.com, in the request header, the same way the app sends it. It's never written to logs, error messages or JSON output.