feat: añadir skill pass-usage para gestión de contraseñas
Skill que gestiona contraseñas con pass (password-store) y GPG. Soporta insertar, listar, buscar, generar y sincronizar secretos con el repositorio de Gitea. Verifica dependencias e instala automáticamente si es necesario.
This commit is contained in:
@@ -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 <GPG-ID>"
|
||||||
|
echo ""
|
||||||
|
echo "Para habilitar sincronización con Gitea:"
|
||||||
|
echo " pass git init"
|
||||||
|
echo " pass git remote add origin <URL-REPO-GITEA>"
|
||||||
|
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`
|
||||||
Reference in New Issue
Block a user