---
name: clear-review-queue
description: Work through CampaignStack's pending review queue with a person, deciding each drafted message one at a time. Use when drafts are waiting, when someone says "go through my reviews", or before a batch of outreach goes out.
---

# Clear the review queue

Each item is a message CampaignStack drafted and is holding. Approving sends
it on the workflow's pacing. So: one item at a time, and approval only after
the person's yes on that exact wording.

## 1. Load a page

```
campaignstack_get_reviews(limit: 10)
```

`pendingCount` is the whole queue; pass `cursor` for the next page. Each item
has `entryId`, `kind`, the lead (name, headline, company, profile URL),
`channel`, `draft.text`, `draft.field`, the sending `account` and
`reviewReason` when flagged. Take flagged items first.

For a reply, read the thread before judging it:
`include: {conversation: {}, context: {}}`.

## 2. Present one item

Show who it goes to, which account sends it, what it answers, and the draft
verbatim. Add your read in two lines: does it answer what they said, promise
only what the offer covers, ask one thing? Recommend approve, edit or reject,
with the reason.

## 3. Act on the answer

- Approve, after a yes to this draft:
  `campaignstack_decide_review(entryId, kind, decision: "approve",
  confirmed: true)`. Spends a send credit.
- Edit: write the new wording, read it back in full, then on a yes:
  `decision: "edit_and_approve", updatedContent: {<draft.field>: "..."}`.
- Save wording for later without sending:
  `campaignstack_edit_draft(entryId, kind, updatedContent, confirmed: true)`.
  The item stays in the queue.
- Reject: `decision: "reject"`. Free, sends nothing. State the reason and
  keep a tally.

A yes covers one item. When someone says "approve all", speed up the
reading, and still confirm each draft by the lead's name.

`kind: "job_application"` items are cover letters: `updatedContent` takes
`{letter, answers}` and a reject can carry `reason`.

## 4. A draft that failed

`campaignstack_recover_review(entryId, mode: "retry", confirmed: true)`
writes a fresh draft and spends a generation.
`campaignstack_explain_draft(entryId)` shows which setting produced each
sentence.

## 5. Close out

Report approved, edited, rejected and still pending. When two or three
rejections share a reason, that reason is a setting: fix it with skill
`edit-playbook` or `audit-craft-config` so the next drafts change too.
