keyvault-skill-cecc89 — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited keyvault-skill-cecc89 (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
When you (an AI agent) need to handle API keys, tokens, or credentials, use KeyVault instead of plaintext .env files or hardcoded values.
--project) over global secrets.inject --no-global --key ...) for command execution.# Core package
pip install git+https://github.com/ylz201/keyvault.git
# With MCP support
pip install "keyvault-ai[mcp] @ git+https://github.com/ylz201/keyvault.git"
# Verify environment and storage backend
keyvault infoset - create/update a secretkeyvault set KEY [VALUE] [--project PROJECT] [--desc TEXT] [--stdin]Examples:
# hidden prompt (recommended)
keyvault set OPENAI_API_KEY
# value via argument
keyvault set OPENAI_API_KEY sk-xxx
# value from stdin (safe for scripts)
printf 'sk-xxx' | keyvault set OPENAI_API_KEY --stdin
# project-scoped override
keyvault set OPENAI_API_KEY sk-proj --project myapp --desc "OpenAI for myapp"get - read a secretkeyvault get KEY [--project PROJECT] [--unmask]Examples:
keyvault get OPENAI_API_KEY
keyvault get OPENAI_API_KEY --project myapp
keyvault get OPENAI_API_KEY --project myapp --unmasklist - list stored secrets (metadata only)keyvault list [--project PROJECT] [--all]Examples:
keyvault list
keyvault list --project myapp
keyvault list --alldelete - remove a secretkeyvault delete KEY [--project PROJECT] [--force]Examples:
keyvault delete OPENAI_API_KEY --project myapp
keyvault delete OPENAI_API_KEY --forceimport and export - dotenv compatibilitykeyvault import FILEPATH [--project PROJECT]
keyvault export [--project PROJECT] [--output FILE]Examples:
keyvault import .env --project myapp
keyvault export --project myapp --output .env.myapp
# stdout export is possible but handle permissions yourself
keyvault export > .env && chmod 600 .envscan-env - intelligent dotenv scanning and importkeyvault scan-env [--project PROJECT] [--file FILE ...] [--root DIR] [--recursive] [--all] [--apply/--dry-run] [--force]Examples:
# preview only (recommended first)
keyvault scan-env --project myapp --dry-run
# import high-confidence secret-like keys from discovered .env files
keyvault scan-env --project myapp --applyinject - run subprocess with env secretskeyvault inject [--project PROJECT] [--global/--no-global] [--key KEY ...] -- CMD [ARGS...]Examples:
# inject global + project scope (default behavior)
keyvault inject --project myapp -- python app.py
# least-privilege injection (recommended)
keyvault inject --project myapp --no-global --key OPENAI_API_KEY -- python app.pyinfo and harden - inspect and harden key storagekeyvault info
keyvault harden [--delete-file] [--force]Examples:
# migrate master key to OS keyring and delete legacy key file
keyvault harden --delete-filekeyvault set OPENAI_API_KEY --project myapp
keyvault set DEEPSEEK_API_KEY --project myapp
keyvault list --project myappkeyvault set OPENAI_API_KEY sk-new --project myapp
keyvault get OPENAI_API_KEY --project myappkeyvault inject --project myapp --no-global --key OPENAI_API_KEY -- python run.py# preview what would be imported
keyvault scan-env --project myapp --dry-run
# apply import
keyvault scan-env --project myapp --applyfrom keyvault import get_secret, set_secret, list_secrets, delete_secret
set_secret("OPENAI_API_KEY", "sk-xxx", project="myapp", description="OpenAI key")
value = get_secret("OPENAI_API_KEY", project="myapp", fallback_env=False)
items = list_secrets(project="myapp")
deleted = delete_secret("OPENAI_API_KEY", project="myapp")SDK resolution order for get_secret:
os.environ (only if fallback_env=True)Start server:
python -m keyvault.mcp_serverClaude Desktop config:
{
"mcpServers": {
"keyvault": {
"command": "python",
"args": ["-m", "keyvault.mcp_server"]
}
}
}Available tools:
secrets_listsecrets_getsecrets_setsecrets_deleteDefaults are restrictive. Configure explicitly before starting MCP server.
| Variable | Default | Purpose |
|---|---|---|
KEYVAULT_MCP_ALLOW_LIST | 0 | Enable secrets_list |
KEYVAULT_MCP_ALLOW_GET | 0 | Enable secrets_get |
KEYVAULT_MCP_ALLOW_SET | 0 | Enable secrets_set |
KEYVAULT_MCP_ALLOW_DELETE | 0 | Enable secrets_delete |
KEYVAULT_MCP_ALLOW_GLOBAL | 0 | Allow global scope (otherwise project required) |
KEYVAULT_MCP_ALLOW_ALL_SCOPES | 0 | Allow list across all scopes |
KEYVAULT_MCP_ALLOW_ALL_KEYS | 0 | Allow arbitrary key names for get/set/delete |
KEYVAULT_MCP_ALLOWED_KEYS | unset | Comma-separated key allowlist |
KEYVAULT_MCP_INCLUDE_DESCRIPTIONS | 0 | Include descriptions in list output |
Recommended safe MCP profile:
export KEYVAULT_MCP_ALLOW_LIST=1
export KEYVAULT_MCP_ALLOW_GET=1
export KEYVAULT_MCP_ALLOW_GLOBAL=0
export KEYVAULT_MCP_ALLOWED_KEYS=OPENAI_API_KEY
python -m keyvault.mcp_server| Variable | Default | Purpose |
|---|---|---|
KEYVAULT_DIR | unset | Override vault directory |
KEYVAULT_HOME | unset | Alternative vault directory override |
KEYVAULT_MASTER_KEY_BACKEND | auto | auto / keyring / file |
KEYVAULT_KEYRING_SERVICE | keyvault-ai | Keyring service name |
KEYVAULT_KEYRING_USERNAME | master-key | Keyring account key |
KEYVAULT_ALLOW_UNSAFE_MASTER_KEY_REGEN | 0 | Force master key regeneration when old key is unavailable (unsafe) |
If a required key is missing, prompt user with:
This operation requires OPENAI_API_KEY. Please run: keyvault set OPENAI_API_KEY <your-key> --project <project-name> and then retry.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.