Use when handling secrets, encryption keys, credentials, tokens, or sensitive configuration. Guides SOPS encryption workflows, Kubernetes secret patterns, and secret hygiene.
Protect credentials throughout their lifecycle: generation, storage, deployment, rotation, and revocation.
CRITICAL: Never commit plaintext secrets to Git. Encrypted or external, no exceptions. If you accidentally commit plaintext, rotate immediately — deleting the commit is not enough; history is the problem.
IMPORTANT: Rotate after any team member departure, system compromise, or breach. Assume the secret is known; act accordingly.
| Rule | Detail |
|---|---|
| SOPS for file-level encryption | GitOps-friendly — encrypted files live in Git |
| .sops.yaml at repo root | Path patterns mapped to age key recipients |
| Encrypt values, not keys | Diffs remain reviewable — you see WHICH secret changed |
| Separate keys per environment | Dev key cannot decrypt prod |
| Runtime secrets via env vars | Never baked into container images |
.sops.yamlcreation_rules:
- path_regex: clusters/prod/.*\.secret\.yaml$
age: age1prod...
- path_regex: clusters/dev/.*\.secret\.yaml$
age: age1dev...
stringData:
db-password: ENC[AES256_GCM,data:...,type:str] # value encrypted
api-token: ENC[AES256_GCM,data:...,type:str] # keys stay readable
| Task | Command |
|---|---|
| Encrypt in place | sops encrypt -i <file> |
| Decrypt to stdout | sops decrypt <file> |
| Edit encrypted file | sops edit <file> |
| Rotate data key | sops rotate -i <file> |
| Update recipients | sops updatekeys <file> |
Never encrypt from /tmp/ — always write to the correct repo path then sops -e --in-place.
age-keygen -o key.txt — generate age keypair.sops.yaml with path rules and public keysops encrypt -i secret.yaml — encrypt in placesops updatekeys then sops rotate -i (both needed when removing a recipient)--sops-age-secret controller flag (Flux 2.7+) for global decryption| Don't | Why |
|---|---|
| Secrets in Dockerfile ENV/ARG | Visible in docker history |
| Commit .env files | Plaintext in repository history forever |
| Share secrets across environments | Breach in dev becomes breach in prod |
| base64 as "encryption" | K8s Secrets are base64-encoded, not encrypted |
| Never-rotated tokens | Assume eventual compromise — rotate proactively |
| No secret scanning | Run gitleaks in pre-commit to catch plaintext early |
Search for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer