wingman

Coding agents run longer than you sit at a desk. wingman lets you monitor, prompt, and approve real GitHub Copilot CLI sessions from a phone — so a long-running agent doesn’t stall on a permission prompt because you went to make coffee.

How it works

  • wingmand — a Go daemon on the workstation drives Copilot CLI through its Agent Client Protocol (ACP) server, one subprocess per session. A session manager tracks the full lifecycle — create → steer → events → completion — in a sequence-numbered, replayable event log.
  • relayd — a zero-knowledge relay, deployed on Fly.io, routes end-to-end encrypted frames between daemon and phone. Traffic rides a Noise XX channel (X25519, ChaCha20-Poly1305); the relay sees only ciphertext, and GitHub credentials never leave the dev machine.
  • Wingman for iOS — a native SwiftUI app for observing and steering sessions, paired once by scanning a QR code.

The safety posture is deliberate: if no paired device answers a permission request, it fails safe to deny after a timeout. An unattended machine can never self-approve a dangerous tool call.

Engineering evidence

  • Wire protocol specification — versioned envelope, correlation IDs, sequence numbers with replay
  • Architecture decision records — Noise XX over a zero-knowledge relay, the replayable event log, fail-safe deny
  • Table-driven Go tests against a hermetic ACP test harness, plus a live Go↔Swift Noise interop test; verified end-to-end on-device against real Copilot sessions

Repository