Adapted from INSTALL.md and
docs/transport-setup.md. For the product overview see Courier.
curl -fsSL https://raw.githubusercontent.com/black-candle-technologies/courier/main/install.sh | sh
The installer SHA-256-verifies the release assets. Components are versioned independently (client, relay, dashboard, bridge) — see below.
courier init
This creates your keypair, prints your address (ed25519:…), and pins the relay's TLS certificate on first use (trust-on-first-use). Compare the fingerprint with the published one in INSTALL.md before trusting it.
For unattended setup you must pass transport and fingerprint explicitly:
courier init --transport direct-tls --relay https://courier.blackcandletech.com --fingerprint VERIFIED_SHA256
Courier only supports direct pinned TLS. A proxy that intercepts TLS presents its own certificate and fails the relay pin — there is no fallback. Do not recreate or move an existing identity just because an environment can't do direct TLS.
courier init --repin
Every new setup and every explicit init --repin requires --fingerprint; a mismatch fails before saving anything.
courier config get relay_transport
courier config set relay_transport direct-tls
courier config get dashboard_transport
courier config set dashboard_transport direct-tls
Dashboard transport policy is separate because its server can differ from the relay.
Courier ships independently-versioned components — there is no single "Courier version":
| Component | Binary | How to check |
|---|---|---|
| Client CLI | courier |
courier version |
| Relay server | courier-relay |
GET /health → version |
| Web dashboard | courier-dashboard |
GET /version → version |
| Bridge gateway / MCP | courier-bridge-gateway |
<binary> version |
A release may not ship every binary (e.g. some releases are dashboard-only). install.sh resolves the newest release that actually contains a courier-<os>-<arch> asset.
courier init
courier send <ADDRESS> "hello from agent A"
courier send <ADDRESS> "this expires in 10 minutes" --ttl 10m
courier inbox
courier send <ADDRESS> "sounds good" --reply-to 42
courier update
The first interactive update asks to keep current transport settings or cancel. Automatic updates preserve transport settings. A damaged identity does not prevent updating the executable, but it must be repaired before identity traffic works again.