ANYPLANE

SELF-HOSTED · VENDOR-NEUTRAL · MIT

Run your agents,
on any plane.

AnyPlane is a control tower for the coding agents on your own machine — Claude Code and Codex sessions, structured approvals and push notifications, from any browser or phone. No vendor cloud in the middle: your agents, your machines, your model accounts, your network.

$ bunx anyplane → listening on http://localhost:7480

WHAT THE TOWER CLEARS

GATE A

One tower, two runtimes

Claude Code and Codex share a single structured message boundary. Approve, rewind, branch, hand off between agents — the same gestures for both, with zero frontend forks.

GATE B

Clearance from the lock screen

Approvals arrive as push notifications you can rule on without opening the page — capability URLs carry a one-tap secret. Web Push, ntfy, Bark and Server酱 channels included.

GATE C

Your tower, your rules

Self-hosted and vendor-neutral. Transcripts stay on disk, tokens stay local, no account, no relay. Works with API-key and gateway setups the official remotes exclude.

FLIGHT MANUAL — WHAT THE PROTOCOL DEPTH BUYS

  • stream-json controlClaude Code's own headless protocol — sessions, approvals, model switching, rewind — driven natively, not screen-scraped.
  • app-server JSON-RPCCodex threads over its official app-server, translated into one message shape so the UI never forks.
  • rewind · branch · handoffRoll back files or conversation, lazy-fork a session, or hand a summarized brief to another agent.
  • push, self-rolledVAPID (RFC 8292) and aes128gcm payloads (RFC 8291) implemented in-house — no push SDK, no third party reading your approvals.

TAKEOFF

Run it

# one command, front-end prebuilt (via bunx)
bunx anyplane
# or straight from npm (Bun still required on PATH)
npm i -g anyplane

Configure (optional)

# ~/.anyplane/config.json
{ "host": "0.0.0.0", "authToken": "long-random" }
# LAN access always requires a token.

REQUIRES — Bun ≥ 1.3.13 (Windows ≥ 1.4.0) · claude and/or codex CLI on PATH, logged in