/update
Comprueba y aplica actualizaciones del plugin Alfred Dev
$ npx -y skills add 686f6c61/alfred-dev --agent claude-codeShips with alfred-dev. Installing the plugin gets this command.
How it fires
How this command gets triggered: by you, by Claude, or both.
- Fires itselfClaude auto-loads it when your prompt matches the work.
- You can call itInvoke it directly when you want it.
- Slash command
/update
Context preview
What this command does when you run it.
Comprueba y aplica actualizaciones del plugin Alfred Dev
Command definition
update.mddescription: "Comprueba y aplica actualizaciones del plugin Alfred Dev"
/alfred-dev:update
Eres Alfred. El usuario quiere comprobar si hay una version nueva del plugin. Sigue estos pasos al pie de la letra.
Paso 1: obtener la version instalada y el scope
Primero usa la CLI nativa de Claude Code, porque es la fuente autoritativa de instalaciones activas, scopes e installPath:
claude plugin list --json
Busca la entrada `alfred-dev@alfred-dev`. Si hay varias, prioriza:
1. una entrada `enabled: true` cuyo `projectPath`, si existe, coincide con el proyecto actual; 2. una entrada `enabled: true` sin `projectPath` (instalación `user`); 3. cualquier entrada `alfred-dev@alfred-dev` como último recurso.
Extrae:
- `version`
- `scope` (`user`, `local`, `project` o `managed`)
- `installPath`
- `projectPath` si existe
Si `claude plugin list --json` falla o no devuelve la entrada, usa este fallback de cache para la version y marca el scope como `desconocido`:
python3 -c "
import json, os, glob, sys
candidates = sorted(
glob.glob(os.path.expanduser('~/.claude/plugins/cache/alfred-dev/**/.claude-plugin/plugin.json'), recursive=True),
key=os.path.getmtime,
reverse=True
)
if not candidates:
print('desconocida')
sys.exit(0)
with open(candidates[0]) as f:
print(json.load(f).get('version', 'desconocida'))
" 2>/dev/null || echo "desconocida"El fallback selecciona la version mas reciente por fecha de modificacion para evitar errores cuando coexistan varias versiones en cache, pero no lo uses para decidir scope si la CLI sí ha devuelto uno.
Paso 2: consultar la ultima release en GitHub
Ejecuta con Bash:
curl -s --max-time 10 "https://api.github.com/repos/686f6c61/alfred-dev/releases/latest"
Extrae del JSON: `tag_name` (version), `name` (titulo), `body` (notas de la release), `published_at` (fecha).
Si la peticion falla (sin red, rate limit, timeout), informa del error y sugiere reintentarlo mas tarde. No sigas adelante. En concreto:
- Si el JSON contiene `"message": "API rate limit exceeded"`, informa al usuario de que ha superado el limite de peticiones de GitHub y que puede reintentar en unos minutos o pasar un token con `-H "Authorization: token ..."`.
- Si curl devuelve un codigo de error o timeout, muestra el error y sugiere comprobar la conexion.
- Si el JSON no contiene `tag_name`, es una respuesta inesperada. Muestra el contenido raw y aborta.
Paso 3: comparar versiones
Valida que `tag_name` tiene formato semver valido: debe coincidir con el patron `v?X.Y.Z` donde X, Y, Z son numeros (por ejemplo `v0.3.0` o `0.3.0`). Si no coincide, muestra un aviso y aborta: el formato de la release no es el esperado.
Normaliza `tag_name` (sin la `v` inicial) y la version instalada a tuplas numericas `(major, minor, patch)` y comparalas como semver real. **Nunca** compares las versiones como texto plano (`0.10.0` es mayor que `0.9.0`).
Si necesitas una comparacion determinista, ejecuta con Bash:
python3 - <<'PY'
def parse(value):
return tuple(int(part) for part in value.strip().lstrip('v').split('.'))
installed = "VERSION_INSTALADA"
latest = "TAG_NAME"
print(parse(latest) > parse(installed))
PYSustituye `VERSION_INSTALADA` y `TAG_NAME` por los valores reales del paso 1 y 2.
Si hay version nueva
Muestra al usuario:
- La version actual instalada
- La version nueva disponible
- Las notas de la release formateadas en markdown
Despues usa **un único `AskUserQuestion`** con menú seleccionable real. No dejes la decisión en texto libre. Las dos opciones deben ser:
- **"Actualizar ahora"** -- ejecuta el comando de instalacion (paso 4)
- **"Ahora no"** -- cancela
Si esta al dia
Informa de que no hay actualizaciones disponibles y muestra la version actual. Fin.
Paso 4: ejecutar la actualizacion
Si el usuario acepta, usa siempre la ruta global de usuario salvo que el scope sea `managed`. Alfred Dev no conserva instalaciones `local` ni `project` al actualizar desde este comando: las normaliza a `--scope user` para que `/alfred` y `/alfred-dev:*` funcionen en cualquier proyecto del usuario.
Scope user, local, project o desconocido
Para instalaciones de usuario, locales, de proyecto o con scope desconocido, usa el instalador soportado de Alfred Dev. Esta ruta vuelve a registrar la fuente GitHub con `--scope user`, reinstala mediante la CLI nativa de Claude Code, limpia/refresca el checkout local del marketplace para evitar caches obsoletas, rematerializa el alias personal global `/alfred` en `~/.claude/skills/alfred/SKILL.md`, elimina el shim personal obsoleto `~/.claude/commands/alfred.md` si existe y vuelve a aplicar el parche de Python compatible en `hooks.json` y `.mcp.json` cuando hace falta.
Si el scope detectado era `local` o `project`, dilo antes de ejecutar: la actualización convertirá esa instalación en una instalación global de usuario. No uses `claude plugin update --scope local` ni `claude plugin update --scope project`.
Primero detecta la plataforma y despues ejecuta el instalador correspondiente.
Deteccion de plataforma
Ejecuta con Bash:
uname -s 2>/dev/null || echo "Windows"
- Si devuelve `Darwin` o `Linux`: es macOS o Linux, usa el instalador bash.
- Si falla o devuelve `Windows` / `MINGW` / `MSYS` / `CYGWIN`: es Windows, usa el instalador PowerShell.
macOS / Linux
curl -fsSL https://raw.githubusercontent.com/686f6c61/alfred-dev/main/install.sh | bash
Windows (PowerShell)
irm https://raw.githubusercontent.com/686f6c61/alfred-dev/main/install.ps1 | iex
Scope managed
Si el scope detectado es `managed`, no intentes actualizarlo. Explica que las instalaciones managed las controla la política del administrador y que el usuario debe pedir la actualización a quien gestione Claude Code en su equipo.
Despues de que termine cualquier actualización, informa al usuario de que debe ejecutar **`/reload-plugins`**
Read more
description: "Comprueba y aplica actualizaciones del plugin Alfred Dev"
/alfred-dev:update
Eres Alfred. El usuario quiere comprobar si hay una version nueva del plugin. Sigue estos pasos al pie de la letra.
Paso 1: obtener la version instalada y el scope
Primero usa la CLI nativa de Claude Code, porque es la fuente autoritativa de instalaciones activas, scopes e installPath:
claude plugin list --json
Busca la entrada `alfred-dev@alfred-dev`. Si hay varias, prioriza:
1. una entrada `enabled: true` cuyo `projectPath`, si existe, coincide con el proyecto actual; 2. una entrada `enabled: true` sin `projectPath` (instalación `user`); 3. cualquier entrada `alfred-dev@alfred-dev` como último recurso.
Extrae:
- `version`
- `scope` (`user`, `local`, `project` o `managed`)
- `installPath`
- `projectPath` si existe
Si `claude plugin list --json` falla o no devuelve la entrada, usa este fallback de cache para la version y marca el scope como `desconocido`:
python3 -c "
import json, os, glob, sys
candidates = sorted(
glob.glob(os.path.expanduser('~/.claude/plugins/cache/alfred-dev/**/.claude-plugin/plugin.json'), recursive=True),
key=os.path.getmtime,
reverse=True
)
if not candidates:
print('desconocida')
sys.exit(0)
with open(candidates[0]) as f:
print(json.load(f).get('version', 'desconocida'))
" 2>/dev/null || echo "desconocida"El fallback selecciona la version mas reciente por fecha de modificacion para evitar errores cuando coexistan varias versiones en cache, pero no lo uses para decidir scope si la CLI sí ha devuelto uno.
Paso 2: consultar la ultima release en GitHub
Ejecuta con Bash:
curl -s --max-time 10 "https://api.github.com/repos/686f6c61/alfred-dev/releases/latest"
Extrae del JSON: `tag_name` (version), `name` (titulo), `body` (notas de la release), `published_at` (fecha).
Si la peticion falla (sin red, rate limit, timeout), informa del error y sugiere reintentarlo mas tarde. No sigas adelante. En concreto:
- Si el JSON contiene `"message": "API rate limit exceeded"`, informa al usuario de que ha superado el limite de peticiones de GitHub y que puede reintentar en unos minutos o pasar un token con `-H "Authorization: token ..."`.
- Si curl devuelve un codigo de error o timeout, muestra el error y sugiere comprobar la conexion.
- Si el JSON no contiene `tag_name`, es una respuesta inesperada. Muestra el contenido raw y aborta.
Paso 3: comparar versiones
Valida que `tag_name` tiene formato semver valido: debe coincidir con el patron `v?X.Y.Z` donde X, Y, Z son numeros (por ejemplo `v0.3.0` o `0.3.0`). Si no coincide, muestra un aviso y aborta: el formato de la release no es el esperado.
Normaliza `tag_name` (sin la `v` inicial) y la version instalada a tuplas numericas `(major, minor, patch)` y comparalas como semver real. **Nunca** compares las versiones como texto plano (`0.10.0` es mayor que `0.9.0`).
Si necesitas una comparacion determinista, ejecuta con Bash:
python3 - <<'PY'
def parse(value):
return tuple(int(part) for part in value.strip().lstrip('v').split('.'))
installed = "VERSION_INSTALADA"
latest = "TAG_NAME"
print(parse(latest) > parse(installed))
PYSustituye `VERSION_INSTALADA` y `TAG_NAME` por los valores reales del paso 1 y 2.
Si hay version nueva
Muestra al usuario:
- La version actual instalada
- La version nueva disponible
- Las notas de la release formateadas en markdown
Despues usa **un único `AskUserQuestion`** con menú seleccionable real. No dejes la decisión en texto libre. Las dos opciones deben ser:
- **"Actualizar ahora"** -- ejecuta el comando de instalacion (paso 4)
- **"Ahora no"** -- cancela
Si esta al dia
Informa de que no hay actualizaciones disponibles y muestra la version actual. Fin.
Paso 4: ejecutar la actualizacion
Si el usuario acepta, usa siempre la ruta global de usuario salvo que el scope sea `managed`. Alfred Dev no conserva instalaciones `local` ni `project` al actualizar desde este comando: las normaliza a `--scope user` para que `/alfred` y `/alfred-dev:*` funcionen en cualquier proyecto del usuario.
Scope user, local, project o desconocido
Para instalaciones de usuario, locales, de proyecto o con scope desconocido, usa el instalador soportado de Alfred Dev. Esta ruta vuelve a registrar la fuente GitHub con `--scope user`, reinstala mediante la CLI nativa de Claude Code, limpia/refresca el checkout local del marketplace para evitar caches obsoletas, rematerializa el alias personal global `/alfred` en `~/.claude/skills/alfred/SKILL.md`, elimina el shim personal obsoleto `~/.claude/commands/alfred.md` si existe y vuelve a aplicar el parche de Python compatible en `hooks.json` y `.mcp.json` cuando hace falta.
Si el scope detectado era `local` o `project`, dilo antes de ejecutar: la actualización convertirá esa instalación en una instalación global de usuario. No uses `claude plugin update --scope local` ni `claude plugin update --scope project`.
Primero detecta la plataforma y despues ejecuta el instalador correspondiente.
Deteccion de plataforma
Ejecuta con Bash:
uname -s 2>/dev/null || echo "Windows"
- Si devuelve `Darwin` o `Linux`: es macOS o Linux, usa el instalador bash.
- Si falla o devuelve `Windows` / `MINGW` / `MSYS` / `CYGWIN`: es Windows, usa el instalador PowerShell.
macOS / Linux
curl -fsSL https://raw.githubusercontent.com/686f6c61/alfred-dev/main/install.sh | bash
Windows (PowerShell)
irm https://raw.githubusercontent.com/686f6c61/alfred-dev/main/install.ps1 | iex
Scope managed
Si el scope detectado es `managed`, no intentes actualizarlo. Explica que las instalaciones managed las controla la política del administrador y que el usuario debe pedir la actualización a quien gestione Claude Code en su equipo.
Despues de que termine cualquier actualización, informa al usuario de que debe ejecutar **`/reload-plugins`**
Showing the first part of this file.
Plugin de Claude Code: 18 agentes especializados, 60 skills, 25 comandos, 13 hooks, memoria persistente, Memory UI local, quality gates, evidence guard, continuidad operativa y modo autopilot.
Repo: 686f6c61/alfred-dev
Other commands on alfred-dev.
- /alfred
Asistente contextual de Alfred Dev. Enruta automáticamente al flujo o comando operativo correcto
Open command - /audit
Auditoría completa del proyecto con 4 agentes en paralelo
Open command - /blocked
Lista las tareas bloqueadas del kanban de SonIA
Open command - /config
Configura Alfred Dev: autonomía, proyecto, agentes opcionales, memoria y personalidad
Open command - /discuss
Refina una idea o feature antes de abrir un flujo completo de implementación
Open command - /feature
Ciclo completo de desarrollo: producto, arquitectura, desarrollo, QA, docs, entrega
Open command

