Secret values live in encrypted local vault storage. On macOS the master key is in Keychain; on Linux it uses libsecret (mode-0600 file fallback); on Windows it uses DPAPI.
Architecture
Secrets stay local unless you explicitly use them elsewhere.
The Solo product has no hosted Vibe Vault account. Provider sync, downloads, checkout, and support contact are user-initiated external actions.
Reads can be gated by local approval before a value is copied, injected, served through MCP, or pushed to a provider.
Audit rows record metadata such as secret name, agent, project context, action, result, and timestamp.
Secret lifecycle
Every useful action is explicit.
The product is built around a narrow local runtime path: store, request, approve, use, audit.
Create a secret locally, import from a provider dashboard, or generate a random value in the app.
The encrypted vault lives on disk. On macOS the master key is in Keychain; on Linux it uses libsecret with a file fallback; on Windows it uses DPAPI.
Cursor, Claude Code, Devin, VS Code, or a shell command requests a named value through CLI, MCP, copy, or sync.
Reads can require a local session or Touch ID approval before release.
The value is copied, injected, served, or pushed; an audit event records metadata, not the raw value.
Controls
Defense is workflow-shaped.
Vibe Vault focuses on the places AI coding credentials leak in practice: repo files, local config, agent setup, copy-paste, and broad env injection.
vibevault scan finds expected env names and tracked local secret-bearing files before an agent session.
The pre-commit guard blocks tracked .env*, .mcp.json, .cursor/mcp.json, and .claude/settings.local.json.
vibevault cursor prepare wires MCP, rules, skills, ignore rules, and guardrails for the current project.
The importer saves newly generated provider keys into the local vault through a native host after explicit user action.
Cloudflare, Vercel, and PushCI receive selected secrets only when the user runs an explicit sync.
Mac-to-Mac sync uses an encrypted bundle and passphrase. It is not a hosted LunaOS cloud vault.
Boundaries
What Vibe Vault can and cannot protect.
The honest boundary matters more than broad security language.
- Copy-paste of raw keys into AI chats and notes.
- Tracked
.envand agent config files. - Unclear local access by agents and shell commands.
- Manual provider updates after key rotation.
- Missing after-the-fact evidence for agent reads.
- Protection after an approved process receives a value.
- Defense against full local malware or device compromise.
- Automatic provider revocation after a leak.
- Tamper-proof centralized compliance logs.
- SSO, SCIM, SIEM export, or centralized admin in v0.1.
Source-visible core
The security story should be inspectable.
The CLI, VaultCore package, MCP server, browser host, skills, threat model, and launch evidence live in the repository. Public launch still requires signed and notarized distribution before broad posting.