Paste, review, save.
Import .env, JSON, YAML or a provider’s credential block. Edit the names, groups and types before anything is saved.
Connect once.
Use your usual agents.
Store a credential once. Your agent chooses it by name, runs the command, and gets the result back.
age-encrypted on disk. The vault identity stays in your macOS Keychain.
The MCP server passes selected credentials to the child command as environment variables.
Your agent gets an exit code and captured output with exact sensitive values masked.
{
"command": "aws s3 ls",
"service": "aws"
}
This reduces accidental exposure, not the authority of the child process. Read the boundaries.
Move credentials out of scattered files and into a small, local tool you can inspect.
Import .env, JSON, YAML or a provider’s credential block. Edit the names, groups and types before anything is saved.
Keep a base URL beside its API key. Mark plain config separately, and inject a whole group when you need it.
sm exec --service stripe -- ./appUse global secrets in any folder. Project manifests and .env references point to values without containing them.
GITHUB_TOKEN=sm://GITHUB_TOKENRemove the sm MCP entry from one harness or all of them, without touching the rest of its configuration.
sm setup --remove --agent claudeSave a passphrase-encrypted archive. Verify it locally and restore into an empty vault on another Mac.
Recovery guideThe desktop apps unlock with a passphrase, Touch ID on macOS, or a fingerprint on Linux. The CLI and MCP stay available.
sm lock setPlain config is visible in the app. Reveal a secret for 20 seconds, or print one locally. Reveals are audited, and MCP still cannot return values.
sm get STRIPE_API_KEY
Trust starts with the limits
No account, cloud sync or telemetry. But sm is not a sandbox, and it shouldn’t pretend to be one.
Read the threat modelArbitrary code can encode or exfiltrate credentials. This is not an egress firewall.
Encoded values, raw TTY output and alternate channels are outside the guarantee.
--only and service choose values for well-behaved callers. They are not authorization.
Install the macOS app and CLI with Homebrew, or take the direct downloads for macOS and Linux. Free, open source and built for individual developers.
Desktop apps unlock with a passphrase, Touch ID on macOS, or a fingerprint on Linux. The CLI and MCP stay available.
brew tap karthikmprakash/tap
brew install --cask smgh release download \
-R karthikmprakash/agents-secret-manager \
-p 'sm-darwin-arm64*'
shasum -a 256 -c sm-darwin-arm64.sha256chmod +x sm-darwin-arm64
mkdir -p ~/.local/bin
mv sm-darwin-arm64 ~/.local/bin/sm# macOS app (universal)
curl -LO https://github.com/karthikmprakash/agents-secret-manager/releases/latest/download/sm-macos-app.zip
unzip -q sm-macos-app.zip -d sm-macos
open sm-macos/sm.app
# Linux desktop (run beside the sm binary)
curl -LO https://github.com/karthikmprakash/agents-secret-manager/releases/latest/download/sm-desktop-linux-amd64
chmod +x sm-desktop-linux-amd64
./sm-desktop-linux-amd64sm onboard
sm uiUse an empty download folder. The macOS downloads are not notarized; if macOS blocks the CLI, run xattr -d com.apple.quarantine ~/.local/bin/sm. Linux desktop needs GTK 3 and WebKitGTK 4.0 or 4.1.