Saltar al contenido
Todos los proyectos
Proyecto personalSpecTalk4 min de lectura

SpecTalk: arrancar proyectos de software con la voz desde unas gafas

Las ideas de proyecto suelen llegar lejos del teclado y, para cuando te sientas, ya se te olvidó la mitad. SpecTalk te deja describir un proyecto en voz alta con unas Meta Ray-Ban o unos AirPods: un agente de voz llamado Gervis te hace hasta tres preguntas, escribe la spec y se la pasa a un agente de código. Lo construí solo en seis días.

Dos pantallas de la app Android de SpecTalk: a la izquierda la transcripción en vivo con Gervis, a la derecha la tarjeta del plan del proyecto con los botones Build it y Change something.

El problema

Mis mejores ideas de proyecto me llegan caminando, en bici o de pie en el U-Bahn, nunca sentado frente a la computadora. Para cuando me siento y abro un editor, ya se me olvidó la mitad. Las herramientas con las que hacemos software te obligan a parar y traducir lo que piensas a teclazos, y esa traducción es lenta y pierde cosas.

Un asistente de voz puede tomar una nota, pero una nota no es una spec, y no pasa nada con ella hasta que vuelves al teclado.

Qué construí

SpecTalk es una app Android con un backend que te deja describir un proyecto en voz alta, mientras caminas, y encontrar algo real esperándote al llegar a casa. Funciona con unas Meta Ray-Ban (micrófonos, altavoces y cámara) o con AirPods. El agente de voz se llama Gervis. Fue un proyecto personal, solo: 94 commits, casi todos entre el 16 y el 21 de marzo de 2026, muchos pasada la medianoche. La mayoría los escribí junto con Claude Code, y los mensajes de commit lo dicen.

Gráfico de puntos con cada commit por día y hora, con un grupo entre la medianoche y las 6 AM
Cada commit del 16 al 21 de marzo, por hora. La franja sombreada va de medianoche a las 6 AM. Solo el viernes 20 tiene 38 commits.

Qué hace

  • Palabra de activación. Dices "Hey Gervis" con la pantalla apagada y el teléfono en el bolsillo, y un sonido te avisa de que está escuchando.
  • Entrevista corta. Describes la idea. Gervis te hace una pregunta a la vez, tres como máximo.
  • Tarjeta con el plan. Te muestra un plan del proyecto en pantalla y te pregunta si sigue adelante. Dices que sí o tocas "Build it", guardas el teléfono y sigues caminando.
  • Construye y te avisa. Un agente de código arma el proyecto en segundo plano. Si la sesión sigue abierta, Gervis te lo dice en voz alta cuando termina; si no, te llega una notificación.
  • Memoria y cámara. Un registro de proyectos por usuario te deja volver a un proyecto anterior por su nombre y pedir cambios, y Gervis puede sacar una foto con la cámara de las gafas y describir lo que estás viendo.
Dos pantallas del teléfono: una transcripción de voz con Gervis y una tarjeta con el plan del proyecto
Recreadas a partir del código Compose (VoiceSessionScreen y PrdConfirmationCard) con datos de ejemplo. El backend ya no está corriendo, así que están reconstruidas, no capturadas.

Por qué estas herramientas

Gemini Live, a través de Google ADK, en un backend en Cloud Run. El teléfono nunca habla directamente con Gemini. Graba el audio de las gafas o los AirPods, lo manda por un WebSocket a un backend en FastAPI y reproduce lo que vuelve. Así las claves de API no viven dentro de la app (están en Secret Manager, y las credenciales de cada usuario van cifradas en Neon Postgres). Además, el backend es quien lleva la conversación en vivo, así que puede meter un mensaje corto en la sesión cuando termina un trabajo, y Gervis te lo dice en plena conversación. El costo es una instancia de Cloud Run siempre encendida, con un timeout de una hora por petición, para que una sesión no se corte a media frase.

Diagrama de arquitectura: wearables, app Android, backend en Cloud Run conectado a Gemini Live, Neon, Cloud Storage y OpenClaw
Reconstruido a partir del diagrama ASCII del README. Las gafas pasan por el teléfono, el teléfono por el backend, y solo el backend habla con Gemini.

Vosk para la palabra de activación. "Hey Gervis" tenía que funcionar sin mandar todo mi día a un servidor, así que el reconocimiento corre sin conexión en el teléfono, en un servicio en primer plano con una gramática mínima.

Cloud Tasks y OpenClaw para construir. Gervis no escribe el código. Cuando confirmas el plan, el backend encola un trabajo en Cloud Tasks que le manda la spec a OpenClaw, que corre un agente de código (Claude Code o Codex CLI) en una máquina mía y devuelve el resultado en streaming. Firebase manda la notificación si ya colgaste, y Cloud Storage guarda los artefactos de cada proyecto.

Lo difícil

El audio, mucho más que los agentes. Durante dos noches Gervis se contestaba a sí mismo: el micrófono del teléfono captaba su voz y la mandaba de vuelta como si la hubiera dicho yo. Una causa era una variable de entorno duplicada que hacía que el backend abriera dos conexiones con Gemini por sesión. La otra estaba en el teléfono. Yo reproducía su voz como audio multimedia, y la cancelación de eco de Android solo funciona si sabe qué está saliendo por el altavoz. Marcar el audio como comunicación de voz lo resolvió.

El otro problema era más silencioso. Le pedías a Gervis que construyera algo, decía "Iniciando la generación de código" y no pasaba nada. El modelo describía la llamada a la herramienta en lugar de hacerla. Lo arreglaron un prompt de sistema mucho más largo, forzar las llamadas a herramientas y pasar al modelo Live más nuevo con audio nativo, y añadí una línea de log en cada herramienta de código para comprobar que de verdad se había llamado.

En qué se convirtió

En mi teléfono funcionaba de punta a punta. Dices la palabra de activación, cuentas la idea, respondes las preguntas de Gervis, miras la tarjeta del plan, tocas "Build it" y lo oyes decir que el proyecto está listo.

Hoy no hay una versión en línea para probar, y el repo es honesto con lo que quedó pendiente. KNOWN_ISSUES.md todavía tiene un bug de prioridad alta: cuando se vuelve a desplegar el backend, Cloud Tasks reintenta los trabajos que se cortaron a medias, el trabajo reintentado manda una notificación y el teléfono abre solo la sesión de voz. O sea que en cada deploy Gervis sonaba y se ponía a hablar sin que nadie lo llamara. La mitad del backend está arreglada con un control contra trabajos duplicados. La mitad de Android, que abrir la sesión solo sea opcional, nunca se llegó a mergear.

SpecTalk tiene además un hermano en AWS en el que trabajé las semanas de alrededor, con un consejo de agentes especialistas que escriben la spec y varios agentes de Claude Code construyendo en paralelo.