Five-minute demo: CT Copilot on two recorded calls
The M1a demo on the deployed Worker. It replays one onboarding call with its recording, then one customer success call, and stops on the moments the engine is meant to catch. Every utterance number and time below comes from eval run final-20260927 (policy version 4 for both scenarios; both calls passed L4 in that run, on the deployed Worker at 2f03062). The demo check proves each one against that run's report and the call's transcript before this page is published.
Setup (about 20 s, before the clock starts)
- Open https://jev-copilot.currencytransfer.workers.dev in a fresh window.
- Sign in at the Cloudflare Access page with the allowed email. The Access session lasts 24 hours, so signing in shortly before the demo avoids a login prompt mid-demo.
- In the call picker, choose Call 3339895706 (Onboarding call, "call recording").
- Leave it on the Live view for the first rows: this is what a rep would see. Switch to Review view at
i 15(link in the top bar). Every#ibelow is the number in the review view's transcript and panels. - Set speed to 1× and turn the sound up: the recording drives the clock at 1× and 2×. Above 4× the recording is muted and the player's clock source reads "virtual".
How to read the tables: [mm:ss] is the player clock at the utterance (the call's own time, not time into the demo); utterance i is #i in the review view; the tags in backticks (card:…, must_say:…, concern:…) are the events the report records at that i, and are what the demo check verifies.
Pacing: 1× with sound until 00:50, 5× to 04:15, 2× through the concern episode to 05:40, then 5× to the end. The customer success call runs at 10×. That is about 3 minutes for the first call and 1 minute 40 for the second, with pauses at each row.
Onboarding-strong: call 3339895706
A new client in Saudi Arabia sending New Zealand dollars home once a month. The rep covers the transfer, the documents and the booking rule; the client raises a worry about tax residency and one about safety.
| [mm:ss] | utterance i | what happens on screen | what to say |
|---|---|---|---|
| [00:16] | i 0 | Press play. The plan opens on its first item, card:open_with_agenda, before anyone has said much. |
"The plan starts before the rep says a word: set the agenda first." |
| [00:32] | i 5 | The current item moves to card:ask_about_the_transfer as the rep says they want to understand the client's transfers. |
"It follows the rep: once the rep asks, the next thing worth doing is discovery." |
| [00:44] | i 8 | The client explains how they heard of us, what they send and how they send it today. Four facts fill at once: persisted:pair_known persisted:frequency_known persisted:beneficiary_known persisted:current_provider_known. |
"One long client turn, four facts captured. They stay for the rest of the call." |
| [01:51] | i 15 | Switch to Review view. What the rep saw shows card:show_the_rate_against_mid_market after the client names the amount and the rep brings up the 3–4 percent the bank takes. |
"From here on we're in the review view, the audit side. Every claim links back to a numbered line." |
| [02:13] | i 19 | The client says sending money home is "heartbreaking" at today's rates; the item becomes card:handle_rate_objection. |
"That's rate pressure in the client's own words. The card changes on the client's turn, not the rep's." |
| [02:22] | i 30 | The Concerns panel opens its first row, concern:fees@30, "Client is comparing our fees with their bank": the banks' hidden costs. |
"A concern is its own thing: raised here, and it closes when the client accepts an answer or it stops coming up." |
| [04:19] | i 45 | Slow to 2×. The client says they are getting the proof of address from HR today: persisted:docs_status_known, and the current item becomes card:close_the_document_gap. |
"The client just told us where the documents stand, so the plan points at the gap." |
| [04:39] | i 46 | The rep explains that compliance is picky about proof of address. The plan ticks must_say:said_docs_needed, locked, with the lock icon in Signals. |
"First must-say: the documents we need. It's locked now; it can't come undone later in the call." |
| [05:08] | i 54 | The tax-residency worry: "a little bit worried about that just in terms of being a tax resident." concern:jurisdiction@54 opens and the current item becomes card:check_serviceability_first. |
"This is the moment the human coach picked out of this call too. The copilot catches it on the same line." |
| [05:27] | i 58 | It closed after two decisions and the client raises it again ("I'm just more hesitant"): a second episode, concern:jurisdiction@58. The Concerns panel shows it raised again at #62 and closed at #64. |
"Point at the row: raised at 58, again at 62, closed at 64 after the rep talks it through." |
| [06:43] | i 71 | Back to 5×. The client plans a small practice transfer before the fifteenth: persisted:timing_known. |
"Timing is a fact too. The plan doesn't ask for it again." |
| [07:44] | i 89 | The rep warns the client not to book until they're confident, because a booking is binding: must_say:said_booking_is_binding locks. In Signals the quote-lifetime signal sits unsure (dashed lamp), unsure:said_quote_lifetime, never lit. |
"Second must-say locked. And an honest unsure: Jev can't tell whether the rep covered how long a quote lasts, so the plan doesn't count it." |
| [08:32] | i 97 | "I'm more conservative… is it going to be safe": concern:safety@97 opens and the item becomes card:explain_who_holds_the_money. |
"Late in the call, a safety worry. The plan brings back the point about who holds the money." |
| [09:36] | i 114 | "Be uploaded today. Yes." persisted:next_step_agreed. Pause. The plan shows two of seven must-says done. |
"Agreed next step at the end, and a completeness of 2 of 7. That's also the label a trainer gave this call." |
Customer success-strong: call 3303259297
A client can't allocate funds to a recipient. The rep takes the problem on, walks through it and fixes it on the call. This call has no recording, so the player runs on the virtual clock. Pick Call 3303259297 in the call picker, stay in the review view, set 10× and press play.
| [mm:ss] | utterance i | what happens on screen | what to say |
|---|---|---|---|
| [00:00] | i 0 | The plan opens on card:review_upcoming_exposure, the default for a customer success call. |
"Different scenario, different plan. The same engine and the same screen." |
| [00:02] | i 2 | The client describes the problem. Issue resolution steps to issue raised, resolution:reported and persisted:issue_reported, and the item becomes card:resolve_the_issue_first. |
"Second line of the call: the issue is logged and the plan says fix it before anything else." |
| [01:54] | i 34 | The rep asks for the account holder and the client offers to patch them in; the item becomes card:add_user_access. |
"It picks up side requests without losing the main thread." |
| [02:33] | i 50 | The rep reads the account back while checking it: an Israeli shekel payment on a funded account. must_say:rep_checked_status_with_specifics. |
"The rep checked the account with specifics. That's a must-say for this scenario." |
| [03:31] | i 53 | "I see the issue": the recipient was set up in CAD. must_say:issue_resolved_or_owned, Issue resolution steps to owned by rep, resolution:owned, and the item becomes card:agree_next_step. |
"Owned: the rep has found the cause and taken it on." |
| [04:14] | i 57 | The client agrees to change the recipient's currency: resolution:resolved. Pause on the Issue resolution panel: reported, owned, resolved. |
"Reported, owned, resolved: the whole arc of a good support call, found line by line." |
| [05:46] | i 81 | "That's wrong." The Concerns panel opens concern:money@81, "Client has a worry about cost", with "Topic: money". |
"A second problem on the same call, and the concern is its own row." |
| [06:40] | i 108 | "You reversed the number": concern:service_issue@108. |
"Now it's specific: a service issue, raised at 108." |
| [08:57] | i 132 | "So I have 360 CAD I wanna sell now": persisted:next_step_agreed. |
"The client is doing the fix, with the rep on the line." |
Things that can go wrong
- Credits alert. An alert row, "Jev credits are empty", means the session stopped: play and speed are disabled and the last snapshot is held. Nothing more will be judged. Top up the Cloudflare account and start a new session by picking the call again. Check the balance the day before the demo.
- Catching-up badge. "catching up (N queued)" beside the speed control means the player is ahead of the decisions, usually at 10× or 20×, or on the first decisions after the Worker has been idle (about 0.7 s slower). The events still arrive at the same
i, a moment late. Slow to 2× until the badge clears before pointing at a row. - Model drift. A "Model drift: a different model answered" row means an answer came from a model other than the one the thresholds were calibrated on. The events may land on other lines in that session. Say so, press Got it and carry on; the tables here describe the calibrated model.
- A borderline event lands differently. Jev is not fully repeatable between sessions: in the final check a live session on the deployed Worker labelled the concern at
i 30as the rate ("Client thinks our rate is too high") where the eval run has fees. The line is the same and only the topic moved. Say so and carry on. - Numbers don't match. If a new policy version is published, the events can move. Re-run the L4 eval, update this table from the new report and re-run the demo check before the demo.