diff --git a/.claude/skills/pass-usage/SKILL.md b/.claude/skills/pass-usage/SKILL.md new file mode 100644 index 0000000..28fcc39 --- /dev/null +++ b/.claude/skills/pass-usage/SKILL.md @@ -0,0 +1,190 @@ +--- +name: pass-usage +description: Gestiona contraseñas con pass (password-store) y GPG. Inserta, lista, busca, genera y sincroniza secretos con Gitea. +argument-hint: [accion] [nombre-secreto] +disable-model-invocation: true +user-invocable: true +allowed-tools: Bash, Read, Write +--- + +# pass-usage + +Gestiona contraseñas usando `pass` (password-store) con cifrado GPG, sincronizando con Gitea via `pass git push`. + +## Sintaxis + +```bash +/pass-usage # Listar todos los secretos +/pass-usage add servicio/usuario # Agregar nuevo secreto +/pass-usage show servicio/usuario # Ver un secreto +/pass-usage gen servicio/usuario 24 # Generar contraseña aleatoria (24 chars) +/pass-usage find texto # Buscar secretos por nombre +/pass-usage sync # Sincronizar con Gitea (push + pull) +/pass-usage edit servicio/usuario # Editar secreto existente +/pass-usage rm servicio/usuario # Eliminar secreto +/pass-usage help # Mostrar esta ayuda +``` + +## Precondiciones + +Verificar antes de cualquier operación: + +```bash +# 1. Verificar pass instalado +if ! command -v pass &>/dev/null; then + echo "pass no está instalado." + echo "Ejecuta: sudo apt install pass # Debian/Ubuntu" + echo " o: sudo pacman -S pass # Arch" + echo " o: sudo dnf install pass # Fedora" + exit 1 +fi + +# 2. Verificar GPG disponible +if ! command -v gpg &>/dev/null; then + echo "gpg no está instalado." + echo "Ejecuta: sudo apt install gnupg" + exit 1 +fi + +# 3. Verificar store inicializado +if [ ! -d ~/.password-store ]; then + echo "Password store no inicializado." + echo "Primero necesitas una clave GPG. Listar existentes:" + echo " gpg --list-keys" + echo "" + echo "Si no tienes clave GPG, crear una:" + echo " gpg --full-generate-key" + echo "" + echo "Luego inicializar pass con el ID de tu clave:" + echo " pass init " + echo "" + echo "Para habilitar sincronización con Gitea:" + echo " pass git init" + echo " pass git remote add origin " + exit 1 +fi +``` + +## Flujo + +Parsear `$ARGUMENTS` para determinar la acción. Si no hay argumentos, listar secretos. + +### Determinar acción + +| $0 (acción) | Operación | +|--------------|-----------| +| (vacío) | Listar todos | +| `add` | Insertar nuevo secreto | +| `show` | Mostrar secreto | +| `gen` | Generar contraseña aleatoria | +| `find` | Buscar por nombre | +| `sync` | Push + Pull con Gitea | +| `edit` | Editar existente | +| `rm` | Eliminar secreto | +| `help` | Mostrar ayuda | + +### Acción: Listar (sin argumentos) + +```bash +pass +``` + +Mostrar el árbol de secretos al usuario. + +### Acción: add + +Nombre del secreto: `$1` (requerido). + +Preguntar al usuario qué valor quiere guardar. Luego: + +```bash +# Insertar contraseña (interactivo - el usuario debe ejecutarlo) +echo "Ejecuta en tu terminal:" +echo " pass insert $1" +``` + +**IMPORTANTE**: `pass insert` es interactivo (pide input por stdin). Indicar al usuario que lo ejecute con `!` o darle la opción de insertar de forma no-interactiva: + +```bash +# Opción no-interactiva (si el usuario proporciona el valor) +echo "VALOR_SECRETO" | pass insert -e $1 +``` + +Después de insertar, ofrecer sincronizar: + +```bash +pass git push +``` + +### Acción: show + +```bash +pass show $1 +``` + +Mostrar el contenido descifrado al usuario. + +### Acción: gen + +Nombre: `$1`, longitud: `$2` (default 20). + +```bash +pass generate $1 ${2:-20} +``` + +Esto genera y guarda una contraseña aleatoria. Ofrecer sincronizar después. + +### Acción: edit + +```bash +# Interactivo - el usuario debe ejecutarlo +echo "Ejecuta: ! pass edit $1" +``` + +### Acción: find + +```bash +pass find $1 +``` + +### Acción: rm + +**Confirmar con el usuario antes de eliminar.** + +```bash +pass rm $1 +pass git push +``` + +### Acción: sync + +```bash +pass git pull --rebase && pass git push +``` + +Si falla el pull, mostrar el error y sugerir resolución. + +### Acción: help + +Mostrar la tabla de sintaxis de este skill. + +## Post-operación + +Después de cualquier operación que modifique el store (add, gen, edit, rm): + +1. Mostrar resultado de la operación +2. Preguntar si quiere sincronizar con Gitea (`pass git push`) +3. Si el repo de secretos en Gitea (`dataforge/pass-secrets`) necesita actualización del README, usar el agente @gitea para actualizarlo + +## Integración con Gitea + +El repo de secretos vive en `dataforge/pass-secrets`. Para operaciones que requieran actualizar documentación o estructura en remoto, delegar al agente @gitea. + +## Reglas + +- NUNCA mostrar contraseñas en texto plano en el output sin que el usuario lo pida explícitamente (acción `show`) +- Para `pass insert` y `pass edit`, indicar al usuario que ejecute el comando con `!` ya que son interactivos +- Siempre verificar precondiciones antes de operar +- Si `pass` o `gpg` no están instalados, dar los comandos de instalación para la distro detectada (no ejecutar sudo directamente) +- Ofrecer `pass git push` después de cada modificación +- El GPG-ID actual es `91324463`