Skip to content

drichardson-tmp/flight-attendant

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Flight Attendant

AI agent orchestrator that runs each session in an isolated git worktree. Native macOS app, solarized theming, vim keybindings.

Install

Pre-built binary

Download from the latest release:

Platform Architecture Download
macOS Apple Silicon (M1/M2/M3/M4) aarch64-apple-darwin
macOS Intel x86_64-apple-darwin
Linux x86_64 x86_64-linux-gnu
Linux ARM64 aarch64-linux-gnu
# Example: Apple Silicon Mac
curl -LO https://github.com/drichardson-tmp/flight-attendant/releases/latest/download/flight-attendant-aarch64-apple-darwin.tar.gz
tar xzf flight-attendant-aarch64-apple-darwin.tar.gz
mv flight-attendant /usr/local/bin/
flight-attendant

Binaries are automatically built for all architectures on each tagged release via GitHub Actions.

Build from source

Requires Rust 1.75+.

git clone https://github.com/drichardson-tmp/flight-attendant.git
cd flight-attendant
cargo build --release

# Binary is at target/release/flight-attendant (~5MB)
./target/release/flight-attendant

Cross-compile for other architectures

# Install target
rustup target add x86_64-apple-darwin        # Intel Mac
rustup target add aarch64-apple-darwin       # Apple Silicon
rustup target add x86_64-unknown-linux-gnu   # Linux x86_64
rustup target add aarch64-unknown-linux-gnu  # Linux ARM64

# Build for a specific target
cargo build --release --target x86_64-apple-darwin

Homebrew (coming soon)

brew install flight-attendant

Auth

Flight Attendant automatically picks up your Claude credentials. Zero config needed if you've logged into Claude Code:

  1. macOS Keychain (automatic) --- reads the OAuth token stored by claude CLI
  2. Environment variable (manual override) --- ANTHROPIC_API_KEY=sk-ant-... flight-attendant

If you haven't logged in yet, run claude once and sign in. Flight Attendant will find the token.

Usage

Launch the app:

flight-attendant

A native macOS window opens. On first launch, pick light or dark mode.

Keybindings

Key Action
n New session (creates a git worktree named after an animal)
i Insert mode (type messages)
Esc Normal mode
h / l Switch panels (sidebar / chat / files)
j / k Navigate lists / scroll content
Enter Select session
D Delete session + worktree
Cmd+P Fuzzy file finder
Cmd+, Preferences (theme, font size, custom fonts)

Custom Fonts

Open preferences (Cmd+,) and upload your .woff2, .ttf, or .otf files. MonoLisa, Berkeley Mono, JetBrains Mono --- whatever you use. The font loads instantly via the FontFace API.

Configuration

Env var Default Purpose
FA_PORT 3000 Server port
FA_REPO_PATH Current directory Git repo to create worktrees from
FA_WORKTREE_BASE <repo>/.worktrees Where worktrees are stored
ANTHROPIC_API_KEY Keychain Manual API key override

Architecture

flight-attendant/
├── src/
│   ├── main.rs              # Native window (wry/tao) + Axum server
│   ├── config.rs            # Config + macOS Keychain auth
│   ├── state.rs             # In-memory session state (RwLock<HashMap>)
│   ├── router.rs            # Route definitions
│   ├── error.rs             # Unified error -> HTTP response
│   ├── frontend.rs          # rust-embed static asset serving
│   ├── api/                 # REST handlers
│   │   ├── sessions.rs      # CRUD sessions (POST/GET/DELETE)
│   │   ├── files.rs         # Fuzzy file search + read
│   │   ├── models.rs        # List AI models
│   │   └── health.rs        # Health check
│   ├── ws/chat.rs           # WebSocket streaming chat
│   ├── agents/
│   │   ├── provider.rs      # AiProvider trait (extensible)
│   │   └── anthropic.rs     # Claude API client (SSE streaming)
│   └── git/
│       ├── worktree.rs      # git2 worktree management
│       └── animals.rs       # 100 animal names for sessions
├── frontend/                # Vanilla HTML/CSS/JS (embedded in binary)
│   ├── css/                 # Solarized theme, aviation design
│   └── js/                  # Chat, sidebar, finder, vim keybindings
└── tests/
    └── api_tests.rs         # 22 integration tests

Key decisions

  • Single binary --- frontend is embedded via rust-embed, no separate server needed
  • Native window --- wry (WKWebView on macOS), not Electron
  • In-memory state --- sessions live in a RwLock<HashMap>, fine for single-user
  • 1:1 worktree:session --- each agent gets its own isolated filesystem
  • macOS Keychain auth --- zero config if you've used Claude Code before

Models

  • Claude Opus 4.6 (1M context) --- default
  • Claude Sonnet 4
  • Claude Opus 4
  • Claude Haiku 3.5

Switch models per-session via the dropdown in the sidebar.

Development

# Run in dev mode (hot-reloads frontend assets from disk)
cargo run

# Run tests (35 total: 13 unit + 22 integration)
cargo test

# Release build with LTO
cargo build --release

License

MIT

About

A light wrapper around agents.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors