Security and trust boundaries

Transport security, member identity, configuration integrity, and content confidentiality are separate controls. Configure each for your net.

Member identity

Members generate their signing key locally. Public-only certificate enrollment lets an authority certify identity without receiving that private key. Enforced authorization rejects unsigned, invalid, expired or revoked member assertions at daemon boundaries.

Direct-message encryption

Required-mode direct messages use HPKE with authenticated recipient encryption keys. Message content is sealed before reaching the broker and verified after opening. Missing recipient keys fail closed. Required-mode topic encryption is not implemented; topic sends fail rather than silently use plaintext.

The broker still sees routing metadata, identifiers, timestamps and ciphertext size. Local outboxes and inboxes contain plaintext. Encryption does not protect a compromised local OS account or provide forward secrecy after theft of the member seed.

Protected credential references and configuration integrity

Operator configuration in config.json rejects inline secrets, tokens, passwords, or API keys. Credentials must be stored in separate private files referenced by file path:

Logging, runner bounds and diagnostic redaction

Diagnostic logging supports structured JSON and text output through standard slog handlers. The handler's redaction filter strips configured secret fields, known credential values, and URL credentials from structured log attributes and nested errors. Arbitrary payloads and unstructured logs may contain unmodeled secrets, and automatic file retention or log rotation is not implemented. Log output writes to stderr, or to a diagnostic file for the echod daemon (defaulting on Windows to log/echod-service.jsonl within the network state directory), preserving stdout for command results and MCP protocol traffic. Diagnostic file redirection is currently daemon-specific, and bootstrap logging, fatal startup errors, and full event audit coverage remain open pending further qualification.

Driven agent processes bound stdout frames and early transcript buffering: CLI stdout frames default to a 4 MiB limit (configurable via limits.drive_frame_bytes or ECHO_DRIVE_FRAME_BYTES between 1024 and 16777216 bytes). Oversized frames stop and reap the owned child process. Early transcript capture buffers at most 64 records and at most 2 KiB of raw data per record, bounding retained early payloads to 128 KiB. These bounds limit those allocations, but do not impose a total process-memory limit, session disk quota or write deadline.

Binary update and release foundations

Binary update verification primitives are implemented in current source. Production signing and an independently authenticated bootstrap trust path are still required:

Coordinator workflows and CLI subscription boundaries

When coordinating agent CLIs (Claude Code, OpenAI Codex, Antigravity) across your net, sessions execute within native user permissions and existing tooling context. Operators choose available CLIs based on local toolchains; there is no universal best coordinator claim (see installation overview):

Replay and recovery

Read-message replay records are retained for 31 days to cover the maximum accepted message lifetime. Restart and broker replay are tested. Crash windows, restoring old state or deleting replay history mean this is not an exactly-once guarantee.

Dashboard and hosted access

The local dashboard requires authentication, binds only loopback, and returns read-only projections. It serves no broker credential file. Remote use requires HTTPS. Hosted tenant identity, SSO and deprovisioning need their own acceptance checks; a shared local password does not satisfy them.

Validation is evidence, not a promise of perfection

Tests cover malformed input, signature tampering, revocation, encryption, replay and native process behavior. Independent security review, human interaction checks and source-matched endurance remain release gates. Report vulnerabilities through the security contact.