Skip to content
Skillpedia
Prompts & LLMs48k · #2891

earllm-build

Helps your agent build and maintain an Android app. It connects Bluetooth earbuds to a large language model (LLM) using voice.

What it does

This is an Android app project that connects your Bluetooth earbuds to a large language model (LLM) for voice processing. It allows you to talk to the LLM through your earbuds and get responses back.

When to use it

  • ✓When you want to develop or modify the EarLLM One app.
  • ✓If you are working with Bluetooth audio in an Android app.
  • ✓When integrating voice recognition and LLMs into a mobile application.

Example of what to ask your AI

“How can I add support for a new type of Bluetooth earbud in the EarLLM One app?”

Want more? Open the sections below.

How to use

The easiest way: copy the message below and paste it into Claude, ChatGPT, Cursor or any AI. It reads the skill and follows the instructions.

Skill link

https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/earllm-build/SKILL.md

Ready-to-paste message

Use this skill to help me: https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/earllm-build/SKILL.md Read the SKILL.md file at that link and follow its instructions for my task.
How it works

The app uses Kotlin and Jetpack Compose for the interface. It captures audio from the earbuds, converts speech to text, sends it to an LLM, and plays the spoken response back.

Installation

Easiest way: copy the skill link and paste it into Claude, ChatGPT or Cursor asking it to follow the instructions.

In the terminal (Claude Code, Codex, Cursor), in your project folder:

npx skills add sickn33/agentic-awesome-skills --skill earllm-build

Or download just the file:

curl -L https://raw.githubusercontent.com/sickn33/agentic-awesome-skills/main/plugins/agentic-awesome-skills-claude/skills/earllm-build/SKILL.md -o SKILL.md
Technical content (original SKILL.md)

Original text by the author, straight from GitHub.

EarLLM One — Build & Maintain

Overview

Build, maintain, and extend the EarLLM One Android project — a Kotlin/Compose app that connects Bluetooth earbuds to an LLM via voice pipeline.

When to Use This Skill

  • When the user mentions "earllm" or related topics
  • When the user mentions "earbudllm" or related topics
  • When the user mentions "earbud app" or related topics
  • When the user mentions "voice pipeline kotlin" or related topics
  • When the user mentions "bluetooth audio android" or related topics
  • When the user mentions "sco microphone" or related topics

Do Not Use This Skill When

  • The task is unrelated to earllm build
  • A simpler, more specific tool can handle the request
  • The user needs general-purpose assistance without domain expertise

How It Works

EarLLM One is a multi-module Android app (Kotlin + Jetpack Compose) that captures voice from Bluetooth earbuds, transcribes it, sends it to an LLM, and speaks the response back.

Project Location

C:\Users\renat\earbudllm

Module Dependency Graph

app ──→ voice ──→ audio ──→ core-logging
  │       │
  ├──→ bluetooth ──→ core-logging
  └──→ llm ──→ core-logging

Modules And Key Files

Module Purpose Key Files
core-logging Structured logging, performance tracking EarLogger.kt, PerformanceTracker.kt
bluetooth BT discovery, pairing, A2DP/HFP profiles BluetoothController.kt, BluetoothState.kt, BluetoothPermissions.kt
audio Audio routing (SCO/BLE), capture, headset buttons AudioRouteController.kt, VoiceCaptureController.kt, HeadsetButtonController.kt
voice STT (SpeechRecognizer + Vosk stub), TTS, pipeline SpeechToTextController.kt, TextToSpeechController.kt, VoicePipeline.kt
llm LLM interface, stub, OpenAI-compatible client LlmClient.kt, StubLlmClient.kt, RealLlmClient.kt, SecureTokenStore.kt
app UI, ViewModel, Service, Settings, all screens MainViewModel.kt, EarLlmForegroundService.kt, 6 Compose screens

Build Configuration

  • SDK: minSdk 26, targetSdk 34, compileSdk 34
  • Build tools: AGP 8.2.2, Kotlin 1.9.22, Gradle 8.5
  • Compose BOM: 2024.02.00
  • Key deps: OkHttp, AndroidX Security (EncryptedSharedPreferences), DataStore, Media

Target Hardware

Device Model Key Details
Phone Samsung Galaxy S24 Ultra Android 14, One UI 6.1, Snapdragon 8 Gen 3
Earbuds Xiaomi Redmi Buds 6 Pro BT 5.3, A2DP/HFP/AVRCP, ANC, LDAC

Critical Technical Facts

These are verified facts from official documentation and device testing. Treat them as ground truth when making decisions:

  1. Bluetooth SCO is limited to 8kHz mono input on most devices. Some support 16kHz mSBC. BLE Audio (Android 12+, TYPE_BLE_HEADSET = 26) supports up to 32kHz stereo. Always prefer BLE Audio when available.

  2. startBluetoothSco() is deprecated since Android 12 (API 31). Use AudioManager.setCommunicationDevice(AudioDeviceInfo) and clearCommunicationDevice() instead. The project already implements both paths in AudioRouteController.kt.

  3. Samsung One UI 7/8 has a known HFP corruption bug where A2DP playback corrupts the SCO link. The app handles this with silence detection and automatic fallback to the phone's built-in mic.

  4. Redmi Buds 6 Pro tap controls must be set to "Default" (Play/Pause) in the Xiaomi Earbuds companion app. If set to ANC or custom functions, events are handled internally by the earbuds and never reach Android.

  5. Android 14+ requires FOREGROUND_SERVICE_MICROPHONE permission and foregroundServiceType="microphone" in the service declaration. RECORD_AUDIO must be granted before startForeground().

  6. VOICE_COMMUNICATION audio source enables AEC (Acoustic Echo Cancellation), which is critical to prevent TTS audio output from feeding back into the STT microphone input. Never change this source without understanding the echo implications.

  7. Never play TTS (A2DP) while simultaneously recording via SCO. The correct sequence is: stop playback → switch to HFP → record → switch to A2DP → play response.

Data Flow

Headset button tap
  → MediaSession (HeadsetButtonController)
  → TapAction.RECORD_TOGGLE
  → VoicePipeline.toggleRecording()
  → VoiceCaptureController captures PCM (16kHz mono)
  → stopRecording() returns ByteArray
  → SpeechToTextController.transcribe(pcmData)

…
FAQ

What is the audio quality captured by the earbuds?

Audio via Bluetooth SCO is limited to 8kHz mono, but BLE Audio can support up to 32kHz stereo. The app tries to use the best available option.

Does the app work with any Bluetooth earbuds?

It's designed for earbuds supporting profiles like A2DP and HFP. The app attempts to detect common earbuds based on their name.

How does the app handle echo between the earbud's audio and the microphone?

It uses the `VOICE_COMMUNICATION` audio source which enables echo cancellation (AEC) and follows a specific sequence for recording and playing audio without interference.

Details

Original description by the author

Build, maintain, and extend the EarLLM One Android project — a Kotlin/Compose app that connects Bluetooth earbuds to an LLM via voice pipeline.

repo: sickn33/agentic-awesome-skills

Popularity

GitHub stars
48k
Ranking position
#2891
License
MIT
Updated
10/15/2026

Is this skill useful?

0

Sign in to vote.

Comments

  • …

More skills from this repository

Similar skills