Unseenkey
Open source · v0.1 alpha · Windows, macOS, Linux

Let AI agents, scripts and the people you hire use your API keys — without ever seeing them.

Unseenkey keeps your keys in an encrypted vault on your machine and hands out handles instead. A handle only works through the local broker, within a policy you set, and every call is logged.

A leaked handle costs you nothing. A leaked key costs you until you notice.

0provider presets
0 msp99 broker overhead
0tests on every push
0 bytesof telemetry, ever

Two minutes with Claude Code

Add the key once. From then on every tool gets a handle, and the broker does the rest.

Works the same for OpenAI, Stripe, AWS, GitHub, Google, Slack and twelve more providers, plus any other host. --shell powershell|cmd|dotenv prints the variables for your shell or .env. The daemon starts itself, listens on loopback only, and locks when you walk away.

PowerShell

How it works

The key never leaves the vault except inside a request the policy allowed. Watch an allowed call go through, and a forbidden one stop at the broker.

Your SDK, agent or contractor holds only a handle ANTHROPIC_API_KEY=usk_h_7Qx… useless in a chat, a repo, a log, or on anyone else's machine Claude Code · Cursor · boto3 · curl · a hired developer Unseenkey broker 127.0.0.1 only · vault encrypted at rest 1 handle → secret, decrypted per request 2 policy: host · path · rate · expiry · approval 3 audit entry before the first byte leaves 4 real key injected into the outgoing request 5 response scrubbed of the real key refused → nothing is sent, and it is logged The provider api.anthropic.com sees a normal request with the real key Anthropic · OpenAI · Stripe · AWS · GitHub Google · Slack · 18 presets + any host handle The key never leaves the vault except inside a request the policy allowed. Every call is in a hash-chained log.

Three ways a key leaks. One fix.

Every SDK, .env file and AI agent asks for the raw key. Once it exists in plaintext it gets pasted, committed, logged, or handed to someone.

Today

Your AI agent

Claude Code, Cursor, Windsurf and MCP tools call APIs through the broker. The key is never in the context window, never in a transcript, never in the agent's memory. usk mcp install claude-code.

Today

Your own scripts and repos

usk guard fix .env moves real keys into the vault and rewrites the file with handles. Commit it, screenshot it, paste it: nothing happens. Caps and canaries catch what slips through.

Next

The developer you hire

Grant a freelancer or agency the use of a key with a policy, an expiry and a signed log, through a broker they don't control. Revoke in one click; they can prove they never held it.

What a handle can do

Each handle carries its own rules, explained in plain English, enforced before anything leaves your machine.

Policy per handle

Presets per provider: stripe:payments takes payments and refuses refunds and payouts. Paths, methods, time windows, expiry, approvals.

Hard caps

--cap 500/day: the 501st request is refused before it leaves the machine. A stolen handle cannot run up a bill.

Canaries

--canary makes a handle that never works. Plant it in .env.example; any use means someone has your files, and the vault locks.

Incident responses

A burst of refused requests throttles, pauses, asks you, or locks the vault. Your choice per handle; one click to resume.

Live approvals

Sensitive calls wait for you: allow once, allow always for this rule, or deny. Desktop notifications on Windows, macOS and Linux.

Camouflage handles

Handles shaped like the provider's own keys for SDKs that validate formats. Every format carries the usk marker.

AWS and OAuth2

boto3, the AWS CLI and the JS SDK sign with a placeholder; the broker re-signs with the real key. Refresh tokens stay in the vault.

Tamper-evident log

Every call, allowed or refused, in a hash-chained audit log, written before the first byte goes out. usk log verify.

Desktop app

Secrets, handles, approvals and activity in one window. Windows Hello unlock, lock on sleep and screen lock, signed auto-updates.

Which one would leak?

Paste a key or a handle. This runs in your browser; nothing is sent anywhere, and this page has no analytics. Still: don't paste your real keys into web pages, use the samples.

What a policy says

Every preset renders to plain English, exactly what usk policy explain prints. Pick a provider and a policy.

    Install

    Signed builds for every platform. No account, no telemetry, nothing leaves your machine.

    # Windows
    scoop bucket add unseenkey https://github.com/Bhagyesh97/scoop-unseenkey
    scoop install usk
    
    # macOS and Linux
    brew install Bhagyesh97/unseenkey/usk
    
    # from source (Rust 1.85+)
    cargo install --locked --git https://github.com/Bhagyesh97/unseenkey usk

    Desktop installers for Windows, macOS and Linux, and CLI archives for every platform, are on the releases page. Every archive has a Sigstore signature, every installer a minisign signature, and each release ships an SBOM. The installers are not yet code-signed, so Windows SmartScreen and macOS Gatekeeper warn on first launch.

    Security

    • Vault: Argon2id and XChaCha20-Poly1305, keys locked in memory, a 24-word recovery phrase, optional Windows Hello.
    • Fail closed: each secret is locked to its provider's hosts; unmatched requests, browser-origin requests and anything the broker cannot classify are refused.
    • Scrubbing: the real key and its encodings are removed from responses, logs and error messages.
    • Open: Apache-2.0, a published threat model that also says what it does not protect against, and a disclosure policy.

    Alpha software, not yet externally audited. Use it with keys you can rotate. A process with code execution on your machine can still use an unlocked vault within policy; for a hostile agent you also want an OS sandbox.

    Hiring a developer? Never hand over your keys.

    Delegation is the next thing we build: a client grants a developer or agency the use of a Stripe, AWS or OpenAI key with a policy, an expiry and a signed log, through a broker the developer does not control. If you have handed a key to a contractor, or been handed one, we would like to talk to you before we build it.