Quickstart¶
This assumes you finished Install and dictation setup compiled the listener.
One command¶
What happens, step by step (from narrative-claude.sh):
- Any running listener is stopped so the new window owns the mic.
- Terminal opens a new window running
cd ~/NarrateClaude && claude, withCLAUDE_SESSION_LABEL=NarrativeClaudeexported. - That window's ID is written to
dictation/state/target.json. - The script waits 6 seconds for
claudeto draw its prompt. - The listener starts with
NARRATE_DICTATION_LAUNCHER=NarrativeClaude.app.
Because claude starts inside ~/NarrateClaude, Claude Code reads the repo's CLAUDE.md, which tells it to narrate everything through ~/.local/bin/speak.
Talk¶
Speak a full sentence. When the transcription stops changing for 2.5 seconds, the sentence is typed into the bound window and submitted.
Things to know on day one:
- Use at least 3 words, or end with a question. "Yes" and "do it" are dropped. "Why?" goes through.
- Wait for the reply to finish. The mic is paused while
afplayplays. - Starting a new sentence cuts off speech. Each injected line first kills
afplay,sayand a few TTS processes. - "Claude tune out" mutes the relevance filter until you say "Claude tune in". The word "Claude" is optional. The mute survives restarts.
Watch what it heard¶
Every accepted line is logged with a timestamp, along with dispatcher events such as listener respawns.
Stop¶
Close the Terminal window. The window watchdog checks every 3 seconds and shuts the listener down when the window is gone. Or stop it directly:
Manual control¶
D=~/NarrateClaude/dictation/bin/dictation
$D setup # bind to the Terminal window running claude, compile listener
NARRATE_DICTATION_LAUNCHER="NarrativeClaude.app" $D start
$D status # ON/OFF, bound window, compiled or not
$D tail # follow the log
$D stop
NARRATE_DICTATION_LAUNCHER="NarrativeClaude.app" $D toggle
start is refused unless NARRATE_DICTATION_LAUNCHER is NarrativeClaude.app or Narrative Gemma.command, so a stray call cannot turn on the mic. See Configuration.
Note
dictation start prints "~1s of silence ends each utterance", but the listener's default is 2.5 seconds of unchanged text (LISTEN_STABILITY_SEC). The printed message is out of date.