TALK TO ME JOHNNY

Covey leader to Raven... talk to me, Johnny.

Talk to me, Johnny.

Put the keyboard down. A local-first voice medium for Claude Code and Codex CLI - you speak, the attached assistant works, and replies come back in a real voice. Headphones on, hands off.

Hands off the keyboard.
It's a long road.

MIT Python 3.11+ Local-first No cloud voice No subscription
A skull wearing studio headphones with a boom microphone — the talktomejohnny mark.

What it does

Speak. It works. It talks back.

One local command. Listening and speaking stay on your machine; only the assistant provider you already use handles the coding work.

Hears you

Local speech-to-text, Whisper-class. Your voice never leaves the box. GPU tier if you've got CUDA, CPU tier if you don't.

Answers back

Speaks the attached assistant's dialogue in a real voice — and only the dialogue. Tool calls, fenced code, and thinking are stripped before a word is said.

Rides Claude Code and Codex CLI

User-level lifecycle hooks support normal Claude Code and Codex CLI launches. Only the exact session you attach can enter its isolated reply stream.

Three ways to talk

Always-on and pause-gated, push-to-talk, or push-toggle. Set your default once and forget it.

A real mute

assist off and the whole thing goes quiet — hook included. A mute switch that actually mutes.

Never a robot on day one

Three public-domain voices, fetched automatically on first use. No copyrighted voices, no celebrity clones — bring your own on top.

Say it, it runs

Speak a slash command and it fires — a keyword match for the obvious ones, a sealed-off sub-call to resolve the rest. Your words find the command; ordinary talk never trips it.

On your word

An opt-in wake phrase opens the mic on a spoken cue — off by default, on the moment you say it. No key, no click. Leave it off and the mic stays shut.

Cut in mid-sentence

Talk over a spoken reply and it yields — full-duplex, gated behind headphones so it never talks over itself. Interrupt it like you would a person.

Paced for the ear

Long answers break into speakable pieces and remember where they paused. Say back, repeat, or slower and it picks up mid-thought — not from the top.

Set up in one keypress

A first-run wizard pins your recording mode, permission posture, and first voice before anything else runs. Recommended defaults are a single Enter away.

The one thing that matters

It speaks the words. Never the code.

The filter reads the assistant transcript and speaks only its prose — striking out tool calls, logs, and fenced code before your headphones ever hear them.

Raw transcript
Right — I'll wire up the Stop hook now.
 ⏵ Bash(printf 'sandbox smoke')
 ```python
 def forbidden_function(): ...
 ```
That's the hook registered.
All twelve tests pass now.
What gets spoken
Right — I'll wire up the Stop hook now.
That's the hook registered.
All twelve tests pass now.

talktomejohnny filter transcript.jsonl — three spoken sentences out. No destructive shell, no forbidden_function, no backticks. Proven, not promised: it's one of the twelve criteria the build is sealed against.

Get it running

Three words: get it, build it, install it.

Every platform spells the same three steps differently. Pick yours. The clone is tiny — the voices download once on your first speak (~250 MB, cached), or run voices --download to pre-fetch. First run? talktomejohnny setup walks the whole thing — recording mode, permissions, a voice — in one pass.

# Windows Terminal · PowerShell # 1 · install uv (it fetches Python for you) PS> powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" # 2 · grab the code, then step in PS> git clone https://github.com/Fredasterehub/talktomejohnny.git; cd talktomejohnny # 3 · build the env & install PS> uv venv --python 3.12; uv pip install -e . # hear it PS> .\.venv\Scripts\talktomejohnny speak "Hello from Johnny." ▸ playing… (voice: en_US-ljspeech-high)
# macOS · Terminal.app # 1 · install uv (fetches Python too) $ curl -LsSf https://astral.sh/uv/install.sh | sh # 2 · clone (tiny — voices download on first speak) — first git run prompts for Command Line Tools $ git clone https://github.com/Fredasterehub/talktomejohnny.git && cd talktomejohnny # 3 · build the env & install $ uv venv --python 3.12 && uv pip install -e . # hear it $ ./.venv/bin/talktomejohnny speak "Hello from Johnny." ▸ playing… (no CUDA on a Mac → speech-to-text runs the CPU tier)
# Linux / Unix # 1 · system bits: PortAudio + git $ sudo apt install -y libportaudio2 git # dnf: portaudio · pacman: portaudio # 2 · install uv, then clone (tiny — voices fetch on first use) $ curl -LsSf https://astral.sh/uv/install.sh | sh $ git clone https://github.com/Fredasterehub/talktomejohnny.git && cd talktomejohnny # 3 · build & install (NVIDIA? add: uv pip install -e ".[cuda]") $ uv venv --python 3.12 && uv pip install -e . $ ./.venv/bin/talktomejohnny speak "Hello from Johnny." ▸ playing… (voice: en_US-ljspeech-high)
Attach either assistant  ·  Start the companion, or install hooks explicitly with talktomejohnny hook install --provider claude and talktomejohnny hook install --provider codex. In Codex, open /hooks once to review and trust the TalkToMeJohnny entries. Then use /talktomejohnny on in Claude Code or $talktomejohnny on in Codex CLI. First transcription downloads its Whisper model once, then reuses the local cache.
On a server over SSH? (Proxmox · homelab · VPS)  ·  Install here on the computer you sit at and on the assistant host. Voice stays local while Claude Code or Codex CLI runs remotely. Full setup is below.

Remote / SSH

Voice here. Assistant there.

Coding on a Proxmox box, homelab machine, or VPS? The microphone and speakers stay local, Claude Code or Codex CLI runs on the server, and only text crosses the SSH connection.

# ON THE SERVER — where the assistant CLI lives $ claude --version # Claude Code, if used $ codex --version # Codex CLI, if used $ talktomejohnny hook install --provider claude $ talktomejohnny hook install --provider codex
# ON YOUR COMPUTER — where the mic + speakers are (after you install talktomejohnny) # 1 · passwordless SSH, so it never stops to ask for a password mid-sentence $ ssh-keygen -t ed25519 # press Enter through the prompts $ ssh-copy-id you@example-host # macOS/Linux (Windows one-liner: see README) $ ssh you@example-host echo ok # must print ok, with NO password # 2 · point talktomejohnny at the server — just once, it's remembered $ talktomejohnny config set remote you@example-host # 3 · talk. microphone + speech stay local; the assistant runs remotely $ talktomejohnny listen
Back to all-local  ·  talktomejohnny config set remote local. See the README for the complete remote walkthrough and recovery notes.

The voices

Three public-domain voices. Zero copyright baggage.

Trained from scratch, every one public domain. They fetch automatically from the Hugging Face Hub on first use and cache locally — so day one is never silent and the licensing stays clean. Piper runs as a subprocess, never linked in, so the project stays MIT.

VoiceAccentQualityLicense
en_US-ljspeech-highUS EnglishHighPublic domain
en_GB-cori-mediumUK EnglishMediumPublic domain
en_US-bryce-mediumUS EnglishMediumPublic domain

Or clone your own. Point it at a short reference clip — a YouTube link works — and an F5-TTS engine grows a voice from it, auto-picking a clean, single-speaker segment. Nothing goes live until you hear it and say yes: a mandatory audition, never a blind upload. Feasibility is checked against your hardware first, so it only offers what your machine can actually run.

The name

Where the name comes from.

"Covey leader to Raven…
talk to me, Johnnie."

The name descends straight from Talk To Me Johnnie, John Welbourn's old strength blog — "It's a long road." Hard lessons, strong advice, no bullshit; the title itself a radio call lifted from a Rambo film.

We took the attitude and the cadence of the name — and pointed both at a terminal.

Not affiliated with John Welbourn or Power Athlete. We just owe them the name and the attitude.