# Review and Publish



Nothing an agent writes goes live on its own. Every draft moves through a review
pipeline with explicit states, named reviewers and full version history.

## States [#states]

| State                 | What it means                                               | What moves it on                                         |
| --------------------- | ----------------------------------------------------------- | -------------------------------------------------------- |
| **Draft**             | Being written or edited. Agents and humans both write here. | Submitting it for review                                 |
| **In review**         | Submitted, waiting on a decision.                           | A [reviewer](#reviewers) approving or requesting changes |
| **Changes requested** | Sent back with written feedback attached.                   | Back to draft                                            |
| **Approved**          | Cleared to publish. Not yet public.                         | `toggle_blog_publish`                                    |
| **Published**         | Live.                                                       | `toggle_blog_publish` again, to unpublish                |
| **Archived**          | Soft-deleted. `archive_blog` also unarchives.               | n/a                                                      |

The first five are the statuses on the
[Artifacts](/platform/campaign-agents/artifacts&#x29; screen.
**`request_blog_changes` only accepts something already in review**, and
**archive is reversible**.

`list_blogs` takes a `state` filter and a `search` term, so "what is sitting in
review" is one call.

## Reviewers [#reviewers]

Reviewers are named per environment, so review goes to a known list rather than
to whoever noticed first. `list_reviewers` over
[MCP](/mcp-server/tools#content-review) returns the current set.

## Versions [#versions]

Every draft keeps its version history and its rendered Markdown:

* **Comparing an agent revision to yours.** `get_blog_versions` lists them;
  `get_blog_version_content` returns the body of any one.
* **Getting an earlier draft back after a bad approve.** The older version's
  Markdown is still readable.

## Reviewing Well [#reviewing-well]

Resist the urge to rewrite: an edit fixes one draft, and a
[Vault](/platform/vault/voice#correcting-an-agent) rule fixes every future one.

<Steps>
  <Step title="Check the claim, not the prose">
    Is what it says true, and is it the claim the campaign was for? Prose
    problems are cheap to fix; a wrong claim is a retraction.
  </Step>

  <Step title="Check every number has a source">
    Named customer or a figure you can point at. If neither, cut it.
  </Step>

  <Step title="Request changes with the reason">
    "Opened generically, and the 37% is Nextiva's not Galley's."
    `request_blog_changes` takes that `feedback` and stores it on the draft, so
    the next person to open it sees why it came back.
  </Step>
</Steps>

## Publishing [#publishing]

Approved is not published, so a batch can clear review on Thursday and go live
on Monday. Content you host with us publishes into the Surface CMS. If you
publish the page yourself, `get_blog_version_content` hands you the approved
Markdown.

For CMS entries, `cms_schedule_entry` sets a publish time and
`cms_unschedule_entry` cancels it, so a piece approved today can go live at
09:00 on Tuesday. See the [CMS tools](/mcp-server/tools#cms).

<Tip>
  From Slack: &#x2A;"what's sitting in draft right now?"&#x2A; is a read.
  &#x2A;"@SAM approve the Nextiva post"* is a write, so it parks behind an Approve card
  before anything moves. Either way it counts against the workspace's 200
  questions per rolling 24 hours. See
  [Limits and guardrails](/platform/sam/limits).
</Tip>

[Artifacts and the asset library →](/platform/campaign-agents/artifacts)
