Sops decrypt
Skill joaquimscosta/arkhe-claude-plugins/plugins/devtools/skills/sops-decrypt
Decrypt SOPS-encrypted YAML files back to .env format. Finds *.enc.yaml files, decrypts, and converts YAML back to dotenv. Use when user mentions "decrypt env", "sops decrypt", "decrypt secrets", "restore env", "decrypt .env", "restore secrets", "decrypt environment files".From its SKILL.md
npx -y skills add joaquimscosta/arkhe-claude-plugins --skill sops-decryptAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
3 things to look at
- reads credentialsReads from 1 credential source: `SOPS_AGE_KEY_FILE`.
- 21 stars21 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.
- runs commandsInstructs the agent to run 4 commands, including `python3 ${CLAUDE_SKILL_DIR}/../sops-setup/scripts/detect_sops.py <project-root>` and 3 more.
SKILL.md
2.4 KB, 543 tokens by cl100k_base, as published. Nobody here has run it
SOPS Decrypt
Decrypt .enc.yaml files back to their plaintext .env originals.
Workflow
-
Detect current state:
python3 ${CLAUDE_SKILL_DIR}/../sops-setup/scripts/detect_sops.py <project-root> -
Verify prerequisites:
tools.sops.installedmust be true — if not, tell user to install:brew install sops(macOS) or download binary (Linux)age_key.existsmust be true — if not, guide user to place their age private key at the expected path, or setSOPS_AGE_KEY_FILEenv var
-
Show encrypted files from
project.encrypted_files. If empty, report "No encrypted files found" and exit. -
Use
AskUserQuestion(multiSelect: true) — which files to decrypt. For each, show the target output name (e.g.,.env.local.enc.yaml→.env.local). If the target file already exists, note it will be overwritten. -
Decrypt each selected file (decrypt YAML, then convert to dotenv):
sops --decrypt <file>.enc.yaml > <file>.dec.yaml.tmp python3 ${CLAUDE_SKILL_DIR}/../sops-setup/scripts/dotenv_yaml.py to-dotenv <file>.dec.yaml.tmp > <target-env-file> rm <file>.dec.yaml.tmpWhere
<target-env-file>is the encrypted filename with.enc.yamlsuffix removed. Example:.env.local.enc.yaml→.env.local -
Verify each decrypted file exists and is non-empty.
-
Summary:
| Encrypted File | Decrypted To | Status | |---------------|--------------|--------| | .env.local.enc.yaml | .env.local | done |Remind user: Do NOT commit the decrypted .env files — they should be in
.gitignore.
Key Rules
- Always check that the age private key exists before attempting decryption
- Always convert YAML→dotenv after decrypting (use the helper script)
- Warn if a decrypted file will overwrite an existing one
- Clean up
.tmpfiles even if decryption fails - After decryption, remind user that plaintext
.envfiles must stay out of git - If decryption fails with "no identity matched", the machine's key is not authorized — suggest running
/devtools:sops-add-keyon a machine that has access
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.