Delegate everything to AI.
Without sharing a single key.
Phantom hands every AI tool a worthless phm_ token. The local proxy injects the real key at the network layer. Full access. Zero exposure.
Replaces real keys for 35+ services and counting
Same workflow. Different posture.
One command rewrites your .env. Real secrets move to the vault. AI sees only the phantoms.
OPENAI_API_KEY=sk-proj-aB3xK9…ANTHROPIC_API_KEY=sk-ant-api03-9X2v…STRIPE_SECRET_KEY=sk_live_51HxAb…DATABASE_URL=postgres://app:••••@db.prod:5432/app
OPENAI_API_KEY=phm_a8f2c4d9e1b7ANTHROPIC_API_KEY=phm_2ccb5a91f604STRIPE_SECRET_KEY=phm_491e6dc8a273DATABASE_URL=phm_99a8d2bf17e0
Built like a real CLI.
No dashboard required. Everything lives in your terminal, your editor, and your existing infrastructure.
MCP-native, every editor
Claude Code, Cursor, Windsurf, Codex. Phantom registers as an MCP server so AI can manage secrets through a tool interface — without ever seeing the values.
$ claude mcp add phantom-secrets-mcp \
-- npx phantom-secrets-mcp
ok registered 24 toolsCatches leaks before they ship
phantom check runs as a pre-commit hook and blocks any commit containing an unprotected secret. Nothing slips past.
$ git commit -m "wip" ! 3 unprotected secrets in src/config.ts: line 4: OPENAI_API_KEY=sk-proj-... line 7: STRIPE_KEY=sk_live_... fix: run `phantom add` to vault them.
One source of truth, everywhere
Push secrets to Vercel and Railway. Pull on a new machine. Sync to Phantom Cloud (end-to-end encrypted) so your team is never stuck Slacking a .env.
$ phantom sync --platform vercel ok vercel: 4 created, 1 updated $ phantom pull --from vercel ok imported 5 secrets to vault
Why not just use what you have?
Every other secrets manager assumes the wrong threat model. They protect secrets at rest and in transit — but the moment you give one to an AI tool, it leaks. Phantom protects them in context.
| Capability | Phantom | .env file | Doppler | 1Password CLI | Infisical | AWS Secrets Mgr |
|---|---|---|---|---|---|---|
| AI tools never see real keys | Yes | No | No | No | No | No |
| Open source | Yes | — | No | No | Yes | No |
| Local-first vault | Yes | Yes | No | Yes | No | No |
| MCP-native (every editor) | Yes | No | No | No | No | No |
| Pre-commit secret scanning | Yes | No | Yes | No | Yes | No |
| Free tier | Yes | — | Limited | No | Yes | Limited |
| Setup time | 10 seconds | — | minutes | minutes | minutes | hours |
| Cloud sync (E2E encrypted) | Yes | No | Yes | Yes | Yes | Yes |
Comparison reflects each tool's default tier and primary use-case as of April 2026. Phantom is purpose-built for the AI-coding-tool workflow; the others are general-purpose secrets managers retrofitted to the same problem.
Install in ten seconds.
One CLI, one MCP registration. Pick your editor.
One command. Claude registers the MCP server and discovers all 24 tools.
Sixty seconds to a safe .env.
Three commands. Real output. Nothing hidden. If anything looks different on your machine, run phantom doctor.
Install
One command. Downloads the binary for your platform.
$ npx phantom-secrets init -> Found 4 secrets in .env ok vault initialized · macOS Keychain ok .env rewritten with phm_ tokens ok pre-commit hook installed ok CLAUDE.md updated
Wire it to your editor
MCP registration so Claude / Cursor / Windsurf see Phantom as a tool.
$ claude mcp add phantom-secrets-mcp \
-- npx phantom-secrets-mcp
ok registered phantom-secrets-mcp
ok 24 tools available to ClaudeCode with AI normally
Your AI tool reads phm_ tokens. The proxy injects real keys at the network layer.
$ phantom exec -- claude
-> proxy started on 127.0.0.1:8484
-> intercepting api.openai.com, api.anthropic.com,
api.stripe.com (+10)
-> launching claude with PHANTOM_PROXY envFree for you. Eight bucks for your team.
The CLI, vault, proxy, and MCP server are open source forever. Cloud sync and multi-device cost what a coffee costs.
Free
Local-first. Open source. Forever.
- Local vault (OS keychain or encrypted file)
- Proxy with full streaming support
- MCP server for every editor
- 1 cloud vault, up to 10 secrets
Pro
Cloud sync, multi-device, full backup.
- Everything in Free
- Unlimited cloud vaults
- Multi-device sync (E2E encrypted)
- Vault backup & restore
Enterprise
Teams, audit, SSO, dedicated support.
- Everything in Pro
- Team vaults & sharing
- Audit log + SSO/SAML
- Dedicated support
End-to-end encrypted. Cancel any time. Open source forever.
One CLI. Three layers.
Real secrets never touch the AI context window. Phantom sits between your code and the API, swapping decoys for real keys at the network layer.

Read your .env
Phantom auto-detects 13+ services and replaces real values with phm_ tokens.
Lock in the vault
Real keys move to your OS keychain. ChaCha20-Poly1305 + Argon2id. Encrypted-file fallback for CI and Docker.
Inject on the wire
AI calls APIs with the phm_ token. The proxy on 127.0.0.1 swaps it for the real key and forwards over TLS. AI never sees a real secret.
Questions a security-minded developer would ask.
If yours isn't here, file an issue on GitHub or email mason@ashlr.ai.
Does Phantom slow down my AI requests?
127.0.0.1 and uses zero-copy streaming for response bodies, so SSE and large downloads pass through at native speed.What does AI actually see when Phantom is installed?
.env file contains phm_xxxxxxxx tokens instead of real values. Every AI tool (Claude Code, Cursor, Windsurf, Codex, anything else that reads .env) reads those tokens and only those tokens. The local proxy swaps them for real keys just before the outbound TLS connection — the AI never touches a real secret.What if a phm_ token leaks from AI logs?
phm_ tokens are session-scoped placeholders that have no value outside your local proxy. The real key never left your machine. Rotate the token with phantom rotate and the leaked one becomes inert.How are real keys stored?
Zeroizing<String> so plaintext is scrubbed from RAM by Drop. No plaintext ever touches disk outside the encrypted vault file.Can the proxy be tricked into revealing the real key?
What about secrets in HTTP request bodies, not just headers?
phm_ tokens and replaces all of them. Streaming bodies (SSE, large uploads) are scanned chunk-by-chunk without buffering.Can my team share secrets without sharing the .env?
What if I want to leave Phantom?
.env is backed up automatically on init. Run phantom unwrap to restore it. Delete .phantom.toml and Phantom is gone — no lock-in, no migration scripts.