> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kugelaudio.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Prompting overview

> How to shape speech output through text — what's supported, writing tips, and what to avoid.

KugelAudio generates speech directly from text. There is no voice direction
layer — you shape the output by how you write the input. This section covers
every mechanism available to control pronunciation, pacing, and emphasis.

## Supported controls at a glance

| Control                  | Syntax                                                            | Page                                            |
| ------------------------ | ----------------------------------------------------------------- | ----------------------------------------------- |
| **Pauses**               | `<break time="300ms"/>`, `<break strength="medium"/>`, `<break/>` | [Breaks](/prompting/breaks)                     |
| **Speed**                | `speed` request parameter (`0.8`–`1.2`, whole request)            | [Speed](/prompting/speed)                       |
| **Spell out characters** | `<spell>text</spell>`, `<spell group="2">…</spell>`               | [Spell tags](/prompting/spell)                  |
| **Custom pronunciation** | Inline IPA — `/ˈkuːɡl̩/` — or pronunciation dictionaries          | [Pronunciation & IPA](/prompting/pronunciation) |
| **Pacing & intonation**  | Plain punctuation — see below                                     | this page                                       |

`<break>` and `<spell>` are the **only** tags processed in request text.
Everything else — including SSML — is stripped before synthesis; see
[Unsupported tags](#unsupported-tags).

## Punctuation as pacing

The model respects natural punctuation cues — no special tags needed:

| Technique         | Effect                                    |
| ----------------- | ----------------------------------------- |
| `,` comma         | Brief pause between clauses               |
| `.` period        | Sentence-end pause, falling intonation    |
| `…` ellipsis      | Longer trailing pause                     |
| `—` em dash       | Abrupt pause / interruption feel          |
| `?` question mark | Rising intonation                         |
| `!` exclamation   | Energetic delivery                        |
| `\n` newline      | Paragraph-level pause (similar to period) |

Punctuation is the recommended way to add natural rhythm; reach for
[`<break>` tags](/prompting/breaks) when you need an explicit silence of a
specific length (e.g. before a verification code).

## Writing tips

* **Strip markdown before TTS.** Asterisks, hashes, and bullet characters are
  read literally by the model.
* **No emoji.** They are read out or garbled.
* **Write numbers as digits** when they should be normalized ("You have 3
  messages") and always set `language` — see
  [Text processing](/features/text-processing).
* **Keep sentences short and end them with punctuation** — this also helps
  the streaming chunker start generation earlier
  ([why](/streaming/chunking-and-latency)).
* **`!`, ALL-CAPS, and `?!` are prosody cues** — the model will deliver them
  energetically. Use deliberately.

## LLM system prompt pattern

When an LLM generates text that feeds directly into TTS, add instructions so
it uses the supported controls correctly:

```
You are a voice assistant. Format your responses for text-to-speech output:

- For email addresses and codes, use <spell> tags:
    "Your code is <spell>ABC-123</spell>"
- For a deliberate pause, use a break tag:
    "Your total is <break time="400ms"/> forty-two euros."
- Do NOT use markdown formatting (**, *, #, -, bullet points) — it will be read aloud literally.
- Do NOT use emoji.
- Do NOT use SSML tags other than <spell> and <break> — they are ignored.
- Keep sentences short. End with punctuation.
- Write numbers as digits when they should be normalized: "You have 3 messages."
```

For full voice-agent prompt design (turn-taking, error recovery, tool-call
acknowledgements), see [Voice Agent Prompting](/guides/voice-prompting).

## Unsupported tags

KugelAudio processes `<spell>`, `<break>`, and `<prosody rate>`. All other
tags are **silently stripped** — the inner text is kept but the tag itself
has no effect.

| Tag / Attribute                          | Status                         | Alternative                                                                                               |
| ---------------------------------------- | ------------------------------ | --------------------------------------------------------------------------------------------------------- |
| `<speak>` wrapper                        | Stripped                       | Omit — plain text is assumed                                                                              |
| `<prosody rate="...">`                   | **Supported** — per-span speed | See [Speed](/prompting/speed#per-span-speed-with-prosody-rate)                                            |
| `<prosody pitch="...">`                  | Rejected (400)                 | No pitch control available                                                                                |
| `<prosody volume="...">`                 | Rejected (400)                 | No volume control available                                                                               |
| `<emphasis>`                             | Stripped                       | Rephrase text for natural emphasis                                                                        |
| `<say-as interpret-as="...">`            | Stripped                       | Use `<spell>` for characters, [normalization](/features/text-processing) for numbers                      |
| `<sub alias="...">`                      | Stripped                       | Write the spoken form directly, or use a [dictionary](/features/dictionaries)                             |
| `<phoneme>`                              | Stripped                       | Write [inline IPA between slashes](/prompting/pronunciation#inline-ipa-in-the-request-text) (`/ˈkuːɡl̩/`) |
| `<audio>`, `<p>`, `<s>`, `<w>`, `<lang>` | Stripped                       | —                                                                                                         |

<Warning>
  Unknown tags are not validated at request time. Passing unsupported tags
  will not return an error — the tags are removed and the remaining text is
  synthesized. Test your output when migrating from a full-SSML provider like
  Google Cloud TTS, Amazon Polly, or Microsoft Azure.
</Warning>

## Next steps

<CardGroup cols={2}>
  <Card title="Breaks" icon="pause" href="/prompting/breaks">
    Explicit pauses with break tags
  </Card>

  <Card title="Speed" icon="gauge" href="/prompting/speed">
    The global speed parameter
  </Card>

  <Card title="Spell tags" icon="font" href="/prompting/spell">
    Character-by-character pronunciation
  </Card>

  <Card title="Pronunciation & IPA" icon="language" href="/prompting/pronunciation">
    Fix how specific words are spoken
  </Card>
</CardGroup>
