Field reference
Provider apiKey fields, including personas.<id>.providers.<provider>.apiKey,
can be raw strings or SecretRefs in global, per-agent, and Discord voice TTS config.
During cold Gateway startup, an unavailable TTS SecretRef marks the built-in TTS capability
configured-unavailable instead of stopping the Gateway. tts.speak then returns
UNAVAILABLE with reason SECRET_SURFACE_UNAVAILABLE, and no provider request is
sent. Status and doctor list the degraded TTS owner and its config paths. The
explicit refs remain in the runtime snapshot, so environment or profile
credentials cannot silently select a different account. Reloads and config-write
preflight apply the owner-aware degradation policy: an unchanged eligible TTS
owner may keep its last-known-good credentials as stale, while a new or changed
failure becomes cold without blocking healthy owners. Structurally invalid refs
and resolved values still fail startup or reject the update.
Top-level tts.*
auto "off" | "always" | "inbound" | "tagged"
Auto-TTS mode. `inbound` only sends audio after an inbound voice message; `tagged` only sends audio when the reply includes `[[tts:...]]` directives or a `[[tts:text]]` block.
enabled boolean
Legacy toggle. `apus doctor --fix` migrates this to `auto`.
mode "final" | "all"
`"all"` includes tool/block replies in addition to final replies.
provider string
Speech provider id. When unset, Apus uses the first configured provider in registry auto-select order. Legacy `provider: "edge"` is rewritten to `"microsoft"` by `apus doctor --fix`.
persona string
Active persona id from `personas`. Normalized to lowercase.
<ParamField path="personas.<id>" type="object">
Stable spoken identity. Fields: `label`, `description`, `provider`, `fallbackPolicy`, `providers.<provider>`. See [Personas](/tools/tts/personas#personas).
summaryModel string
Cheap model for auto-summary; defaults to `agents.defaults.model.primary`. Accepts `provider/model` or a configured model alias.
modelOverrides object
Allow the model to emit TTS directives. `enabled` defaults to `true`; `allowProvider` defaults to `false`.
<ParamField path="providers.<id>" type="object">
Provider-owned settings keyed by speech provider id. Legacy direct blocks (`tts.openai`, `.elevenlabs`, `.microsoft`, `.edge`) are rewritten by `apus doctor --fix`; commit only `tts.providers.<id>`.