Secrets management
Use when handling API keys, passwords, connection strings, or credentialsFrom its SKILL.md
npx -y skills add hereshecodes/secureskills --skill secrets-managementAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
2.7 KB, 619 tokens by cl100k_base, as published. Nobody here has run it
Secrets Management
No secret should ever appear in source code, logs, or error messages. Use environment variables or a vault.
Related: authentication, dependency-security, security-context
Rule 1: Never Hardcode Secrets
Not in code. Not in config files committed to git. Not in comments.
// WRONG — API key in source code
const apiKey = 'sk-1234567890abcdef';
// RIGHT — from environment variable
const apiKey = process.env.API_KEY;
if (!apiKey) throw new Error('API_KEY environment variable is required');
# WRONG — password in settings file
DATABASE_PASSWORD = "hunter2"
# RIGHT — from environment
DATABASE_PASSWORD = os.environ["DATABASE_PASSWORD"]
Rule 2: Add Secrets to .gitignore
Prevent accidental commits. These files should never be tracked.
# MUST be in .gitignore
.env
.env.local
.env.production
*.pem
*.key
credentials.json
service-account.json
Rule 3: Use Different Secrets Per Environment
Dev, staging, and production must use separate credentials.
# WRONG — same API key everywhere
API_KEY=sk-production-key # used in dev too
# RIGHT — environment-specific secrets
# .env.development
API_KEY=sk-dev-key-safe-to-rotate
# Production: set via hosting provider, vault, or CI/CD secrets
Rule 4: Rotate Secrets on Exposure
If a secret appears in a commit, log, or error message, it's compromised. Rotate immediately.
# If a secret was committed:
# 1. Rotate the secret FIRST (revoke old key, generate new)
# 2. Then clean git history (but assume the old secret is compromised)
# Cleaning history alone is NOT sufficient — bots scrape commits in real time
Rule 5: Never Log Secrets
Sanitize log output. Mask sensitive values.
// WRONG — logs the full connection string
logger.info(`Connecting to ${connectionString}`);
// RIGHT — mask sensitive parts
logger.info(`Connecting to ${connectionString.replace(/\/\/.*@/, '//***@')}`);
# WRONG — logs the API key
logging.info(f"Using key: {api_key}")
# RIGHT — log that a key exists, not the value
logging.info(f"Using key: {api_key[:4]}...{api_key[-4:]}")
Quick Reference
| Do | Don't |
|---|---|
| Use environment variables | Hardcode secrets in source |
Add .env to .gitignore | Commit secret files to git |
| Use separate secrets per environment | Share production keys in dev |
| Rotate immediately on exposure | Assume cleaning git history is enough |
| Mask secrets in logs | Log full connection strings or keys |
| Validate that required secrets exist at startup | Silently fail with undefined values |
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.