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

# What leaves your machine

> Every host DeckTalk contacts, what each request carries, and how to build with no network at all.

This page is the whole list. DeckTalk contacts the hosts below and no others, and it sends no
telemetry, no usage report and no crash report anywhere. A host that is not named on this page is a
host DeckTalk does not contact.

Hand this page to a reviewer who has to approve DeckTalk on a managed machine. The two facts that
decide most reviews are that a cloud speech service receives your script, and that the first run
downloads a browser and a media tool.

## Requests that carry your content

These requests carry text from your project. Every one of them is made only by a command you run on
purpose, and every one of them needs an API key that you supply.

| Host              | Request                    | Sent by                                                  | What DeckTalk sends                                                                                                                                                                                                                                                                                                                                  |
| ----------------- | -------------------------- | -------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| api.elevenlabs.io | Narration                  | `decktalk narrate`, and `decktalk build` on a voiced run | The section's spoken text, the voice id, the model name and the audio format, together with up to `context_chars` characters of the previous section and up to `context_chars` of the next section as speaking context. The default for `context_chars` is 1500 characters, and `context_chars = 0` keeps the neighbouring sections on your machine. |
| api.elevenlabs.io | Sound effects and ambience | `decktalk soundscape`                                    | The prompt string written in a `[soundscape.ambience]` or `[soundscape.sfx.<name>]` table, the length you asked for and the audio format. No part of `script.md` is sent.                                                                                                                                                                            |
| api.elevenlabs.io | Music                      | `decktalk soundscape`                                    | The prompt string written in the `[soundscape.music]` table, the length you asked for and the audio format. No part of `script.md` is sent.                                                                                                                                                                                                          |

**Narration to `api.elevenlabs.io`.** The request carries the value of `ELEVENLABS_API_KEY` in a header. Rebuilding one section still sends that section's neighbours, because the voice reads them for intonation. A run with `--no-voice` sends nothing at all.

**Sound effects and ambience to `api.elevenlabs.io`.** The request carries the value of `ELEVENLABS_API_KEY` in a header. The prompt is text you wrote in `decktalk.toml`, so you decide what it describes.

**Music to `api.elevenlabs.io`.** The request carries the value of `ELEVENLABS_API_KEY` in a header. The music file is generated once and then reused from `build/`.

### Reading a request before you make it

`decktalk narrate --dry-run --json` plans a voiced run with no API key and no request. It reports
the sections it would voice, their character counts and the host, so a reviewer can read exactly
what would be sent before anything is sent. `decktalk build` stops at the same point and names the
host and the character count before it spends a credit.

Set `context_chars = 0` under `[elevenlabs]` when the neighbouring sections must stay on the
machine. Each section is then sent on its own, with no surrounding text.

## One-time downloads

`decktalk install` fetches the tools a recording needs, once per machine. These requests carry
nothing from your project, and after they succeed a build without voice needs no network at all.

| Host                   | What it holds                              | Fetched by         | What DeckTalk sends                                                  |
| ---------------------- | ------------------------------------------ | ------------------ | -------------------------------------------------------------------- |
| cdn.playwright.dev     | Headless Chromium                          | `decktalk install` | A download request for the pinned browser build, and nothing else.   |
| github.com             | ffmpeg and ffprobe on Linux and on Windows | `decktalk install` | A download request for one pinned release archive, and nothing else. |
| evermeet.cx            | ffmpeg and ffprobe on an Intel Mac         | `decktalk install` | A download request for two pinned archives, and nothing else.        |
| ffmpeg.martin-riedl.de | ffmpeg and ffprobe on an Apple silicon Mac | `decktalk install` | A download request for two pinned archives, and nothing else.        |

**`cdn.playwright.dev`.** This is Playwright's own download host. `PLAYWRIGHT_DOWNLOAD_HOST` points it at a mirror, and `[record] browser_path` skips the download by recording with a browser the machine already has.

**`github.com`.** GitHub answers a release download with a redirect to its asset host, so a proxy rule needs both. The archive is checked against a pinned SHA-256 digest and discarded when the digest does not match.

**`evermeet.cx`.** The archives are checked against pinned SHA-256 digests and discarded when a digest does not match.

**`ffmpeg.martin-riedl.de`.** The archives are checked against pinned SHA-256 digests and discarded when a digest does not match.

## What never leaves

DeckTalk has no telemetry. It reports no usage, no errors and no project contents to its authors,
and it has no update check. Nothing about a build is sent anywhere unless a command in the first
table above sends it.

No DeckTalk environment variable has its value printed, logged or placed in a request body. The one
exception is `DECKTALK_ALLOW_ANY_API_BASE`, which is a switch and never a secret. An error message
that quotes a reply from a service has every credential in it replaced before the quote is cut to
length.

KaTeX ships inside the wheel, so an equation needs no download and no content delivery network.

## The agent is a second service

The six DeckTalk skills run inside your coding agent. When you ask an agent to write a script,
place cues or fix a finding, the agent puts your `script.md`, your `decktalk.toml`, your `cues.json`
and the JSON that DeckTalk prints in front of whatever model that agent runs. That model is a cloud
service of its own, under its vendor's terms and not under DeckTalk's, and a policy review that
covers the speech service should cover it too. Running DeckTalk from the command line alone contacts
no model.

## On a managed machine

A laptop with an intercepting proxy, no administrator rights and a policy review needs four things,
and none of them is a DeckTalk feature you have to wait for.

* **Build with no voice and no key.** `decktalk build --no-voice` writes placeholder narration and
  makes a complete video. It contacts no service, so you can show a finished internal video before
  any approval comes back.
* **Use the browser the machine already has.** Set `[record] browser_path` in `decktalk.toml`, or
  point `PLAYWRIGHT_BROWSERS_PATH` at a location your administrators have already filled. The
  pinned build is the reference, and a managed browser is supported and unverified.
* **Use the ffmpeg the machine already has.** `DECKTALK_FFMPEG` and `DECKTALK_FFPROBE` name
  executables directly, and a build that finds them downloads nothing from the second table.
* **Ask the proxy to leave the local origin alone.** Pages record over a virtual origin on the
  loopback address, so the proxy rules need a bypass for it. `decktalk serve` binds to the loopback
  address and takes `--host` and `--port`.

[Requirements and costs](/requirements) has the full managed-machine section, with the package index
mirror, `PLAYWRIGHT_BROWSERS_PATH`, `DECKTALK_FFMPEG` and `DECKTALK_CACHE_DIR`.

`decktalk doctor` reports what is installed and which browser and media build a run would use,
without fetching anything, and `decktalk doctor --report` prints a redacted block you can paste into
a ticket.
