Thor Schaeff works on developer experience at Google DeepMind, helping developers build with the Gemini API and Google AI Studio. His work teaches through inspectable applications: semantic search that runs inside a browser, voice agents adapted to model and speech constraints, and conversational interfaces that call tools to generate images or music.
From customer support to developer platforms
Thor grew up in Heidelberg, Germany, and learned to build websites at an SAP summer camp before returning to teach other children. His early career included an internship with Google’s Maps for Work team in London. At Stripe in Dublin, he started in support, moved through customer-facing engineering roles, and later relocated to Singapore to develop developer relations across Asia-Pacific. He recounts this progression in his talk on developer experience in the age of coding agents.
In Singapore, Thor began contributing to Supabase before joining the company. His writing and examples cover authentication, client libraries, geospatial applications, edge functions, and AI integrations. These projects explain how application developers can use the underlying infrastructure, often by combining it with tools they already know.
At ElevenLabs, Thor focused on conversational interfaces, publishing implementations that connected language models to its voice platform, including Gemini and DeepSeek-derived reasoning models. He later joined Google DeepMind to help developers build with Gemini, returning to Google after his earlier Maps internship.
Making the implementation teach the idea
In-browser semantic search. Thor’s browser-vector-search combines Transformers.js for generating embeddings, PGlite for running Postgres locally, and pgvector for similarity search. His implementation guide grew out of a browser-based Postgres sandbox built with ElectricSQL. Text and embeddings stay in IndexedDB, and searches execute locally. This lets a browser find items by meaning rather than only matching words, without sending each search to a server.
Voice agents shaped by integration constraints. His DeepSeek voice-agent guide makes a consequential model choice explicit. The example uses DeepSeek-R1-Distill-Qwen-32B through Cloudflare Workers AI because the original R1 lacked the function-calling support required by the integration at the time. Thor also adapts the math tutor’s instructions so equations become pronounceable sentences. Both the model’s interface and the form of its output determine whether the reasoning can be used in conversation.
Reusable paths into real-time audio. His Expo and React Native example connects a mobile application to OpenAI’s Realtime API over WebRTC. Alongside his ElevenLabs integrations, it provides code developers can inspect and adapt across different audio platforms.
Thor extends this approach to developer platforms themselves. He argues that coding agents have become another audience for documentation and examples. His account of machine-facing developer experience connects Supabase’s adoption by AI builders to its open implementation and familiar Postgres foundation. He advocates accessible documentation, agent instructions, and usable examples, while treating the practice as something developers still need to test and learn together.
From spoken output to conversational applications
Thor’s Gemini work explores what changes when an application can interpret audio directly. His audio-stack demonstrations include EchoScript, which uses one structured request to extract speaker identities, timestamps, languages, emotional cues, translations, and summaries. He also demonstrates directing synthetic speech through instructions for accent, pacing, and character, giving developers another way to shape delivery beyond selecting a voice from a catalog.
His architectural comparisons retain the tradeoffs. A cascade of speech recognition, a language model, and speech synthesis offers separate stages for observation, moderation, and intervention. Native audio models support more fluid multilingual interaction, while leaving developers with practical questions about debugging, session management, and grounding.
In Can Your Agent Hear You Now?, Thor explains the Live API as a stateful WebSocket session: it accepts text, audio, and video and streams back audio and a transcript, with support for interruptions and tool calls. His AI radio DJ uses conversation to call Lyria for music generation. An illustrated-story application combines Gemini Live with image generation and uses the stateful Interactions API to maintain characters and style between images. These examples show how he connects conversational input to application behavior: speech can request an action, a tool can perform it, and retained context can carry the interaction forward.
Build a small coding agent, give a conversational model tools and vision, and follow the deployment and reliability tradeoffs exposed by the live demonstrations.
Follow a voice agent from speech recognition to language switching, tool calls and spoken replies, then examine what breaks with slow systems, mixed languages and domain vocabulary.
Which languages—and which accents—should the agent speak?
Thor Schaeff moves from a multilingual recording to directed speech, live camera conversation and generated music, showing how Gemini’s audio capabilities fit together.
Thor Schaeff connects live conversation to image generation, translation and music, then explains the stateful WebSocket session behind Gemini’s voice and vision agents.
The story canvas connects Gemini Live to NanoBanana Lite through tool calls. Passing the previous interaction ID gives later image requests access to earlier generation context.
Live Translate separates the automatically detected speaking language from each listener’s chosen output language, beginning translation as enough context becomes available.
A live agent becomes more useful when conversation can invoke a concrete capability. The DJ gathers a music request, calls Lyria 3 and returns to the conversation after the song.
Gemini 3.1 Flash Live uses the Live API’s stateful WebSocket session for text, audio and video inputs, returning audio chunks plus transcription. Native audio processing does not require the transcript to serve as an intermediate text stage.
Multilingual capability still benefits from clear conversational control: when the attempted Mandarin switch faltered, an explicit request let the exchange continue.