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.
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.
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 isDECKTALK_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 yourscript.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-voicewrites 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_pathindecktalk.toml, or pointPLAYWRIGHT_BROWSERS_PATHat 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_FFMPEGandDECKTALK_FFPROBEname 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 servebinds to the loopback address and takes--hostand--port.
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.