Open source. On your Mac.

Keep the keys.
Share the results.

Give coding agents credentials at runtime, not in chat. One local vault, shared across your projects.

Current sm app with the new logo, Cloudflare, OpenAI and Stripe groups, and config labels. Demo data.
One vault. No credentials on display.Actual app · demo data

Connect once.
Use your usual agents.

  • OpenCode
  • Claude Code
  • Hermes
  • Codex
  • DeepSeek Harness
  • Cursor
  • Gemini CLI
  • Windsurf

The command needs the key.
The conversation doesn’t.

Store a credential once. Your agent chooses it by name, runs the command, and gets the result back.

  1. 01

    Store it locally

    age-encrypted on disk. The vault identity stays in your macOS Keychain.

  2. 02

    Inject it at runtime

    The MCP server passes selected credentials to the child command as environment variables.

  3. 03

    Return the result

    Your agent gets an exit code and captured output with exact sensitive values masked.

Two tools. No secret_get.MCP / stdio
secret_list
Names, groups and status. No values.
secret_run
Run a command with selected credentials.
Example tool arguments
{
  "command": "aws s3 ls",
  "service": "aws"
}

This reduces accidental exposure, not the authority of the child process. Read the boundaries.

Less setup. Fewer copies.

Move credentials out of scattered files and into a small, local tool you can inspect.

Paste, review, save.

Import .env, JSON, YAML or a provider’s credential block. Edit the names, groups and types before anything is saved.

Actual sm import review: GitHub token name, group, masked value and Secret type
Parsed on your device. Never sent to a model.

A group for each service.

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 -- ./app

References, not duplicated keys.

Use global secrets in any folder. Project manifests and .env references point to values without containing them.

GITHUB_TOKEN=sm://GITHUB_TOKEN

Unwire when you want.

Remove the sm MCP entry from one harness or all of them, without touching the rest of its configuration.

sm setup --remove --agent claude

A backup you own.

Save a passphrase-encrypted archive. Verify it locally and restore into an empty vault on another Mac.

Recovery guide

Locked by default.

The desktop apps unlock with a passphrase, Touch ID on macOS, or a fingerprint on Linux. The CLI and MCP stay available.

sm lock set

Values when you need them.

Plain 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
See what happens under the hoodRuntime architecture
sm architecture: agents call MCP, selected credentials reach a child command, and redacted output returns
Created with Archify. Architecture notes ↗

Trust starts with the limits

Local doesn’t mean
invulnerable.

No account, cloud sync or telemetry. But sm is not a sandbox, and it shouldn’t pretend to be one.

Read the threat model
  • Children receive plaintext

    Arbitrary code can encode or exfiltrate credentials. This is not an egress firewall.

  • Redaction is exact-value masking

    Encoded values, raw TTY output and alternate channels are outside the guarantee.

  • Selection is cooperative

    --only and service choose values for well-behaved callers. They are not authorization.

Your keys.
Your machine.

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.

macOS 13+ · Linux
Homebrew · macOS app + CLI
brew tap karthikmprakash/tap
brew install --cask sm
  1. Or download the CLI directly

    Latest release · GitHub CLI
    gh release download \
      -R karthikmprakash/agents-secret-manager \
      -p 'sm-darwin-arm64*'
    shasum -a 256 -c sm-darwin-arm64.sha256
  2. Install the binary

    Terminal
    chmod +x sm-darwin-arm64
    mkdir -p ~/.local/bin
    mv sm-darwin-arm64 ~/.local/bin/sm
  3. Desktop apps

    macOS app + Linux desktop
    # 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-amd64
  4. Set up once

    Vault, secrets, agents
    sm onboard
    sm ui

Use 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.

Prefer to build from source? ↗