agentsecrets — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited agentsecrets (Agent Skill) and scored it 79/100 (yellow). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 5 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 5 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
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.
AgentSecrets is a complete secrets management system where you — the AI agent — are the operator.
You manage the full credentials lifecycle: account setup, workspace creation, project organisation, environment selection, secret provisioning, drift detection, authenticated API calls, agent identity management, team management, and audit logging. At no step do you see an actual credential value.
You are the operator. You never see the values.
You are operating AgentSecrets on behalf of the user. This means:
When you start, tell the user: "I can manage your AgentSecrets credentials on your behalf. I will only ever see key names, never the actual values."
Check silently:
agentsecrets --version 2>/dev/null && echo "INSTALLED" || echo "NOT_INSTALLED"If NOT_INSTALLED, detect the available package manager and tell the user which command to run. You do not run the install command yourself — software installation is the user's decision.
which npx # Node.js available
which brew # Homebrew available
which pip # Python available
which go # Go availableInstallation commands by environment:
npx @the-17/agentsecretsbrew install The-17/tap/agentsecretspip install agentsecrets-cligo install github.com/The-17/agentsecrets/cmd/agentsecrets@latestAlways run this before any secrets operation:
agentsecrets statusThis returns: logged-in user, active workspace, active project, active environment, last sync time.
If the session has expired or authentication fails, tell the user to run the following in their terminal and wait for confirmation:
agentsecrets loginIf NOT_INITIALIZED (no project config found in the current directory):
agentsecrets init --storage-mode 1The agent runs this command. --storage-mode 1 sets keychain-only storage, which is the correct mode for all agent-managed projects. After init, verify:
agentsecrets statusCheck available workspaces:
agentsecrets workspace listIf the user needs a new workspace:
agentsecrets workspace create "Workspace Name"
agentsecrets workspace switch "Workspace Name"If switching to an existing workspace:
agentsecrets workspace list
agentsecrets workspace switch "Workspace Name"Invite teammates when requested (ask user to confirm first):
agentsecrets workspace invite [email protected]AgentSecrets organises secrets by project. For OpenClaw workflows, use the dedicated OPENCLAW_MANAGER project.
Check if it exists:
agentsecrets project list 2>/dev/null | grep -q "OPENCLAW_MANAGER" && echo "EXISTS" || echo "NOT_FOUND"If EXISTS:
agentsecrets project use OPENCLAW_MANAGERIf NOT_FOUND:
agentsecrets project create OPENCLAW_MANAGER
agentsecrets project use OPENCLAW_MANAGERFor non-OpenClaw workflows, use or create the appropriate project:
agentsecrets project list
agentsecrets project use PROJECT_NAME
# or
agentsecrets project create PROJECT_NAME
agentsecrets project use PROJECT_NAMEEvery project has three environments: development, staging, and production. The active environment determines which secrets are used. Development is the default.
Check the current environment:
agentsecrets status
# Shows: Environment: developmentSwitch environment when needed:
agentsecrets environment switch production
agentsecrets environment switch staging
agentsecrets environment switch developmentView all environments and their secret counts:
agentsecrets environment listImportant: Always confirm the active environment before making API calls or modifying secrets. Running agentsecrets status shows the environment clearly. Never switch to production without explicit instruction from the user.
Copy secrets from one environment to another (same values):
agentsecrets environment copy development stagingSet up a new environment with different values (prompts for each key):
agentsecrets environment merge staging production
# This ideally should be done by the userBefore making any API call, verify the required secret exists in the active environment:
agentsecrets secrets listYou will see key names only, never values. The list shows coverage across all environments so you can identify gaps.
If a required key is missing, tell the user:
"I needKEY_NAMEto complete this. Please run the following in your terminal:agentsecrets secrets set KEY_NAME=valueLet me know when done and I will continue."
Wait for confirmation, then verify:
agentsecrets secrets listStandard key naming conventions:
| Service | Key Name |
|---|---|
| Stripe (live) | STRIPE_KEY or STRIPE_LIVE_KEY |
| Stripe (test) | STRIPE_TEST_KEY |
| OpenAI | OPENAI_KEY |
| GitHub | GITHUB_TOKEN |
| Google Maps | GOOGLE_MAPS_KEY |
| AWS | AWS_ACCESS_KEY and AWS_SECRET_KEY |
| Paystack | PAYSTACK_KEY |
| SendGrid | SENDGRID_KEY |
| Twilio | TWILIO_SID and TWILIO_TOKEN |
| Any other | SERVICENAME_KEY (uppercase, underscores) |
Before deployment workflows or when secrets may be stale:
agentsecrets secrets diffThis shows what is out of sync between local keychain and cloud for the active environment. If drift is detected:
agentsecrets secrets pullCross-environment drift check:
agentsecrets secrets diff --from development --to production
# Shows keys present in development but missing in productionTo push local changes to cloud:
agentsecrets secrets pushAlways use agentsecrets call for authenticated requests.
Basic pattern:
agentsecrets call --url <URL> --method <METHOD> --<AUTH_STYLE> <KEY_NAME>Default method is GET if --method is omitted.
Auth styles:
| Pattern | Flag | Use For |
|---|---|---|
| Bearer token | --bearer KEY_NAME | Stripe, OpenAI, GitHub, most modern APIs |
| Custom header | --header Name=KEY_NAME | SendGrid, Twilio, API Gateway |
| Query parameter | --query param=KEY_NAME | Google Maps, weather APIs |
| Basic auth | --basic KEY_NAME | Jira, legacy REST APIs |
| JSON body | --body-field path=KEY_NAME | OAuth flows, custom auth |
| Form field | --form-field field=KEY_NAME | Form-based auth |
Examples:
# GET request
agentsecrets call --url https://api.stripe.com/v1/balance --bearer STRIPE_KEY
# POST with body
agentsecrets call \
--url https://api.stripe.com/v1/charges \
--method POST \
--bearer STRIPE_KEY \
--body '{"amount":1000,"currency":"usd","source":"tok_visa"}'
# Custom header
agentsecrets call \
--url https://api.sendgrid.com/v3/mail/send \
--method POST \
--header X-Api-Key=SENDGRID_KEY \
--body '{"personalizations":[...]}'
# Query parameter
agentsecrets call \
--url "https://maps.googleapis.com/maps/api/geocode/json?address=Lagos" \
--query key=GOOGLE_MAPS_KEY
# Multiple credentials
agentsecrets call \
--url https://api.example.com/data \
--bearer AUTH_TOKEN \
--header X-Org-ID=ORG_SECRET
# Basic auth
agentsecrets call \
--url https://jira.example.com/rest/api/2/issue \
--basic JIRA_CREDS
# Paystack
agentsecrets call \
--url https://api.paystack.co/transaction/initialize \
--method POST \
--bearer PAYSTACK_KEY \
--body '{"email":"[email protected]","amount":10000}'AgentSecrets ships as a native exec provider for OpenClaw's SecretRef system (v2026.2.26 and later). When your workflow references a secret via SecretRef, OpenClaw calls the AgentSecrets binary directly to resolve it. The value is injected at execution time and never written to any OpenClaw config file.
agentsecrets execThis is the preferred integration path for OpenClaw workflows. It means credentials do not need to be configured in ~/.openclaw/.env or any other plaintext config.
For wrapping external tools that read from environment variables:
agentsecrets env -- stripe mcp
agentsecrets env -- node server.js
agentsecrets env -- npm run devValues are injected directly into the child process at start time. Nothing is written to disk. When the process exits, the values are gone.
For workflows requiring multiple calls or framework integrations:
agentsecrets proxy start
agentsecrets proxy status
agentsecrets proxy stopHTTP proxy pattern for any agent or framework:
POST http://localhost:8765/proxy
X-AS-Target-URL: https://api.stripe.com/v1/balance
X-AS-Inject-Bearer: STRIPE_KEYAfter any significant operation:
agentsecrets proxy logs
agentsecrets proxy logs --last 20
agentsecrets proxy logs --secret STRIPE_KEY
agentsecrets proxy logs --env productionOutput shows: timestamp, agent identity, environment, method, target URL, key name, status code, duration, and redaction status. Values are never logged.
Global backend logs with full governance context:
agentsecrets log list
agentsecrets log list --agent billing-tool
agentsecrets log list --identity anonymous # find calls with no identity set
agentsecrets log summary --since 7d
agentsecrets log export --format csv --since 30d
agentsecrets log detail <id>If you see (REDACTED) in the logs, it means AgentSecrets detected that an API echoed back a credential value in its response and replaced it with [REDACTED_BY_AGENTSECRETS] before it reached you. This is expected behaviour.
agentsecrets init # Set up account or initialise a new project
agentsecrets init --storage-mode 1 # Init with keychain-only mode
agentsecrets login # Login to existing account
agentsecrets logout # Clear session
agentsecrets status # Current context — workspace, project, environmentagentsecrets workspace create "Name" # Create workspace
agentsecrets workspace list # List all workspaces
agentsecrets workspace switch "Name" # Switch active workspace
agentsecrets workspace invite user@email # Invite teammateagentsecrets project create NAME # Create project
agentsecrets project list # List projects in workspace
agentsecrets project use NAME # Set active project
agentsecrets project update NAME # Update project
agentsecrets project delete NAME # Delete projectagentsecrets environment switch <n> # Switch active environment (development, staging, production)
agentsecrets environment list # List environments and secret counts
agentsecrets environment copy <from> <to> # Copy all secrets from one environment to another
agentsecrets environment merge <from> <to> # Prompt for new values per key in destination
agentsecrets environment clean # Delete all secrets in current environmentagentsecrets secrets set KEY=value # Store secret in active environment
agentsecrets secrets get KEY # Retrieve value (visible to user, not to agent)
agentsecrets secrets list # List key names with cross-environment coverage
agentsecrets secrets list --project NAME # List keys for specific project
agentsecrets secrets push # Upload to cloud (encrypted)
agentsecrets secrets pull # Download cloud secrets to keychain
agentsecrets secrets delete KEY # Remove secret from active environment
agentsecrets secrets diff # Compare local vs cloud for active environment
agentsecrets secrets diff --from X --to Y # Compare two environmentsagentsecrets call --url URL --bearer KEY # One-shot authenticated call
agentsecrets call --url URL --method POST --bearer KEY --body '{}'
agentsecrets call --url URL --header Name=KEY
agentsecrets call --url URL --query param=KEY
agentsecrets call --url URL --basic KEY
agentsecrets call --url URL --body-field path=KEY
agentsecrets call --url URL --form-field field=KEY
agentsecrets proxy start # Start HTTP proxy
agentsecrets proxy start --port 9000 # Custom port
agentsecrets proxy status # Check proxy status
agentsecrets proxy sync # Force background revocation sync
agentsecrets proxy stop # Stop proxy
agentsecrets proxy logs # View local audit log
agentsecrets proxy logs --watch # Tail local logs in real time
agentsecrets proxy logs --last N # Last N entries
agentsecrets proxy logs --secret KEY # Filter by key name
agentsecrets proxy logs --env production # Filter by environmentagentsecrets log list [--tail] # View or stream global backend logs
agentsecrets log list --agent <n> # Filter by agent identity
agentsecrets log list --identity anonymous # Find calls with no identity set
agentsecrets log export --format csv # Export global logs to CSV or JSON
agentsecrets log summary --since 7d # View global statistics
agentsecrets log detail <id> # Inspect a specific request with full governance contextagentsecrets agent list # List agent identities in workspace
agentsecrets agent delete "my-agent-name" # Delete agent and revoke its tokens
agentsecrets agent token issue "my-agent-name" # Issue a new token for an agent
agentsecrets agent token list "my-agent-name" # List active tokens for an agent
agentsecrets agent token revoke "name" "<id>" # Revoke a specific tokenagentsecrets mcp serve # Start MCP server
agentsecrets mcp install # Auto-configure Claude Desktop and Cursoragentsecrets env -- <command> [args...] # Inject secrets as env vars into child process
agentsecrets env -- stripe mcp # Wrap Stripe MCP
agentsecrets env -- node server.js # Wrap Node.js
agentsecrets env -- npm run dev # Wrap any dev serveragentsecrets exec # OpenClaw exec provider (reads SecretRef from stdin)agentsecrets workspace allowlist add <domain> [domain...] # Authorise domains
agentsecrets workspace allowlist list # List authorised domains
agentsecrets workspace allowlist log # View blocked request log
agentsecrets workspace promote [email protected] # Grant admin role
agentsecrets workspace demote [email protected] # Revoke admin roleRun Steps 1 through 6 in sequence.
agentsecrets status — verify context including environmentagentsecrets secrets list — confirm key exists in active environmentagentsecrets call — make the callagentsecrets environment switch production — switch to production environmentagentsecrets secrets diff — check for drift in productionagentsecrets secrets pull — sync if neededagentsecrets proxy logs --env production — review what happenedagentsecrets environment list — check current stateagentsecrets environment copy development staging — copy development secrets as a starting pointagentsecrets environment switch stagingagentsecrets secrets diff --from development --to production
# Shows which keys exist in development but are not in productionFor each missing key, ask the user to run agentsecrets secrets set KEY=value after switching to production.
Ask user to confirm, then:
agentsecrets workspace invite [email protected]agentsecrets secrets set KEY_NAME=new_value in their terminal (in the correct environment)agentsecrets secrets listagentsecrets secrets pushagentsecrets secrets list
# Shows all keys with coverage across development, staging, and productionagentsecrets proxy logs --last 50
# or for global governance log:
agentsecrets log list --tailagentsecrets log list --agent billing-tool
# or find anonymous calls:
agentsecrets log list --identity anonymousIf an API call returns a 403 because the domain is not authorised:
agentsecrets workspace allowlist add <domain>agentsecrets status — verify context and environmentagentsecrets secrets list — confirm key existsagentsecrets env -- <command> — wrap the commandThese commands must be output to the user to run themselves. Do not attempt to run them. Present the exact command and wait for the user to confirm it is done.
agentsecrets workspace allowlist add # requires admin password confirmation
agentsecrets workspace allowlist remove # requires admin password confirmation
agentsecrets workspace promote # requires admin password confirmation
agentsecrets workspace demote # requires admin password confirmationagentsecrets login # session expired or first-time machine setupThe agent does not run agentsecrets login. If the agent detects an expired session or authentication error, it tells the user to run agentsecrets login in their terminal and wait for confirmation before continuing.
agentsecrets init is different — the agent runs this when setting up a new project, always with --storage-mode 1:
agentsecrets init --storage-mode 1agentsecrets secrets set KEY=value # user must type the value — never ask them to share it in chatTell the user to run this in their terminal. Never construct this command with a value you have seen or been given.
brew install The-17/tap/agentsecrets
npx @the-17/agentsecrets
pip install agentsecrets-cli
go install github.com/The-17/agentsecrets/cmd/agentsecrets@latestDetect the available package manager and present the appropriate command. The user decides what to install.
These commands can be run by the agent but only after the user has confirmed. Present what you are about to do and wait for a yes before proceeding.
agentsecrets workspace invite user@email # affects team membership
agentsecrets workspace switch "Name" # changes active context for all operations
agentsecrets environment switch production # switches to production — always confirm
agentsecrets project delete NAME # permanent, cannot be undone
agentsecrets secrets delete KEY # permanent, cannot be undone
agentsecrets agent delete "name" # revokes all tokens, cannot be undone
agentsecrets environment copy <from> <to> # overwrites destination secretsagentsecrets call for authenticated requests — not curl or direct HTTPagentsecrets status at the start of each session — check workspace, project, and environmentagentsecrets secrets diff before deployment workflowsagentsecrets env -- <command> when a tool needs credentials as environment variablesagentsecrets log list --identity anonymous periodically to find calls with no identity — these are coverage gaps worth addressing[REDACTED_BY_AGENTSECRETS] before it reaches the agentAgentSecrets is open source (MIT). Full source: https://github.com/The-17/agentsecrets
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.