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
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
-
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.)
-
Decrypt to STDOUT only. Run the decrypt script with the password supplied through the
SKILL_PASSWORDenvironment 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
- Windows PowerShell:
-
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.mjsintentionally 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_PASSWORDon 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.