Pilot
macOSThe cockpit. Ghostty terminal splits, a dev-server-aware browser, a USB iPhone mirror, git and GitHub inspectors, markdown notes — and the hub every other device connects to.
Open source · Swift 6 · SwiftUI · no Electron
blau is four native Apple apps built as one system. Pilot runs your terminals, browser, and iPhone mirror in a single macOS window — and your iPhone, iPad, and Watch connect to it peer-to-peer to steer, annotate, and answer.
Each app does one job and does it natively — same Swift 6 codebase, same shared Sources tree, one generated Xcode project.
The cockpit. Ghostty terminal splits, a dev-server-aware browser, a USB iPhone mirror, git and GitHub inspectors, markdown notes — and the hub every other device connects to.
The pocket remote. Mirrors Pilot's workspaces and tabs, drives the Mac cursor from a touch trackpad, and turns the volume buttons into push-to-talk.
The second screen. Receives Pilot's window as live hardware-decoded HEVC and layers an Apple Pencil canvas whose strokes land back on the Mac.
The Enter key. Double-pinch on your wrist and Enter lands in the Mac's active terminal, relayed through Copilot. One gesture, one job.
Three pane kinds — terminal, browser, device — in resizable splits, with git inspectors, notes, and an ink overlay around them.
Every terminal pane is the actual Ghostty engine: libghostty rendering on a native Metal surface, with your existing Ghostty config loaded. Panes attach to named tmux sessions, so shells and long-running agents survive a relaunch when tmux is installed — without it, your working directory still comes back.
GhosttyKit.xcframework · OSC 7 cwd tracking
WKWebView with the Web Inspector enabled, and a scanner that reads package.json and .env to offer one-click localhost links — Next, CRA, Nuxt, and Remix on 3000, Vite on 5173, Astro on 4321, with explicit --port flags and PORT values parsed. It even probes which servers are actually running.
LocalServerScanner.swift
Tether over USB and the phone appears QuickTime-style via CoreMediaIO. Record a timestamped .mov, or grab a PNG screenshot — both land on the Desktop, and screenshots hit the clipboard at the same time.
CoreMediaIO · AVFoundation
Commits, Actions runs, and open issues polled through git and gh. Click an issue and Pilot pastes an “Implement issue #N” prompt into the active terminal. A background sweeper badges any workspace whose Action completes while you're elsewhere.
gh run list · 30s poll · 60s sweep
A GitHub-flavored markdown editor with multi-cursor split-into-lines, clickable checkboxes that auto-sort completed tasks down, per-block copy buttons, table auto-format, and clickable color swatches. .env-style values can be visually masked against shoulder-surfing, but Notes stores plaintext locally and is not a secret manager.
⇧⌘Lsplit into lines
One command opens the workspace in Cursor, Codex, or VS Code — whichever is installed, in that order.
IDELauncher.swift
ScreenCaptureKit captures Pilot's window straight into GPU-backed buffers. VideoToolbox encodes HEVC on the Mac's media engine — real-time mode, no frame reordering — and the iPad hardware-decodes into an AVSampleBufferDisplayLayer. Frames travel device-to-device over Bonjour and peer-to-peer Wi-Fi. No router required. No cloud involved.
The stream negotiates up to 4:4:4 chroma by capability handshake, so terminal output and code stay crisp where ordinary 4:2:0 video smears fine colored text.
Plotter reports link quality back; Pilot's encoder retunes its bitrate and resends keyframes on loss. Capture runs only while a Plotter client is connected.
Pencil strokes are normalized to the video frame, sent over a dedicated annotation channel, and rendered in an AppKit overlay on the Mac — with per-stroke undo kept in sync on both sides.
A Home Screen and Lock Screen widget holds the latest received frame, and a Live Activity puts mirror-session status in the Dynamic Island.
Copilot · iOS — Wingman · watchOS
Hold volume-down and talk. WhisperKit transcribes on-device — Whisper compiled to Core ML, scheduled across the Neural Engine — and only the finished text crosses the wire for Pilot to paste into the held workspace's terminal. Audio never leaves the phone.
WhisperKit · openai_whisper-base · Core ML
The touch trackpad streams relative deltas and clicks over the encrypted session; Pilot posts genuine CGEvents at the HID tap, gated by the macOS Accessibility permission.
CGEvent · AXIsProcessTrusted
A KVO observer on the system output volume turns the physical buttons into list navigation — volume HUD suppressed by a hidden MPVolumeView. Hold volume-up to send Enter.
AVAudioSession.outputVolume KVO
Pilot's workspaces and pane tabs mirror live to the phone as a switcher — select a tab on the phone, it changes on the Mac.
TabSummary · SelectTab
Wingman binds the system Double Tap gesture: double-pinch and Enter lands in the Mac's active terminal, relayed through Copilot over WatchConnectivity, confirmed with a haptic.
.handGestureShortcut(.primaryAction)
Architecture
Every channel is peer-to-peer, and each one is chosen for its job — ordered control state, latency-sensitive media, and an end-to-end-encrypted lane for messages.
MultipeerConnectivity
Workspace state, tab selection, trackpad deltas, voice text, Enter. An MCSession with encryption required, service type blau-sync.
Network.framework TCP
HEVC frames, keyframe requests, link stats. _blau-frames._tcp on Bonjour, including peer-to-peer Wi-Fi (AWDL), so no shared router is required.
Network.framework TCP
Pencil strokes, undo, clear — both directions. Its own channel: _blau-annotate._tcp.
WatchConnectivity
Double-pinch → Enter, with guaranteed background transfer as the fallback when the phone is unreachable.
Noise IK over UDP
End-to-end encrypted messaging between Pilot and Copilot across networks: X25519 + ChaChaPoly via CryptoKit, NAT hole punching, ACK'd delivery with replay protection. Keys exchange automatically over the Multipeer channel.
FOOTNOTE — One server exists. A Cloudflare rendezvous worker brokers {public key, IP, port} so two devices on different networks can hole-punch — it never sees plaintext or session keys, and it's contacted only for cross-network messaging. Everything else never leaves your local network.
Built on
Terminal emulation, font handling, and Metal rendering — the same core as the standalone Ghostty app. MIT-licensed, written in Zig, by Mitchell Hashimoto.
Argmax’s open-source Whisper runtime for Apple Silicon: models compiled to Core ML, inference on the Neural Engine, MIT-licensed.
Apple’s modern user-space transport stack, with discovery over the IETF-standard mDNS/DNS-SD — no directory server in the path.
GPU-backed window capture and fixed-function HEVC encode/decode — mirroring doesn’t compete with your build for CPU.
Strict-concurrency language mode across all four targets. Data races are compile errors here, not crash reports.
X25519, ChaChaPoly, and HKDF — the primitives under the Noise IK secure channel.
One YAML spec generates all four targets — the project definition is plain text, so build configuration gets code-reviewed like everything else.
The long-standing standard for session persistence — each terminal pane attaches to its own named session.