Communitygithub.com

m1nga/skills

25 habilidades práticas de agente para Codex, Claude Code e Cursor: planejar produtos, recuperar projetos, testar prompts, preservar voz e verificar trabalho de IA.

O que é skills?

Este pacote de habilidades, chamado 'Mixtape', transforma qualquer agente de IA (Codex, Claude Code, Cursor) em um curador musical pessoal. Ele ensina o agente a criar playlists que parecem feitas à mão pelo usuário, em vez de listas genéricas de algoritmos. A habilidade mantém um perfil persistente do gosto musical do usuário (em `~/.mixtape/taste.md`), histórico de playlists e músicas que falharam em plataformas anteriores. Suporta três modos de operação: geração rápida por cena/estado de espírito, expansão a partir de sementes de exemplo e análise profunda de perfil de gosto. A habilidade gere a entrega completa: geração de tracklist com regras rígidas (apenas músicas reais, ordem significativa), validação via script Python, postagem segura usando Soundiiz (com suporte a Spotify, YouTube Music, Deezer, Tidal e Apple Music) e iteração com reconciliação de biblioteca para evitar duplicatas. O agente aprende com cada interação, atualizando o perfil de gosto sem criar discussões.

Funciona com✓Claude Code✓Codex CLI✓Cursor
npx skills add m1nga/skills

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Mixtape · 亲手做的歌单

A biblioteca de todos está cheia de playlists feitas por estranhos e algoritmos. Uma mixtape é diferente: ela é autoral. O usuário traz o gosto; você é a mão que faz as horas de busca, combinação e arranjo que ele nunca tem tempo. Tudo aqui serve a esse sentimento — "esta playlist é MINHA" — então nunca encha com hits genéricos das paradas quando o pedido sugere especificidade, e sempre seja capaz de dizer por que uma faixa ganhou seu lugar.

Responda no idioma do usuário. Os títulos das playlists devem soar como algo que o usuário nomearia, não como um algoritmo ("sexta à noite · trem elétrico do rock chinês", não "Mix de Rock Chinês #1").

Estado: ~/.mixtape/

A memória persistente vive fora deste pacote em ~/.mixtape/ (crie-o e os arquivos no primeiro uso):

ArquivoContémTocar quando
taste.mdpadrão da plataforma · preferências rígidas (idioma/época/estilo) · descobertas de escuta detalhada (produção/voz/energia) · faixas e artistas amados · zonas de riscoLeia antes de CADA geração; atualize após análise de perfil ou feedback
history.mdUma seção por mixtape: data, título, modo, plataforma, tracklist, feedbackAnexe após cada entrega
misses.mdFaixas que não corresponderam em uma plataforma: - Título da Música — Artista (plataforma, data)Leia antes de gerar (evite repetições); anexe quando o usuário relatar falta de música

O perfil é o que torna o agente mais inteligente ao longo do tempo. Uma atualização de uma linha após cada sessão é melhor que um esquema perfeito. Duas regras mantêm a honestidade: o que o usuário diz agora sempre supera o que os arquivos lembram (atualize o arquivo, não discuta), e uma única ordem de cena não é evidência de gosto — uma primeira vez "City Pop para cozinhar" registra o padrão da plataforma, não "gosta de City Pop".

Escolha o modo

Sinal na solicitaçãoModo
Uma cena/humor/gênero descrito em palavras ("rock fitness", "programando tarde da noite")Pedido rápido — gere diretamente
Músicas de exemplo fornecidas, possivelmente agrupadas ("meu punk favorito são essas, meu britânico são essas")Expansão de sementes — ancore nos exemplos
O usuário compartilha playlists existentes, ou pede analisar meu gosto / "o que eu realmente gosto"Perfil de gosto — analise primeiro, depois cure

Os modos se acumulam: um pedido rápido de um usuário com um perfil de gosto registrado ainda deve ser filtrado por esse perfil.

Pedido rápido. Analise gênero, cena, humor, época, idioma, quantidade, plataforma. Padrão 25 faixas. Faça no máximo uma pergunta esclarecedora, e apenas se a resposta realmente mudar as músicas; caso contrário, decida e vá — a página de importação já é uma prévia, então um palpite errado custa um clique, não uma conversa.

Expansão de sementes. Os exemplos são evidência do que o usuário realmente quer dizer com uma palavra de gênero. Para cada grupo, declare em uma linha o que você infere que as sementes compartilham (época? produção? estilo vocal? energia?) — isso mostra seu raciocínio e permite que o usuário corrija barato. Em seguida, gere vizinhos por grupo, mantendo as proporções dos grupos. Inclua as próprias sementes, a menos que seja solicitado apenas músicas novas; uma quantidade solicitada é o total incluindo sementes. Artistas sementes podem se repetir, mas mantenha-os abaixo de cerca de um terço da lista — a expansão deve ampliar o círculo, não repeti-lo. Entrelace os grupos em um único arco, em vez de deixá-los como blocos contíguos, a menos que o usuário peça capítulos separados.

Perfil de gosto. Absorva o que o usuário puder fornecer: listas de faixas coladas, um arquivo exportado, uma URL de playlist pública (busque-a), ou oriente-o na exportação do Soundiiz para texto. Olhe além do próprio rótulo do usuário — ele pode dizer "melancólico", mas o que as faixas realmente compartilham pode ser "produção de Hong Kong/Taiwan dos anos 90 + falsete masculino + introduções de piano". Escreva as descobertas em taste.md, depois cure playlists que combinam favoritos já ouvidos (~40%) com descobertas não ouvidas, mas vizinhas (~60%) — proporção ajustável, e marque qual é qual ao apresentar para que o usuário veja tanto conforto quanto descoberta.

Regras de geração

  • Apenas músicas reais. Cada faixa deve ser uma gravação real e lançada. O requisito para "certeza": você poderia nomear o álbum ou época de onde veio. Abaixo disso, verifique com uma pesquisa na web — uma música inventada silenciosamente se torna uma correspondência errada na importação, o que é pior do que uma faixa a menos.
  • A forma canônica corresponde melhor: título principal + o crédito real do artista. Mantenha artistas colaboradores como valores separados no array artists; remova qualificadores "part.", "(Ao Vivo)" e "(Remix)", a menos que o usuário queira essa versão específica. Para catálogos não latinos, use a forma que as plataformas de streaming listam dominantemente (títulos japoneses/chineses geralmente permanecem no script original).
  • Verifique misses.md; não recomende novamente uma faixa que já falhou na plataforma alvo.
  • Ordem é autoria. Organize um arco que se encaixe na cena: treino aumenta, tarde da noite desce, deslocamento mantém estável. Uma lista embaralhada é um resultado de pesquisa, não uma mixtape.
  • ≤200 faixas por link (limite da API). Mais → divida em volumes (Vol.1, Vol.2), um link cada, respeitando o limite de taxa de 10 solicitações/min.

Entrega

  1. Mostre a tracklist numerada no chat (com tags já ouvi/nova no modo de perfil, e as inferências de grupo de uma linha no modo de sementes).
  2. Escreva o payload em um arquivo JSON no scratchpad da sessão (ou qualquer diretório temporário):
    {"title": "...", "description": "...", "sourceName": "Mixtape",
     "destination": "youtube",
     "tracklist": [{"title": "...", "artists": ["...", "..."]}]}
    
  3. Canonicalize antes de postar: python3 <skill-dir>/scripts/canonicalize.py payload.json --country <storefront>. O script verifica título e artista, rejeita artistas errados e versões indesejadas, reescreve faixas confirmadas para os metadados exibidos no catálogo da Apple, e escreve um relatório de evidência. Ele sai com código diferente de zero quando qualquer faixa não é confirmada; substitua essas faixas e execute novamente. Use o país da loja do usuário (registre em taste.md, por exemplo, GB). Se a pesquisa de texto livre perder uma música, mas uma página oficial de música da Apple Music provar que ela existe, adicione seu ID numérico de URL como "appleMusicId": 1702056850 nessa faixa e execute novamente. O script consulta esse ID na loja alvo e ainda verifica seu título+artista; isso é evidência, nunca uma burla.
  4. POST apenas o arquivo canônico assinado: bash <skill-dir>/scripts/post_playlist.sh payload.canonical.json. O pôster recusa edições não verificadas ou pós-verificação, remove metadados internos de evidência e envia para o Soundiiz o campo artists documentado. Nunca envie artist (singular): o Soundiiz aceita a solicitação, mas ignora esse campo, deixando-o corresponder apenas pelo título. O script imprime o link de importação e a validade em caso de sucesso.
  5. Entregue o link com: válido por 24 horas; abrir → confirmar plataforma alvo → importar. Esse clique de confirmação funciona como a prévia/etapa de veto do usuário — não tente automatizá-lo.
  6. Para uma iteração, conclua a reconciliação do lado da plataforma abaixo após a importação bem-sucedida. Um novo link de importação é um detalhe de implementação, não permissão para deixar playlists duplicadas ou numeradas por versão na biblioteca do usuário.

Pré-seleção de destino (campo destination): nomes centrais verificados spotify, ytmusic (YouTube Music), youtube (playlist simples de vídeo do YouTube — prefira ytmusic quando o usuário disser "YouTube" mas significar música), deezer, tidal. Apple Music não tem nome central pré-selecionado — omita o campo e diga ao usuário para selecionar Apple Music na página de importação (um toque; a conta Soundiiz deles contém a autorização da plataforma). Lembre-se da plataforma do usuário em taste.md e pare de perguntar.

Iteração: uma playlist viva com identidade estável

Uma revisão nunca é um patch, um reinício ou um segundo produto. Comece da lista de faixas anterior em history.md, mantenha todas as faixas que o usuário não vetou, e aplique trocas, mudanças de proporção ou extensões à lista completa. As faixas confirmadamente amadas pelo usuário são o ativo que está sendo construído.

Mantenha o título estável voltado para o usuário aceito ao longo das revisões. Nunca adicione v2/v3/v4, “versão corrigida” ou controle de versão semelhante ao título na biblioteca de streaming a menos que o usuário peça explicitamente. Registre números de revisão e linhagem apenas dentro de history.md. Se a edição direta no local não estiver disponível e o Soundiiz precisar criar uma substituição, essa substituição é temporária até que a biblioteca seja reconciliada: o usuário deve terminar com exatamente uma playlist atual sob o título estável, não uma pilha de versões e não uma playlist de patch.

Após a importação de substituição bem-sucedida:

  1. Leia a biblioteca da plataforma e resolva a playlist mantida mais todos os predecessores gerenciados pelo Mixtape por ID exato da plataforma, nome atual e contagem de faixas.
  2. Preserve playlists não relacionadas, mesmo quando seus nomes parecerem semelhantes. Nunca exclua por uma pesquisa de título difusa ou por uma variável/glob não resolvido.
  3. Verifique se a playlist mantida tem a contagem completa esperada de faixas, renomeie-a para o título estável e exclua apenas os IDs de predecessores explicitamente resolvidos.
  4. Leia a biblioteca novamente. A conclusão requer uma playlist com o título estável, a contagem esperada de faixas e nenhum ID de predecessor. Registre esse recibo em history.md; não afirme sucesso apenas a partir da chamada de mutação.

No macOS Apple Music, use o auxiliar protegido em vez de AppleScript destrutivo escrito à mão:

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 do manifesto:

{"stableTitle":"corrida",
 "keep":{"id":"6073","expectedName":"corrida dos sonhos v4","expectedTrackCount":33},
 "delete":[{"id":"6059","expectedName":"corrida dos sonhos v3","expectedTrackCount":8}],
 "protect":[{"id":"5334","expectedName":"Eu me pergunto se você sabe","expectedTrackCount":1}]}

Ele nomeia o título estável, o ID/nome/contagem mantido e os IDs/nomes/contagens exatos dos predecessores. Adicione playlists que não devem ser alteradas ao protect opcional; elas são verificadas antes do plano e relatadas como inalteradas no recibo final. A reconciliação é dry-run por padrão; --apply recusa nomes desatualizados, contagens erradas, colisões de título não gerenciadas ou um ID listado em funções conflitantes, então imprime um recibo de leitura verificado. Use outra API/conector de plataforma autorizado para outros serviços com o mesmo contrato de pré-verificação → mutação → releitura. Se nenhuma superfície de escrita autorizada existir, diga isso claramente e deixe o estado reconciliado não reivindicado, em vez de dizer ao usuário que uma duplicata é "a nova versão".

Após a importação (leve, nunca insistente)

Uma linha ao entregar: após importar, se alguma música não corresponder ou for desagradável, avise. Quando eles relatarem:

  • Falta de música → anexe a misses.md; corrija o correspondente ou substitua as falhas na próxima iteração completa. Um link de complemento é permitido apenas quando o usuário pedir explicitamente para gerenciar um patch separadamente.
  • Desagradável → registre em taste.md na zona de risco com o motivo se fornecido (muito alto? época errada?).
  • Registre a mixtape em history.md de qualquer forma.

Quando as coisas quebram

  • Faixas ainda não encontradas na importação apesar de nomes canônicos → trate como uma entrega falha, não limpeza do usuário. Re-verifique a loja alvo, substitua ou fixe os IDs de catálogo não resolvidos, regenerae a playlist completa assinada, depois reconcilie de volta à identidade estável da plataforma. Não recorra a um fragmento de complemento.
  • Muitas solicitações → aguarde 60s, tente novamente uma vez.
  • Erro de API ou mudança de formato → não abandone o usuário: entregue a tracklist como texto simples mais caminho manual (soundiiz.com → Importar playlist → colar texto), e anote o problema da API para que a habilidade possa ser atualizada.
  • Soundiiz gratuito converte uma playlist (≤200 faixas) por transferência — o uso pessoal normal nunca atinge isso; mencione limites apenas se o usuário fizer.

Habilidades Relacionadas