Sobre o projeto

A Bose desativou a nuvem do SoundTouch, deixando as caixas com Bluetooth, AUX, AirPlay e zonas multiroom, mas sem rádio pela internet, presets, navegação ou Alexa. Este repositório é uma skill do Claude Code que conduz o proprietário a apontar suas caixas para um serviço substituto auto-hospedado e recuperar rádio e presets. Ele pressupõe um usuário não técnico: a skill pergunta em vez de instruir, lê livremente e exige confirmação antes de alterar qualquer coisa em uma caixa. O serviço substituto é o AfterTouch, de gesellix (Bose-SoundTouch), que a skill credita como fonte da verdade; este repositório é uma skill, não um fork, e instala a imagem de contêiner publicada. Os requisitos são uma ou mais caixas SoundTouch na rede local, uma máquina com Docker na mesma rede (NAS, Raspberry Pi, pequeno servidor Linux) com endereço estável, além de Python 3.11+, uv e Docker com o plugin compose. O primeiro passo da skill verifica isso por conta própria e relata o que está faltando com linhas de instalação. A instalação é pelo marketplace de plugins do Claude Code: /plugin marketplace add bitranox/soundtouch-decloud /plugin install soundtouch-decloud Também pode ser acionada descrevendo o problema em palavras simples, ou invocada pelo nome. O fluxo de trabalho roda em fases com check-ins: verificação de pré-requisitos e ajuda de instalação, descoberta de caixas, subida do serviço, backup de cada caixa antes de qualquer alteração, reescrita das quatro URLs de serviço, espera pelas fontes de rádio, recuperação e verificação de estações, gravação de presets e, por fim, prova de reprodução ouvindo em vez de contar. A skill inclui cinco arquivos de referência e quatro scripts. Todo script imprime um envelope JSON e usa códigos de saída consistentes (0 sim, 1 não, 2 não foi possível determinar); qualquer coisa que altere uma caixa exige um --confirm explícito, então operações somente leitura são sempre seguras. Os scripts cobrem verificações de preflight, validação de Docker/compose e saúde do serviço, descoberta de rede, onboarding pela porta SSH de diagnóstico com reescrita de URL e reboot, e backup/coleta/validação/verificação/restauração/relativização de presets. A documentação destaca modos de falha fáceis de diagnosticar errado: rede bridge parece instalada mas não descobre nada (rede host é obrigatória); reescrever apenas a URL da conta gera uma caixa que registra e sincroniza mas não reproduz nada; a ordem de escrita das URLs é crítica porque persistir antes de escrever salva valores antigos enquanto os comandos ainda respondem OK; URLs de stream brutas em presets são aceitas mas nunca reproduzem, então os presets usam a forma relativa do AfterTouch; um serviço copiado mantém o endereço antigo via settings.json server_url; e um endereço de serviço atribuído por DHCP quebra todas as caixas de uma vez mais tarde. A recuperação de estações é um processo de quatro passos: coletar URLs de stream dos presets pré-migração (o serviço não as retém, então o backup roda primeiro), perguntar ao proprietário se a lista antiga de estações ainda é desejada, pesquisar as estações restantes por endpoints de stream diretos atuais e validar a partir do host do serviço. A validação relata por botão: audio, playlist, hls, not-audio, dead ou missing. A documentação observa que estações mudam e morrem, e que playlists .m3u podem passar em uma verificação ingênua de áudio enquanto não contêm áudio. Para operação contínua, a skill adiciona um snapshot fora do serviço dos presets de cada caixa, uma restauração pontual e uma verificação somente leitura adequada para alarme agendado. Ela deliberadamente não instala nada que escreva por conta própria, já que o AfterTouch v0.137.0 compartilha presets entre caixas em uma conta. A documentação cita dados medidos: um loop de restauração de dois minutos ao longo de 18,7 dias fez 11692 execuções e escreveu presets uma vez, e uma caixa WiFi adormecida produziu 1303 leituras ilegíveis sem nunca ficar sem presets. O alarme distingue presets ausentes de uma caixa sem resposta. Os scripts usam apenas a biblioteca padrão para rodar em uma máquina sem nada instalado; pytest é a única dependência de teste. Um verificador de convenções do repositório valida manifests, frontmatter da skill, cobertura de testes dos scripts distribuídos e finais de linha, com CI em Linux, Windows e macOS. Licenciado sob MIT.