---
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
- Para obtener el GPG-ID del usuario actual: leerlo de `~/.password-store/.gpg-id` (ese archivo lo crea `pass init <gpg-id>` 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
