From forge
Gerencia o TTS (text-to-speech) dos canais Forge — escolhe engine (Edge/Piper), instala backends, baixa vozes, testa síntese e edita overrides por canal. Use quando o usuário quiser configurar áudio, trocar voz, instalar Piper, baixar modelo novo ou desativar voz em um canal.
How this skill is triggered — by the user, by Claude, or both
Slash command
/forge:voiceThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Esta skill é **o único lugar** onde o TTS é configurado. A skill `/forge:configure` não mexe mais em voz — canal novo nasce com a engine default disponível; trocar engine, instalar Piper, baixar vozes, ou desativar áudio em um canal são feitos aqui.
Esta skill é o único lugar onde o TTS é configurado. A skill /forge:configure não mexe mais em voz — canal novo nasce com a engine default disponível; trocar engine, instalar Piper, baixar vozes, ou desativar áudio em um canal são feitos aqui.
Argumentos recebidos: $ARGUMENTS
edge — Microsoft Edge-TTS. CLI Python, online, sem API key. Vozes neurais Azure. Instalação rápida, ~10MB. Default do plugin.piper — Piper TTS. Neural offline, open-source, roda em CPU. Cada voz é um modelo .onnx baixado separadamente (~60MB cada). Mais natural que Edge em pt-BR; independe de rede.none — desativa TTS (o tool forge_reply_voice retorna silenciosamente sem enviar áudio).pt-BR-FranciscaNeural, pt-BR-AntonioNeural, pt-BR-ThalitaMultilingualNeural...pt_BR-faber-medium, pt_BR-cadu-medium, en_US-lessac-medium...FORGE_TTS_PROVIDER, FORGE_TTS_EDGE_VOICE, FORGE_TTS_PIPER_VOICE, FORGE_TTS_PIPER_FORMAT, FORGE_TTS_PIPER_MODELS_DIR. Valem pra todos os canais do host.~/.claude/channels/<nome>/access.json): campos voiceProvider, voiceName, voiceReply. Sobrescrevem o global.access.voiceProvider/voiceName → default do service (env).~/.local/share/piper-voices/ (ou o que FORGE_TTS_PIPER_MODELS_DIR apontar). Cada voz = dois arquivos: <nome>.onnx + <nome>.onnx.json.Igual à skill /forge:access. Parse $ARGUMENTS:
status, use, install, download, list, remove, test, set, off, on), o canal alvo é inferido:
./.claude/forge-channel no cwd. Se existir, use.~/.claude/channels/. Se houver exatamente um, use-o./forge:voice <canal> <comando>./forge:configure primeiro.<canal> e o resto como subcomando.Comandos que não precisam de canal (só afetam o host): install <engine>, download <voice>, remove <voice>, list. Esses rodam mesmo sem canal selecionado.
status — panoramacommand -v edge-tts, command -v piper, command -v ffmpeg.ls ~/.local/share/piper-voices/*.onnx 2>/dev/null. Pra cada um, extraia o nome curto (sem extensão) e o tamanho (stat).~/.claude/channels/, leia access.json e extraia voiceProvider, voiceName, voiceReply.🔊 Engines no host:
edge-tts ✅ <path> (ou ❌ não instalado)
piper ✅ <path> (ou ❌ não instalado)
ffmpeg ✅ <path> (opcional, só pra Piper em OGG)
🎙️ Vozes Piper instaladas (N):
pt_BR-faber-medium 63 MB
en_US-lessac-medium 63 MB
📡 Canais (provider / voz / ativo):
backend edge pt-BR-FranciscaNeural ✅
dropflux piper pt_BR-faber-medium ✅
mobile — (default) 🔇 voiceReply=false
voiceProvider=piper mas Piper não instalado, ou apontando pra voz ausente), sinalize com um aviso no fim e proponha o comando pra corrigir.use <engine> — trocar engine do canal alvo<engine> ∈ edge | piper | none.
<engine>. Se inválido, liste as opções e pare.<engine> = piper, verifique pré-requisitos:
command -v piper. Se ausente, pergunte: "Piper não está instalado. Instalo agora? (s/n)" Se sim, execute o fluxo install piper (abaixo) antes de continuar; se não, pare informando.~/.local/share/piper-voices/. Se não houver, pergunte qual baixar (mostre o catálogo de list) e rode download <voice> antes de continuar.~/.claude/channels/<canal>/access.json:
voiceProvider = <engine>.<engine> = piper e voiceName atual for de Edge (começa com pt-BR- ou contém Neural), limpe voiceName — o service cairá no default do Piper. Oriente o usuário a escolher voz explícita via set voice <nome> se quiser.<engine> = edge e voiceName atual for de Piper (contém _, ex: pt_BR-...), limpe igualmente.<engine> = none, mantenha os outros campos — voiceProvider=none já basta pra desativar.JSON.stringify(obj, null, 2) + newline final, modo 0600.<canal> agora usa engine <engine>, voz <voiceName ou default>. Mudança vale na próxima mensagem — access.json é relido a cada requisição."install <engine> — instalar backend no host<engine> ∈ edge | piper.
Fluxo comum:
command -v <engine> (edge-tts ou piper). Se já existe, avise e pule.pipx → pip3 --user → pip --user. Se nenhum, oriente instalar Python+pipx e pare.<engine> via <instalador>. Prosseguir? (s/n)"pipx install edge-tts (ou fallback pip)pipx install piper-tts (ou fallback pip)
Capture stdout+stderr. Se falhar com "externally-managed-environment" (PEP 668), recomende pipx explicitamente.command -v. Se ainda ausente, avise sobre PATH (~/.local/bin; sugerir pipx ensurepath + reabrir terminal).~/.local/share/piper-voices/, pergunte se quer baixar a voz default (pt_BR-faber-medium, ~63MB). Se sim, rode download pt_BR-faber-medium.ffmpeg não, mencione no fim: "Opcional: instale ffmpeg pra enviar áudios Piper como voice note nativo do Telegram (formato OGG/Opus). Sem ffmpeg, áudios saem como WAV — funciona, mas aparece como arquivo. No Ubuntu/Debian: sudo apt install ffmpeg."download <voice> — baixar modelo Piperhttps://huggingface.co/rhasspy/piper-voices/resolve/main/<lang>/<lang_REGION>/<speaker>/<quality>/<voice>.onnx
e mesmo path pro .onnx.json. Exemplo pt_BR-faber-medium:
https://huggingface.co/rhasspy/piper-voices/resolve/main/pt/pt_BR/faber/medium/pt_BR-faber-medium.onnxhttps://huggingface.co/rhasspy/piper-voices/resolve/main/pt/pt_BR/faber/medium/pt_BR-faber-medium.onnx.json~/.local/share/piper-voices/ (ou o dir configurado) com mkdir -p.curl -L --fail -o <dest> <url> (ou wget como fallback). Os dois arquivos. Se falhar, limpe parciais com rm -f.test -s <path>.onnx && test -s <path>.onnx.json. Mostre o tamanho final.<voice> baixada. Pra usá-la neste canal: /forge:voice use piper e depois /forge:voice set voice <voice>."Catálogo curado (exponha ao usuário em list ou quando perguntarem):
| voice | idioma | sexo | tamanho |
|---|---|---|---|
pt_BR-faber-medium | pt-BR | M | ~63 MB |
pt_BR-cadu-medium | pt-BR | M | ~63 MB |
pt_BR-edresson-low | pt-BR | F | ~25 MB |
en_US-lessac-medium | en-US | F | ~63 MB |
en_US-ryan-medium | en-US | M | ~63 MB |
en_US-amy-medium | en-US | F | ~63 MB |
Caminhos HuggingFace correspondentes:
pt/pt_BR/faber/medium/pt/pt_BR/cadu/medium/pt/pt_BR/edresson/low/en/en_US/lessac/medium/en/en_US/ryan/medium/en/en_US/amy/medium/Para vozes fora do catálogo, peça ao usuário a URL .onnx (e a .onnx.json ao lado) ou oriente navegar em https://huggingface.co/rhasspy/piper-voices/tree/main.
list — listar vozesls ~/.local/share/piper-voices/*.onnx → nome curto + tamanho.pt-BR-FranciscaNeural (F, default histórico)pt-BR-AntonioNeural (M, expressiva)pt-BR-ThalitaNeural (F)pt-BR-ThalitaMultilingualNeural (F, multilingue — mais natural)edge-tts --list-voices | grep pt-BRremove <voice> — remover modelo Piper~/.local/share/piper-voices/<voice>.onnx (+ .onnx.json).voiceName em qualquer access.json). Se sim, avise e peça confirmação explícita.rm -f <path>.onnx <path>.onnx.json.test — smoke test da config do canalaccess.json do canal alvo.access.voiceProvider ou FORGE_TTS_PROVIDER (default edge); access.voiceName ou env correspondente.voiceReply=false, avise e pare.edge-tts --voice <voz> --text "olá, teste do Forge" --write-media /tmp/forge-voice-test.mp3echo "olá, teste do Forge" | piper --model ~/.local/share/piper-voices/<voz>.onnx --output_file /tmp/forge-voice-test.wavtest -s /tmp/forge-voice-test.* e mostre tamanho. Não toque áudio — só confirma que a síntese funciona.set voice <voz> — mudar voz do canal<lang>-<region>- e termina em Neural (aviso se formato parecer errado, mas aceite).~/.local/share/piper-voices/<voz>.onnx existe. Se não, pergunte se quer baixar (dispara download <voz>).access.json, set voiceName = <voz>.off / on — desativar/ativar voz no canaloff → set voiceReply = false em access.json.on → set voiceReply = true (ou remove o campo — o default é habilitado).Confirme e lembre que a mudança vale na próxima mensagem.
~/.claude/channels/<nome>/.env ou globais)FORGE_TTS_PROVIDER = edge | piper | none — engine default.FORGE_TTS_EDGE_VOICE = voz default do Edge (fallback pra FORGE_TTS_VOICE).FORGE_TTS_PIPER_VOICE = voz default do Piper.FORGE_TTS_PIPER_MODELS_DIR = diretório onde os .onnx vivem. Default ~/.local/share/piper-voices.FORGE_TTS_PIPER_FORMAT = wav (default) | ogg. OGG requer ffmpeg no PATH e vira voice note nativo no Telegram.Overrides por canal em access.json têm precedência sobre qualquer env.
access.json — sempre leia, mute o campo específico, escreva de volta preservando o resto.access.json.tmp + chmod 600 + rename. (Ou use Write direto — o server relê a cada requisição, não há race crítica.)access.json estiver corrompido, não tente consertar — avise e pare. O server já tem fallback, mas não queremos perpetuar dados ruins.(provider, voice, rate, pitch, volume, text). Trocar voz invalida naturalmente.use piper é o passo pesado (instala backend + baixa modelo + edita access). Divida em confirmações explícitas, não faça tudo em silêncio.Provides behavioral guidelines to reduce common LLM coding mistakes, focusing on simplicity, surgical changes, assumption surfacing, and verifiable success criteria.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub guilhermevang/forge-plugin --plugin forge