Skip to content
Closed
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,4 @@ uv.lock
backtalk.egg-info/
# your personal config, created at setup: never tracked, never touched by updates
backtalk.json
.backtalk_session
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ The hearing and the voice run local: free, offline models on your machine, no vo
- **Type instead whenever you want.** Typing in the terminal is the same conversation, and the reply is still spoken.
- **It asks before it acts, in plain words.** When your agent wants to do something real, it asks out loud the way a person would ("I want to change a note in your vault called Recipes") and waits. An exact spoken yes approves; "details" reads you the exact command; anything else denies, with your words passed back as the reason, so "no, put that in drafts instead" actually steers it. Most read-only work passes without interrupting. Prefer auto-approve? Say "stop asking for permission" (or "turn off the permission prompts") and confirm; it changes its own config, and the first ask of every session reminds you the phrase exists.
- **The voice console.** Session control by voice, so you never go back to the keyboard: "clear the session", "compact the session", "switch to the deep model" / "back to the fast model", "set effort to low" (or medium, high, max; this one saves itself as your default), "usage report", "go hands free" / "push to talk mode" for the microphone, "stop asking for permission" / "start asking again" for approvals. Exact phrases, spoken alone. (Credit where due: this grew out of a community member's own build shared in the Discord.)
- **It can pick up where it left off.** Set `"resume_last_session": true` in the config and every launch reattaches to your previous conversation instead of starting cold, so closing the window stops costing you the thread. Off by default. And the built-in voice has a pace dial: `"speed"` in the config, 1.0 native, 1.15 brisker. (Credit where due: both grew out of a community proposal by aram-cloudstak.)
- **It can pick up where it left off.** Set `"resume_last_session": true` in the config and every launch reattaches to your previous conversation instead of starting cold, so closing the window (or a crash) stops costing you the thread. On a reattached launch the agent opens by saying where you left off and asking whether to continue or start fresh; say "start fresh" (or "clear the session") to start over, or just keep talking. Off by default. And the built-in voice has a pace dial: `"speed"` in the config, 1.0 native, 1.15 brisker. (Credit where due: both grew out of a community proposal by aram-cloudstak.)
- **Music ducks while it speaks** (Spotify, macOS) and comes back up after.
- **It thinks out loud.** While the agent works, you hear the processing sound from my videos, so a pause never reads as a dead line. Silence it with `"thinking_sound": ""` in the config.

Expand Down Expand Up @@ -56,7 +56,7 @@ Two engines, and the setup wizard offers you both instead of quietly defaulting.

## Give it a face (optional)

backtalk writes tiny state files while it listens, thinks, and speaks, so anything can watch them and react in real time.
backtalk writes tiny state files while it listens, thinks, and speaks, so anything can watch them and react in real time: `.voice_state`, `.voice_waveform`, `.voice_loading_pid`, plus `.voice_heartbeat` (unix time, rewritten every ~2 s while backtalk is alive — stale means dead or hung) and `.voice_activity` (JSON `{ts, turn_started, line}` naming what the agent is doing mid-turn, e.g. `Read: foo.py`; deleted when the turn ends). All in `signals_dir`.

- **[ai-visualizer](https://github.com/jaredrhod/ai-visualizer)** is the matching face: four full-screen visualizers, including the living circuit board from my videos. Point its `bus_dir` at this folder (or set `signals_dir` here to its folder) and it performs your actual conversation, idling, listening, thinking, and speaking along with the voice.
- **[barehands](https://github.com/jaredrhod/barehands)**: point `barehands_state_dir` at its `state/` folder and the on-screen ring becomes your agent's face, breathing while idle, spinning while thinking, and pulsing with the voice while it talks.
Expand Down
2 changes: 1 addition & 1 deletion TROUBLESHOOTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ Written for humans AND for AI assistants. If you're an AI helping someone debug
- **Mic permission never appeared / recording is silent**: launch from a normal terminal window, not a background service or launcher daemon: the process inherits the *terminal's* microphone permission. Check the input device: `python -m sounddevice` lists them.
- **It hears me but answers slowly**: check `model` in `backtalk.json`. Full-size deep-work models make every reply noticeably slower; the fast tier is the point of a voice loop. Also confirm the model id is the FULL id, never a bare alias; aliases can silently resolve to an older model through the SDK's bundled CLI.
- **First reply after launch is slow**: that's the one-time prompt-cache toll, mostly hidden behind the greeting. Warm turns are the real speed.
- **It starts cold and forgets the last conversation after a restart**: that is the default (a fresh session every launch is predictable). Want it to pick up where it left off? Tell your agent to set `"resume_last_session": true` in backtalk.json. From then on every launch reattaches to the previous conversation, and a stale saved session falls back to fresh with a log line instead of breaking the launch. The saved conversation lives on your machine as a Claude Code transcript (kept for 30 days from last use by default), and a long conversation never dies from length: it compacts itself automatically, older turns becoming a summary while recent ones stay verbatim. Start over any time by saying "clear the session."
- **It starts cold and forgets the last conversation after a restart**: that is the default (a fresh session every launch is predictable). Want it to pick up where it left off? Tell your agent to set `"resume_last_session": true` in backtalk.json. From then on every launch reattaches to the previous conversation and the agent opens by saying where you left off and asking continue-or-start-fresh ("start fresh" clears it; otherwise just keep talking); a stale saved session falls back to fresh with a log line instead of breaking the launch. The saved conversation lives on your machine as a Claude Code transcript (kept for 30 days from last use by default), and a long conversation never dies from length: it compacts itself automatically, older turns becoming a summary while recent ones stay verbatim. Start over any time by saying "clear the session."
- **The voice talks too fast or too slow**: the built-in voice has a pace dial, `"speed"` in backtalk.json. 1.0 is native, 1.15 is brisker, 0.9 is slower. ElevenLabs pace lives in the `master` chain's atempo value instead.
- **Updating, or an update that complains about local changes**: run `./update.sh` (`update.bat` on Windows) in this folder, or double-click the `Update` icon if setup left one. It shows what changed before applying it and can never touch your `backtalk.json`. If an older updater said "couldn't fast-forward" or mentioned local changes, run `./update.sh` once and it clears: it moves your config out of git's sight and everything flows after.
- **The voice sounds robotic**: you're hearing Kokoro's base register, or the wrong voice for the language. Try `bm_george`, `bm_daniel`, `am_michael`, `af_heart`. Remember the first letter must match the language pipeline (`b…` British, `a…` American).
Expand Down
Loading