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

# Week of 4 August 2026

> The Test Console arrives, batch retries become a visual timeline, and the Calls list gains Trunk, Outcome and Sentiment filters.

## New features

**The Test Console lets you rehearse a script against simulated callers.** A new **Test Console** item in the sidebar — and a **Test Console** option on the flask button beside any script — lets you build **Personas**: simulated callers with their own name, purpose, description, prompt and voice. Once you have a few, **Run A2A** places automated agent-to-agent test calls against the script, so you can hear how it handles an impatient landlord or a confused first-time caller without ringing a colleague. Runs are capped at 200 calls with a maximum duration per call, only one run per script can be active at a time, and a **Recent runs** list shows what's queued, running and done, with a **Cancel** button. See [Testing a script](/scripts/testing).

**Ask the AI to review your script right now.** The [AI recommendations](/scripts/ai-generation) toolbar gained a **Regenerate** button — tooltip *"Ask the AI to read this script now and suggest improvements"* — that starts a fresh review on demand instead of waiting for the overnight one. A live status line tells you where it's up to (*"Reviewing this script — this takes a minute or two."*) and new suggestions appear without reloading the page. You need to save your changes first, and if nothing has changed since the last review it will tell you so rather than burning a run.

**The AI now flags problem moments directly on the transcript.** Alongside the responses you flag yourself, the review engine adds its own flags anchored to the exact turn where something went wrong. Editing an AI flag's note endorses it, so it feeds into the next round of script recommendations; dismissing it takes it out of consideration while stopping that turn being flagged again. A single turn can carry more than one issue, and each one shows whether you or the AI raised it. See [Call details](/calls/call-details).

**Retry policy is now a visual timeline instead of a set of numbers.** On a batch's [Calling rules](/batches/calling-rules), the **Retry policy** card gives each outcome — **Voicemail**, **No answer** and **Line busy** — its own timeline. You click milestones (**1 hour**, **2 hours**, **4 hours**, **8 hours**, **1 day**, **2 days**, **3 days**, **7 days**) to add or remove a retry, and each point is the delay after the previous attempt. Each outcome has its own **Active** switch, and the old **Transient error** row has been removed.

**Reschedule a call when the contact asks you to ring back.** A new **Contact is busy, callback requested** switch — *"Reschedules another call at the contact's requested time"* — books the follow-up for the time the contact actually asked for, in their own local time, in the same batch. Underneath it, **Cancel pending retries when contact calls back inbound** stops a retry dialling out to someone who has already returned the call. See [Calling rules](/batches/calling-rules).

**Inbound calls now cancel pending outbound retries.** If a contact rings you back before a queued retry goes out, that retry is cancelled rather than dialled, and no new retry is created for the attempt they responded to. Calls cancelled this way are marked as such in the [queue](/batches/queue), so it's clear why they never went out.

**The batch Summary shows a breakdown of call outcomes.** You can now see the share of each outcome across the batch and how it shifts over time, using your script's own custom outcomes where you've defined them. Outbound outcomes include **Appointment booked**, **Busy — callback requested**, **Not interested**, **Wrong number**, **No answer** and **Voicemail**; inbound ones include **Inquiry answered**, **Message taken** and **Transferred to human**. Scheduled, queued, cancelled and in-progress calls are left out of the counts. See [Batch analytics](/batches/analytics).

**New Trunk, Outcome and Sentiment filters on the Calls list, plus call tags.** You can now filter [call history](/calls/history) by the trunk that carried the call, by the post-call outcome, and by sentiment score (**is**, **greater than**, **less than**), and stack several values on the same field to match any of them. A new **Detailed Status** filter shows exactly where a live call is — **Dialling**, **Voicemail**, **Handoff Dialling**, **Handoff Connecting**, **Handoff Merged** — and calls can now carry [tags](/contacts/tags) from the Metadata section of the call. **Cost (cents)** and **Success Evaluation** have been retired.

**Scripts can tell why a handoff failed, not just that it did.** A [Live Handoff](/scripts/live-handoff) now records `handoff.attempts`, `handoff.connected` and `handoff.last.status` — one of `connected`, `rejected`, `busy`, `timeout`, `voicemail` or `routing_unavailable` — along with the reason, how long the attempt took and which endpoint was tried. You can branch on these in conditions, so a call that was rejected outright in five seconds can be handled differently from one that hit a genuinely busy queue.

**The assistant can press and read phone keypad tones.** Two new tools let the assistant send digits down the line to navigate another company's phone menu, and capture digits the far end presses into a variable, so a caller can key in a reference number or date of birth instead of saying it out loud. Both report success or failure so a script can take a different route if the keypad step doesn't work. See [DTMF Tools](/tools/dtmf).

**Web callers are now recognised as individuals.** Each web caller is identified separately, so a new caller gets their own contact record and a returning one is matched back to it — and if the web link carries a contact ID, that contact is used. See [Web calls](/calls/web-calls).

## Improvements

**Opt-outs are now account-level records that survive contact deletion.** An opt-out is stored against the phone number for your whole account rather than as a flag on one contact, so the same number stays suppressed no matter which list or contact it appears under — and it stays suppressed even if the contact record is deleted. Opt-outs carry a reason and a source, can be added without a call, and can be withdrawn. A call that never connected never produces one. See [Opt-outs](/contacts/opt-outs).

**Batch screening is stricter and easier to reason about.** Every queued call waits until its [screening gates](/batches/screening-gates) have been checked before it can dial, and changing a batch's gates sends already-screened contacts back through the checks against the new settings. Each gate — including **DNCR** — is controlled purely by its per-batch switch. Requeued callbacks are exempt from the **Previously called** gate, since they're calls the contact asked for.

**Batch pages consolidated to four tabs.** A batch now shows **Summary**, **Settings**, **Queue** and **Data Collection** (the last only once the batch has run). The old separate info, allocation, overview and schedule tabs all lead into **Settings**, and analytics leads into **Summary**. See [Batches](/batches/overview).

**The batch Summary loads every call, not just the first page.** The call table now scrolls on indefinitely with a **Load more** control as a backstop, and the objectives panel gained an **All calls** / **Answered** toggle so success rates aren't dragged down by calls nobody picked up. See [Batch analytics](/batches/analytics).

**Live sentiment and outcome are now proper fields on the call.** Sentiment is written to the call record on every caller turn, so a live view can show mood as the conversation happens rather than only after it ends, and both sentiment and outcome can be filtered and sorted on. See [Live monitoring](/calls/live-monitoring).

**Faster answering on the first call after a script edit.** The assistant's automatically generated keyword list is prepared in the background and applied from the next step onwards, so the first call after an edit answers straight away.
