Files
overlord/Overlord-Lite/README.md
T

4.3 KiB

Overlord Lite

Overlord Lite is a deliberately small Rust agent that proves the Overlord wire protocol works independently of the full Go agent. It supports authenticated server sessions, TLS identity pinning, heartbeats, and reconnection. It does not advertise or execute remote commands beyond its interactive TTY console.

Supported

  • Agent-token authentication through x-agent-token
  • TLS 1.3-only encrypted transport, with public-root or pinned self-signed identities
  • Persistent Ed25519 identity and enrollment challenge signing
  • MessagePack protocol negotiation
  • Ping/pong heartbeat and reconnect/server rotation
  • Interactive TTY console sessions with resize support

Plugins, desktop, file-manager, audio, webcam, persistence, update, and other full-agent commands are intentionally omitted.

Build

Rust 1.88 or newer is required.

cd Overlord-Lite
cargo build --release

The output is target/release/overlord-lite (overlord-lite.exe on Windows). The release profile enables size optimization, LTO, symbol stripping, and abort-on-panic.

String literals that should not appear in plaintext in the executable can use the local obfstr! procedural macro:

let header = overlord_lite::obfstr!("x-agent-token");

The macro encrypts the literal while compiling and returns a decrypted String only when the expression runs. Builder-embedded server URLs, agent tokens, build tags, TLS pins, and advertised Lite command names use it automatically. This is binary obfuscation rather than secret storage: because the executable must decrypt its own values, a determined analyst can still recover them at runtime.

For Build-page integration, install plugins/rust-lite-builder/rust-lite-builder.zip through the Plugin Manager. The Agent Type selector will then offer Rust Lite and route selected targets through Cargo while retaining normal build permissions, history, downloads, hooks, and file-share upload behavior. Cargo and the requested Rust targets/linkers must be installed on the server host.

Run

Configure the agent with the same token used by the server:

$env:OVERLORD_SERVER = "wss://overlord.example.com:5173"
$env:OVERLORD_AGENT_TOKEN = "your-agent-token"
cargo run --release

Multiple servers may be comma-separated. Bare hosts default to wss://.

For a local development server using a self-signed certificate:

$env:OVERLORD_SERVER = "wss://localhost:5173"
$env:OVERLORD_TLS_INSECURE_SKIP_VERIFY = "true"
cargo run

Disabling certificate verification also permits plaintext ws://. Do not enable it for production deployments.

Builder-produced binaries automatically embed the server's active TLS SPKI pin, so they securely accept its generated self-signed certificate without the development bypass. For manual builds, OVERLORD_TLS_SPKI_PINS accepts one or more comma-separated sha256/<base64> public-key pins.

Configuration

Variable Default Purpose
OVERLORD_SERVER wss://127.0.0.1:5173 One server, or a comma-separated rotation list
OVERLORD_AGENT_TOKEN empty Shared server agent token
OVERLORD_BUILD_TAG compiled build tag Runtime override for server build attribution
OVERLORD_TLS_SPKI_PINS compiled server pins Comma-separated trusted server public-key pins
OVERLORD_TLS_INSECURE_SKIP_VERIFY false Development-only TLS bypass
OVERLORD_LITE_STATE_DIR platform state directory Persistent client ID and Ed25519 seed
OVERLORD_RECONNECT_DELAY_MS 5000 Delay between connection attempts
OVERLORD_PING_INTERVAL_MS 30000 Application heartbeat interval

The identity file is created once as identity.json. Keep it private: deleting it creates a new identity that must enroll again.

The builder compiles OVERLORD_LITE_DEFAULT_SERVER, OVERLORD_LITE_DEFAULT_AGENT_TOKEN, and OVERLORD_LITE_DEFAULT_BUILD_TAG into the binary along with the server's TLS SPKI pins. Their corresponding runtime variables take precedence, so one binary can still be redirected deliberately after deployment.

Protocol compatibility

build.rs reads ../protocol/wire-contract.json during every build and generates the Lite client's protocol version from the canonical contract. The client advertises only the four version 1 console commands it implements.