dce725e69f
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3.2 KiB
3.2 KiB
description
| description |
|---|
| Lista todos los slash commands disponibles en el repo: globales de fn_registry + namespaced de cada project. Filtra por substring o por namespace. |
/commands — Catalogo de slash commands del repo
Inventario unificado. Lista los .md bajo .claude/commands/ (recursivo, sigue symlinks) y agrupa por namespace.
Sintaxis
/commands # listado completo agrupado por namespace
/commands <substring> # filtra por substring en nombre o descripcion
/commands --ns <namespace> # solo un namespace (global, aurgi, ...)
/commands --json # salida JSON para agentes
Implementacion
Bash + awk. Parsea frontmatter description: de cada .md. Agrupa por subdirectorio (subdir = namespace, root = global).
#!/usr/bin/env bash
set -euo pipefail
ROOT="${FN_REGISTRY_ROOT:-/home/egutierrez/fn_registry}"
CMD_DIR="$ROOT/.claude/commands"
# Recolecta: ns|name|description
collect() {
find -L "$CMD_DIR" -type f -name '*.md' | while read -r f; do
rel="${f#$CMD_DIR/}"
case "$rel" in
*/*) ns="${rel%%/*}"; name="${rel#*/}"; name="${name%.md}" ;;
*) ns="global"; name="${rel%.md}" ;;
esac
desc=$(awk '/^description:/ {sub(/^description:[[:space:]]*/, ""); gsub(/^"|"$/, ""); print; exit}' "$f")
printf '%s|%s|%s\n' "$ns" "$name" "${desc:-(sin descripcion)}"
done | sort
}
collect | awk -F'|' '
{
if ($1 != prev_ns) {
if (prev_ns) print ""
if ($1 == "global") print "## global (/<cmd>)"
else print "## " $1 " (/" $1 ":<cmd>)"
prev_ns = $1
}
printf "- /%s%s — %s\n", ($1=="global"?"":$1":"), $2, $3
}'
Filtros:
- Substring:
grep -i "<substring>"sobre stdout. --ns X: filtrar antes delawkpor$1 == "X".--json: reemplazar elawkporjq -Rsnque construya array{namespace, name, description, invocation}.
Salida (formato humano)
## global (/<cmd>)
- /app — Crear, configurar y desplegar apps del registry
- /autopilot — Modo full-auto...
- /commands — Catalogo de slash commands del repo
...
## aurgi (/aurgi:<cmd>)
- /aurgi:anadir_contexto_aurgi — Anade o modifica contexto...
- /aurgi:aumentar_task — Enriquece tarea Aurgi con preguntas...
- /aurgi:contexto_aurgi — Aprende el contexto de Aurgi...
Cuando usarlo
- Sesion nueva: ver de un vistazo que slash commands hay disponibles.
- Antes de inventar logica inline: comprobar si ya existe un command.
- Auditoria: verificar que los projects exponen sus commands correctamente.
- Onboarding: nuevo PC clonado, descubrir capacidades del repo sin abrir N archivos.
Gotchas
- Sigue symlinks (
find -L). Si un symlink apunta a directorio inexistente, devuelve vacio para esa rama — verificar conls -L .claude/commands/<ns>/. - Solo escanea
<root>/.claude/commands/. Commands user-global en~/.claude/commands/NO entran (son personales, fuera del repo). - Namespace = nombre del subdirectorio bajo
.claude/commands/. Coincide con el project pero no por mecanismo — por convencion. Ver.claude/rules/project_commands.md. - Para que un command de project aparezca aqui desde la raiz, hace falta el symlink (
.claude/commands/<project>->../../projects/<project>/.claude/commands).