concealer

The local-only secret manager for the AI-coding era.

No cloud, no telemetry, no account.
Your agents use secrets without ever seeing them.

🔒 Local-only 🤖 AI-safe by design ⭐ Open source (MIT) 🧩 CLI · Web · TUI · MCP · Extension
$ brew install fxerkan/tap/concealer
Why concealer

Built for how we code now

Coding assistants read your files. The moment a key lands in a .env it can leak. concealer keeps secrets encrypted, scoped, and out of every transcript.

🤖

AI-era by design

An MCP server lets agents list names and inject values into a command's environment — plaintext is redacted from everything they see. Registration + rate limits stop bulk exfiltration.

🧳

Portable, not machine-bound

The vault decrypts on any machine with just the master password — not tied to a Keychain or TPM. Copy the files, type the password, done.

Open source & inspectable

One readable Python script, MIT-licensed. No black box, no account, no telemetry — verify with a firewall that nothing phones home.

🔐

SOPS + age crypto

All encryption is delegated to battle-tested tools: AES-256-GCM over age X25519. The age private key never touches disk in plaintext — key-at-rest.

🧾

Tamper-evident audit

Every read, write, copy and inject is appended to an HMAC-chained log with a monotonic seq and a tail anchor. Names and actions only — never values.

🎯

One place, many projects

Disambiguate the same value across repos by tenant / project / environment / repo. The most-specific scope wins at inject time.

Under the hood

One file, delegated crypto, five ways in

Every interface funnels into a single Python script that shells out to SOPS + age. The encrypted vault and key material never leave your machine.

concealer system architecture — CLI, Web UI, TUI, MCP and Chrome extension over a single-file core, SOPS + age, and an encrypted vault
concealer MCP flow — an AI agent lists secret names and runs a command with a named secret injected, while the value stays redacted from its context

The MCP flow: agents use a secret without the value ever entering their context.

Five ways in

CLI · Web UI · TUI · MCP · Chrome Extension

The same encrypted vault, however you like to work.

CLI

One command, any secret

Set, get, run-with and deploy secrets from the terminal — scoped by tenant / project / environment / repo. cer run injects them into a child process's environment and redacts the values from its output.

cer set · cer get · cer run · cer list

concealer CLI — set, get, run and list secrets
Web UI

A professional local console

Type-aware forms, searchable multi-select filters, per-secret deploy renderers, clipboard copy with auto-clear, and a tamper-evident audit viewer. Bilingual (TR/EN), dark/light/matrix themes, localhost only.

concealer web → http://127.0.0.1:8787

concealer Web UI — searchable, scoped secrets
TUI

Full terminal interface

Browse, search, add, delete and reveal secrets without leaving the terminal — arrow keys, instant filtering, type-aware editing.

concealer tui

concealer TUI — terminal secret browser
MCP · Agents

Agents use secrets, never see them

Register an agent, hand it a revocable token, and it can inject a DB password to run a query — while the value stays redacted from its context. Every call is audited with source=mcp.

concealer agent register claude

Agent listing concealer secrets over MCP — names only, never values
Chrome Extension

Copy secrets from your toolbar

Open your vault and copy secret values straight from Chrome — no cer web. Multi-field secrets expand for per-field copy & reveal; the popup starts on demand and self-locks when idle. Dark / White / Matrix themes.

Add to Chrome → · cer chrome-extension · full guide →

concealer Chrome extension — copy secrets from the toolbar
Quick start

Up and running in a minute

# install (pulls in sops, age, expect) brew install fxerkan/tap/concealer # create the vault — prints recovery codes + a CLI token, once concealer init # unlock your shell session (~8h token) — `cer` is the short alias for `concealer` eval "$(cer unlock)" # store & use a secret — the value never hits your terminal cer set --name OPENAI_API_KEY --project web --env prod 'sk-DUMMY-123' cer run --project web --env prod npm run deploy

Read the full guide →

Stop pasting keys into chat windows.

Local-only. Portable. Open source. Built for the AI-coding era.

Docs
Support

Questions, bugs or feedback?

Reach out directly — we read every message and usually reply within a day.