Where to start it
Four places in the dashboard launch the same loop. What differs is where the failures come from.Insights — a failure category
A run or call detail page
A result's failure breakdown
Evaluators list — bulk action
Before you start
The agent is connected to Cekura
There is something to measure against
There is a real failure
What the loop does
Makes a private copy
Writes scenarios (production-call runs only)
Reproduces the failure (production-call runs only)
Measures a baseline
Proposes a change
Applies and re-tests
Repeats, then reports
What it is allowed to change
The loop edits the agent’s instructions and closely related configuration on the copy. Some things are permanently off-limits and are rejected before they reach your provider:- credentials and API keys
- webhook and server URLs
- phone numbers
- transfer and handoff destinations
- voice and account wiring
Reproducing the failure
A failure that happened in production doesn’t always happen in a test. When you start from production calls, the loop treats reproducing the problem as a precondition — not as an optional first attempt. It writes scenarios from the failing calls — as few as will cover them, since every cited metric is scored on every conversation — and runs each of them once. The failure counts as reproduced as soon as the metric that flagged those calls in production fails on one of those conversations: that is all the loop needs before it can start measuring whether a change fixes it. The check is arithmetic, not a judgement call: conversations that were never scored — a timed-out call, a scoring error — count as neither evidence for nor against. Saying the opposite takes more evidence than that, deliberately. “We couldn’t reproduce it” either ends the run or sends it to the last resort below, so the loop won’t conclude it until enough conversations have actually been scored to stand behind it. Those same conversations are your baseline. Rather than buy a second, identical batch to measure where the agent starts, the loop scores the ones it just ran — so proving the failure and establishing the “before” number cost one round of testing between them, not two. If the failure doesn’t show up, the loop doesn’t give up on the first try. It:- Tries again with sharper scenarios. It’s told what it already tried and that it didn’t reproduce, then re-reads the transcripts to find what the real calls had that its tests didn’t.
- Tries to force the failure. If repeated attempts still can’t provoke it, the loop may deliberately weaken a safeguard on the private copy to make the latent problem surface every time. This is a testing device, never a suggestion.
Accepting the changes
Nothing reaches your live agent until you click Promote.- Promote applies the offered changes to your live agent. It re-checks first that the copy still matches what was measured and that your live agent hasn’t drifted since the run started; if either has changed, it refuses rather than overwriting work you did in the meantime.
- Discard copy deletes the private copy at your provider.
- Copies are cleaned up automatically after about a week, and immediately when a run ends with nothing to offer.
While it’s running
- Answer its questions. When the loop pauses on a business-rule question, reply in the thread and it picks up where it left off.
- Steer it. You can send guidance mid-run — context about your product, a constraint, a direction to try — and it’s folded into the next round.
- Stop it. Cancel at any point. The copy is cleaned up.
How it ends
Troubleshooting
The action doesn’t appear on an insight. That insight’s calls belong to an agent on a provider the loop can’t edit. Use Create scenario instead — it still turns those calls into evaluators you can run and fix by hand. It says my agent already passes everything. The scenarios it ran didn’t fail. If the failure is real but intermittent, that’s the reproduction problem described above; starting from the Insights category rather than a single call gives it more transcripts to work from. Most failures cluster on one metric whose explanations look subjective. The metric is probably miscalibrated, and improving the agent against a noisy metric chases noise. Hand off to the Metric Lab improvement flow first. Promote was refused. Either your live agent changed since the run started, or the copy no longer matches what was measured. Both mean the offered before/after no longer describes reality. Re-run rather than forcing it. The run is refused before it starts. Your project has no rubric rule and no metric enabled for simulations, so there’s nothing to score against. See Metrics. It stopped after writing the scenarios, saying it can’t score the checks that flagged those calls. The metrics named on those insights no longer resolve to a metric in the project — deleted, renamed, or two metrics sharing one name — so nothing would have scored the failure and every test conversation would have been paid for with no verdict to show. The scenarios it wrote stay in your evaluators list, so fixing the metric and starting again reuses them.Self-hosted and custom agents
Agents that Cekura can’t edit through a provider API — self-hosted, websocket and custom integrations — aren’t supported by the loop above, because it depends on being able to copy the agent and change it. For those, ask the AI Assistant to improve your agent from a set of evaluators: it runs the same diagnose-and-retest reasoning and hands you the instruction changes to deploy yourself, then re-tests once you’ve deployed.Related
- Cekura Agent — connect an agent before optimizing it.
- Insights — where production failures get grouped into categories.
- Metric Lab — improve evaluator quality when failures cluster on a noisy metric.
- Auto-optimise Metrics — the equivalent recurring workflow for metric prompts.