OPENAI_API_KEY=phm_a8f2c4d9API key security for Claude Code · Cursor · Windsurf · Codex
Phantom is an open-source, local-first credential boundary. It moves managed project secrets behind value-blind phm_ placeholders, then injects route-owned credentials through an authenticated local proxy for explicitly supported HTTP routes.
17 provider identities in Phantom's closed trusted-route registry
OPENAI_API_KEY=phm_a8f2c4d9XAI_API_KEY=phm_4a91c70bMISTRAL_API_KEY=phm_b6c1f827REPLICATE_API_TOKEN=phm_e8c40b71HUGGINGFACE_API_KEY=phm_c0478ab2SUPABASE_SERVICE_ROLE_KEY=phm_4f1c8ae3STRIPE_SECRET_KEY=phm_2ccb5a91RESEND_API_KEY=phm_f1a82b57GITHUB_TOKEN=phm_99a8d2bfANTHROPIC_API_KEY=phm_e1b773c0GEMINI_API_KEY=phm_38d2e6a4PERPLEXITY_API_KEY=phm_05fa9d3eCOHERE_API_KEY=phm_6d213fa4CLOUDFLARE_API_TOKEN=phm_ae15f627PINECONE_API_KEY=phm_b71204e5TWILIO_AUTH_TOKEN=phm_9d4b3e12SENDGRID_API_KEY=phm_2940bf16A registry entry defines an available exact HTTP route, not automatic setup, endorsement, or support for every provider operation. Some routes require explicit configuration; unsupported destinations and protocols fail closed. Phantom is not a sandbox, and upstream traffic still reaches the provider.
Your stack, without the plaintext
Phantom can move detected project secrets into a local vault and leave managed placeholders behind. The trusted-route identities are above; these rows cover selected editor/deployment credentials and additional vaulting examples, so visual breadth never becomes a support claim.
CURSOR_API_KEYphm_77b3e5f1WINDSURF_API_KEYphm_1c9e2a40VERCEL_TOKENphm_d9f1c102RAILWAY_TOKENphm_8b4d6f93GITHUB_TOKENphm_99a8d2bfAWS_SECRET_KEYphm_5e2a8d61GCP_API_KEYphm_c7f9b203DATABASE_URLphm_3a2e7c81MONGODB_URIphm_6e0fb529NEON_API_KEYphm_aa9d34f0UPSTASH_REDIS_TOKENphm_3fc0e851SLACK_BOT_TOKENphm_71e0d493DISCORD_BOT_TOKENphm_e74cb201CLERK_SECRET_KEYphm_8af216c3POSTHOG_API_KEYphm_d2bf1e95SENTRY_AUTH_TOKENphm_3187a4d0DATADOG_API_KEYphm_f5e290bcDOCKER_TOKENphm_b5817d4cNOTION_API_KEYphm_d04c1f86LINEAR_API_KEYphm_e2f37a91FIGMA_TOKENphm_82bd5a14Logos identify products, not endorsement. Exact-route registry entries can still require explicit configuration. Detection depends on the key name or value shape; vaulting, client setup, deployment sync, and runtime injection remain separate capabilities.
The visible change
One local command stores detected values in the selected vault and atomically rewrites managed dotenv entries. These examples are synthetic; no provider credential appears in this page or its source.
.envBeforeOPENAI_API_KEY=example-redacted-openai-valueANTHROPIC_API_KEY=example-redacted-anthropic-valueSTRIPE_SECRET_KEY=example-redacted-stripe-valueGITHUB_TOKEN=example-redacted-github-value.envAfter phantom initOPENAI_API_KEY=phm_a8f2c4d9e1b7ANTHROPIC_API_KEY=phm_2ccb5a91f604STRIPE_SECRET_KEY=phm_491e6dc8a273GITHUB_TOKEN=phm_99a8d2bf17e0phantom initMoves detected values into the selected local vault.phantom setup --client codexPreviews then writes Codex's local MCP entry.phantom exec -- codex "<your task>"Starts the agent through the supervised local session.One project, three separate surfaces
Codex sees managed names and status. GitHub can receive a diff with aphm_ placeholder—not a copied provider credential.
This synthetic OpenAI trace shows the active local proxy boundary. It is an explanatory example, not a live event or an externally trusted attestation.
Provider value absent
POST /openai/_phantom/[session]/v1/responsesOPENAI_API_KEY=phm_a8f2…Authenticated loopback
127.0.0.1 → TLS upstreamLeak intercepted in this example
{
"id": "resp_example",
"debug": "[REDACTED:vault-secret]"
}No credential value is shown in this synthetic trace.
Invalid bearers, unknown service definitions, missing route credentials, oversized request bodies, and encoded upstream responses fail before normal forwarding.
First passage
The output below is illustrative output. Ports, routes, vault backends, and local findings vary by machine and configuration. Direct downloads use the exact v0.7.8 GitHub release assets linked in the repository.
Uses Keychain when available. The verified source installer auto-detects Apple Silicon or Intel.
The release is not notarized. Inspect the pinned script and verify its checksum before any policy-dependent unblock.
Uses current-user Credential Manager when available. PowerShell selects ARM64 or x64.
Windows archives are not Authenticode-signed. Unblock only after checksum verification and only when local policy permits it.
Published GNU targets enforce a glibc 2.35 symbol ceiling; musl and Alpine are not published.
The default keyutils vault is session-persistent, not reboot-persistent. Desktop users can migrate to Secret Service; headless environments need a managed passphrase for the encrypted-file backend.
Every archive is produced by the release workflow with native smoke tests, an SPDX SBOM, and a published SHA-256 manifest. That evidence covers the release artifact—not every local shell, policy, or credential-store state. The command panels download the installer source from the exact v0.7.8source commit, verify the fixed script digest, and only then execute the local file. The scripts verify the selected archive's adjacent checksum, exact two-binary shape, and versions before promoting it into a user-owned install directory. The Linux encrypted-file path needs its managed passphrase configured before phantom init; keep that passphrase out of agent process inheritance. Review the full platform installation guide and the pinned script before running it. The retired phm.dev/install.* endpoints remain non-executable until a matching public release is independently accepted.
After the platform-specific install, confirm that the CLI and MCP server report the pinned public version.
phantom 0.7.8 phantom-mcp 0.7.8
From an owned Git repository, keep an independent provider recovery copy and begin with a supported HTTP API key—not a database connection string.
vault write completed managed dotenv rewritten no plaintext project backup
Client connection
After installing both pinned v0.7.8 binaries, preview the supported client's local MCP entry before writing it. Setup uses a local Phantom runtime and has no network package-runner fallback.
Read the complete installation and verification guide.claude/settings.local.jsonPreview the exact MCP entry. This command does not write the client configuration.
After review, apply the same client choice from a trusted terminal.
Inspect the written file before restarting Claude Code. Registration does not activate cloud service or production execution authority.
Restart Claude Code, verify the local boundary, then launch that same client through the supervised proxy session.
The trust boundary
Phantom addresses one specific risk: credentialed HTTP work in supported agent workflows. Files, unmanaged processes, user permissions, and unsupported protocols remain outside this boundary.
Authorization: phm_a8f2…POST /v1/responsessecret: OPENAI_API_KEYheader: AuthorizationOperator surface
The CLI, local proxy, vault, and MCP server are open source. Each surface reports what it can do and keeps consequential actions behind their own confirmation or trusted-terminal boundary.
phantom initMoves detected values into the selected local vault, then atomically rewrites managed dotenv entries as phm_ placeholders.
phantom exec -- <agent>Launches a child with fresh session placeholders, a separate proxy bearer, and supported SDK base-URL overrides.
phantom setup --client <name>Writes local MCP configuration for Claude Code, Cursor, Windsurf, or Codex and fails closed when no local runtime is available.
phantom check --stagedChecks staged dotenv content and added lines in other staged files for a bounded set of credential prefixes.
phantom agent report --jsonReports value-blind readiness evidence for the current project without turning that report into execution authority.
phantom audit verifyVerifies the local HMAC chain and checkpoint against the machine-local audit state; it is not an external attestation.
Phantom addresses a narrow boundary: supported agent-driven HTTP requests can use configured credentials without placing provider values in the agent's dotenv context. This compares Phantom's managed path with giving an agent a plaintext dotenv value; it is not a vendor feature benchmark.
| Capability | Phantom | Plaintext agent .env |
|---|---|---|
| Value-blind managed agent path | Yes | No |
| Open source | Yes | — |
| Local-first vault | Yes | — |
| MCP-native (supported clients) | Yes | No |
| Staged dotenv and prefix checks | Yes | No |
| Fresh proxy authorization per exec session | Yes | — |
| Configured-upstream boundary for supported HTTP routes | Yes | No |
Built for humans and coding agents
Start with the supported path, then inspect the source, threat model, platform matrix, and release receipts. Machine-readable summaries at llms.txt and llms-full.txthelp coding agents retrieve the same boundaries.
Install a pinned public release, verify its receipt, protect one project, inspect the boundary, and launch a supported client.
Open the quickstartExact setup paths for Claude Code, Cursor, Windsurf, and Codex, including the files each command writes.
Choose an agent guideRead the trust boundary, attacker assumptions, residual risks, disclosure path, and release evidence.
Review securityEvaluate local workflows first, define acceptance evidence, and keep hosted commissioning separate.
Plan an evaluationEvidence before assurance
Source, tests, a release receipt, a deployed service, and an accepted organizational control prove different things. Phantom's public documentation keeps those gates separate.
Threat model, security policy, and documented residual risks
Review the threat modelExact archives, checksums, SPDX SBOMs, and provenance verification contracts
Review release evidenceExplicit macOS, Linux, and Windows build and acceptance boundaries
Review platform supportA bounded pilot, named owners, acceptance criteria, and separate activation gates
Plan an evaluationEnterprise and public sector
Organizations can evaluate the MIT-licensed local product without a contract. Hosted, team, deployment, procurement, support, and public-sector requirements are available for bounded evaluation by written agreement with Ashlr AI. No certification or authorization is represented. SSO/SAML is not shipped, and no contractual SLA is represented as active.
Scope an evaluationPhantom's local-first core is MIT-licensed. Organizations can separately contract for a bounded evaluation, integration work, and written support terms without surrendering those open-source rights.
Use, modify, and distribute Phantom's local-first core under MIT.
Contract for evaluation, integration, and support around the MIT core.
Evaluate a local-first workflow against a named public-sector environment.
A commercial agreement buys defined services and commitments—not permission already granted by the MIT License. No payment is collected here.
Not represented as available
No generally available Phantom Cloud service or hosted control plane · No shipped SSO, SAML, or SCIM integration · No regulatory certification, authorization, or compliance attestation · No contractual SLA unless one is expressly included in a signed agreement · No supported self-hosted enterprise control plane
Review questions
Security claims are useful only when their assumptions and failure modes are visible. For a question not covered here, open a GitHub issue or email mason@ashlr.ai.
127.0.0.1. Request bodies are collected under byte and time limits; response streams remain bounded and incremental. Measure overhead in your own workload before adopting it on a latency-critical path..env file contains phm_xxxxxxxx tokens instead of real values. In the managed workflow, supported clients read those placeholders rather than provider values from the rewritten dotenv file. phantom exec gives the child fresh placeholders and a separate proxy bearer. On an exact supported route, the proxy injects only that route's vault value into its fixed auth header; client headers and bodies never resolve placeholders. Other files and unmanaged processes remain outside that boundary. Human plaintext reveal is a separate trusted-terminal action with no noninteractive bypass..env placeholder persists until you rotate it; it is not the provider credential and is not sufficient by itself to use the authenticated local proxy. phantom exec separately creates fresh session phm_ values and a fresh PHANTOM_PROXY_TOKEN for the child process. Treat a leaked placeholder as sensitive metadata and run phantom rotate.Zeroizing<String> buffers that zero those allocations on Drop. This is defense in depth, not a guarantee that every plaintext copy is erased from process or OS memory. Phantom's managed init path writes the vault before atomically replacing dotenv values and does not create a plaintext project-local backup. Existing backups, logs, and unmanaged tools are outside that boundary.phm_ placeholders. Bodies are collected under explicit byte/time limits and forwarded byte-for-byte. Only an exact matched route can inject its own vault value into its fixed authentication header..envbackup during init. Keep an independent provider recovery path before migrating. phantom unwrap only reverses package-script wrapping; it does not restore dotenv values. To leave, recover or rotate credentials through the provider, update your dotenv file in a trusted terminal, then remove Phantom configuration.Start locally
MIT licensed · Local-first open core · Commercial evaluations by written agreement