CLI de Gestión de Habilidades
Meta-skill para gestionar habilidades de oh-my-claudecode mediante comandos tipo CLI.
Subcomandos
/skill list
Muestra todas las habilidades disponibles organizadas por alcance.
Comportamiento:
- Escanea las habilidades integradas en el directorio
skills/del plugin (solo lectura) - Escanea las habilidades de usuario en
${CLAUDE_CONFIG_DIR:-~/.claude}/skills/omc-learned/ - Escanea las habilidades de proyecto en
.omc/skills/ - Analiza el frontmatter YAML para metadatos
- Muestra en formato de tabla organizada:
HABILIDADES INTEGRADAS (incluidas con oh-my-claudecode):
| Nombre | Descripción | Ámbito |
|------------------|--------------------------------|-----------|
| visual-verdict | Veredictos estructurados de QA visual | integrado |
| ralph | Bucle de persistencia | integrado |
HABILIDADES DE USUARIO (~/.claude/skills/omc-learned/):
| Nombre | Disparadores | Calidad | Uso | Ámbito |
|------------------|-----------------|---------|-----|--------|
| error-handler | fix, error | 95% | 42 | usuario|
| api-builder | api, endpoint | 88% | 23 | usuario|
HABILIDADES DE PROYECTO (.omc/skills/):
| Nombre | Disparadores | Calidad | Uso | Ámbito |
|------------------|-----------------|---------|-----|----------|
| test-runner | test, run | 92% | 15 | proyecto |
Alternativa: Si no hay estadísticas de calidad/uso disponibles, mostrar "N/A"
Nota sobre habilidades integradas: Las habilidades integradas se incluyen con oh-my-claudecode y se pueden descubrir/leer, pero no se pueden eliminar ni editar mediante /skill remove o /skill edit.
/skill add [nombre]
Asistente interactivo para crear una nueva habilidad.
Comportamiento:
- Preguntar por el nombre de la habilidad (si no se proporciona en el comando)
- Validar: minúsculas, solo guiones, sin espacios
- Preguntar por la descripción
- Una línea clara y concisa
- Preguntar por los disparadores (palabras clave separadas por comas)
- Ejemplo: "error, fix, debug"
- Preguntar por la sugerencia de argumento (opcional)
- Ejemplo: " [opciones]"
- Preguntar por el ámbito:
usuario→${CLAUDE_CONFIG_DIR:-~/.claude}/skills/omc-learned/<nombre>/SKILL.mdproyecto→.omc/skills/<nombre>/SKILL.md
- Crear archivo de habilidad con plantilla:
---
name: <nombre>
description: <descripción>
triggers:
- <disparador1>
- <disparador2>
argument-hint: "<argumentos>"
---
# Habilidad <Nombre>
## Propósito
[Describe qué hace esta habilidad]
## Cuándo Activar
[Describe los disparadores y condiciones]
## Flujo de Trabajo
1. [Paso 1]
2. [Paso 2]
3. [Paso 3]
## Ejemplos
/oh-my-claudecode: ejemplo-argumento
## Notas
[Contexto adicional, casos límite, detalles importantes]
- Informar éxito con la ruta del archivo
- Sugerir: "Editar con
/skill edit <nombre>para personalizar el contenido"
Ejemplo:
Usuario: /skill add custom-logger
Asistente: Creando nueva habilidad 'custom-logger'...
Descripción: Logging mejorado con salida estructurada
Disparadores (separados por comas): log, logger, logging
Sugerencia de argumento (opcional): <nivel> [mensaje]
Ámbito (usuario/proyecto): usuario
✓ Habilidad creada en ~/.claude/skills/omc-learned/custom-logger/SKILL.md
→ Editar con: /skill edit custom-logger
/skill remove
Elimina una habilidad por nombre.
Comportamiento:
- Buscar la habilidad en ambos ámbitos:
${CLAUDE_CONFIG_DIR:-~/.claude}/skills/omc-learned/<nombre>/SKILL.md.omc/skills/<nombre>/SKILL.md
- Si se encuentra:
- Mostrar información de la habilidad (nombre, descripción, ámbito)
- Preguntar confirmación: "¿Eliminar la habilidad '' del ámbito <ámbito>? (sí/no)"
- Si se confirma:
- Eliminar todo el directorio de la habilidad (ej.,
${CLAUDE_CONFIG_DIR:-~/.claude}/skills/omc-learned/<nombre>/) - Informar: "✓ Habilidad '' eliminada del ámbito <ámbito>"
- Eliminar todo el directorio de la habilidad (ej.,
- Si no se encuentra:
- Informar: "✗ Habilidad '' no encontrada en el ámbito de usuario o proyecto"
Seguridad: Nunca eliminar sin confirmación explícita del usuario.
Ejemplo:
Usuario: /skill remove old-logger
Asistente: Habilidad 'old-logger' encontrada en el ámbito de usuario:
Descripción: Utilidad de logging heredada
Ámbito: usuario (~/.claude/skills/omc-learned/)
¿Eliminar la habilidad 'old-logger'? (sí/no)
Usuario: sí
Asistente: ✓ Habilidad 'old-logger' eliminada del ámbito de usuario
/skill edit
Edita una habilidad existente de forma interactiva.
Comportamiento:
- Encontrar la habilidad por nombre (buscar en ambos ámbitos)
- Leer el contenido actual mediante la herramienta de lectura
- Mostrar valores actuales:
Habilidad actual 'custom-logger': - Descripción: Logging mejorado con salida estructurada - Disparadores: log, logger, logging - Sugerencia de argumento: <nivel> [mensaje] - Ámbito: usuario - Preguntar qué cambiar:
descripción- Actualizar la descripcióndisparadores- Actualizar las palabras clave de disparosugerencia-argumento- Actualizar la sugerencia de argumentocontenido- Editar el contenido markdown completorenombrar- Renombrar la habilidad (mover archivo)cancelar- Salir sin cambios
- Para el campo seleccionado:
- Mostrar el valor actual
- Preguntar por el nuevo valor
- Actualizar el frontmatter YAML o el contenido
- Escribir de vuelta al archivo
- Informar éxito con un resumen de los cambios
Ejemplo:
Usuario: /skill edit custom-logger
Asistente: Habilidad actual 'custom-logger':
- Descripción: Logging mejorado con salida estructurada
- Disparadores: log, logger, logging
- Sugerencia de argumento: <nivel> [mensaje]
¿Qué te gustaría editar? (descripción/disparadores/sugerencia-argumento/contenido/renombrar/cancelar)
Usuario: disparadores
Asistente: Disparadores actuales: log, logger, logging
Nuevos disparadores (separados por comas): log, logger, logging, trace
✓ Disparadores actualizados para 'custom-logger'
/skill search
Busca habilidades por contenido, disparadores, nombre o descripción.
Comportamiento:
- Escanea todas las habilidades en ambos ámbitos
- Coincidir con la consulta (sin distinción de mayúsculas/minúsculas) contra:
- Nombre de la habilidad
- Descripción
- Disparadores
- Contenido markdown completo
- Mostrar coincidencias con contexto:
Se encontraron 3 habilidades que coinciden con "error de TypeScript":
1. typescript-fixer (usuario)
Descripción: Corrige errores comunes de TypeScript
Coincidencia: "patrones de manejo de errores de TypeScript"
2. error-handler (usuario)
Descripción: Utilidades genéricas de manejo de errores
Coincidencia: "Soporta errores de TypeScript y JavaScript"
3. lint-fix (proyecto)
Descripción: Corrige automáticamente errores de linting
Coincidencia: "Resolución de errores de ESLint de TypeScript"
Clasificación: Priorizar coincidencias en nombre/disparadores sobre coincidencias de contenido
Ejemplo:
Usuario: /skill search api endpoint
Asistente: Se encontraron 2 habilidades que coinciden con "api endpoint":
1. api-builder (usuario)
Descripción: Generar endpoints de API REST
Disparadores: api, endpoint, rest
2. backend-scaffold (proyecto)
Descripción: Scaffolding de servicios backend
Coincidencia: "Crea boilerplate de endpoints de API"
/skill info
Muestra información detallada sobre una habilidad.
Comportamiento:
- Encontrar la habilidad por nombre (buscar en ambos ámbitos)
- Analizar el frontmatter YAML y el contenido
- Mostrar detalles completos:
Habilidad: custom-logger
Ámbito: usuario (~/.claude/skills/omc-learned/custom-logger/)
Descripción: Logging mejorado con salida estructurada
Disparadores: log, logger, logging
Sugerencia de Argumento: <nivel> [mensaje]
Calidad: 95% (si está disponible)
Conteo de Uso: 42 veces (si está disponible)
Ruta del Archivo: /home/usuario/.claude/skills/omc-learned/custom-logger/SKILL.md
--- CONTENIDO COMPLETO ---
[contenido markdown completo]
Si no se encuentra: Informar error con sugerencia de usar /skill search
Ejemplo:
Usuario: /skill info custom-logger
Asistente: Habilidad: custom-logger
Ámbito: usuario
Descripción: Logging mejorado con salida estructurada
Disparadores: log, logger, logging
Archivo: ~/.claude/skills/omc-learned/custom-logger/SKILL.md
--- CONTENIDO ---
# Habilidad Custom Logger
## Propósito
Logging mejorado con salida JSON estructurada...
[resto del contenido]
/skill sync
Sincroniza habilidades entre los ámbitos de usuario y proyecto.
Comportamiento:
- Escanea ambos ámbitos:
- Habilidades de usuario:
${CLAUDE_CONFIG_DIR:-~/.claude}/skills/omc-learned/ - Habilidades de proyecto:
.omc/skills/
- Habilidades de usuario:
- Compara y categoriza:
- Habilidades solo de usuario (no en proyecto)
- Habilidades solo de proyecto (no en usuario)
- Habilidades comunes (en ambos)
- Muestra oportunidades de sincronización:
INFORME DE SINCRONIZACIÓN:
Habilidades solo de usuario (5):
- error-handler
- api-builder
- custom-logger
- test-generator
- deploy-helper
Habilidades solo de proyecto (2):
- test-runner
- backend-scaffold
Habilidades comunes (3):
- frontend-ui-ux
- git-master
- planner
Opciones:
[1] Copiar habilidad de usuario a proyecto
[2] Copiar habilidad de proyecto a usuario
[3] Ver diferencias
[4] Cancelar
- Manejar la elección del usuario:
- Opción 1: Seleccionar habilidad(es) para copiar al proyecto
- Opción 2: Seleccionar habilidad(es) para copiar al usuario
- Opción 3: Mostrar diferencias lado a lado para habilidades comunes
- Opción 4: Salir
Seguridad: Nunca sobrescribir sin confirmación
Ejemplo:
Usuario: /skill sync
Asistente: Se encontraron 5 habilidades solo de usuario y 2 habilidades solo de proyecto.
¿Copiar 'error-handler' de usuario a proyecto? (sí/no/saltar)
Usuario: sí
Asistente: ✓ 'error-handler' copiada a .omc/skills/
¿Copiar 'api-builder' de usuario a proyecto? (sí/no/saltar)
Usuario: saltar
...
/skill setup
Asistente interactivo para configurar y gestionar habilidades locales (anteriormente local-skills-setup).
Comportamiento:
Paso 1: Verificación y Configuración de Directorios
Primero, verificar si existen los directorios de habilidades y crearlos si es necesario:
# Verificar y crear el directorio de habilidades de usuario
USER_SKILLS_DIR="${CLAUDE_CONFIG_DIR:-$HOME/.claude}/skills/omc-learned"
if [ -d "$USER_SKILLS_DIR" ]; then
echo "El directorio de habilidades de usuario existe: $USER_SKILLS_DIR"
else
mkdir -p "$USER_SKILLS_DIR"
echo "Directorio de habilidades de usuario creado: $USER_SKILLS_DIR"
fi
# Verificar y crear el directorio de habilidades de proyecto
PROJECT_SKILLS_DIR=".omc/skills"
if [ -d "$PROJECT_SKILLS_DIR" ]; then
echo "El directorio de habilidades de proyecto existe: $PROJECT_SKILLS_DIR"
else
mkdir -p "$PROJECT_SKILLS_DIR"
echo "Directorio de habilidades de proyecto creado: $PROJECT_SKILLS_DIR"
fi
Paso 2: Escaneo e Inventario de Habilidades
Escanea ambos directorios y muestra un inventario completo:
# Escanear habilidades de usuario
echo "=== HABILIDADES DE USUARIO (~/.claude/skills/omc-learned/) ==="
if [ -d "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/skills/omc-learned" ]; then
USER_COUNT=$(find "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/skills/omc-learned" -name "*.md" 2>/dev/null | wc -l)
echo "Total de habilidades: $USER_COUNT"
if [ $USER_COUNT -gt 0 ]; then
echo ""
echo "Habilidades encontradas:"
find "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/skills/omc-learned" -name "*.md" -type f -exec sh -c '
FILE="$1"
NAME=$(grep -m1 "^name:" "$FILE" 2>/dev/null | sed "s/name: //")
DESC=$(grep -m1 "^description:" "$FILE" 2>/dev/null | sed "s/description: //")
MODIFIED=$(stat -c "%y" "$FILE" 2>/dev/null || stat -f "%Sm" "$FILE" 2>/dev/null)
echo " - $NAME"
[ -n "$DESC" ] && echo " Descripción: $DESC"
echo " Modificado: $MODIFIED"
echo ""
' sh {} \;
fi
else
echo "Directorio no encontrado"
fi
echo ""
echo "=== HABILIDADES DE PROYECTO (.omc/skills/) ==="
if [ -d ".omc/skills" ]; then
PROJECT_COUNT=$(find ".omc/skills" -name "*.md" 2>/dev/null | wc -l)
echo "Total de habilidades: $PROJECT_COUNT"
if [ $PROJECT_COUNT -gt 0 ]; then
echo ""
echo "Habilidades encontradas:"
find ".omc/skills" -name "*.md" -type f -exec sh -c '
FILE="$1"
NAME=$(grep -m1 "^name:" "$FILE" 2>/dev/null | sed "s/name: //")
DESC=$(grep -m1 "^description:" "$FILE" 2>/dev/null | sed "s/description: //")
MODIFIED=$(stat -c "%y" "$FILE" 2>/dev/null || stat -f "%Sm" "$FILE" 2>/dev/null)
echo " - $NAME"
[ -n "$DESC" ] && echo " Descripción: $DESC"
echo " Modificado: $MODIFIED"
echo ""
' sh {} \;
fi
else
echo "Directorio no encontrado"
fi
# Resumen
TOTAL=$((USER_COUNT + PROJECT_COUNT))
echo "=== RESUMEN ==="
echo "Total de habilidades en todos los directorios: $TOTAL"
Paso 3: Menú de Acciones Rápidas
Después del escaneo, usar la herramienta AskUserQuestion para ofrecer estas opciones:
Pregunta: "¿Qué te gustaría hacer con tus habilidades locales?"
Opciones:
- Añadir nueva habilidad - Iniciar el asistente de creación de habilidades (invocar
/skill add) - Listar todas las habilidades con detalles - Mostrar inventario completo de habilidades (invocar
/skill list) - Escanear conversación en busca de patrones - Analizar la conversación actual en busca de patrones que merezcan ser habilidad
- Importar habilidad - Importar una habilidad desde una URL o pegar contenido
- Hecho - Salir del asistente
Opción 3: Escanear Conversación en Busca de Patrones
Analizar el contexto de la conversación actual para identificar patrones que valga la pena convertir en habilidad. Buscar:
- Sesiones de depuración recientes con soluciones no obvias
- Errores complicados que requirieron investigación
- Soluciones alternativas específicas del codebase descubiertas
- Patrones de error que tomaron tiempo resolver
Informar los hallazgos y preguntar si el usuario quiere extraer alguno como habilidad (invocar /skillify; /learner está obsoleto por compatibilidad).
Opción 4: Importar Habilidad
Preguntar al usuario que proporcione:
- URL: Descargar habilidad desde una URL (ej., GitHub gist)
- Pegar contenido: Pegar directamente el contenido markdown de la habilidad
Luego preguntar por el ámbito:
- Nivel de usuario (~/.claude/skills/omc-learned/) - Disponible en todos los proyectos
- Nivel de proyecto (.omc/skills/) - Solo para este proyecto
Validar el formato de la habilidad y guardar en la ubicación elegida.
/skill scan
Comando rápido para escanear ambos directorios de habilidades (subconjunto de /skill setup).
Comportamiento:
Ejecutar el escaneo del Paso 2 de /skill setup sin el asistente interactivo.
Plantillas de Habilidades
Al crear habilidades mediante /skill add o /skill setup, ofrecer plantillas rápidas para tipos de habilidades comunes:
Plantilla de Solución de Errores
---
id: error-[id-único]
name: [Nombre del Error]
description: Solución para [error específico en contexto específico]
source: conversation
triggers: ["fragmento del mensaje de error", "ruta del archivo", "síntoma"]
quality: high
---
# [Nombre del Error]
## La Comprensión
¿Cuál es la causa subyacente de este error? ¿Qué principio descubriste?
## Por Qué Importa
¿Qué sale mal si no sabes esto? ¿Qué síntoma te llevó aquí?
## Patrón de Reconocimiento
¿Cómo sabes cuándo se aplica esto? ¿Cuáles son las señales?
- Mensaje de error: "[error exacto]"
- Archivo: [ruta específica del archivo]
- Contexto: [¿cuándo ocurre esto?]
## La Solución
1. [Paso 1]
2. [Paso 2]
3. [Paso 3]
## Notas
[Consideraciones adicionales, casos límite, advertencias]
Plantilla de Flujo de Trabajo
---
name: [nombre de la habilidad]
description: [descripción breve]
triggers:
- [disparador1]
- [disparador2]
---
# [Nombre de la Habilidad]
## Cuándo Usar
[Describe cuándo se debe activar esta habilidad]
## Pasos
### Paso 1: [Nombre del Paso]
[Descripción de lo que hay que hacer]
### Paso 2: [Nombre del Paso]
[Descripción de lo que hay que hacer]
### Paso 3: [Nombre del Paso]
[Descripción de lo que hay que hacer]
## Resultado Esperado
[¿Qué debería suceder después de completar estos pasos?]
## Ejemplo
/oh-my-claudecode:
## Notas
[Cualquier advertencia, dependencia o contexto adicional]
Plantilla de Guía de Configuración
---
name: config-[framework/tecnología]
description: Configuración y puesta en marcha de [framework/tecnología]
triggers:
- setup
- config
- [disparador específico]
---
# Configuración de [Framework/Tecnología]
## Requisitos Previos
- [Requisito 1]
- [Requisito 2]
- [Requisito 3]
## Pasos de Instalación
### 1. [Paso 1]
```bash
[comando o fragmento de código]
2. [Paso 2]
[comando o fragmento de código]
3. [Paso 3]
[comando o fragmento de código]
Verificación
[comando para verificar que la configuración funciona]
Solución de Problemas
---
## Notas de Implementación
- **Manejo de errores:** Todos los subcomandos deben manejar elegantemente archivos faltantes, permisos y directorios inexistentes
- **Confirmación:** El usuario siempre debe confirmar antes de eliminar o sobrescribir
- **Rutas:** Usar siempre `${CLAUDE_CONFIG_DIR:-~/.claude}` para la ruta base de usuario; expandir `~` según sea necesario
- **Formato:** Usar el frontmatter YAML para metadatos dentro de los archivos `SKILL.md`
- **Compatibilidad:** Todos los subcomandos deben seguir funcionando si se cambia la variable de entorno `CLAUDE_CONFIG_DIR`
- **Velocidad:** Mantener operaciones de archivo ligeras; evitar escaneos completos innecesarios en comandos como `/skill info`