Be honest. You've pasted a Stripe key into a Claude chat. Probably a Supabase one too. Maybe your OpenAI key while debugging that "why won't my chatbot stop talking" issue at 1 AM.
You're not stupid. You're shipping. Claude says "give me your SUPABASE_SERVICE_ROLE_KEY and I'll wire it up" and you do, because the alternative is reading the Supabase docs for forty minutes. You got the app working. The customer is using it. That's a win.
But here's what nobody tells you: that key is now in five places you didn't intend.
Where your keys actually are right now
When you pasted that Stripe key, it went into:
- Anthropic's chat logs. Most AI providers keep your prompts for 30+ days for "safety review." Your key is in there.
- Claude's memory of the project. If you're using projects or a long-running session, the key is in the context window. Every reply Claude generates can mention it.
- A file Claude wrote. If Claude saved a
.envfile or pasted the key into a code snippet, it's on disk in plain text. Probably also in your git history. - A screenshot you took. You shared a screenshot of "this works!" in a Discord. The terminal had the key in it.
- Your Cursor/VS Code tab history. Editors cache file contents. Yours probably has a few hundred MB of recently-opened files including ones with live credentials.
Any one of those places leaking is enough to drain your Stripe account, max out your OpenAI bill, or let someone read every row in your Supabase database.
You don't have to be a hacker target. You just have to be unlucky.
What secrets-manager actually does
We built a free, open-source secrets manager called secrets-manager. It's a lock box for your API keys that lives on your own computer. No cloud, no account.
Here's the trick: Claude can use the keys, but Claude can never see the keys.
You put a key into the lock box once (you type it in, or paste it from the vendor's dashboard). After that, you tell Claude "hey, this app needs the Stripe key" and Claude can wire it up. But every time Claude tries to look at the actual value, it sees a code name like STRIPE_API_KEY and a fingerprint. Not the value.
When your app actually needs the key, at runtime, the lock box hands it straight to the app at the last possible second. Claude is never in the loop for the real value, and neither is anyone else.
It's the same shape as how your manager handles your bonus: she can approve it, sign for it, and make it happen, but the actual amount lives in a system she touches by reference, not by reading numbers off a sticky note.
Setting it up takes 3 commands
You'll need a terminal. If you've been vibe-coding with Claude, you've used one, even if Claude was driving.
git clone https://github.com/JigSpec/secrets-manager.git
cd secrets-manager
sudo ./install.sh Then start the lock box (it will ask you to set a master password. Pick something good, write it down somewhere safe):
sm-daemon start Last step: connect it to Claude. secrets-manager runs as an MCP server, so Claude Desktop can talk to your lock box directly. Open ~/Library/Application Support/Claude/claude_desktop_config.json (on Mac) and add:
{
"mcpServers": {
"secrets-manager": { "command": "sm-mcp" }
}
} Restart Claude. Now ask: "Can you check that secrets-manager is working?"
Claude will reply with something like "Yes, daemon is running, vault unlocked." You're set.
Your new day-to-day
Before, when you wanted to wire up a service:
You: "Here's my Stripe key: sk_live_4eF7..." (💀)
Now:
You: "I need to add Stripe to this app. The keys are in my lock box already."
Claude: "Got it. I'll scope
STRIPE_API_KEYto yourliveenvironment and deploy. Want me to dry-run first?"
If you don't have the key yet:
You: "I need to add Mailgun. I haven't gotten the key from them yet."
Claude: "I'll add a placeholder with instructions. Go to mailgun.com → API → keys, copy the live key, paste it into the local secrets-manager dashboard at localhost:3000. Then tell me to deploy."
That's it. You never paste a key into the chat again. You never type one into a code file. You never accidentally commit one to GitHub.
What about the keys I already pasted?
Honestly? Rotate them.
Go to each vendor (Stripe, Supabase, OpenAI, whatever), find "rotate key" or "regenerate," click it, the old key dies. The new one goes straight into your lock box, where Claude can use it but never see it.
Yes, this is annoying. Yes, it takes 30 minutes. Yes, do it anyway. Pretend you got an email saying "your old keys are now public." Because honestly, you don't know that they aren't.
FAQ
Wait, is my data actually leaked?
Probably not in the "criminals are draining your account right now" sense. But your keys are in places you can't audit. Rotate them, put the new ones in the lock box, and move on.
How much does this cost?
Free. Open source. You download it and run it. There's no account, no subscription, no "free tier" trick. It runs on your computer. We don't see your keys either.
Do I need to be technical to use this?
You need to be comfortable opening Terminal and pasting three commands. If you've been shipping apps with Claude, you've already done harder things than that. After setup, Claude handles the rest.
What about my partner / cofounder / contractor, can they use the same keys?
Not yet. Today, the lock box lives on your machine. A teammate sync feature is coming. When they add or rotate a key, your machine gets the update automatically, end-to-end encrypted. Today: each person has their own lock box.
Will this work on Windows?
macOS and Linux today. Windows installer is in progress.
What if I forget my master password?
There's no recovery. We can't reset it. Nobody can. That's the point: if we could reset it, an attacker could too. Pick a password, write it on paper, put it in your wallet. Treat it like a hardware-wallet seed phrase.