About secrets-management
A skill for securely storing and loading project credentials, covering secrets.json, environment-variable fallbacks, and Git ignore rules. It is intended for API key setup, authenticated external API integrations, and environment file handling.
Key features
- 01Store keys in secrets.json
- 02Fall back to environment variables
- 03Set up templates and Git ignore rules
- 04Prevent credential commits or logging
- 05Provide key rotation guidance
Use cases
- 01Configure API keys for a project
- 02Connect to authenticated external APIs
- 03Check that credentials stay out of Git
Install
Copy the command and run it in a terminal.
$
npx skills add https:/ / github.com/ autumnsgrove/ lattice --skill secrets-managementAfter installing, type/secrets-managementin Claude Code to confirm it loaded.
Details
From the project READMESecrets Management Skill
When to Activate
Activate this skill when:
- Setting up API keys or credentials
- Creating secrets.json files
- Implementing secrets loading patterns
- Working with .env files
- Integrating external APIs requiring authentication
- Ensuring credentials are not committed to git
Core Principles
Security Fundamentals
- NEVER hardcode API keys in source code
- ALWAYS add secrets.json to .gitignore immediately
- ALWAYS provide a secrets_template.json for setup reference
- Use environment variable fallbacks for CI/CD compatibility
Standard File Structure
project/
├── secrets.json # Actual secrets (NEVER commit)
├── secrets_template.json # Template with placeholder values (commit this)
├── .gitignore # Must include secrets.json
└── .env # Alternative for env vars (also gitignored)
Implementation Pattern
secrets.json Format
{
"anthropic_api_key": "sk-ant-api03-...",
"openrouter_api_key": "sk-or-v1-...",
"openai_api_key": "sk-...",
"database_url": "postgresql://user:pass@localhost/db",
"comment": "Add your API keys here. Keep this file private."
}
Python Loading Pattern
import os
import json
from pathlib import Path
def load_secrets():
"""Load secrets from secrets.json with env var fallback."""
secrets_path = Path(__file__).parent / "secrets.json"
try:
with open(secrets_path, 'r') as f:
return json.load(f)
except (FileNotFoundError, json.JSONDecodeError):
return {}
SECRETS = load_secrets()
# Use with environment variable fallback
API_KEY = SECRETS.get("anthropic_api_key", os.getenv("ANTHROPIC_API_KEY", ""))
Setup Checklist
- Create secrets_template.json with placeholder values
- Copy to secrets.json and add real credentials
- Add secrets.json to .gitignore
- Implement secrets loading in application
- Verify git status shows secrets.json as untracked
Security Best Practices
DO ✅
- Store keys in secrets.json
- Add to .gitignore immediately
- Provide template files for setup
- Use environment variable fallbacks
- Rotate keys after team changes
DON'T ❌
- Hardcode API keys
- Commit actual credentials
- Log full API keys
- Share keys via email/chat
Key Format Reference
| Provider | Format |
|---|---|
| Anthropic | sk-ant-api03-... |
| OpenRouter | sk-or-v1-... |
| OpenAI | sk-... |
| AWS Access | AKIA... |
Related Resources
See AgentUsage/secrets_management.md for complete documentation including:
- Advanced loading patterns with validation
- .env file integration
- Automated testing patterns
- Emergency key rotation procedures
- Production deployment strategies
Comments
Markdown supported