Apps

Chibi

Edit on GitHub · last edited

A voice-interactive AI companion, with a sentinel aspect over synguard's security feed.

Chibi is a desktop companion: an animated avatar you can talk to. She listens (speech-to-text), thinks (through an LLM backend), and speaks back (text-to-speech in a "cute" voice). On SynapseOS her default brain is synapd — the same local model the rest of the OS uses — so she works with no API keys and no cloud. Her second job is security: she subscribes to synguard's verdict feed and can surface threats out loud.

Upstream: velle999/chibi-llm. Packaged for SynapseOS as chibi and shipped on the ISO.

Running her

chibi

The launcher exports CHIBI_LLM_BACKEND=synapd and points at synapd's socket, so she talks through the OS's own model. Override to use Ollama instead:

CHIBI_LLM_BACKEND=ollama chibi

Buddy mode

Press in her window (or F4) and Chibi leaves it to wander the desktop: along the bottom of the screen, up onto the tops of windows, talking in a bubble over her head. To start straight into it:

chibi --buddy

Click her to pet her, double-click to type to her, drag her anywhere, and right-click for her menu — Go home in it puts her back in her window. Voice, alarms and the sentinel aspect keep working while she is out, and the rest of the desktop stays clickable around her.

She roams the monitor her window was on. To choose another, or change her size, set these in ~/.config/chibi/config.local.py:

buddy_output = "DP-1"   # connector name, as `synctl outputs` lists it
buddy_scale = 0.7       # default 0.55

What's in the box

Piece Role
STT faster-whisper with the small model, from synapse-voice (shipped on the ISO — she hears you with no network)
TTS piper with the en_GB-cori-medium voice, from synapse-voice, pitch-shifted via sox for the "cute" timbre; espeak-ng is the last-resort fallback
LLM synapd by default (llm_client.py), or Ollama
Sentinel read-only subscriber to synguard's secfeed; the security aspect never writes
Avatar pygame/SDL2 sprite renderer
Buddy mode a GTK 4 layer-shell overlay (gtk4-layer-shell) that draws her with the same renderer

Python deps are vendored under /usr/lib/chibi/pydeps with pip --target (not a venv — a venv bakes a build-time absolute path that breaks when installed elsewhere); the launcher puts that dir on PYTHONPATH.

Gotchas we already hit

  • Silent and deaf with no error. ALSA's default PCM must route to PipeWire, which is what the pipewire-alsa package's /etc/alsa/conf.d symlink does. Without it default falls back to dmix on card 0 — and on a box whose card 0 is an HDMI-only GPU there is no device 0, so every aplay/arecord dies and Chibi comes up mute. pipewire-alsa is a hard dependency for this reason; do not drop it.
  • Text-only when you expected voice. The venv gives voice; system Python is silently text-only. The packaged build vendors the deps so this is handled, but a from-source run must use the right interpreter.
  • ~/.local/bin isn't on the synui session PATH — install launchers to /usr/bin (the package does).
  • Three copies of every module. The upstream repo ships per-resolution app trees; a fix applied to one copy but not the others drifts. The package builds from the 1080x1920-linux tree.

See also: synapd (her brain), synguard + kmod (her security feed), and Vibe (the coding-assistant sibling on the same model).