You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Headless cannot save or reuse credentials without passing plaintext through the agent-facing command surface. Users need customizable aliases such as personal, work, and client-acme, while password values remain inside an OS-protected vault.
Proposed surface
headless credentials list [--origin URL]
headless credentials add --origin URL --alias NAME --interactive
headless credentials rename --origin URL --alias OLD --to NEW
headless credentials remove --origin URL --alias NAME
The interactive command reads passwords only from /dev/tty with echo disabled and restores terminal state on every exit path. Listing returns aliases and optional user-approved username metadata, never passwords.
Use macOS Keychain and Linux Secret Service/KWallet. If secure storage is unavailable, return a specific error and do not fall back to plaintext.
Storage and identity model
Bind each record to a canonical exact HTTPS authentication origin, account identity, and customizable alias.
Keep the broker as the sole component that can read password values.
CLI, MCP, environment variables, defaults manipulation, and page content cannot enable or modify that policy.
Rebuilds or signing-identity changes may require reauthorization or migration.
Capability output must identify the local security tier without claiming notarization or stable public signer identity.
A self-signed certificate is not a public trust mechanism and must not be generated or trusted automatically.
macOS with Developer ID
The same vault format and protocol must continue to work after a signed release becomes available. The implementation must support stable broker identity, notarized distribution, update migration, and provisioned access groups only if the accepted architecture requires them.
Signing certificates, passwords, team identifiers, and notarization credentials are release secrets and must never enter source control or runtime diagnostics.
Linux
Use an approved Secret Service or KWallet backend. Reject Chromium's basic plaintext fallback. Missing, locked, unsupported, or unavailable stores return explicit errors and do not silently disable protection.
Security requirements
Reject cross-origin use, insecure origins except explicit localhost development policy, unsafe aliases, duplicate ambiguity, piped secrets, password arguments, environment variables, and secret-bearing MCP parameters. Vault operations must not leak through logs, flows, diagnostics, crash text, command output, or temporary files.
Normal-vault aliases and credentials must be inaccessible from private contexts. Private contexts may use only in-memory credentials enrolled inside that context as specified by #35.
Testing
Portable tests use a deterministic fake vault and verify all validation and redaction behavior.
macOS integration tests exercise real Keychain add, query, authorization denial, deletion, identity-change handling, and cleanup.
Linux integration tests exercise each supported secure backend plus locked and unavailable states.
Tests verify terminal echo restoration after success, failure, interruption, and signals.
Secret fixtures use synthetic credentials and never write values to CI logs or artifacts.
Acceptance criteria
Both engines implement the same validated alias contract.
Problem
Headless cannot save or reuse credentials without passing plaintext through the agent-facing command surface. Users need customizable aliases such as
personal,work, andclient-acme, while password values remain inside an OS-protected vault.Proposed surface
The interactive command reads passwords only from
/dev/ttywith echo disabled and restores terminal state on every exit path. Listing returns aliases and optional user-approved username metadata, never passwords.Use macOS Keychain and Linux Secret Service/KWallet. If secure storage is unavailable, return a specific error and do not fall back to plaintext.
Storage and identity model
macOS without Developer ID
The local/community build remains supported:
A self-signed certificate is not a public trust mechanism and must not be generated or trusted automatically.
macOS with Developer ID
The same vault format and protocol must continue to work after a signed release becomes available. The implementation must support stable broker identity, notarized distribution, update migration, and provisioned access groups only if the accepted architecture requires them.
Signing certificates, passwords, team identifiers, and notarization credentials are release secrets and must never enter source control or runtime diagnostics.
Linux
Use an approved Secret Service or KWallet backend. Reject Chromium's basic plaintext fallback. Missing, locked, unsupported, or unavailable stores return explicit errors and do not silently disable protection.
Security requirements
Reject cross-origin use, insecure origins except explicit localhost development policy, unsafe aliases, duplicate ambiguity, piped secrets, password arguments, environment variables, and secret-bearing MCP parameters. Vault operations must not leak through logs, flows, diagnostics, crash text, command output, or temporary files.
Normal-vault aliases and credentials must be inaccessible from private contexts. Private contexts may use only in-memory credentials enrolled inside that context as specified by #35.
Testing
Acceptance criteria
Blocked by #154.