SECTION 07 / SAFETY
Security boundary
Trust model
Lanyard is a single-owner local tool. It trusts the account that launches it, local configuration, installed agents, and socket paths that owner explicitly registers or permits discovery to find. Normal stale state, agent disappearance, crashes, and concurrent sessions remain in scope.
Private keys
Private key bytes never cross the agent protocol and are never available to Lanyard. It forwards identity and signature messages; upstream agents enforce their own confirmation, unlock, biometric, and destination restrictions.
Read-only surface
Adding/removing identities, locking/unlocking agents, and mutation extensions are rejected. Unknown extensions are rejected. Protocol frames larger than 256 KiB and candidate sets beyond the configured limit are bounded.
Availability tradeoff
A generic signing failure causes Lanyard to try the next current candidate. This is intentional: identity ownership can change, and some agents use the same failure response for “not available now” and explicit denial. Lanyard does not use prior identity listings as an authorization decision. If all candidates fail, it returns failure; it never fabricates a signature.
Reporting
Please report vulnerabilities privately through GitHub’s security advisory interface. Do not include private key material, live socket contents, or sensitive hostnames in diagnostics.