hush
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
hush — keep API keys out of AI agent chats
Scope honesty
hush protects the transcript: values never enter chat, tool outputs, or
logs through its own channels. It does not protect against a hostile or
prompt-injected agent with shell access — such an agent can cat the vault,
tee stdin to disk, or transform values (base64/reverse) past literal
redaction. If your adversary is the agent itself, you need OS-level isolation
(keychain, daemon + socket auth), not hush. See SECURITY.md.
npm i -g --allow-scripts=hush-secrets hush-secrets # installs binary + skill
hush set MY_API_KEY # in YOUR terminal, never in chat
hush update # self-update via npm (needs npm on PATH)Related MCP server: keyward
Why
Pasting a secret into a harness chat leaves it in the transcript forever.
hush separates the channels: the human loads values via TTY or the harness
native prompt (over MCP), the agent only orchestrates names. No tool ever
returns a value.
MCP (harness-agnostic: claude, opencode, cursor, codex)
hush serve exposes stdio with 4 tools: hush_check, hush_list, hush_need
(asks for the value via elicitation and stores it), hush_run (injects +
redacts). hush setup installs the skill, registers the server, and offers
to add harness permission rules so the agent cannot read ~/.hush with its
file tools (Claude Code, opencode v2) or runs hush without confirmation
(Codex).
CLI
openssl rand -hex 24 | hush set WHATSAPP_VERIFY_TOKEN
hush check WHATSAPP_VERIFY_TOKEN META_APP_SECRET
hush stdin WHATSAPP_VERIFY_TOKEN -- npx wrangler secret put WHATSAPP_VERIFY_TOKEN
hush run --only META_APP_SECRET -- npx wrangler deploy
hush statuscheck and list print names only. run and stdin inject into the child
process and redact output to [REDACTED].
hush run waits for the command to exit before printing, so redaction sees
the whole output. To wrap a long-lived stdio process such as an MCP server,
add --stream: output is forwarded line by line as it arrives (trade-offs in
SECURITY.md).
"jira": {"type": "local", "command": ["hush", "run", "--stream", "--only", "JIRA_API_TOKEN", "--", "jira-mcp"]}Where secrets live, and getting them back
Values are stored in ~/.hush/vault (file 0600, dir 0700), one
NAME=value per line. There is intentionally no read-back over MCP and
no get command — anything an agent can call ends up in its context.
To recover a value (rotation, migration, backup), use a real terminal:
hush export # prints all, NAME=value per line
hush export META_APP_SECRET # prints oneexport refuses to run unless stdout is a TTY, so a harness cannot capture it
by piping (a pty is not proof of a human — see SECURITY.md). Back up the file itself (cp ~/.hush/vault …) for disaster
recovery; wipe with rm -rf ~/.hush. See SECURITY.md and PRIVACY.md.
Notes
Linux and macOS only (amd64/arm64). No Windows (TTY model).
hush_runover MCP asks for human confirmation on every call and times out slow commands at 5 minutes, so don't start long-lived processes through it: run them in your terminal, or wrap an MCP server withhush run --streamin your harness config.Elicitation (native secret prompts) needs an interactive session; headless runs get the safe fallback (
hush setin your terminal).
Verified harnesses
Harness | MCP tools | Elicitation UI |
OpenCode | ✅ verified live | interactive sessions |
Codex | ✅ via | interactive sessions |
Pi | ✅ verified headless | interactive sessions |
Claude Code | registration via | interactive sessions |
Cursor |
| interactive sessions |
Docs
SECURITY.md (threat model) · PRIVACY.md · CONTRIBUTING.md · CHANGELOG.md
Alternatives
hush | psst | key-amnesia | akm | 1Password MCP | |
Values hidden from transcript | ✅ | ✅ | ✅ | ✅ | ✅ |
Hostile-agent isolation | ❌ honest | ❌ | parcial | parcial | ❌ |
MCP server | ✅ | ❌ | ❌ | ❌ | ✅ (Codex only) |
Load via native prompt (no chat) | ✅ elicitation | ❌ | ✅ popup | ❌ | ✅ |
TTY-only export | ✅ | ❌ | ❌ | ❌ | ❌ |
Vault corruption guard | ✅ | n/a | ❌ | ❌ | n/a |
Harness-agnostic setup | ✅ | ❌ | parcial | ❌ | ❌ |
Single binary, no runtime | ✅ Go | ✅ | ❌ Python | ✅ Rust* | ❌ |
Works offline / local-only | ✅ | ✅ | ✅ | ✅ | ❌ |
*akm is macOS-only (Keychain). hush keeps a plain 0600 file so any dev can
inspect, back up, and recover it with standard tools.
Development
make check # generate + fmt + vet + test + build
make hook # pre-commit (generate + fmt + vet + test)
./scripts/release.sh 0.2.0 # bump + tag (workflow publishes npm + release)Conventional commits: feat:, fix:, chore:, docs:, refactor:, test:.
SKILL.md is the single source of the skill; internal/setup/skill.md is
regenerated with go generate ./... (a test enforces it).
This server cannot be deployed
Maintenance
Related MCP Connectors
A secret store for AI agents: the agent never sees the plaintext.
Secrets for developers and agents—secure context and workflows without exposing secret values.
Encrypted secret store and rotation for autonomous agent credentials
Credential isolation for AI agents: placeholder secrets, policy checks, optional human approval.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEncrypts and stores API keys and environment variables locally, providing them to AI agents via MCP with tools for listing, describing, getting secrets, and running commands with secret values redacted.2MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to securely use API keys by storing them in an encrypted vault and injecting them on demand with user approval, without exposing the key values to the model.3MIT
- AlicenseCqualityCmaintenanceEnables AI agents to securely store and manage encrypted secrets locally while using them indirectly through environment-variable injection or file writes, so plaintext values never enter the agent's context.8MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI coding agents to securely inject API keys and secrets into environment files, configs, or commands without the agent ever seeing the secret values.2 npmMIT