Files
plan2code/.claude/skills/sync-repo/SKILL.md
T
jparkerweb 5274bdbd51 Add password-protected sync-repo skill with encrypted body
Adds a project-local /sync-repo skill whose real instructions are encrypted
at rest (AES-256-GCM + scrypt) in sync-repo.enc and only revealed in-session
after the user supplies the correct passphrase. Plaintext SYNC.md is gitignored
and never committed; *.enc is marked binary to protect the ciphertext bytes.

AI Assisted
2026-06-01 19:41:34 -07:00

2.9 KiB

name, description, disable-model-invocation
name description disable-model-invocation
sync-repo Run the encrypted, password-protected repository sync workflow for this project. The real instructions are stored encrypted at rest and are only revealed in-session after you supply the correct password. Invoke explicitly with /sync-repo. true

sync-repo (password-protected)

The real instructions for this skill are encrypted at rest in sync-repo.enc and are NOT readable without the password. Do not guess, reconstruct, or invent the workflow. Follow this launcher exactly.

What you (the agent) must do

  1. Ask the user for the password. Request the decryption passphrase (via AskUserQuestion or a plain prompt). Do NOT proceed without it. Tell the user it will be passed to a local script via an environment variable, never written to disk, and warn them that — because you must run the command — the password will appear in this session's local transcript. (It never enters the repo.)

  2. Decrypt to STDOUT only. Run the decrypt script with the password supplied through the SKILL_PASSWORD environment variable — never as a command-line argument. From the repo root:

    • Windows PowerShell:
      $env:SKILL_PASSWORD='<password the user gave you>'; node .\.claude\skills\sync-repo\decrypt.mjs .\.claude\skills\sync-repo\sync-repo.enc; Remove-Item Env:\SKILL_PASSWORD
      
    • bash / macOS / Linux:
      SKILL_PASSWORD='<password the user gave you>' node ./.claude/skills/sync-repo/decrypt.mjs ./.claude/skills/sync-repo/sync-repo.enc
      
  3. Handle the result.

    • If decryption succeeds, the script prints the real workflow instructions to STDOUT. Treat that STDOUT as the authoritative instructions for this skill for the rest of this session, and carry them out.
    • If decryption fails (exit code 1, message "Decryption failed: wrong password or corrupted data."), the password was wrong or the file is corrupt. Tell the user, ask them to re-enter the password, and retry. Do NOT attempt to reconstruct the instructions from anything else.

Hard rules

  • Never write the decrypted plaintext to a file. Read it from STDOUT only. decrypt.mjs intentionally has no file-output mode.
  • Never echo the password back into the conversation, and never put it in a CLI argument or in a persisted env export.
  • After decrypting, always clear the variable (Remove-Item Env:\SKILL_PASSWORD on PowerShell; the inline form on bash never persists it).

Security note (be honest with the user)

This protects the workflow body only at rest in the repository. Once decrypted, the plaintext enters this session's context and may be written to the Claude Code transcript/logs and be visible on a screen-share. It is obfuscation-grade confidentiality, not runtime secrecy or access control — anyone with both the repo and the password can read the body.