pierreandLetta Code 2b2235ff86 Streaming overlay: chat GUI for agent responses
- overlay.zig: frameless translucent panel (fixed bg + rounded corners,
  only bubbles scroll), drag handle, hover-to-full-opacity, top-right spawn
- chat layout: per-message QLabel bubbles (user purple / agent green /
  tool steps grey mono), transcript retained across turns, End-conversation
  resets
- agent reply streams into its own growing bubble (re-render per chunk)
- basic markdown in all messages: **bold**, *italic*, `code`, HTML-escaped
- tool steps truncated to 90 chars, click to expand/collapse
- polite autoscroll: pins to bottom unless user scrolled up
- letta.zig: streamInfer() — --output-format stream-json, per-event callback
  (tool calls, returns, reply chunks), full reply still returned for TTS
- whisper: --language auto (no more hardcoded English)
- fix: stderr_log leak crashing Quit via debug allocator

👾 Generated with [Letta Code](https://letta.com)

Co-Authored-By: Letta Code <noreply@letta.com>
2026-09-01 20:37:45 +03:00

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)
  • letta CLI 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).

S
Description
A true voice assistant in my tray, backed by Letta Code, self-hosted
Readme
349 KiB
0 Stars 1 Watchers 0 Forks
Languages
Zig 90.2%
Python 7.2%
Shell 2.6%