diff --git a/fern/assets/styles.css b/fern/assets/styles.css
index 605bd6104..c6439b79d 100644
--- a/fern/assets/styles.css
+++ b/fern/assets/styles.css
@@ -383,4 +383,48 @@ html.dark button[data-highlighted] .fern-api-property-meta {
:is(.dark) .subscribe-form-message.error {
color: #fca5a5;
background-color: #7f1d1d;
-}
\ No newline at end of file
+}
+
+/* GPT-Live illustrations follow the docs theme and use a compact drawing on phones. */
+.gpt-live-illustration {
+ max-width: 640px;
+ margin: 2rem auto;
+}
+
+.gpt-live-illustration img {
+ display: none;
+ width: 100%;
+ height: auto;
+ margin: 0;
+}
+
+.gpt-live-illustration .gpt-live-art-light {
+ display: block;
+}
+
+.dark .gpt-live-illustration .gpt-live-art-light {
+ display: none;
+}
+
+.dark .gpt-live-illustration .gpt-live-art-dark {
+ display: block;
+}
+
+@media (max-width: 540px) {
+ .gpt-live-illustration .gpt-live-art-light,
+ .dark .gpt-live-illustration .gpt-live-art-dark {
+ display: none;
+ }
+
+ .gpt-live-illustration .gpt-live-art-light-compact {
+ display: block;
+ }
+
+ .dark .gpt-live-illustration .gpt-live-art-light-compact {
+ display: none;
+ }
+
+ .dark .gpt-live-illustration .gpt-live-art-dark-compact {
+ display: block;
+ }
+}
diff --git a/fern/gpt-live/design.mdx b/fern/gpt-live/design.mdx
index 0c135c119..e4aed8419 100644
--- a/fern/gpt-live/design.mdx
+++ b/fern/gpt-live/design.mdx
@@ -88,6 +88,13 @@ Start each piece of work as soon as its inputs are known, and use the conversati
- A time can be chosen only after the open times are known.
- A booking can be announced only after the booking tool confirms it.
+
+
+
+
+
+
+
The useful test for any question during a lookup is whether the outstanding work still answers the caller's need after they reply. In this example, the lookup tool returns every open time for the requested day and location. So if the caller says "afternoon, ideally after three" while that lookup runs, the result still covers it, and the assistant can filter. If the caller says "Actually, can we do Riverside instead?", the running lookup no longer answers the request, and a new one is needed.
That's why the example lookup returns the whole day rather than taking a time-of-day argument. When you design your own tools, return enough to answer the likely follow-up questions without another round trip, as long as the result stays short.
@@ -293,6 +300,13 @@ Existing squads and assistant handoffs aren't supported with GPT-Live. See [Migr
The speaker hears the caller's voice, but the reasoner works from the transcript, and a transcript can contain mistakes. A name, reference number, or date that's slightly wrong in the transcript becomes a wrong tool argument.
+
+
+
+
+
+
+
For anything the task depends on, have the assistant read it back before acting:
> **Caller:** It's under Siobhan.
@@ -341,6 +355,13 @@ what they say.
A consistent personality doesn't require a constant pace.
+
+
+
+
+
+
+
| Moment | Delivery to aim for |
| --- | --- |
| The caller knows what they want | Short questions and concise answers |
diff --git a/fern/gpt-live/migrate.mdx b/fern/gpt-live/migrate.mdx
index 01722eb78..07bf26ea5 100644
--- a/fern/gpt-live/migrate.mdx
+++ b/fern/gpt-live/migrate.mdx
@@ -74,6 +74,13 @@ You can also migrate by hand through the API: create a new assistant with the GP
A classic assistant has one prompt that covers both how to talk and how to do the work. GPT-Live has two. The speaker prompt shapes the conversation and says when to delegate. The reasoner prompt holds the procedures and tool rules. Neither sees the other, so rules that affect both belong in both, worded for each role.
+
+
+
+
+
+
+
For example, a classic prompt for an appointment assistant at Example Service Studio, a fictional business, might read:
```text title="Before: one classic system prompt"
diff --git a/fern/gpt-live/testing.mdx b/fern/gpt-live/testing.mdx
index 820ec7f76..6d2dbbb65 100644
--- a/fern/gpt-live/testing.mdx
+++ b/fern/gpt-live/testing.mdx
@@ -100,6 +100,13 @@ Callers notice two kinds of delay, and they have different causes:
Measure them separately. The call's messages and your service's logs have timestamps for delegations and tool calls, and the recording shows when the caller heard each part.
+
+
+
+
+
+
+
When the task takes too long, try these, one at a time, and check that the outcome is still correct after each change:
| Cause | What to try |
diff --git a/fern/gpt-live/tools.mdx b/fern/gpt-live/tools.mdx
index 87e25df3f..ec5d5f07e 100644
--- a/fern/gpt-live/tools.mdx
+++ b/fern/gpt-live/tools.mdx
@@ -30,6 +30,13 @@ A tool's inputs and results shape the conversation as much as the prompts do.
**Return enough to answer the likely follow-up.** The example lookup takes a service, location, and date, and returns every open time for that day. If the caller adds "ideally after three" while it runs, the result still answers the request, and the assistant can filter it without another lookup. A different day or location changes the request, so it needs a new lookup. Keep results short even when they're complete.
+
+
+
+
+
+
+
**Echo the request details.** Include the date and location in each result. When the caller changes their mind during a lookup, the earlier result may still come back, and the details make it easy to recognize as out of date.
**Say what didn't happen, as well as what did.** "Availability only. Nothing has been booked" helps the assistant avoid overstating a lookup.
diff --git a/fern/static/images/gpt-live/dependency-cairn-dark-compact.svg b/fern/static/images/gpt-live/dependency-cairn-dark-compact.svg
new file mode 100644
index 000000000..8f395c868
--- /dev/null
+++ b/fern/static/images/gpt-live/dependency-cairn-dark-compact.svg
@@ -0,0 +1 @@
+
diff --git a/fern/static/images/gpt-live/dependency-cairn-dark.svg b/fern/static/images/gpt-live/dependency-cairn-dark.svg
new file mode 100644
index 000000000..81238fe8c
--- /dev/null
+++ b/fern/static/images/gpt-live/dependency-cairn-dark.svg
@@ -0,0 +1 @@
+
diff --git a/fern/static/images/gpt-live/dependency-cairn-light-compact.svg b/fern/static/images/gpt-live/dependency-cairn-light-compact.svg
new file mode 100644
index 000000000..76d2ed6ca
--- /dev/null
+++ b/fern/static/images/gpt-live/dependency-cairn-light-compact.svg
@@ -0,0 +1 @@
+
diff --git a/fern/static/images/gpt-live/dependency-cairn-light.svg b/fern/static/images/gpt-live/dependency-cairn-light.svg
new file mode 100644
index 000000000..532e36cd8
--- /dev/null
+++ b/fern/static/images/gpt-live/dependency-cairn-light.svg
@@ -0,0 +1 @@
+
diff --git a/fern/static/images/gpt-live/name-prism-dark-compact.svg b/fern/static/images/gpt-live/name-prism-dark-compact.svg
new file mode 100644
index 000000000..7f43e7918
--- /dev/null
+++ b/fern/static/images/gpt-live/name-prism-dark-compact.svg
@@ -0,0 +1 @@
+
diff --git a/fern/static/images/gpt-live/name-prism-dark.svg b/fern/static/images/gpt-live/name-prism-dark.svg
new file mode 100644
index 000000000..a45a8eca4
--- /dev/null
+++ b/fern/static/images/gpt-live/name-prism-dark.svg
@@ -0,0 +1 @@
+
diff --git a/fern/static/images/gpt-live/name-prism-light-compact.svg b/fern/static/images/gpt-live/name-prism-light-compact.svg
new file mode 100644
index 000000000..4c8a88f21
--- /dev/null
+++ b/fern/static/images/gpt-live/name-prism-light-compact.svg
@@ -0,0 +1 @@
+
diff --git a/fern/static/images/gpt-live/name-prism-light.svg b/fern/static/images/gpt-live/name-prism-light.svg
new file mode 100644
index 000000000..97d232ff4
--- /dev/null
+++ b/fern/static/images/gpt-live/name-prism-light.svg
@@ -0,0 +1 @@
+
diff --git a/fern/static/images/gpt-live/pacing-dunes-dark-compact.svg b/fern/static/images/gpt-live/pacing-dunes-dark-compact.svg
new file mode 100644
index 000000000..40716093a
--- /dev/null
+++ b/fern/static/images/gpt-live/pacing-dunes-dark-compact.svg
@@ -0,0 +1 @@
+
diff --git a/fern/static/images/gpt-live/pacing-dunes-dark.svg b/fern/static/images/gpt-live/pacing-dunes-dark.svg
new file mode 100644
index 000000000..30ae0706c
--- /dev/null
+++ b/fern/static/images/gpt-live/pacing-dunes-dark.svg
@@ -0,0 +1 @@
+
diff --git a/fern/static/images/gpt-live/pacing-dunes-light-compact.svg b/fern/static/images/gpt-live/pacing-dunes-light-compact.svg
new file mode 100644
index 000000000..417841951
--- /dev/null
+++ b/fern/static/images/gpt-live/pacing-dunes-light-compact.svg
@@ -0,0 +1 @@
+
diff --git a/fern/static/images/gpt-live/pacing-dunes-light.svg b/fern/static/images/gpt-live/pacing-dunes-light.svg
new file mode 100644
index 000000000..b4206ddb7
--- /dev/null
+++ b/fern/static/images/gpt-live/pacing-dunes-light.svg
@@ -0,0 +1 @@
+
diff --git a/fern/static/images/gpt-live/split-prompt-dark-compact.svg b/fern/static/images/gpt-live/split-prompt-dark-compact.svg
new file mode 100644
index 000000000..82226a6f8
--- /dev/null
+++ b/fern/static/images/gpt-live/split-prompt-dark-compact.svg
@@ -0,0 +1 @@
+
diff --git a/fern/static/images/gpt-live/split-prompt-dark.svg b/fern/static/images/gpt-live/split-prompt-dark.svg
new file mode 100644
index 000000000..a89392386
--- /dev/null
+++ b/fern/static/images/gpt-live/split-prompt-dark.svg
@@ -0,0 +1 @@
+
diff --git a/fern/static/images/gpt-live/split-prompt-light-compact.svg b/fern/static/images/gpt-live/split-prompt-light-compact.svg
new file mode 100644
index 000000000..a0969ef10
--- /dev/null
+++ b/fern/static/images/gpt-live/split-prompt-light-compact.svg
@@ -0,0 +1 @@
+
diff --git a/fern/static/images/gpt-live/split-prompt-light.svg b/fern/static/images/gpt-live/split-prompt-light.svg
new file mode 100644
index 000000000..b78a75f04
--- /dev/null
+++ b/fern/static/images/gpt-live/split-prompt-light.svg
@@ -0,0 +1 @@
+
diff --git a/fern/static/images/gpt-live/two-delays-dark-compact.svg b/fern/static/images/gpt-live/two-delays-dark-compact.svg
new file mode 100644
index 000000000..8b4889f94
--- /dev/null
+++ b/fern/static/images/gpt-live/two-delays-dark-compact.svg
@@ -0,0 +1 @@
+
diff --git a/fern/static/images/gpt-live/two-delays-dark.svg b/fern/static/images/gpt-live/two-delays-dark.svg
new file mode 100644
index 000000000..83db98c25
--- /dev/null
+++ b/fern/static/images/gpt-live/two-delays-dark.svg
@@ -0,0 +1 @@
+
diff --git a/fern/static/images/gpt-live/two-delays-light-compact.svg b/fern/static/images/gpt-live/two-delays-light-compact.svg
new file mode 100644
index 000000000..0f2d0c06e
--- /dev/null
+++ b/fern/static/images/gpt-live/two-delays-light-compact.svg
@@ -0,0 +1 @@
+
diff --git a/fern/static/images/gpt-live/two-delays-light.svg b/fern/static/images/gpt-live/two-delays-light.svg
new file mode 100644
index 000000000..4a6ff46a5
--- /dev/null
+++ b/fern/static/images/gpt-live/two-delays-light.svg
@@ -0,0 +1 @@
+
diff --git a/fern/static/images/gpt-live/whole-day-dark-compact.svg b/fern/static/images/gpt-live/whole-day-dark-compact.svg
new file mode 100644
index 000000000..6a96d1f35
--- /dev/null
+++ b/fern/static/images/gpt-live/whole-day-dark-compact.svg
@@ -0,0 +1 @@
+
diff --git a/fern/static/images/gpt-live/whole-day-dark.svg b/fern/static/images/gpt-live/whole-day-dark.svg
new file mode 100644
index 000000000..7ce0cc780
--- /dev/null
+++ b/fern/static/images/gpt-live/whole-day-dark.svg
@@ -0,0 +1 @@
+
diff --git a/fern/static/images/gpt-live/whole-day-light-compact.svg b/fern/static/images/gpt-live/whole-day-light-compact.svg
new file mode 100644
index 000000000..b26d02604
--- /dev/null
+++ b/fern/static/images/gpt-live/whole-day-light-compact.svg
@@ -0,0 +1 @@
+
diff --git a/fern/static/images/gpt-live/whole-day-light.svg b/fern/static/images/gpt-live/whole-day-light.svg
new file mode 100644
index 000000000..c9ddf1ef7
--- /dev/null
+++ b/fern/static/images/gpt-live/whole-day-light.svg
@@ -0,0 +1 @@
+