Watch & compare
Tool design
Different ways to see the same idea. Play one cut at a time, then return to the guide to try it yourself.
Why we recommend Empty ≠ failed
Astra makes the contract failure concrete: an empty search and a swallowed timeout produce the same answer, then an explicit error changes the answer to Unknown. Baseline offers a quieter walkthrough of correct outcomes but leaves the reason for the contract to inference. Fable is a useful companion about bounding log output before it consumes context; it teaches a different mechanism and works best after the main lesson.
Original · 25 sec
Original explanation
Tool design makes available actions clear, bounded, and easy for an agent to use correctly.
Read the video sequence
- 0–6.5s: A bounded incident lookup returns an empty list. The agent receives a successful empty result.
- 7–14.5s: A second lookup times out. The agent receives an explicit error and chooses one retry.
- 15–24s: The retry returns incident INC-42 as a successful nonempty result.
About this cut
Production: Original prototype; model not recorded.
Recommended · Astra · 30 sec
Empty ≠ failed
Preserve the difference between a completed empty lookup and a failed tool call, then enforce a bounded retry in the application.
Read the video sequence
- A read-only search for payments incidents completes successfully with no records. The empty list reaches the agent, which reports zero matches.
- The next lookup times out. A faulty tool adapter replaces the failure with an empty list, so the agent incorrectly reports zero matches; a red cross marks the mistake.
- The tool contract is changed to preserve execution errors. The index still times out, but an explicit error reaches the agent, which now treats the answer as unknown.
- An illustrative application policy waits with pulsing clock cues while App retries left stays at one. At dispatch the counter and its single segment drop to zero. In this scripted case the index recovers and returns INC-42; recovery is not guaranteed.
- The successful result and incident ID reach the agent, which reports the returned record. The scene holds, then fades to the same dark frame as the opening. Finding the record does not establish root cause.
About this cut
Production: gpt-6-astra.
Revision: gpt-6-astra comparative review.
Scripted incident-search scenario; typed results do not guarantee correct model interpretation or backend recovery.
The application enforces the illustrative one-retry budget; tool descriptions and persistent prompts do not enforce permissions or limits.
Partial coverage, authorization and permanent failure are discussed in the guide but not animated.
Audio analysed for peak, waveform timing and spectrum; not physically listened to.
Self-reviewed technical pass; no comparative recommendation or live agent evaluation is claimed.
Alternative · Fable · 30 sec
Bound the result inside the tool
A tool's response shape decides what lands in the agent's context: a raw read_logs dump looks fine on a quiet service, floods the context during the incident so the useful line is truncated away, and a bounded search_logs(service, window, limit) moves the filtering into the tool and returns the few lines and IDs the agent needs.
Read the video sequence
- 0:01–0:06 — Normal case. The agent asks read_logs for web over a one-hour window. Logs returns 12 lines; three representative dots land and the context bar fills a little. The agent displays the neutral receipt '12 lines read', making no claim that there were no incidents.
- 0:08–0:12 — The incident. The agent asks the same tool about 'payments'. Logs works longer and returns 3,214 lines; the raw lines stream to the agent and the context bar fills to a rising scale, turning orange.
- 0:13.7–0:15.1 — Overflow. The context bar turns red and a TRUNCATED badge appears. Later lines are dropped with red crosses, including INC-42 at about 14.4 seconds. In this scripted example the agent then displays '?'; this is not a guarantee of uncertainty after truncation.
- 0:18–0:19 — Redesign. The tool is relabelled from read_logs to search_logs with service, window and limit. At about 19 seconds the context bar drains and the badge disappears.
- 0:20–0:25.2 — Resolution. The agent asks search_logs for payments, one hour, limit 20. The tool sends a filter request to Logs, which returns 3 lines. A green INC-42 chip reaches the agent at about 24.4 seconds with a small context footprint; the displayed answer becomes INC-42 at about 25.2 seconds.
- 0:28.4–0:29.6 — The stage fades to the dark background while the title remains, returning to the opening title-only frame.
About this cut
Production: anthropic/claude-fable-5-1.
Revision: gpt-6-astra comparative review.
Illustrative scenario: the truncation point, the line counts and the agent's '?' answer are an example. A real agent may answer confidently and wrongly after truncation, which is worse and is not shown; truncation limits differ by harness.
A bounded tool reduces what reaches the context; it does not guarantee the incident is found or that the returned lines are the right ones. Evaluate on recorded runs.
Limits must be enforced in the tool's implementation. Tool descriptions, prompt instructions and persistent system prompts do not enforce limits, pagination or permissions.
Pagination cursors, coverage fields and the empty-versus-failed distinction are not shown; the baseline cut covers empty versus failed.
Final audio was checked through decoded peak (-1.8 dBFS), cue-window signal and spectrograms, not listening. The author's earlier onset check is historical; the comparative review does not claim frame-exact perceived synchronization.
A small returned log sample does not establish absence of incidents; the opening reports only the received line count. Pagination and coverage still require an explicit contract.
These animations use sound effects rather than narration. The written guide explains the mechanism and its limits. Model names describe how a cut was made, not a quality ranking.
What the review found
- Astra 03.1–06.8 versus 09.0–12.8: matching empty-list responses lead to matching zero-match conclusions despite different backend states; the false answer is explicitly crossed out. Baseline 03.0–11.3 distinguishes correct outcomes without showing this failure mode.
- Astra 12.8–19.7 keeps the index failed while the contract changes and Unknown reaches the agent. This isolates the interface repair from backend recovery more clearly than baseline’s timeout/recovery sequence at 09.5–20.2.
- Astra 19.7–21.0 now shows an application-labelled discrete retry budget dropping from one to zero at dispatch. Baseline’s RETRY · 1 at 13.6s names an attempt but does not show budget consumption; neither proves that a further attempt would be blocked.
- Fable 11.4–15.1 makes excess output causal: packets fill context, overflow cuts off INC-42 around 14.3–14.4s, and the answer remains unknown. Its bounded replacement at 18.0–25.2 preserves the useful ID with a small context footprint; the other two cuts do not teach output-volume design.
- Fable 05.3–07.7 now reports 12 lines read rather than claiming 0 incidents from a small log sample. Astra’s completed-empty case at 04.6s explicitly starts from an index reporting 0 found; a small payload alone establishes neither completeness nor absence.
- Astra’s 44–56px primary labels and repaired packet clearance at 16.4/24.2s read most clearly at 350px. Baseline’s 20.2–24.0s and Fable’s 25.2–28.4s final holds are generous; Astra resolves at 24.5s and holds to 27.2s. Fable’s rapid dropped-ID beat benefits from replay.