Skip to content
Back to skills

Sops Encrypt

ASecurity

Encrypt .env files using SOPS + age. Converts dotenv to YAML format (avoids SOPS bug #1435), then encrypts. Auto-detects unencrypted .env files. Use when user mentions "encrypt env", "sops encrypt", "encrypt secrets", "encrypt .env", "encrypt environment", "re-encrypt", "update encrypted".

  • 21 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added May 28, 2026
ai-agentspythonbashgit

Security analysis

A100/100

Scanned May 28, 2026

npx -y skills add joaquimscosta/arkhe-claude-plugins --skill sops-encrypt --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Sops Encrypt?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Sops Encrypt
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/joaquimscosta-sops-encrypt/badge)](https://www.skillsdirectory.com/skills/joaquimscosta-sops-encrypt)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: sops-encrypt
description: >-
  Encrypt .env files using SOPS + age. Converts dotenv to YAML format (avoids
  SOPS bug #1435), then encrypts. Auto-detects unencrypted .env files. Use when
  user mentions "encrypt env", "sops encrypt", "encrypt secrets", "encrypt .env",
  "encrypt environment", "re-encrypt", "update encrypted".
disable-model-invocation: true
---

# SOPS Encrypt

Encrypt `.env` files by converting to YAML and encrypting with SOPS + age.

**Why YAML?** SOPS dotenv store has a [known bug (#1435)](https://github.com/getsops/sops/issues/1435) that corrupts backslash and `\n` sequences. The helper script converts dotenv→YAML before encryption.

## Workflow

1. **Detect current state**:
   ```bash
   python3 ${CLAUDE_SKILL_DIR}/../sops-setup/scripts/detect_sops.py <project-root>
   ```

2. **Verify prerequisites**:
   - `tools.sops.installed` must be true — if not, tell user to run `/devtools:sops-setup`
   - `project.sops_yaml.exists` must be true — if not, tell user to run `/devtools:sops-setup`
   - `age_key.exists` must be true — if not, tell user to run `/devtools:sops-setup`

3. **Show unencrypted .env files** from `project.env_files`. If empty, report "No .env files found to encrypt" and exit.

4. **Use `AskUserQuestion`** (multiSelect: true) — which files to encrypt. List each `.env*` file. If a corresponding `.enc.yaml` file already exists, note it will be overwritten.

5. **Encrypt each selected file** (convert dotenv→YAML, then encrypt):
   ```bash
   python3 ${CLAUDE_SKILL_DIR}/../sops-setup/scripts/dotenv_yaml.py to-yaml <file> > <file>.enc.yaml.tmp
   sops --encrypt <file>.enc.yaml.tmp > <file>.enc.yaml
   rm <file>.enc.yaml.tmp
   ```
   Example: `.env.local` → `.env.local.enc.yaml`

6. **Verify** each encrypted file exists and is non-empty.

7. **Summary**:
   ```
   | File | Encrypted To | Status |
   |------|-------------|--------|
   | .env.local | .env.local.enc.yaml | done |
   | .env.production | .env.production.enc.yaml | done |
   ```
   Remind user to commit the `.enc.yaml` files.

## Key Rules

- Always verify `.sops.yaml` exists before attempting encryption
- Always convert dotenv→YAML before encrypting (use the helper script)
- Warn if an `.enc.yaml` file will be overwritten
- Never delete the original `.env` file — only create the `.enc.yaml` copy
- Clean up `.tmp` files even if encryption fails

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.