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ável | Padrão | Função |
|---|---|---|
ELEVENLABS_VOICE_MODEL | eleven_v4_turbo | Modelo de síntese de fala |
ELEVENLABS_VOICE_ID | JBFqnCBsd6RMkjVDRZzb | Voz 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.tsO 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.tsCompile 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.