Aviation situational awareness toolkit. Real-time aviation weather, flight tracking, and situational awareness from public FAA/NWS/ADS-B data. For end-user documentation, visit https://jayravaliya.com/skywatch.
- Ruby 3.2 or later (see
.ruby-version) - Bundler
git clone git@github.com:jayrav13/skywatch.git
cd skywatch
bundle installAll tests use WebMock fixtures and never hit live APIs.
bundle exec rspec # full test suite
bundle exec rubocop # lint
bundle exec rake # run bothbundle exec exe/skywatch --help
bundle exec exe/skywatch brief KCDWOnce installed via gem install, use skywatch directly without bundle exec exe/.
lib/skywatch/— source code rootlib/skywatch/shared/— HTTP client, cache, geometry, errors, Position utilitieslib/skywatch/briefer/— METAR, TAF, PIREP, winds, SIGMET, AIRMET, AFD sources and modelslib/skywatch/brief/— Skywatch.brief composition layer (AIM 7-1-5 weather brief)lib/skywatch/radar/— flight tracking via OpenSky Networklib/skywatch/mayday/— emergency squawk detection and alertinglib/skywatch/nimbus/— convective outlooks, storm reports, smoke plumes, NEXRADlib/skywatch/agent/— Claude Code subagent install commandagents/— bundled subagent file (installed viaskywatch agent install)spec/— RSpec tests (mirrorslib/layout)spec/fixtures/— WebMock JSON and XML fixturesexe/— CLI binary entry point
Skywatch is organized into domain modules (briefer, brief, radar, mayday, nimbus, agent) with shared infrastructure under Skywatch::Shared. Each domain exports sources (data fetching) and models (data representation).
For the full architecture overview, see CLAUDE.md in the repo root.
- Run tests and lint before pushing:
bundle exec rake - Push to a branch and open a PR against
main. - Ensure CI is green.
- Test against fixtures only — never commit changes that hit live APIs.
MIT. See LICENSE.txt in the repo root.