27327e94b0913664c802962bcd10be910eb210ec
The stream reader only handled lines terminated by newline. The letta CLI final JSON line arrives without trailing newline at EOF, so the last assistant message (or result line) sat in the line buffer and was silently dropped — replies ended mid-sentence. Also: read errors no longer silently end collection (logged), and stream completeness is tracked via the result line with a warning when absent. 👾 Generated with [Letta Code](https://letta.com) Co-Authored-By: Letta Code <noreply@letta.com>
inferon
Voice interface daemon for Letta Code agents. Lives in your system tray; click to talk, click to send — your speech is transcribed, sent to an agent, and the reply is spoken back.
name: inference + infernal + inferon (a particle), with symbolic inference planned for later.
Pipeline
tray click → pw-record (16kHz mono WAV)
→ whisper.cpp server (spawned & owned by inferon, :50153)
→ letta CLI (agent conversation, multi-turn)
→ MeloTTS (melo_server.py subprocess, British English voice)
→ pw-play
All backends are subprocesses owned by inferon: they die when it dies (tray quit, SIGINT, SIGTERM — signal handlers included).
Requirements
- Zig 0.16
- Qt 6 (qt6-base) + GCC toolchain
- PipeWire (
pw-record,pw-play) - whisper.cpp built with
whisper-server(defaults expect~/Projects/whisper.cpp, large-v3-turbo q5_0) lettaCLI on PATH, logged in- Python 3.11 (via uv) for MeloTTS
Setup
./setup.sh # clones MeloTTS, builds venv, downloads checkpoint
zig build
zig-out/bin/inferon
Paths (whisper binary/model, MeloTTS root, agent ID) are constants at the top of src/whisper.zig, src/melo.zig, scripts/melo_server.py, and src/main.zig.
Usage
- Left-click: start / stop recording. After you stop, the pipeline runs: transcribe → agent → spoken reply → idle.
- Right-click → End conversation / Quit: menu.
- Tray dot color = state: grey idle · red recording · orange transcribing · blue thinking · green speaking · magenta backend error.
Temp audio lives in /tmp/inferon/ and is cleaned up as it's consumed (logs stay).
Description
A true voice assistant in my tray, backed by Letta Code, self-hosted
349 KiB
0 Stars
1 Watchers
0 Forks
Languages
Zig
90.2%
Python
7.2%
Shell
2.6%