--- 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 - Para obtener el GPG-ID del usuario actual: leerlo de `~/.password-store/.gpg-id` (ese archivo lo crea `pass init ` y contiene el keygrip/ID en uso). Si no existe, listar claves con `gpg --list-secret-keys --keyid-format=long` y pedir al usuario cuál usar