Listen to AI coding assistant responses via Kokoro TTS.
Project description
lystn CLI
Cross-platform command-line client for the Lystn TTS server. Replaces the Windows-only PowerShell hook with a Python package that works on Windows, Mac, and Linux.
Install
pipx install -e . # from this folder, while developing
# or once published:
pipx install lystn
pipx puts lystn on your PATH in an isolated environment — no
conflicts with your other Python packages.
Configure
lystn config set server https://api.lystn.space # cloud server (default)
lystn config set voice af_heart # any voice from `lystn voices`
lystn config set speed 1.25 # playback rate 0.5–3.0
lystn config show
The default server is https://api.lystn.space. For local dev, point it at
your own box, e.g. lystn config set server http://127.0.0.1:7878. Sign in
with lystn login (browser Google sign-in saves your key automatically) —
you rarely set api_key by hand.
Config lives at:
- Windows:
%APPDATA%\lystn\config.json - Mac/Linux:
~/.config/lystn/config.json
Use
lystn test # speak "Lystn is connected and working."
lystn speak "Hello there." # speak the argument
echo "Hello there." | lystn speak # speak stdin
lystn voices # list voices
lystn doctor # check server reachable
Wire into assistants
lystn install
Wires Lystn's Stop hook into Claude Code and, when local Codex is present,
into the shared Codex config used by the Codex app, Codex CLI, and Codex IDE
extension. It also adds a branded animated statusLine to Claude Code —
non-destructively, so your own custom status line is never replaced. Restart
the assistant, or start a new session/thread, after installing. Every
completed response will be spoken aloud. lystn uninstall removes only
Lystn's entries (its hook and its status line).
To target only Codex local surfaces:
lystn install --codex
The hook is fire-and-forget: if the Lystn server is down or the text is empty, the hook exits silently and doesn't break Claude's UI.
Commands
| Command | What it does |
|---|---|
lystn speak [TEXT] |
Speak text from argument or stdin |
lystn hook |
Stop-hook entry (Claude Code / Codex) — reads JSON from stdin |
lystn test |
Speak a short connection-test message |
lystn login / lystn logout |
Browser Google sign-in / clear saved key |
lystn voices |
List voices the server offers |
lystn doctor |
Print config + server health |
lystn devices [--pick] |
List audio outputs; --pick saves one |
lystn mute / lystn unmute |
Silence Lystn / turn it back on |
lystn speed [0.5-3.0] |
Set/show playback speed |
lystn volume [0-100] |
Set/show volume |
lystn statusline |
Print the branded animated status line |
lystn config show |
Show current config |
lystn config set KEY VALUE |
Update config (server, api_key, voice, device, speed) |
lystn install / lystn uninstall |
Wire/unwire Claude Code + detected Codex |
Requirements
- Python 3.10+
- A reachable Lystn server (defaults to the cloud
https://api.lystn.space; point at a local Kokoro server for dev) - Audio output device (
sounddevicehandles it cross-platform)
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file lystn-0.2.0.tar.gz.
File metadata
- Download URL: lystn-0.2.0.tar.gz
- Upload date:
- Size: 32.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
013f44eeb553879d9d27a795e93f9a3a7fdfbe85f2b7db37322d697444d595b7
|
|
| MD5 |
55c872c76d8da2d7520b492280432b61
|
|
| BLAKE2b-256 |
2248ed54ab5c6f5c2f489292acc6cfccecb57c58aa8aff75fb2d69ec95b15242
|
File details
Details for the file lystn-0.2.0-py3-none-any.whl.
File metadata
- Download URL: lystn-0.2.0-py3-none-any.whl
- Upload date:
- Size: 30.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
46e103170dbef579615815159c630e3f322d2a85060f53acaaa4715928791470
|
|
| MD5 |
5756211b23e1579745789871997a11ab
|
|
| BLAKE2b-256 |
57fba59501529aa7a9c35c66add5528cf0bb9d1a58bc0bb5ddfd39dbcced9c23
|