惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Microsoft Azure Blog
Microsoft Azure Blog
大猫的无限游戏
大猫的无限游戏
月光博客
月光博客
V
V2EX
PCI Perspectives
PCI Perspectives
Latest news
Latest news
博客园 - 三生石上(FineUI控件)
C
CERT Recently Published Vulnerability Notes
W
WeLiveSecurity
Last Week in AI
Last Week in AI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
P
Palo Alto Networks Blog
T
The Exploit Database - CXSecurity.com
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
WordPress大学
WordPress大学
V
Vulnerabilities – Threatpost
H
Heimdal Security Blog
Attack and Defense Labs
Attack and Defense Labs
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Hacker News: Ask HN
Hacker News: Ask HN
博客园 - 叶小钗
V
Visual Studio Blog
Jina AI
Jina AI
P
Proofpoint News Feed
罗磊的独立博客
SecWiki News
SecWiki News
J
Java Code Geeks
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
L
LINUX DO - 热门话题
Security Archives - TechRepublic
Security Archives - TechRepublic
The Hacker News
The Hacker News
Hugging Face - Blog
Hugging Face - Blog
N
News and Events Feed by Topic
NISL@THU
NISL@THU
T
Tailwind CSS Blog
T
Tenable Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Recent Announcements
Recent Announcements
H
Hacker News: Front Page
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
T
Tor Project blog
宝玉的分享
宝玉的分享
Help Net Security
Help Net Security
S
Security Affairs
Microsoft Security Blog
Microsoft Security Blog
Google DeepMind News
Google DeepMind News
F
Fortinet All Blogs
G
GRAHAM CLULEY

Recent Commits to openclaw:main

test: merge chat side-result checks · openclaw/openclaw@ddd2c2a test: merge cron history checks · openclaw/openclaw@f7eb746 test: merge responsive navigation shell checks · openclaw/openclaw@c2e4b47 docs(changelog): add codex oauth fixes · openclaw/openclaw@628e6cd test: merge navigation routing cases · openclaw/openclaw@5d8cecb Tests: mock channel registry bundled fallback · openclaw/openclaw@2b08233 Secrets: avoid broad web search discovery for single plugin config · openclaw/openclaw@a464f59 test: merge config view browser checks · openclaw/openclaw@20cf511 fix(status): align oauth health with runtime · openclaw/openclaw@eed7116 feat: add macOS screen snapshots for monitor preview (#67954) thanks … · openclaw/openclaw@f377db1 fix: report shared auth scopes in hello-ok (#67810) thanks @BunsDev · openclaw/openclaw@0b6c39b Auto-reply: avoid eager bundled route fallback · openclaw/openclaw@3ea1bf4 Tests: narrow session binding contract setup · openclaw/openclaw@54e4e16 fix(macOS): enable undo/redo in webchat composer text input (#34962) · openclaw/openclaw@00951dc Tests: speed up channel setup promotion · openclaw/openclaw@82b529a Docs: refresh agent instructions · openclaw/openclaw@5775fe2 fix(auth): serialize OAuth refresh across agents to fix #26322 (#67876) · openclaw/openclaw@8e79080 test: allow ollama public surface boundary test · openclaw/openclaw@7d4f1a6 Docs: add test performance guardrails · openclaw/openclaw@89706d3 Tests: restore context-engine usage proof · openclaw/openclaw@e4c4f95 Tests: slim context engine runtime coverage · openclaw/openclaw@74c198f ci: retry failed custom checkouts · openclaw/openclaw@0ee5baf test: trim duplicate provider auth onboarding cases · openclaw/openclaw@1ffc02e matrix: fix sessions_spawn --thread subagent session spawning (#67643) · openclaw/openclaw@1ce2596 test: reduce auth choice fixture churn · openclaw/openclaw@857b9cd test: mock health status config boundaries · openclaw/openclaw@9d5ab4a test: mock onboard config io boundary · openclaw/openclaw@299694d test: mock legacy state plugin boundaries · openclaw/openclaw@2713089 test: mock channel install boundaries · openclaw/openclaw@b945248 test: mock doctor preview channel boundaries · openclaw/openclaw@b1a3ad4 test: trim doctor command hotspots · openclaw/openclaw@c66f16a test: isolate agent auth and spawn hotspots · openclaw/openclaw@9285935 test: stabilize MCP startup disposal race · openclaw/openclaw@dd9d2eb test: merge browser contract server suites · openclaw/openclaw@5817a76 test: narrow ollama provider discovery setup · openclaw/openclaw@a0d9598 build: declare qa-lab aimock runtime dependency · openclaw/openclaw@24431e5 test: speed up safe-bins exec harness · openclaw/openclaw@ee856ab test: preserve tool helpers in embedded runner mocks · openclaw/openclaw@acd86a0 refactor: move memory embeddings into provider plugins · openclaw/openclaw@77e6e4c test: reuse system-run temp fixtures · openclaw/openclaw@7e9ff0f test: trim hotspot wait overhead · openclaw/openclaw@12a59b0 Check: avoid duplicate boundary prep · openclaw/openclaw@baf11b8 test: reduce hotspot fixture overhead · openclaw/openclaw@3a59edd feat(ui): overhaul settings and slash command UX (#67819) thanks @Bun… · openclaw/openclaw@2cfb660 QA Matrix: exit cleanly on failure · openclaw/openclaw@42805d2 QA Matrix: isolate scenario coverage · openclaw/openclaw@7e659e1 Matrix: refresh crypto bootstrap state · openclaw/openclaw@94081d8 QA Lab: add provider registry · openclaw/openclaw@bb7e982 Matrix: add plugin changelog · openclaw/openclaw@4acab55 test: trim more hotspot overhead · openclaw/openclaw@f485311 test: trim remaining hotspot tests · openclaw/openclaw@6ba8626 test: narrow hotspot mocks · openclaw/openclaw@dbc8179 test: isolate gemini embedding request helpers · openclaw/openclaw@cd330f5 test: trim memory and mcp hotspots · openclaw/openclaw@fd48dfa test: slim provider registry mocks · openclaw/openclaw@2e08c77 test: harden Parallels update smoke · openclaw/openclaw@1a98090 feat: default Anthropic to Opus 4.7 · openclaw/openclaw@628b454 fix: harden node-host shell payload mutability checks · openclaw/openclaw@75c551e fix: land node-host approval binding for native binaries (#66731) (th… · openclaw/openclaw@29919bb CI: add daily schedule to CodeQL workflow (#67645) · openclaw/openclaw@69d25f5 fix(gateway): capture config hash after plugin auto-enable to prevent… · openclaw/openclaw@8c11210 fix: repair sanitized replay tool results before send (#67620) (thank… · openclaw/openclaw@c3c7a99 fix: restrict HTML timeout short-circuit to transient statuses · openclaw/openclaw@de129a6 fix: keep TUI watchdog bound to active run (#67401) (thanks @xantorres) · openclaw/openclaw@3525273 Gateway/skills: dedupe skills prefix-match + drop dead fallback on log · openclaw/openclaw@d7f489f Extensions/lmstudio: back off inference preload after consecutive fai… · openclaw/openclaw@b555214 TUI/streaming: add watchdog that resets the activity indicator after … · openclaw/openclaw@f44ab20 Agents/tool-loop: enable unknown-tool stream guard by default · openclaw/openclaw@36ed367 Gateway/skills: invalidate session skills snapshot on config write · openclaw/openclaw@b23d59a fix: classify HTML provider error pages correctly (#67642) (thanks @s… · openclaw/openclaw@e588e90 fix(skills): remove unused model-usage import (#67641) · openclaw/openclaw@55f05df docs(changelog): credit codex fix superseded PRs · openclaw/openclaw@e485f24 fix(openai-codex): normalize stale transport metadata in resolution a… · openclaw/openclaw@90801ba CI: pin Docker-related GitHub Actions (#67632) · openclaw/openclaw@f697b01 Android: modernize WebView and discovery API usage (#67627) · openclaw/openclaw@44a6e50 fix(deps): bump hono to 4.12.14 and @hono/node-server to 1.19.14 (GHS… · openclaw/openclaw@fbccc18 fix(deps): bump dompurify to 3.4.0 (#67614) · openclaw/openclaw@2c2dc00 CI: add explicit permissions to all workflow jobs (fixes code-scannin… · openclaw/openclaw@01b7516 fix: register bundled TTS providers and route overrides correctly (#6… · openclaw/openclaw@6ea3cdd fix: align host tilde paths with OS home (#62804) (thanks @stainlu) · openclaw/openclaw@ecfaf64 fix: flush creds queue before reconnect socket open (#67464) (thanks … · openclaw/openclaw@405c63f fix: strip standalone <function> tool call tags from visible text (#6… · openclaw/openclaw@78df859 fix(agents): preserve cli session metadata before transcript persist … · openclaw/openclaw@898fd04 docs(changelog): move cli transcript entry · openclaw/openclaw@c1817c6 fix(agents): normalize cli transcript api field · openclaw/openclaw@3a3fae0 docs(changelog): note cli transcript persistence · openclaw/openclaw@6c343f1 fix(agents): persist cli transcript turns · openclaw/openclaw@b8ef507 fix(msteams): harden security-sensitive flows (#65841) · openclaw/openclaw@c56b56e [Dashboard] Fix exec approval modal overflow for long command content… · openclaw/openclaw@053c5b0 Docs: remove QA changelog entry · openclaw/openclaw@7fd5771 QA: fix private runtime source loading (#67428) · openclaw/openclaw@d5933af docs(gateway): correct protocol.md schema path, hello-ok example, aut… · openclaw/openclaw@489404d CI: pin Node 22 runners to 22.18.0 · openclaw/openclaw@4ffa621 models.authStatus: normalize provider ids + tighten env-backed escape… · openclaw/openclaw@f2fdb9d Update CHANGELOG.md · openclaw/openclaw@7694a92 test(parallels): clean up npm update guard jobs · openclaw/openclaw@045ea7b Plugins: prefer scanDir override paths · openclaw/openclaw@b2974da fix(dreaming): default storage.mode to "separate" so phase blocks sto… · openclaw/openclaw@8c392f0 fix(memory-core): skip dreaming transcript ingestion via session stor… · openclaw/openclaw@a1b01f0 fix: dedupe replayed exec.finished node events (#67281) · openclaw/openclaw@5dcf526
TTS: add provider personas · openclaw/openclaw@0594fa3
barronlroth · 2026-04-26 · via Recent Commits to openclaw:main

@@ -493,6 +493,110 @@ transcoded to raw 16 kHz mono PCM with `ffmpeg`. The legacy provider alias

493493

}

494494

```

495495496+

### TTS personas

497+498+

Use `messages.tts.personas` when you want a stable spoken identity that can be

499+

applied deterministically across providers. A persona can prefer one provider,

500+

define provider-neutral prompt intent, and carry provider-specific bindings for

501+

voices, models, prompt templates, seeds, and voice settings.

502+503+

```json5

504+

{

505+

messages: {

506+

tts: {

507+

auto: "always",

508+

persona: "alfred",

509+

personas: {

510+

alfred: {

511+

label: "Alfred",

512+

description: "Dry, warm British butler narrator.",

513+

provider: "google",

514+

fallbackPolicy: "preserve-persona",

515+

prompt: {

516+

profile: "A brilliant British butler. Dry, witty, warm, charming, emotionally expressive, never generic.",

517+

scene: "A quiet late-night study. Close-mic narration for a trusted operator.",

518+

sampleContext: "The speaker is answering a private technical request with concise confidence and dry warmth.",

519+

style: "Refined, understated, lightly amused.",

520+

accent: "British English.",

521+

pacing: "Measured, with short dramatic pauses.",

522+

constraints: ["Do not read configuration values aloud.", "Do not explain the persona."],

523+

},

524+

providers: {

525+

google: {

526+

model: "gemini-3.1-flash-tts-preview",

527+

voiceName: "Algieba",

528+

promptTemplate: "audio-profile-v1",

529+

},

530+

openai: {

531+

model: "gpt-4o-mini-tts",

532+

voice: "cedar",

533+

},

534+

elevenlabs: {

535+

voiceId: "voice_id",

536+

modelId: "eleven_multilingual_v2",

537+

seed: 42,

538+

voiceSettings: {

539+

stability: 0.65,

540+

similarityBoost: 0.8,

541+

style: 0.25,

542+

useSpeakerBoost: true,

543+

speed: 0.95,

544+

},

545+

},

546+

},

547+

},

548+

},

549+

},

550+

},

551+

}

552+

```

553+554+

Resolution is deterministic:

555+556+

1. `/tts persona <id>` local preference, if set.

557+

2. `messages.tts.persona`, if set.

558+

3. No persona.

559+560+

Provider selection is explicit-first:

561+562+

1. Direct provider overrides from CLI, gateway, Talk, or allowed TTS directives.

563+

2. `/tts provider <id>` local preference.

564+

3. Active persona `provider`.

565+

4. `messages.tts.provider`.

566+

5. Registry auto-select.

567+568+

For each provider attempt, OpenClaw merges:

569+570+

1. `messages.tts.providers.<id>`

571+

2. `messages.tts.personas.<persona>.providers.<id>`

572+

3. trusted request overrides

573+

4. allowed model-emitted TTS directive overrides

574+575+

`fallbackPolicy` controls what happens when an active persona has no binding for

576+

an attempted provider:

577+578+

- `preserve-persona` keeps provider-neutral persona prompt fields available to

579+

providers. This is the default.

580+

- `provider-defaults` omits the persona from provider prompt preparation for

581+

that attempt, so the provider uses its neutral defaults while still allowing

582+

fallback to continue.

583+

- `fail` skips that provider attempt with `reasonCode: "not_configured"` and

584+

`personaBinding: "missing"`. Fallback providers are still tried; the whole TTS

585+

request fails only if every attempted provider is skipped or fails.

586+587+

Persona prompt fields are provider-neutral. Providers decide how to use them.

588+

Google wraps them only when the effective Google provider config sets

589+

`promptTemplate: "audio-profile-v1"` or `personaPrompt`; its older

590+

`audioProfile` and `speakerName` fields are still prepended as Google-specific

591+

prompt text. OpenAI maps prompt fields to `instructions` when no explicit

592+

OpenAI `instructions` value is configured. Providers without prompt-like

593+

controls use the provider-specific persona bindings only.

594+595+

Gemini inline audio tags are transcript content, not persona config. If the

596+

assistant or an explicit `[[tts:text]]` block includes tags such as `[whispers]`

597+

or `[laughs]`, OpenClaw preserves them inside the Gemini transcript. OpenClaw

598+

does not generate configured start tags.

599+496600

### Disable Microsoft speech

497601498602

```json5

@@ -565,6 +669,12 @@ Then run:

565669

- If `provider` is **unset**, OpenClaw uses the first configured speech provider in registry auto-select order.

566670

- Legacy `provider: "edge"` config is repaired by `openclaw doctor --fix` and

567671

rewritten to `provider: "microsoft"`.

672+

- `persona`: default TTS persona id from `personas`.

673+

- `personas.<id>`: stable spoken identity. The id is normalized to lowercase.

674+

- `personas.<id>.provider`: preferred speech provider for the persona. Explicit provider overrides and local provider prefs still win.

675+

- `personas.<id>.fallbackPolicy`: `preserve-persona` (default), `provider-defaults`, or `fail`; see [TTS personas](#tts-personas).

676+

- `personas.<id>.prompt`: provider-neutral persona prompt fields (`profile`, `scene`, `sampleContext`, `style`, `accent`, `pacing`, `constraints`).

677+

- `personas.<id>.providers.<provider>`: provider-specific persona binding merged over `providers.<provider>`.

568678

- `summaryModel`: optional cheap model for auto-summary; defaults to `agents.defaults.model.primary`.

569679

- Accepts `provider/model` or a configured model alias.

570680

- `modelOverrides`: allow the model to emit TTS directives (on by default).

@@ -621,6 +731,8 @@ Then run:

621731

- `providers.google.voiceName`: Gemini prebuilt voice name (default `Kore`; `voice` is also accepted).

622732

- `providers.google.audioProfile`: natural-language style prompt prepended before the spoken text.

623733

- `providers.google.speakerName`: optional speaker label prepended before the spoken text when your TTS prompt uses a named speaker.

734+

- `providers.google.promptTemplate`: set to `audio-profile-v1` to wrap active persona prompt fields in a deterministic Gemini TTS prompt structure.

735+

- `providers.google.personaPrompt`: Google-specific extra persona prompt text appended to the template's Director's Notes.

624736

- `providers.google.baseUrl`: override the Gemini API base URL. Only `https://generativelanguage.googleapis.com` is accepted.

625737

- If `messages.tts.providers.google.apiKey` is omitted, TTS can reuse `models.providers.google.apiKey` before env fallback.

626738

- `providers.gradium.baseUrl`: override Gradium API base URL (default `https://api.gradium.ai`).

@@ -750,8 +862,9 @@ Slash commands write local overrides to `prefsPath` (default:

750862751863

Stored fields:

752864753-

- `enabled`

865+

- `auto`

754866

- `provider`

867+

- `persona`

755868

- `maxLength` (summary threshold; default 1500 chars)

756869

- `summarize` (default `true`)

757870

@@ -837,6 +950,7 @@ Discord note: `/tts` is a built-in Discord command, so OpenClaw registers

837950

/tts chat default

838951

/tts latest

839952

/tts provider openai

953+

/tts persona alfred

840954

/tts limit 2000

841955

/tts summary off

842956

/tts audio Hello from OpenClaw

@@ -850,6 +964,7 @@ Notes:

850964

- `/tts on` writes the local TTS preference to `always`; `/tts off` writes it to `off`.

851965

- `/tts chat on|off|default` writes a session-scoped auto-TTS override for the current chat.

852966

- Use config when you want `inbound` or `tagged` defaults.

967+

- `/tts persona <id>` writes the local persona preference; `/tts persona off` clears it.

853968

- `limit` and `summary` are stored in local prefs, not the main config.

854969

- `/tts audio` generates a one-off audio reply (does not toggle TTS on).

855970

- `/tts latest` reads the latest assistant reply from the current session transcript and sends it as audio once. It stores only a hash of that reply on the session entry to suppress duplicate voice sends.

@@ -883,6 +998,7 @@ Gateway methods:

883998

- `tts.disable`

884999

- `tts.convert`

8851000

- `tts.setProvider`

1001+

- `tts.setPersona`

8861002

- `tts.providers`

88710038881004

## Related