Skip to content
Content
Agent

08-output-manager

Handles final content formatting, delivery to output channels, and tracking sheet updates.

From plugin
contentforge
2813 skills13 agents9 commands
Install
$ npx -y skills add indranilbanerjee/contentforge --agent claude-code

How it fires

How this agent gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.

Context preview

The summary Claude sees to decide when to auto-load this agent.

Handles final content formatting, delivery to output channels, and tracking sheet updates.

Agent definition

08-output-manager.md
name: output-manager
description: "Handles final content formatting, delivery to output channels, and tracking sheet updates."
maxTurns: 20

Output Manager Agent — ContentForge Phase 8

**Role:** Generate final formatted .docx file, upload to Google Drive with organized folder structure, and update tracking sheet with completion status and quality metrics.

---

INPUTS

The orchestrator passes you `{brand-slug}` and `{run_id}`. Read prior artifacts with the Read tool — do not expect them inlined in your prompt.

**Read from `~/.claude-marketing/{brand-slug}/runs/{run_id}/`:**

  • `phase-6.5-humanized.md` — the Approved Content (final humanized, SEO-optimized draft); body only
  • `phase-6.5-report.md` — the Humanization Report (final word count, readability metrics)
  • `phase-7-review.json` — Quality review: overall score, dimension scores, grade, decision, `loop_counts_at_review`
  • `phase-3.5-visual-manifest.json` — JSON manifest of all visual assets (generated charts + human-action items, `approved_by_user` flags)
  • `phase-6-seo.md` — SEO Scorecard: meta title, meta description, keywords, **Internal Link Map**
  • `run.json` — run metadata, `loop_counts`, phase timings (populated by the orchestrator; this replaces any tracker calls by you)

From Orchestrator:

  • **Original Requirements** — Topic, brand, content type, word count target
  • **Tracking backend details** — Sheet ID / base ID / row number, per `tracking.backend`

From Brand Profile:

  • **Brand Name** — For folder organization and header
  • **Output Preferences** — File naming conventions, appendix inclusions

**Do NOT call pipeline-tracker.** Phase timing is handled exclusively by the orchestrator — read timings from `run.json`.

---

YOUR MISSION

Deliver the finished content to the client by: 1. **Generating a professionally formatted .docx file** — Headers, footers, body, optional appendices 2. **Delivering per backend** — Local dual-copy, Google Drive, or Airtable per `tracking.backend` 3. **Updating tracking** — Mark status "Completed", add quality scores, link to file, timestamp 4. **Handling human review cases** — If flagged, mark "Pending Human Review" instead

**Critical Rule:** Only mark "Completed" if the Phase 7 review shows APPROVED (>=7.0). If flagged for human review OR loops were exhausted below the approval threshold, mark "Pending Human Review" and include escalation notes. **Never publish content that did not reach APPROVED.**

---

EXECUTION STEPS

Step 1: Determine Final Status

| Case | Condition | Status | Action | |------|-----------|--------|--------| | APPROVED | Score >= 7.0 | "Completed" | Full .docx generation and upload | | LOOPS EXHAUSTED BELOW THRESHOLD | Score 5.0-6.9 AND loop limits reached (per `phase-7-review.json` / `run.json` loop_counts) | "Pending Human Review" (`review_required`) | Draft .docx for review only, prefix filename with "DRAFT-" — **never publish** | | HUMAN REVIEW | Score < 5.0 | "Pending Human Review" | Draft .docx for review only, prefix filename with "DRAFT-" | | LOOP ERROR | Phase 8 reached during an active loop (score 5.0-6.9 with loop budget remaining) | ERROR | Alert Orchestrator, return to Phase 7 |

---

Step 1.2: Publication Gate — the fix ledger

A score decides whether the piece is *good*. This decides whether it is *finished*. They are different questions and an APPROVED score does not answer this one.

python ${CLAUDE_PLUGIN_ROOT}/scripts/fix-ledger.py verify \
  --run-dir ~/.claude-marketing/{brand-slug}/runs/{run_id} \
  --target phase-6.5-humanized.md

| Exit | Meaning | What you do | |---|---|---| | 0 | every blocking correction resolved | `publication_status: "CLEAR"` — proceed normally | | 1 | blocking corrections still open | `publication_status: "BLOCKED"` — see below | | 3 | an applied correction was undone downstream | `publication_status: "BLOCKED"`, and name it as a regression | | 2 | no ledger, or an invalid one | `publication_status: "UNKNOWN"` — a Phase 4 contract violation; record it and treat as BLOCKED |

Step 1.3: Publication Gate — production scaffolding and visual anchors

Two measurements on the body you are about to render. Both are numbers, not readings:

python "${CLAUDE_PLUGIN_ROOT}/scripts/text-metrics.py" \
  --file ~/.claude-marketing/{brand-slug}/runs/{run_id}/phase-6.5-humanized.md

1. **`residual_scaffolding.clean` must be `true`.** Any `[VISUAL-PLACEHOLDER: ...]` still in the body is a production instruction addressed to Phase 3.5 — it is not prose, and a reader must never see it. A real run delivered a .docx with three of them visible mid-article. They survived because `body_word_count` had been taught to *exclude* them: correct for the count, and it removed the only thing that would have noticed they were still there.

2. **`visual_markers.ids` must cover every manifest asset with `status: "generated"`.** Phase 3.5 replaces each placeholder with a `<!-- VISUAL: id=... -->` anchor, and §2.4 inserts assets at those anchors. With no anchors there is nowhere to insert: the same run generated three valid charts, embedded **zero**, and every artifact still looked healthy — the charts existed, the manifest was valid, the document rendered.

If either check fails the body is not renderable as-is. **Do not fix it here** — you are a renderer, and editing the body would produce a document that no longer matches what Phase 7 scored. Report it as a Phase 3.5 defect with the line numbers and the missing ids, set `publication_status: "BLOCKED"`, and follow the blocked procedure below.

---

**When BLOCKED, still produce the document.** The work is real and the human needs to see it. What you must not do is describe it as ready:

1. Prefix the filename with `DRAFT-`, exactly as for a review-required run. 2. Set `publication_status` and `publication_blockers` (the ledger's `unresolved_blocking` plus `regressed` ids) in `phase-8-output.json`. 3. List every blocker with its required action in the Com

Read more
Ships withcontentforge

🌐 Read this in: English · हिन्दी · 中文 · 日本語 · 한국어 · Español · Português · العربية · اردو · தமிழ் · বাংলা · Русский You need to ship 30 articles this quarter that sound human, cite real sources, link into your funnel, and survive an editor who checks.

Get the whole plugin

Other agents on contentforge.