Ir para o conteúdo
decodecodeveloper docs
Studio → Conexões e agentes → Decopilot

Modo de voz

Falar com o agente atual do Studio mantendo o mesmo chat e o mesmo preview

O modo de voz substitui as mensagens e o campo de texto do chat web por uma orbe que fala. Uma página ou preview de site ao lado continua aberto. O agente selecionado, o modelo, o contexto da página, as ferramentas, as permissões e a fila de mensagens seguem os mesmos do chat de texto.

Agentes de código continuam rodando o Claude Code no sandbox em que já estavam. O modo de voz não muda o runtime fixado do chat, o checkout, o preview nem a sessão do Claude. O estilo de resposta por voz acompanha cada turno porque o Claude Code restaura o system prompt original ao retomar uma sessão. Turnos em texto restauram explicitamente o estilo normal de resposta. Chats do Decopilot usam o mesmo transporte de fala.

Escolha Start voice mode ao lado do campo de texto e permita o acesso ao microfone. Back to chat interrompe o microfone e a reprodução, preservando o chat e qualquer trabalho em andamento. Stop agent work é um controle separado. Falar enquanto uma resposta toca interrompe o áudio; o novo pedido entra na fila normal do chat. Aprovações, perguntas, erros e pedidos enfileirados continuam visíveis no modo de voz.

Só a parte final em texto do turno falado atual é lida em voz alta. Uma instrução por turno pede ao agente uma resposta curta e natural. Voltar para texto restaura o estilo normal de resposta nas mensagens seguintes.

Configuração de deploy

Defina estas variáveis em toda réplica da API:

ELEVENLABS_API_KEY=<elevenlabs-api-key>

A chave precisa de acesso a Text to Speech e Speech to Text. Mantenha-a no servidor. Os navegadores recebem um token Scribe de uso único e um token de sessão do Studio assinado. O app web precisa de HTTPS para acessar o microfone, exceto em localhost. Não é preciso callback de entrada do provedor nem provisionamento do Speech Engine. As réplicas da API precisam compartilhar o mesmo segredo de autenticação do Studio e o mesmo serviço NATS.

Depois, habilite Settings → General → Voice mode para a organização. A flag voice_mode da organização vem desligada. Ela é separada da autenticação: só o usuário dono pode iniciar uma sessão de voz num chat hospedado e com escrita. Chats nativos de terminal e chats somente leitura não oferecem este modo.

Variáveis opcionais:

VariávelPadrãoFunção
ELEVENLABS_VOICE_MODELeleven_v4_turboModelo de síntese de fala
ELEVENLABS_VOICE_IDJBFqnCBsd6RMkjVDRZzbVoz da ElevenLabs

Comportamento e limites da sessão

O navegador encerra sessões após dez minutos, com uma sessão ativa por usuário por organização. As concessões de fala do servidor expiram em dez minutos e permitem até 120 requisições de síntese e 24.000 caracteres. Um navegador interrompido que não consiga liberar sua reserva pode ter de esperar essa expiração antes de reconectar. A ElevenLabs cobra o uso de fala na conta do deploy; a contabilização de uso de modelo do Studio continua cobrindo as chamadas de modelo do agente.

O áudio do microfone vai direto do navegador para o ElevenLabs Scribe Realtime. A detecção de atividade de voz confirma a fala após uma pausa. O navegador a envia pela API de chat existente e espera o agente terminar. O Studio então sintetiza a resposta final com o ElevenLabs v4 Turbo e a reproduz no navegador. Transcrição e síntese são independentes, para que uma tarefa longa de código não esbarre no timeout de resposta do Speech Engine.

Transcrições e respostas ficam no histórico normal de chat do Studio. O Studio não armazena áudio; a política de retenção de dados da ElevenLabs vale para o serviço dela.

Sair do chat, trocar de organização ou desconectar encerra a sessão de voz. Falhas de transporte mostram um erro com um caminho de volta para o texto. Elas não reenviam automaticamente um pedido cuja aceitação seja incerta — confira o chat antes de repetir. Parar a reprodução deixa o trabalho do agente rodando.

Verificação

A suíte de navegador voice-mode.spec.ts verifica os controles de acesso, a flag padrão e a volta para um rascunho preservado. O caso ao vivo, opcional, exige um servidor de API configurado com a ElevenLabs e um WAV sintético de entrada:

E2E_VOICE_LIVE=1 E2E_VOICE_WAV=/tmp/synthetic-utterance.wav \
  bun run --cwd=packages/e2e test:e2e -- tests/voice-mode.spec.ts

O caso ao vivo usa o serviço de fala real e um substituto HTTP de modelo, e verifica que a instrução de voz chega ao agente e que a resposta é falada.

A suíte do daemon também exercita o executável e o SDK reais do Claude Code contra um substituto HTTP de modelo. Ela começa em texto, altera um arquivo em modo de voz e volta para texto conferindo a mesma sessão do Claude e o mesmo histórico de conversa:

DAEMON_E2E_CLAUDE_VOICE=1 \
  bun test packages/sandbox/daemon-e2e/daemon.voice-claude.e2e.test.ts

Compile o daemon Go antes, como descrito no README do pacote sandbox. Use DAEMON_E2E_CMD para apontar um binário do daemon em outro caminho.