# Agent versioning and publishing (/docs/dashboard-guides/agent-versioning-and-publishing)

> Save named versions of an agent, publish one as what your live traffic runs, and roll back anytime while your draft stays editable.

Versioning lets you keep working on an agent without changing what your live agent does. You save named snapshots of the whole setup, publish the one you want live,
and keep editing safely in a draft that only reaches traffic when you choose.

If you have never touched any of this, nothing changes. Every agent starts in
live-edits mode, where each change you make is live on the next call or message.
Versioning and publishing are there when you want a safety net.

  Saving, comparing and restoring versions is included on every plan. Publishing,
  which keeps live traffic on one version while you keep editing, is available on
  Early deployers and above. Without it your agent stays in live-edits mode, and
  you still keep the full history.

## How changes reach live traffic [#how-changes-reach-live-traffic]

There are three things to keep straight: your **draft**, your **saved versions**,
and the **published version**.

* **Your draft** is the agent as you are editing it right now. In live-edits
  mode, the draft is also what live traffic gets.
* A **saved version** is a snapshot you keep. You can save as many as you like
  and restore any of them later.
* The **published version** is the one locked in for live traffic. Once you
  publish, your edits stay in the draft and only reach live traffic the next time you
  publish.

Testing always runs your draft, so you can try changes with a chat, web call, or
phone call before anyone else hears them.

  <svg viewBox="0 0 820 400" role="img" aria-label="Your draft is where every edit lands. Publishing locks a version as the published version, which serves live traffic: everyone your agent talks to across phone, campaigns, WhatsApp, SMS, email, and the web widget. You save versions from the draft and can restore them, and test calls always read the draft." style="{ width: '100%', height: 'auto', maxWidth: '760px', display: 'block', margin: '0 auto' }">
    <defs>
      <marker id="av-arrow" viewBox="0 0 10 10" refX="8.5" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse">
        <path d="M0,0 L10,5 L0,10 z" fill="currentColor" />
      </marker>
    </defs>

    <rect x="40" y="150" width="190" height="80" rx="10" fill="currentColor" fillOpacity="0.04" stroke="currentColor" strokeOpacity="0.35" strokeWidth="1.5" />

    <rect x="330" y="150" width="180" height="80" rx="10" fill="currentColor" fillOpacity="0.04" stroke="currentColor" strokeOpacity="0.35" strokeWidth="1.5" />

    <rect x="600" y="135" width="190" height="110" rx="10" fill="currentColor" fillOpacity="0.04" stroke="currentColor" strokeOpacity="0.35" strokeWidth="1.5" />

    <rect x="40" y="300" width="190" height="72" rx="10" fill="currentColor" fillOpacity="0.04" stroke="currentColor" strokeOpacity="0.35" strokeWidth="1.5" />

    <rect x="330" y="300" width="180" height="72" rx="10" fill="currentColor" fillOpacity="0.04" stroke="currentColor" strokeOpacity="0.35" strokeWidth="1.5" />

    <text x="135" y="184" textAnchor="middle" fill="currentColor" fontSize="15" fontWeight="600">
      Your draft
    </text>

    <text x="135" y="206" textAnchor="middle" fill="currentColor" fillOpacity="0.7" fontSize="12">
      every edit lands here
    </text>

    <text x="420" y="184" textAnchor="middle" fill="currentColor" fontSize="15" fontWeight="600">
      Published version
    </text>

    <text x="420" y="206" textAnchor="middle" fill="currentColor" fillOpacity="0.7" fontSize="12">
      locked
    </text>

    <text x="695" y="166" textAnchor="middle" fill="currentColor" fontSize="15" fontWeight="600">
      Live traffic
    </text>

    <text x="695" y="188" textAnchor="middle" fill="currentColor" fillOpacity="0.7" fontSize="11">
      everyone your agent talks to
    </text>

    <text x="695" y="211" textAnchor="middle" fill="currentColor" fillOpacity="0.7" fontSize="11">
      phone · campaigns · WhatsApp
    </text>

    <text x="695" y="229" textAnchor="middle" fill="currentColor" fillOpacity="0.7" fontSize="11">
      SMS · email · web widget
    </text>

    <text x="135" y="332" textAnchor="middle" fill="currentColor" fontSize="15" fontWeight="600">
      Saved versions
    </text>

    <text x="135" y="354" textAnchor="middle" fill="currentColor" fillOpacity="0.7" fontSize="13" letterSpacing="2">
      v1   v2   v3
    </text>

    <text x="420" y="332" textAnchor="middle" fill="currentColor" fontSize="15" fontWeight="600">
      Test calls
    </text>

    <text x="420" y="354" textAnchor="middle" fill="currentColor" fillOpacity="0.7" fontSize="11">
      chat · web call · phone call
    </text>

    <line x1="230" y1="190" x2="328" y2="190" stroke="currentColor" strokeWidth="1.5" markerEnd="url(#av-arrow)" />

    <text x="279" y="178" textAnchor="middle" fill="currentColor" fontSize="12" fontWeight="600">
      Publish
    </text>

    <line x1="510" y1="190" x2="598" y2="190" stroke="currentColor" strokeWidth="1.5" markerEnd="url(#av-arrow)" />

    <text x="554" y="178" textAnchor="middle" fill="currentColor" fillOpacity="0.8" fontSize="11">
      serves
    </text>

    <line x1="90" y1="230" x2="90" y2="298" stroke="currentColor" strokeWidth="1.5" markerEnd="url(#av-arrow)" />

    <text x="82" y="267" textAnchor="end" fill="currentColor" fillOpacity="0.8" fontSize="11">
      Save
    </text>

    <line x1="140" y1="298" x2="140" y2="232" stroke="currentColor" strokeWidth="1.5" strokeDasharray="4 4" markerEnd="url(#av-arrow)" />

    <text x="148" y="267" textAnchor="start" fill="currentColor" fillOpacity="0.8" fontSize="11">
      Restore
    </text>

    <path d="M420,300 L420,270 L215,270 L215,232" fill="none" stroke="currentColor" strokeWidth="1.5" markerEnd="url(#av-arrow)" />

    <text x="318" y="262" textAnchor="middle" fill="currentColor" fillOpacity="0.8" fontSize="11">
      reads your draft
    </text>
  </svg>

You control all of this from **Version history** in the top row of the agent
editor. The chip shows the version your draft is on, and turns amber when your
draft has moved ahead of what callers get. Everything else, saving, restoring,
and publishing, happens inside the panel it opens.

<img alt="The agent editor tab row with the Version history chip showing v3" src="__img0" />

## Save a version [#save-a-version]

A version is a snapshot of the entire agent setup at one moment: the prompt and
its sections, voice, model, transcriber, transfer rules, post-call actions,
knowledge base, and integrations. Open **Version history** from the top of the
editor, name the snapshot in the form at the bottom, add an optional note, and
save.

<img alt="The Version history panel showing a draft with unpublished changes above two saved versions, one carrying a Published badge" src="__img1" />

* **Version numbers** (v1, v2, v3, and so on) never change and are how you refer
  to a snapshot. **Names** carry the story: your own names, plus automatic ones
  like "Saved at publish" and "Automatic backup".
* The top of the panel always tells you what callers get right now, and which
  version your draft is on.
* **Search** by name or number to find one fast, for example type `v4`.
* **Filters** appear when they would actually narrow the list, so you never get a
  row of pills that all select the same versions.
* **Rename or delete** any version you no longer need. The published version
  cannot be deleted while it is live, so publish another version or unpublish
  first.

  Saved versions are kept for about 90 days and then removed automatically, so your
  history stays tidy. Restoring a version resets its clock, and the version that is
  currently published is never removed. Each version shows when it expires, with a
  warning as the date gets close.

## See exactly what changed [#see-exactly-what-changed]

Expand any version and open **What changed in this version** for a plain summary
of what moved. Expand a change to read the edit itself, with removed words struck
through and added words highlighted in place, so you can see the wording change
at a glance.

<img alt="An expanded version showing the welcome message edit with removed words struck through and added words highlighted, plus a Restore to draft button" src="__img2" />

## Publish a version [#publish-a-version]

Publishing locks a version as what your live traffic runs: phone numbers,
campaigns, WhatsApp, SMS, email, and the web widget. Open **Version history**,
then use **Publish** at the top of the panel and confirm.

If your plan does not include publishing, that control reads **Upgrade to
publish**. Everything else on this page keeps working, and every edit you make
stays live as you make it.

<img alt="The publish confirmation dialog reading Publish these changes, explaining the draft becomes the live version for campaigns and attached numbers" src="__img3" />

Once published, the top of the panel names the version callers are on, with a
link to view it.

<img alt="The top of the panel reading Live v3, Callers are on this version, with a View published v3 link" src="__img4" />

After that, your edits stay in the draft. The **Version history** chip turns amber
and the panel spells out which version callers stay on until you publish again, so
you always know your draft is ahead of what live traffic gets.

<img alt="The tab row with the Version history chip tinted amber to show the draft has unpublished changes" src="__img5" />

A few things worth knowing about how a publish takes effect:

* **Calls already in progress finish as they started.** Publishing never
  interrupts a live call.
* **New calls, the remaining calls of a running campaign, and the next message in
  a thread use the newly published version.**
* **Testing still runs your draft**, so a test call after publishing exercises
  your latest edits, not the published version.
* You can **publish the current draft** or **publish any older saved version**
  straight from history. Publishing an older version does not touch your draft.
* When you start a bulk campaign, the review step shows **which version the
  campaign will run**, so you can confirm before it goes out.

## View the published version [#view-the-published-version]

To check what live traffic is getting without leaving your draft, use **View
published**. The agent opens read-only with a banner across the top, and your
draft is untouched while you look. Choose **Back to draft** to return to editing.

<img alt="A read-only banner reading Viewing published version. Fields are read-only, with a Back to draft button" src="__img6" />

## Restore a version [#restore-a-version]

Restoring brings a saved version back into your draft so you can keep editing
from there. Restoring never deletes anything: an automatic backup of your current
setup is taken when needed, so a restore can always be undone from version
history. Restoring changes your draft only. It does not change live traffic until
you publish. Restoring also resets that version's expiry, so a version you keep
coming back to stays available.

## Common workflows [#common-workflows]

### Iterate safely while a campaign is running [#iterate-safely-while-a-campaign-is-running]

1. Publish the script you trust, so your running campaign keeps using it.
2. Rework the prompt in your draft. The campaign is unaffected.
3. Test your draft with a chat or a test call until it sounds right.
4. Publish when ready. The remaining calls pick up the new version.

### Keep seasonal or promo scripts ready [#keep-seasonal-or-promo-scripts-ready]

1. Save your everyday script as a version named, for example, "Standard".
2. Save your campaign script as "Holiday promo".
3. Publish whichever one applies today. Swap them by publishing the other.

### Recover from a bad edit [#recover-from-a-bad-edit]

1. Open **Version history** and find yesterday's version.
2. Restore it into your draft, or use **View published** first to compare what is
   live against what you have now.
3. Publish once you are happy.

### Roll back live behavior instantly [#roll-back-live-behavior-instantly]

1. Open **Version history** and find the previous good version.
2. Publish it straight from history. Live traffic moves back immediately and your
   draft stays exactly as it was.

### Review before go-live [#review-before-go-live]

1. A teammate opens **View published** to read the current live agent, read-only.
2. You keep editing your draft at the same time.
3. Publish when the review is done.

## FAQ [#faq]

  
    No. Calls in progress finish as they started. New calls, the remaining calls of a
    running campaign, and the next message in a thread use the newly published
    version.
  

  
    Test calls always run your draft: chat, web call, and phone call all use your
    latest edits, so you can try changes before publishing them.
  

  
    Nothing changes. Your agent stays in live-edits mode and every change is live on
    the next call or message, exactly as before.
  

  
    Not while it is live. Publish another version or unpublish first, then delete the
    one you no longer need.
  

  
    The bulk campaign review step shows the version the campaign will run, so you can
    confirm it before starting.
  

  
    Yes. A version you save is kept for about 90 days and then removed automatically,
    so your history does not grow forever. Restoring a version resets its clock, and
    the version you have published is never removed. Each version in the list shows
    when it expires, and warns you as the date gets close.