@@ -262,7 +262,7 @@ generation land in the Captures tab.
boundary. If you're scripting against a shared host, prefer
`audio_base64` so you don't have to think about path sandboxing.
- **Voice cloning consent applies.** See [Voice Cloning](/overview/voice-cloning#limitations)
- — an agent being able to call `voicebox.speak` in someone's voice
+ — an agent being able to call `voicebox_speak` in someone's voice
doesn't change the ethics of whose voices you clone.
## Implementation notes
diff --git a/docs/content/docs/overview/troubleshooting.mdx b/docs/content/docs/overview/troubleshooting.mdx
index dc1eaef1..f0e4ff4a 100644
--- a/docs/content/docs/overview/troubleshooting.mdx
+++ b/docs/content/docs/overview/troubleshooting.mdx
@@ -428,12 +428,14 @@ bun run tauri build
```bash
# macOS
-rm ~/Library/Application\ Support/sh.voicebox.app/data/voicebox.db
+rm ~/Library/Application\ Support/sh.voicebox.app/data/voicebox.db*
# Windows
-del %APPDATA%\sh.voicebox.app\data\voicebox.db
+del %APPDATA%\sh.voicebox.app\data\voicebox.db*
```
+The wildcard also removes the `voicebox.db-wal` and `voicebox.db-shm` sidecar files that SQLite keeps next to the database in WAL mode, so the reset starts completely clean.
+
Restart the app to create a fresh database.
## Model Issues
diff --git a/docs/content/docs/overview/voice-personalities.mdx b/docs/content/docs/overview/voice-personalities.mdx
index 65c797d3..c7dd95a8 100644
--- a/docs/content/docs/overview/voice-personalities.mdx
+++ b/docs/content/docs/overview/voice-personalities.mdx
@@ -128,7 +128,7 @@ until you flip it back off.
- **Agents that speak in a voice you own.** Combine the persona toggle with
the built-in [MCP Server](/overview/mcp-server) so Claude Code, Cursor,
Cline, or any MCP-aware agent can talk back through a profile with a
- personality. The agent calls `voicebox.speak({ text, profile, personality:
+ personality. The agent calls `voicebox_speak({ text, profile, personality:
true })` and Voicebox rewrites the text in character before speaking.
- **Interactive characters.** Games, narrative tools, accessibility
experiences. A character with a personality description plus a cloned
@@ -151,7 +151,7 @@ Personalities are accessible via REST:
| `POST` | `/generate` | Include `personality: true` to run input text through the personality LLM before TTS. Same for `POST /speak`. |
`POST /generate` with `personality: true` is the same primitive MCP's
-`voicebox.speak` tool uses when you pass `personality: true`. Scripts and
+`voicebox_speak` tool uses when you pass `personality: true`. Scripts and
agents can use it directly.
## Limits and gotchas
diff --git a/justfile b/justfile
index 64915150..6c87aa84 100644
--- a/justfile
+++ b/justfile
@@ -440,12 +440,12 @@ db-init: _ensure-venv
# Reset database (delete + reinit)
[unix]
db-reset:
- rm -f {{ backend_dir }}/data/voicebox.db
+ rm -f {{ backend_dir }}/data/voicebox.db {{ backend_dir }}/data/voicebox.db-wal {{ backend_dir }}/data/voicebox.db-shm
just db-init
[windows]
db-reset:
- if (Test-Path "{{ backend_dir }}/data/voicebox.db") { Remove-Item -Force "{{ backend_dir }}/data/voicebox.db" }
+ Remove-Item -Force -ErrorAction SilentlyContinue "{{ backend_dir }}/data/voicebox.db", "{{ backend_dir }}/data/voicebox.db-wal", "{{ backend_dir }}/data/voicebox.db-shm"
just db-init
# ─── Utilities ────────────────────────────────────────────────────────
diff --git a/landing/src/components/AgentIntegration.tsx b/landing/src/components/AgentIntegration.tsx
index 305cea3f..fc4034f5 100644
--- a/landing/src/components/AgentIntegration.tsx
+++ b/landing/src/components/AgentIntegration.tsx
@@ -23,7 +23,7 @@ const SCENARIOS: Scenario[] = [
{ prefix: '$', text: 'claude run', tone: 'accent' },
{ prefix: '✓', text: 'Tests passing (42 files)', tone: 'success' },
{ prefix: '✓', text: 'Build succeeded in 12.4s', tone: 'success' },
- { prefix: '→', text: 'voicebox.speak({ profile: "Morgan" })', tone: 'dim' },
+ { prefix: '→', text: 'voicebox_speak({ profile: "Morgan" })', tone: 'dim' },
],
utterance: 'Tests passing. Ready to merge.',
},
@@ -35,7 +35,7 @@ const SCENARIOS: Scenario[] = [
{ prefix: '$', text: 'cursor agent:deploy', tone: 'accent' },
{ prefix: '✓', text: 'Migration applied (4 tables)', tone: 'success' },
{ prefix: '✓', text: 'Deploy complete', tone: 'success' },
- { prefix: '→', text: 'voicebox.speak({ profile: "Scarlett" })', tone: 'dim' },
+ { prefix: '→', text: 'voicebox_speak({ profile: "Scarlett" })', tone: 'dim' },
],
utterance: 'Deploy shipped. Prod is green.',
},
@@ -46,7 +46,7 @@ const SCENARIOS: Scenario[] = [
log: [
{ prefix: '$', text: 'cline task:review', tone: 'accent' },
{ prefix: '!', text: '3 files need attention', tone: 'dim' },
- { prefix: '→', text: 'voicebox.speak({ profile: "Jarvis" })', tone: 'dim' },
+ { prefix: '→', text: 'voicebox_speak({ profile: "Jarvis" })', tone: 'dim' },
],
utterance: 'Review ready. Three files to look at.',
},
@@ -202,7 +202,7 @@ const MCP_CONFIG = `{
}`;
const SPEAK_EXAMPLE = `// In any MCP-aware agent:
-await voicebox.speak({
+await voicebox_speak({
text: "Deploy complete.",
profile: "Morgan",
})`;
@@ -300,7 +300,7 @@ export function AgentIntegration() {
One tool call —{' '}
- voicebox.speak —
+ voicebox_speak —
and any MCP-aware agent can talk to you in a voice you’ve cloned. Claude Code,
Cursor, Cline, or anything that speaks MCP.
diff --git a/landing/src/components/CapturesMockup.tsx b/landing/src/components/CapturesMockup.tsx
index 6e4994c1..ed551001 100644
--- a/landing/src/components/CapturesMockup.tsx
+++ b/landing/src/components/CapturesMockup.tsx
@@ -152,7 +152,7 @@ const CAPTURES: Capture[] = [
transcriptRaw:
"draft an update for the blog about the agent voice feature the key point is one MCP tool call and any agent on your machine gets a voice claude code finishes a long task calls voicebox dot speak and you hear it in a voice you've cloned morgan scarlett whatever you set up same pill that shows when you're dictating also shows when an agent is speaking so you always know what's coming out of your machine closes the whole voice IO loop for agents",
transcriptRefined:
- "Draft an update for the blog about the agent voice feature. The key point: one MCP tool call, and any agent on your machine gets a voice. Claude Code finishes a long task, calls voicebox.speak, and you hear it in a voice you've cloned — Morgan, Scarlett, whatever you've set up. The same pill that shows when you're dictating also shows when an agent is speaking, so you always know what's coming out of your machine. It closes the full voice I/O loop for agents.",
+ "Draft an update for the blog about the agent voice feature. The key point: one MCP tool call, and any agent on your machine gets a voice. Claude Code finishes a long task, calls voicebox_speak, and you hear it in a voice you've cloned — Morgan, Scarlett, whatever you've set up. The same pill that shows when you're dictating also shows when an agent is speaking, so you always know what's coming out of your machine. It closes the full voice I/O loop for agents.",
durationMs: 41000,
ago: '22 min ago',
createdAtLabel: 'Apr 22, 3:29 PM',
diff --git a/package.json b/package.json
index ba9274f2..1dd38f1b 100644
--- a/package.json
+++ b/package.json
@@ -45,5 +45,8 @@
"dependencies": {
"loaders.css": "^0.1.2",
"react-loaders": "^3.0.1"
+ },
+ "overrides": {
+ "seroval": "1.5.3"
}
}
diff --git a/tauri/src-tauri/src/main.rs b/tauri/src-tauri/src/main.rs
index 0f44ac90..a1edd132 100644
--- a/tauri/src-tauri/src/main.rs
+++ b/tauri/src-tauri/src/main.rs
@@ -1434,7 +1434,7 @@ pub fn run() {
}
});
- // Agent-initiated speech (voicebox.speak over MCP or POST /speak)
+ // Agent-initiated speech (voicebox_speak over MCP or POST /speak)
// pops the pill up so the user can see what's coming out of their
// machine. The `dictate:show` listener is kept for any frontend
// caller that wants to force-surface the pill directly, but the