Communitygithub.com

m1nga/skills

25 habilidades prácticas para agentes de IA en Codex, Claude Code y Cursor: planificar productos, recuperar proyectos, probar prompts, preservar la voz y verificar el trabajo de la IA.

¿Qué es skills?

Este skill transforma a un agente de IA (compatible con Codex, Claude Code y Cursor) en un curador musical experto, capaz de crear listas de reproducción personalizadas con una sensación de autoría artesanal. El agente no solo genera listas genéricas, sino que construye un perfil de gustos a largo plazo, almacena el historial de entregas y evita canciones que previamente fallaron o no gustaron al usuario. El skill opera en tres modos: 'Pedido Rápido' para escenas o estados de ánimo, 'Expansión de Semillas' para ampliar canciones de ejemplo, y 'Perfil de Gustos' para analizar el gusto del usuario desde datos existentes. Incluye un proceso completo de verificación y entrega: las canciones se verifican contra un catálogo real (por ejemplo, Apple Music) usando un script de Python, se firma el archivo de salida y se publica en plataformas como Spotify, YouTube Music, Apple Music (sin preselección) y Deezer. Además, soporta iteración sobre listas existentes manteniendo una identidad estable, sin crear duplicados ni versiones numeradas. El skill está diseñado para ser discreto y no intrusivo después de la entrega, solo pidiendo retroalimentación y registrándola para mejorar futuras generaciones.

Compatible con✓Claude Code✓Codex CLI✓Cursor
npx skills add m1nga/skills

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Mixtape · 亲手做的歌单

La biblioteca de todos está llena de listas de reproducción hechas por desconocidos y algoritmos. Un mixtape es diferente: está autoreado. El usuario aporta el gusto; tú eres las manos que hacen las horas de búsqueda, coincidencias y arreglos que ellos nunca tienen tiempo para hacer. Todo lo que sigue sirve a ese único sentimiento — "esta lista de reproducción es MÍA" — así que nunca rellenes con éxitos genéricos de las listas de éxitos cuando la solicitud implique especificidad, y siempre sé capaz de decir por qué una canción se ganó su lugar.

Responde en el idioma del usuario. Los títulos de las listas de reproducción deben sonar como algo que el usuario nombraría, no como un algoritmo ("Viernes noche · Tren chino del rock", no "Mezcla de rock chino #1").

Estado: ~/.mixtape/

La memoria persistente reside fuera de este paquete en ~/.mixtape/ (créealo y los archivos en el primer uso):

ArchivoContieneTocar cuando
taste.mdPlataforma predeterminada · Preferencias duras (idioma/época/estilo) · Descubrimientos detallados (producción/voz/energía) · Canciones y artistas favoritos · Zona de peligroLeer ANTES de cada generación; actualizar después del análisis de perfil o retroalimentación
history.mdUna sección por mixtape: fecha, título, modo, plataforma, lista de canciones, retroalimentaciónAñadir después de cada entrega
misses.mdCanciones que no coincidieron en una plataforma: - Título — Artista (plataforma, fecha)Leer antes de generar (evitar repeticiones); añadir cuando el usuario informe que falta una canción

El perfil es lo que hace que el agente sea más inteligente con el tiempo. Una actualización de una línea después de cada sesión supera a un esquema perfecto. Dos reglas lo mantienen honesto: lo que el usuario dice ahora siempre supera lo que los archivos recuerdan (actualiza el archivo, no discutas), y un solo orden de escena no es evidencia de gusto — una primera vez "City Pop para cocinar" registra el valor predeterminado de la plataforma, no "le gusta City Pop".

Elige el modo

Señal en la solicitudModo
Una escena/estado de ánimo/género descrito en palabras ("Rock para el gym", "Programar de madrugada")Pedido rápido — generar directamente
Canciones de ejemplo dadas, posiblemente agrupadas ("Mi punk favorito son estas, el britpop estas otras")Expansión de semillas — anclar en los ejemplos
El usuario comparte listas de reproducción existentes, o pide analizar mi gusto / "qué es lo que realmente me gusta"Perfil de gustos — analizar primero, luego curar

Los modos se apilan: un pedido rápido de un usuario con un perfil de gustos archivado debe filtrarse a través de ese perfil.

Pedido rápido. Analiza género, escena, estado de ánimo, época, idioma, cantidad, plataforma. Por defecto 25 canciones. Haz como máximo una pregunta aclaratoria, y solo si la respuesta cambiaría genuinamente las canciones; de lo contrario, decide y ve — la página de importación es en sí misma una vista previa, así que una suposición equivocada cuesta un clic, no una conversación.

Expansión de semillas. Los ejemplos son evidencia de lo que el usuario realmente quiere decir con una palabra de género. Para cada grupo, indica en una línea qué crees que comparten las semillas (¿época? ¿producción? ¿estilo vocal? ¿energía?) — esto muestra tu razonamiento y permite al usuario corregirlo a bajo costo. Luego genera vecinos por grupo, manteniendo las proporciones de los grupos. Incluye las semillas a menos que se te pidan canciones completamente nuevas; la cantidad solicitada es el total incluyendo las semillas. Los artistas semilla pueden repetirse, pero mantenlos por debajo de aproximadamente un tercio de la lista — la expansión debe ampliar el círculo, no hacerlo bucle. Entrelaza los grupos en un solo arco en lugar de dejarlos como bloques contiguos, a menos que el usuario solicite capítulos separados.

Perfil de gustos. Incorpora lo que el usuario pueda dar: listas de canciones pegadas, un archivo exportado, una URL de lista de reproducción pública (búscala), o guíalo a través de la exportación a texto de Soundiiz. Mira más allá de la propia etiqueta del usuario — pueden decir "balada", pero lo que las canciones realmente comparten podría ser "producción de los 90 de Hong Kong/Taiwán + falsete masculino + intros de piano". Escribe los hallazgos en taste.md, luego crea listas de reproducción que mezclen favoritos ya escuchados (~40%) con descubrimientos no escuchados pero cercanos (~60%) — la proporción es ajustable, y etiqueta cuál es cuál al presentarlos para que el usuario vea tanto comodidad como descubrimiento.

Reglas de generación

  • Solo canciones reales. Cada canción debe ser una grabación real y publicada. El criterio para "seguro": podrías nombrar el álbum o la época de la que proviene. Por debajo de ese criterio, verifica con una búsqueda web — una canción inventada se convierte silenciosamente en una coincidencia incorrecta al importar, lo que es peor que tener una canción menos.
  • La forma canónica coincide mejor: título principal + el crédito real del artista. Mantén los artistas colaboradores como valores separados en la matriz artists; elimina los calificativos "feat.", "(En vivo)" y "(Remix)" a menos que el usuario quiera esa versión específica. Para catálogos no latinos, usa la forma que las plataformas de streaming listan de forma dominante (los títulos japoneses/chinos suelen permanecer en la escritura original).
  • Consulta misses.md; no recomiendes de nuevo una canción que ya falló en la plataforma objetivo.
  • El orden es autoría. Organiza un arco que se ajuste a la escena: el entrenamiento se intensifica, la noche desciende, el viaje al trabajo se mantiene estable. Una lista aleatoria es un resultado de búsqueda, no un mixtape.
  • ≤200 canciones por enlace (límite de la API). Más → divide en volúmenes (Vol.1, Vol.2), un enlace cada uno, respetando el límite de velocidad de 10 solicitudes/min.

Entrega

  1. Muestra la lista numerada de canciones en el chat (con etiquetas de ya escuchado/nuevo en modo perfil, y las inferencias de grupo de una línea en modo semilla).
  2. Escribe la carga útil en un archivo JSON en el área de trabajo temporal de la sesión (o cualquier directorio temporal):
    {"title": "...", "description": "...", "sourceName": "Mixtape",
     "destination": "youtube",
     "tracklist": [{"title": "...", "artists": ["...", "..."]}]}
    
  3. Canonicaliza antes de publicar: python3 <skill-dir>/scripts/canonicalize.py payload.json --country <storefront>. El script verifica el título y el artista, rechaza artistas incorrectos y versiones no deseadas, reescribe las canciones confirmadas a los metadatos mostrados en el catálogo de Apple, y escribe un informe de evidencia. Sale con un código de error cuando cualquier canción no está confirmada; reemplaza esas canciones y vuelve a ejecutar. Usa el país de la tienda del usuario (regístralo en taste.md, por ejemplo, ES). Si la búsqueda de texto libre no encuentra una canción pero una página oficial de la canción de Apple Music prueba que existe, añade su ID de URL numérico como "appleMusicId": 1702056850 en esa canción y vuelve a ejecutar. El script busca ese ID en la tienda objetivo y aún así verifica su título+artista; esto es evidencia, nunca un bypass.
  4. PUBLICA solo el archivo canónico firmado: bash <skill-dir>/scripts/post_playlist.sh payload.canonical.json. El publicador rechaza ediciones no verificadas o posteriores a la verificación, elimina los metadatos de evidencia internos y envía a Soundiiz su campo artists documentado. Nunca envíes artist (singular): Soundiiz acepta la solicitud pero ignora ese campo, dejando que coincida solo por título. El script imprime el enlace de importación y la fecha de caducidad al finalizar correctamente.
  5. Entrega el enlace con: Validez 24 horas; Abrir → Confirmar plataforma destino → Importar. Ese clic de confirmación también sirve como paso de vista previa/veto del usuario — no intentes automatizarlo.
  6. Para una iteración, completa la reconciliación del lado de la plataforma a continuación después de que la importación se realice correctamente. Un nuevo enlace de importación es un detalle de implementación, no un permiso para dejar listas de reproducción duplicadas o con números de versión en la biblioteca del usuario.

Preselección de destino (campo destination): nombres principales verificados spotify, ytmusic (YouTube Music), youtube (lista de reproducción de video de YouTube simple — prefiere ytmusic cuando el usuario dice "YouTube" pero se refiere a música), deezer, tidal. Apple Music no tiene un nombre principal de preselección — omite el campo y dile al usuario que seleccione Apple Music en la página de importación (un toque; su cuenta de Soundiiz tiene la autorización de la plataforma). Recuerda la plataforma del usuario en taste.md y deja de preguntar.

Iteración: una lista de reproducción viva con una identidad estable

Una revisión nunca es un parche, un reinicio o un segundo producto. Comienza desde la lista de canciones anterior en history.md, conserva cada canción que el usuario no haya vetado, y aplica intercambios, cambios de proporción o extensiones a la lista completa. Las canciones confirmadas como amadas por el usuario son el activo que se está construyendo.

Manten el título estable aceptado por el usuario en todas las revisiones. Nunca añadas v2/v3/v4, "versión corregida", o un registro de lanzamiento similar al título en la biblioteca de streaming a menos que el usuario lo pida explícitamente. Registra los números de revisión y el linaje solo en history.md. Si la edición directa en el lugar no está disponible y Soundiiz debe crear un reemplazo, ese reemplazo es temporal hasta que la biblioteca se reconcilie: el usuario debe terminar con exactamente una lista de reproducción actual bajo el título estable, no una pila de versiones y no una lista de reproducción de parche.

Después de que la importación de reemplazo se realice correctamente:

  1. Lee la biblioteca de la plataforma y resuelve la lista de reproducción conservada más cada predecesora gestionada por Mixtape por ID de plataforma exacto, nombre actual y número de canciones.
  2. Conserva listas de reproducción no relacionadas incluso cuando sus nombres parezcan similares. Nunca elimines por una búsqueda de título difusa o por una variable glob no resuelta.
  3. Verifica que la lista de reproducción conservada tenga el recuento de canciones completo esperado, renómbrala al título estable, y elimina solo los ID de predecesores resueltos explícitamente.
  4. Lee la biblioteca de nuevo. La finalización requiere una lista de reproducción con el título estable, el recuento de canciones esperado y ningún ID de predecesor. Registra este recibo en history.md; no declares éxito solo por la llamada de mutación.

En macOS Apple Music, usa el ayudante protegido en lugar de AppleScript destructivo escrito a mano:

python3 <skill-dir>/scripts/reconcile_apple_music.py inventory
python3 <skill-dir>/scripts/reconcile_apple_music.py reconcile manifest.json
python3 <skill-dir>/scripts/reconcile_apple_music.py reconcile manifest.json --apply

Forma del manifiesto:

{"stableTitle":"Correr",
 "keep":{"id":"6073","expectedName":"Sueño de arranque v4","expectedTrackCount":33},
 "delete":[{"id":"6059","expectedName":"Sueño de arranque v3","expectedTrackCount":8}],
 "protect":[{"id":"5334","expectedName":"Me pregunto si sabes","expectedTrackCount":1}]}

Nombra el título estable, el ID/nombre/recuento conservado, y los ID/nombre/recuento exactos de los predecesores. Añade listas de reproducción que no deben cambiar a protect opcional; se verifican antes del plan y se informan sin cambios en el recibo final. La reconciliación es de prueba por defecto; --apply rechaza nombres obsoletos, recuentos incorrectos, colisiones de títulos no gestionadas, o un ID listado en roles conflictivos, luego imprime un recibo de verificación de lectura posterior. Usa otra API/ conector de plataforma autorizado para otros servicios con el mismo contrato de pre-vuelo → mutar → leer de nuevo. Si no hay superficie de escritura autorizada, dilo claramente y deja el estado reconciliado sin reclamar, en lugar de decirle al usuario que un duplicado es "la nueva versión".

Después de la importación (ligero, nunca insistente)

Una línea al entregar: Después de importar, si hay canciones que no coinciden o que no te gustan, dímelo. Cuando lo informan:

  • Canción faltante → añade a misses.md; repara el comparador o reemplaza las fallas en la siguiente iteración completa. Se permite un enlace de recarga solo cuando el usuario pide explícitamente gestionar un parche por separado.
  • Canción que no gusta → registra en taste.md en la zona de peligro con el motivo si lo da (¿demasiado ruidosa? ¿época incorrecta?).
  • Registra el mixtape en history.md de cualquier manera.

Cuando algo se rompe

  • Canciones que aún "no se encuentran" al importar a pesar de los nombres canónicos → trátalo como una entrega fallida, no como una limpieza del usuario. Vuelve a verificar la tienda objetivo, reemplaza o fija los ID de catálogo no resueltos, regenera la lista de reproducción completa firmada, luego reconcíliala con la identidad estable de la plataforma. No recurras a un fragmento de recarga.
  • Demasiadas solicitudes → espera 60s, reintenta una vez.
  • Error de API o cambio de formato → no dejes al usuario varado: entrega la lista de canciones como texto plano más la ruta manual (soundiiz.com → Importar playlist → pegar texto), y anota el problema de la API para que la habilidad pueda actualizarse.
  • Soundiiz gratuito convierte una lista de reproducción (≤200 canciones) por transferencia — el uso personal normal nunca llega a esto; solo menciona límites si el usuario lo hace.

Skills relacionados