# 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. ```text 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: ```rust 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: ```powershell $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: ```powershell $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/` 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.