A voice box for your AI: an experimental Android app for voice conversations with OpenAI and Claude on your own API keys, and a minimal Android Auto prototype (Car App Library) tested in the Desktop Head Unit (DHU). It is a prototype: there is no approved Android Auto category for it, it is not for use while driving and it is not on Google Play.
The phone app uses one voice flow for both providers: Android speech recognition, the provider's text adapter and Android text-to-speech. A separately testable conversation controller handles start, stop, late responses, errors and provider switches. Chats and API keys stay in the existing encrypted format. The app also searches and exports the chat history, speaks German and English and follows the Azentrius design.
What changed in each version: CHANGELOG.md. What comes next: ROADMAP.md.
Current repository version: 0.3.0. The package IDs now start with com.azentrius.lautwerk,
following Azentrius's move to azentrius.com. Android treats all three variants as new apps. API keys,
chats and preferences do not migrate. Follow the 0.3.0 installation steps
to export any wanted chats, uninstall the previous packages and install the new APKs. The Lautwerk
name, design, provider behavior and car template stay the same.
Automated checks are recorded under 0.3.0 evidence. Historical checks below do not establish Android Auto visibility or live audio acceptance for the new package IDs.
0.1.17 connects the existing Android Auto package to audio and the shared conversation controller. The title, app icon, provider/model line, host colors and single action remain. Start runs the mode chosen on the phone; while active, the same action becomes End.
On the Pixel 10 Pro / Android 17, independent TTS playback and external PCM recognition passed. In the DHU, CarAudioRecord captured the PC microphone, local recognition succeeded and the sentence was heard read back correctly. These checks use no AI provider. A later DHU retest with Claude Haiku 4.5 was confirmed as working overall; Speaking and End remained visible while the answer played after the host microphone overlay disappeared. See the precise scope in CAR_VOICE.md. The planned ID.7 audio test, call and headset tests are deferred. OpenAI car conversation and vehicle audio are not established by these Claude DHU results.
Details: app icon and installation, current test report, phone design audit of 0.1.18, design reference f2c9df4 (private repository, snapshot in design/azentrius).
Since 2026-10-12 we check distribution outside Google Play, first with native wireless Android Auto in the ID.7. A manual test then confirmed launcher visibility and opening on the vehicle display after the approved installation-origin experiment. This is a device-specific observation, not a general distribution guarantee. The tests in the Kia with AAWireless are deferred. The sideloading guide and the car test report keep preparation, observations and open tests apart. Those reports describe the original 0.1.15 baseline; the current audio work and installation procedure are in CAR_VOICE.md.
- Open this project in Android Studio and set the Gradle JDK to JDK 17.
- Install SDK Platform Android 17 / API 37 and Build Tools 36.0.0 if they are missing.
- Choose the build variant
prototype-app: dhuDebug; this APK holds the phone UI and the car service. - Complete the package replacement steps, then follow car audio setup and tests. The original SDK/DHU setup is in docs/START_WINDOWS.md.
On the test app's phone page, choose the provider/model and open Audio and conversation setup. First run Output test, then Microphone and recognition test. Both are independent of the AI backend. Only Conversation mode sends recognized text to the selected provider using a key entered in this test app. The old Start button on the phone's selection page remains a UI counter.
| Module / variant | Package | Purpose |
|---|---|---|
prototype-app:dhuDebug |
com.azentrius.lautwerk.prototype.dhu |
Experimental car service, audio diagnostics and conversation setup |
prototype-app:phoneDebug |
com.azentrius.lautwerk.prototype.phone |
Comparison app without car registration |
app:debug |
com.azentrius.lautwerk |
The phone app continued from 0.1.0, with providers, history and voice |
The test packages do not replace the old app and take over none of its data. Inside
com.azentrius.lautwerk.prototype.dhu, phone and DHU share their selection. The three APKs use the same
selection code but each has its own private storage. The selection does not check actual API account
access. The car test app does not import the assistant's keys, voice preference or chat history.
Lautwerk is not a POI app and has no proven permitted Android Auto category for general AI conversations.
Only dhuDebug declares androidx.car.app.category.POI, as the template registration for this local UI
test. It is a technical test placeholder, not a statement that the product is permitted. No places, no
navigation and no supposedly official AI category are faked. The dhuRelease build is disabled. This
test scaffold is not meant for publishing on Play or for use while driving.
Android Auto may reject or hide the app even after a successful build and ADB install. The app's own HostValidator check stays on and uses the signed host entries of the AndroidX library. Conversely, it grants no approval by Android Auto. There is no root patch or disabling of host checks. An approved local installation-origin experiment recorded Google Play as installer through Android's system installer; this deliberately misrepresents origin and is neither a Play installation nor an official distribution method. See the bounded procedure and observed limits in CAR_VOICE.md.
According to Google's testing documentation, the "Unknown sources" option explicitly does not unlock Car App Library apps. Whether the app is technically available outside Google Play is now checked in the documented car comparison. That does not make it permitted on Play; internal Play tests would not promise the category either.
core: provider and model types, validated selection, chat and storage interfaces, UI test counter.providers: OpenAI and Claude adapters, replaceable HTTP transport and safe error mapping; shared by the assistant and the experimental car conversation.storage: encrypted chats and API keys, process-wide locks, fixed errors and a compatible archive format.settings: app-private storage of the selection, one model per provider, observing changes while the UI lives. No keys or chat data.voice: the shared conversation controller, worker and audio interfaces, archive and provider binding and text-to-speech text splitting.app: Android speech adapters, the microphone foreground service and the continued Compose app with the shared catalog and selection store. The namesOPENAI/CLAUDE, key IDs and archive formats stay.car-ui: host validation, the existingMessageTemplate, phone-only setup, foreground audio service, CarAudioRecord input and on-device recognition, local TTS and binding to the shared voice controller.prototype-app: phone selection and two variants;phoneDebugstays offline,dhuDebugadds audio checks and an explicitly selected conversation mode.
Later work: check cloud destinations of the text export, plan encrypted backup and import and size rules for very large archives. Call and headset tests stay deferred. A provider switch in the voice service uses the model remembered for that provider and still starts a new chat without the other history. The confirmed state of the voice tests is in VOICE.md; further planning in ROADMAP.md.
Lautwerk uses the phone's configured Android text-to-speech service. The assistant keeps its voice picker, language-specific choices, speech rate and preview controls. Online voices reported by that service still require the existing explicit selection confirmation. Android Auto uses an installed local voice from the phone's default service; it does not share the assistant's choice. No separate voice engine, model pack or voice download is required by Lautwerk.
Gradle 9.8.1 with the complete wrapper and a checked distribution; AGP 9.4.1 with built-in Kotlin; Kotlin 2.4.21; JDK 17; compile SDK 37, target SDK 36; Build Tools 36.0.0. Android 17 is tested as the runtime system; target SDK 37 follows only after a device test of the Android 17 behavior changes. Car App Library 1.8.0-rc01, deliberately pinned as a pre-release: Google names a security fix for it from 2026-08-26. Not called stable. Compose BOM 2026.09.00 (needs compile SDK 37 and AGP 9.1 or newer); Activity 1.12.0 stays.
See docs/BUILD_AND_TEST.md for the checks that actually ran and the open limits.
CI builds the debug variants and runs the JVM tests and Android lint of
every module. No API keys and no live requests in CI. The version lives only in gradle.properties;
both apps derive versionName and versionCode from it. Only the release
workflow makes releases: the source archive with SHA256SUMS and a signed build provenance
(gh attestation verify), notes from CHANGELOG.md. Releases contain no APKs.
Sources, wrapper, license, docs and tests belong in the repository. local.properties, .gradle, build
directories, keys and diagnostic output are excluded; APKs are not part of the Git history. Security
reports: SECURITY.md.
- Car App Library and categories
- DHU: ADB tunnel and test mode
- Test distribution and the limit of "Unknown sources"
- AndroidX Car App release notes
- AGP 9.4 compatibility
Apache-2.0, see LICENSE. Fonts, icons and the app icon come with their own terms, see NOTICE.
Lautwerk is an independent project and is not affiliated with or endorsed by OpenAI, Anthropic or Google. OpenAI, ChatGPT, Anthropic, Claude, Android, Android Auto and Google Play are trademarks of their respective owners.
Made by Azentrius.