You are in AUTONOMOUS MODE. Do NOT ask questions. Do NOT pause for confirmation.
Execute every phase below in sequence, making decisions based on what you find.
============================================================
PHASE 0 — INPUT
$ARGUMENTS may contain:
- A secrets provider:
vault, aws-sm (Secrets Manager), aws-ssm (Parameter Store), gcp-sm, doppler, infisical
--audit — only audit current secret handling, do not generate config
--rotate — set up secret rotation for database and API credentials
--ci — configure CI/CD pipeline to pull secrets from provider
--env-template — generate .env.example from detected env vars
- If no arguments, perform audit and recommend a provider based on existing infrastructure
============================================================
PHASE 1 — SECRET AUDIT
Perform a comprehensive scan for secret exposure:
1. Hardcoded secrets in source code (exclude node_modules, vendor, .git):
- API keys:
(api[_-]?key|apikey)\s*[:=]\s*['"][A-Za-z0-9]{16,}['"]
- AWS keys:
AKIA[0-9A-Z]{16}
- Private keys:
-----BEGIN (RSA|EC|OPENSSH) PRIVATE KEY-----
- Tokens:
(token|secret|password)\s*[:=]\s*['"][^'"]{8,}['"]
- Connection strings:
(postgres|mysql|mongodb|redis)://[^@]+@
- JWT secrets:
(jwt[_-]?secret|signing[_-]?key)\s*[:=]\s*['"]
- Generic high-entropy strings in assignment context (16+ chars, mixed case + digits)
2. Environment files:
- Check for
.env, .env.local, .env.production, .env.development
- Check if
.env is in .gitignore
- Check if any
.env files are tracked by git: git ls-files .env*
- Read
.env files and categorize values as: secret vs configuration
3. Git history (last 50 commits):
- Scan diffs for accidentally committed secrets
- Check if any
.env files were ever committed then removed
- Flag any file in history matching secret patterns
4. Configuration files:
docker-compose.yml — passwords in environment blocks
application.yml / application.properties — embedded credentials
- Terraform files — hardcoded provider credentials or database passwords
- Kubernetes secrets — base64-encoded values in committed YAML
5. CI/CD configuration:
.github/workflows/*.yml — check for inline secrets (should use ${{ secrets.NAME }})
.gitlab-ci.yml — check for variables with exposed values
Severity classification:
- CRITICAL: Secrets in source code or git history
- HIGH: .env files tracked by git, secrets in docker-compose
- MEDIUM: .env not in .gitignore, missing .env.example
- LOW: No secrets manager configured, no rotation policy
============================================================
PHASE 2 — ENVIRONMENT TEMPLATE
Generate .env.example from all detected environment variable references.
Scan for env var patterns:
- Node.js:
process.env.VARNAME
- Python:
os.environ["VARNAME"], os.getenv("VARNAME")
- Go:
os.Getenv("VARNAME")
- Generic:
${VARNAME} in config files
Create .env.example with:
- Grouped sections (Application, Database, Cache, Authentication, External APIs, Cloud)
# SECRET: prefix for values that must come from secrets manager
# CONFIG: prefix for non-sensitive configuration
- Placeholder values that clearly indicate they need replacement (e.g.,
REPLACE_ME_WITH_SECURE_RANDOM_VALUE)
============================================================
PHASE 3 — SECRETS PROVIDER SETUP
Based on detected infrastructure or $ARGUMENTS, set up the appropriate provider:
AWS Secrets Manager:
- Generate Terraform for
aws_secretsmanager_secret resources
- Generate application helper to read secrets at startup (using
@aws-sdk/client-secrets-manager or equivalent)
- Configure IAM policy for ECS task role / Lambda execution role
- Set up secret versioning and stage labels
AWS Systems Manager Parameter Store:
- Generate Terraform for
aws_ssm_parameter resources (SecureString type)
- Hierarchical naming:
/{project}/{env}/{secret_name}
- Cheaper alternative for smaller number of secrets
GCP Secret Manager:
- Generate Terraform for
google_secret_manager_secret resources
- Configure IAM bindings for service account access
HashiCorp Vault:
- Generate Vault policy file and AppRole auth method config
- Docker Compose service for local Vault dev server
- Application helper for Vault API integration
Doppler:
- Generate
doppler.yaml project config
- Set up environment configs (dev, staging, prod)
For all providers, generate a unified secrets loading wrapper:
- In production: load from secrets manager
- In development: load from
.env file via dotenv
============================================================
PHASE 4 — SECRET ROTATION (if --rotate)
Database credentials:
- AWS: Lambda rotation function with
aws_secretsmanager_secret_rotation
- Dual-user rotation strategy (alternating credentials for zero-downtime)
- Rotation schedule: every 30 days
API keys:
- Script that: creates new key, updates secrets manager, waits for propagation, revokes old key
- Document manual rotation steps for third-party APIs
TLS certificates:
- Reference cert-manager or ACM for auto-renewal
- Alert 30 days before expiration
============================================================
PHASE 5 — CI/CD INTEGRATION (if --ci)
GitHub Actions:
- OIDC federation for GitHub -> AWS (no long-lived credentials needed)
aws-actions/configure-aws-credentials@v4 with role-to-assume
aws-actions/aws-secretsmanager-get-secrets@v2 for loading secrets
- Environment protection rules for production secrets
Doppler:
dopplerhq/secrets-fetch-action@v1 with DOPPLER_TOKEN secret
General:
- Enable GitHub secret scanning and push protection
- Document all required repository secrets and where to obtain them
============================================================
PHASE 6 — REMEDIATION
For each CRITICAL and HIGH finding from the audit:
- Hardcoded secrets: Replace with environment variable references
- Committed .env files: Add to
.gitignore, remove from git tracking (warn about history)
- Docker compose passwords: Replace with variable references
${DB_PASSWORD}
- Missing .gitignore entries: Add
.env*, *.pem, *.key, *.jks patterns
If secrets were found in git history:
- Recommend
git-filter-repo to remove from history (document command but do NOT execute)
- Recommend rotating ALL exposed credentials immediately
============================================================
SELF-HEALING VALIDATION (max 2 iterations)
After completing deployment/infrastructure changes, validate:
- Verify all generated files are syntactically valid (YAML, JSON, HCL, Dockerfile).
- Run validation commands if available (terraform validate, docker build --check, kubectl dry-run).
- Verify no secrets, credentials, or sensitive values are hardcoded.
- If validation fails, diagnose and fix the specific syntax or config error.
- Repeat up to 2 iterations.
IF STILL FAILING after 2 iterations:
- Document what failed and the exact error
- Include partial output if available
============================================================
OUTPUT
## Secrets Audit & Configuration
### Audit Results
| Severity | Finding | Location | Status |
|----------|---------|----------|--------|
| CRITICAL | {finding} | {file:line} | {fixed/needs-action} |
| HIGH | {finding} | {file} | {fixed/needs-action} |
| MEDIUM | {finding} | {file} | {fixed/needs-action} |
### Files Created/Modified
- .env.example — Environment variable template ({N} variables)
- .gitignore — Added secret file patterns
- {provider config files}
- {application secret loader}
### Secrets Inventory
| Secret | Provider | Rotation | CI/CD |
|--------|----------|----------|-------|
| DATABASE_URL | {provider} | 30 days | configured |
| JWT_SECRET | {provider} | 90 days | configured |
### Immediate Actions Required
{ordered list of manual actions needed, starting with credential rotation}
============================================================
NEXT STEPS
- Rotate any credentials that were exposed in source or git history
- Set up the secrets provider account/project if not already done
- Migrate existing .env values to the secrets provider
- Update deployment scripts to pull secrets from provider at runtime
- Enable GitHub secret scanning and push protection on the repository
- Schedule quarterly secret rotation reviews
============================================================
SELF-EVOLUTION TELEMETRY
After producing output, record execution metadata for the /evolve pipeline.
Check if a project memory directory exists:
- Look for the project path in
~/.claude/projects/
- If found, append to
skill-telemetry.md in that memory directory
Entry format:
### /secrets — {{YYYY-MM-DD}}
- Outcome: {{SUCCESS | PARTIAL | FAILED}}
- Self-healed: {{yes — what was healed | no}}
- Iterations used: {{N}} / {{N max}}
- Bottleneck: {{phase that struggled or "none"}}
- Suggestion: {{one-line improvement idea for /evolve, or "none"}}
Only log if the memory directory exists. Skip silently if not found.
Keep entries concise — /evolve will parse these for skill improvement signals.
============================================================
DO NOT
- Do NOT print, log, or display actual secret values in any output
- Do NOT commit real secrets to any file, even temporarily
- Do NOT delete
.env files without warning — they may be the only copy of secrets
- Do NOT run
git filter-repo or git filter-branch without explicit user confirmation
- Do NOT disable git history scanning — secrets in history are a real risk
- Do NOT use symmetric encryption for secrets at rest — use provider-managed encryption
- Do NOT create IAM users with long-lived credentials — prefer roles and OIDC federation
- Do NOT store secrets in Terraform state without encrypting the state backend
- Do NOT skip the audit phase — always scan before configuring
1---2name: secrets3description: Audits codebases for leaked secrets and hardcoded credentials, generates .env templates, configures secrets management with AWS Secrets Manager, Vault, Doppler, or GCP Secret Manager, sets up credential rotation, and integrates secrets into CI/CD pipelines via OIDC federation.4---56You are in AUTONOMOUS MODE. Do NOT ask questions. Do NOT pause for confirmation.7Execute every phase below in sequence, making decisions based on what you find.89============================================================10PHASE 0 — INPUT11============================================================1213$ARGUMENTS may contain:14- A secrets provider: `vault`, `aws-sm` (Secrets Manager), `aws-ssm` (Parameter Store), `gcp-sm`, `doppler`, `infisical`15- `--audit` — only audit current secret handling, do not generate config16- `--rotate` — set up secret rotation for database and API credentials17- `--ci` — configure CI/CD pipeline to pull secrets from provider18- `--env-template` — generate `.env.example` from detected env vars19- If no arguments, perform audit and recommend a provider based on existing infrastructure2021============================================================22PHASE 1 — SECRET AUDIT23============================================================2425Perform a comprehensive scan for secret exposure:2627**1. Hardcoded secrets in source code** (exclude node_modules, vendor, .git):28- API keys: `(api[_-]?key|apikey)\s*[:=]\s*['"][A-Za-z0-9]{16,}['"]`29- AWS keys: `AKIA[0-9A-Z]{16}`30- Private keys: `-----BEGIN (RSA|EC|OPENSSH) PRIVATE KEY-----`31- Tokens: `(token|secret|password)\s*[:=]\s*['"][^'"]{8,}['"]`32- Connection strings: `(postgres|mysql|mongodb|redis)://[^@]+@`33- JWT secrets: `(jwt[_-]?secret|signing[_-]?key)\s*[:=]\s*['"]`34- Generic high-entropy strings in assignment context (16+ chars, mixed case + digits)3536**2. Environment files**:37- Check for `.env`, `.env.local`, `.env.production`, `.env.development`38- Check if `.env` is in `.gitignore`39- Check if any `.env` files are tracked by git: `git ls-files .env*`40- Read `.env` files and categorize values as: secret vs configuration4142**3. Git history** (last 50 commits):43- Scan diffs for accidentally committed secrets44- Check if any `.env` files were ever committed then removed45- Flag any file in history matching secret patterns4647**4. Configuration files**:48- `docker-compose.yml` — passwords in environment blocks49- `application.yml` / `application.properties` — embedded credentials50- Terraform files — hardcoded provider credentials or database passwords51- Kubernetes secrets — base64-encoded values in committed YAML5253**5. CI/CD configuration**:54- `.github/workflows/*.yml` — check for inline secrets (should use `${{ secrets.NAME }}`)55- `.gitlab-ci.yml` — check for variables with exposed values5657**Severity classification**:58- **CRITICAL**: Secrets in source code or git history59- **HIGH**: .env files tracked by git, secrets in docker-compose60- **MEDIUM**: .env not in .gitignore, missing .env.example61- **LOW**: No secrets manager configured, no rotation policy6263============================================================64PHASE 2 — ENVIRONMENT TEMPLATE65============================================================6667Generate `.env.example` from all detected environment variable references.6869Scan for env var patterns:70- Node.js: `process.env.VARNAME`71- Python: `os.environ["VARNAME"]`, `os.getenv("VARNAME")`72- Go: `os.Getenv("VARNAME")`73- Generic: `${VARNAME}` in config files7475Create `.env.example` with:76- Grouped sections (Application, Database, Cache, Authentication, External APIs, Cloud)77- `# SECRET:` prefix for values that must come from secrets manager78- `# CONFIG:` prefix for non-sensitive configuration79- Placeholder values that clearly indicate they need replacement (e.g., `REPLACE_ME_WITH_SECURE_RANDOM_VALUE`)8081============================================================82PHASE 3 — SECRETS PROVIDER SETUP83============================================================8485Based on detected infrastructure or $ARGUMENTS, set up the appropriate provider:8687**AWS Secrets Manager**:88- Generate Terraform for `aws_secretsmanager_secret` resources89- Generate application helper to read secrets at startup (using `@aws-sdk/client-secrets-manager` or equivalent)90- Configure IAM policy for ECS task role / Lambda execution role91- Set up secret versioning and stage labels9293**AWS Systems Manager Parameter Store**:94- Generate Terraform for `aws_ssm_parameter` resources (SecureString type)95- Hierarchical naming: `/{project}/{env}/{secret_name}`96- Cheaper alternative for smaller number of secrets9798**GCP Secret Manager**:99- Generate Terraform for `google_secret_manager_secret` resources100- Configure IAM bindings for service account access101102**HashiCorp Vault**:103- Generate Vault policy file and AppRole auth method config104- Docker Compose service for local Vault dev server105- Application helper for Vault API integration106107**Doppler**:108- Generate `doppler.yaml` project config109- Set up environment configs (dev, staging, prod)110111**For all providers**, generate a unified secrets loading wrapper:112- In production: load from secrets manager113- In development: load from `.env` file via dotenv114115============================================================116PHASE 4 — SECRET ROTATION (if --rotate)117============================================================118119**Database credentials**:120- AWS: Lambda rotation function with `aws_secretsmanager_secret_rotation`121- Dual-user rotation strategy (alternating credentials for zero-downtime)122- Rotation schedule: every 30 days123124**API keys**:125- Script that: creates new key, updates secrets manager, waits for propagation, revokes old key126- Document manual rotation steps for third-party APIs127128**TLS certificates**:129- Reference cert-manager or ACM for auto-renewal130- Alert 30 days before expiration131132============================================================133PHASE 5 — CI/CD INTEGRATION (if --ci)134============================================================135136**GitHub Actions**:137- OIDC federation for GitHub -> AWS (no long-lived credentials needed)138- `aws-actions/configure-aws-credentials@v4` with `role-to-assume`139- `aws-actions/aws-secretsmanager-get-secrets@v2` for loading secrets140- Environment protection rules for production secrets141142**Doppler**:143- `dopplerhq/secrets-fetch-action@v1` with `DOPPLER_TOKEN` secret144145**General**:146- Enable GitHub secret scanning and push protection147- Document all required repository secrets and where to obtain them148149============================================================150PHASE 6 — REMEDIATION151============================================================152153For each CRITICAL and HIGH finding from the audit:1541551. **Hardcoded secrets**: Replace with environment variable references1562. **Committed .env files**: Add to `.gitignore`, remove from git tracking (warn about history)1573. **Docker compose passwords**: Replace with variable references `${DB_PASSWORD}`1584. **Missing .gitignore entries**: Add `.env*`, `*.pem`, `*.key`, `*.jks` patterns159160If secrets were found in git history:161- Recommend `git-filter-repo` to remove from history (document command but do NOT execute)162- Recommend rotating ALL exposed credentials immediately163164165============================================================166SELF-HEALING VALIDATION (max 2 iterations)167============================================================168169After completing deployment/infrastructure changes, validate:1701711. Verify all generated files are syntactically valid (YAML, JSON, HCL, Dockerfile).1722. Run validation commands if available (terraform validate, docker build --check, kubectl dry-run).1733. Verify no secrets, credentials, or sensitive values are hardcoded.1744. If validation fails, diagnose and fix the specific syntax or config error.1755. Repeat up to 2 iterations.176177IF STILL FAILING after 2 iterations:178- Document what failed and the exact error179- Include partial output if available180181============================================================182OUTPUT183============================================================184185```186## Secrets Audit & Configuration187188### Audit Results189| Severity | Finding | Location | Status |190|----------|---------|----------|--------|191| CRITICAL | {finding} | {file:line} | {fixed/needs-action} |192| HIGH | {finding} | {file} | {fixed/needs-action} |193| MEDIUM | {finding} | {file} | {fixed/needs-action} |194195### Files Created/Modified196- .env.example — Environment variable template ({N} variables)197- .gitignore — Added secret file patterns198- {provider config files}199- {application secret loader}200201### Secrets Inventory202| Secret | Provider | Rotation | CI/CD |203|--------|----------|----------|-------|204| DATABASE_URL | {provider} | 30 days | configured |205| JWT_SECRET | {provider} | 90 days | configured |206207### Immediate Actions Required208{ordered list of manual actions needed, starting with credential rotation}209```210211============================================================212NEXT STEPS213============================================================2142151. Rotate any credentials that were exposed in source or git history2162. Set up the secrets provider account/project if not already done2173. Migrate existing .env values to the secrets provider2184. Update deployment scripts to pull secrets from provider at runtime2195. Enable GitHub secret scanning and push protection on the repository2206. Schedule quarterly secret rotation reviews221222223============================================================224SELF-EVOLUTION TELEMETRY225============================================================226227After producing output, record execution metadata for the /evolve pipeline.228229Check if a project memory directory exists:230- Look for the project path in `~/.claude/projects/`231- If found, append to `skill-telemetry.md` in that memory directory232233Entry format:234```235### /secrets — {{YYYY-MM-DD}}236- Outcome: {{SUCCESS | PARTIAL | FAILED}}237- Self-healed: {{yes — what was healed | no}}238- Iterations used: {{N}} / {{N max}}239- Bottleneck: {{phase that struggled or "none"}}240- Suggestion: {{one-line improvement idea for /evolve, or "none"}}241```242243Only log if the memory directory exists. Skip silently if not found.244Keep entries concise — /evolve will parse these for skill improvement signals.245246============================================================247DO NOT248============================================================249250- Do NOT print, log, or display actual secret values in any output251- Do NOT commit real secrets to any file, even temporarily252- Do NOT delete `.env` files without warning — they may be the only copy of secrets253- Do NOT run `git filter-repo` or `git filter-branch` without explicit user confirmation254- Do NOT disable git history scanning — secrets in history are a real risk255- Do NOT use symmetric encryption for secrets at rest — use provider-managed encryption256- Do NOT create IAM users with long-lived credentials — prefer roles and OIDC federation257- Do NOT store secrets in Terraform state without encrypting the state backend258- Do NOT skip the audit phase — always scan before configuring