# Adapto Content Create

> Write the briefed content — for each approved brief, dispatch the writer agent (top-tier for cornerstone pieces) to produce a complete, on-brand Markdown draft with SEO/AEO/GEO metadata and internal links, then run the editor critic and revise. Writes dated md drafts for your review; no CMS writes.

- Skill: `adaptocms/adapto-content-create` (Agent Skill)
- Install (CLI): `npx skillmds@latest add adaptocms/adapto-content-create`
- Raw SKILL.md: https://api.skillmd.com/api/skills/adaptocms/adapto-content-create/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Marketing & Growth
- Author: adaptocms (https://skillmd.com/u/adaptocms)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/adaptocms/adapto-content-create

---


# adapto:content-create

The third pipeline step ([content-pipeline.md](../../shared/content-pipeline.md)). It executes the briefs
from the cycle plan into **complete Markdown drafts** — on-brand, with SEO/AEO/GEO metadata, JSON-LD, and
internal links baked into the frontmatter — for you to **review as files** before anything reaches Adapto. It
uses `adapto-writer` to draft and `adapto-editor` to critique, and writes nothing to the CMS.

> **Autonomous-safe** ([studio.md](../../shared/studio.md) §4): local, no CMS writes — an autonomous cycle can
> run this unattended; the cycle parks at the human gate before `adapto:content-upload`.

## When to use
- "Write the planned content", "draft these pieces", "create the articles from the plan".
- After `adapto:content-plan` has produced briefs (status `briefed` in the ledger).

## When not to use
- Choosing what to write → `adapto:content-plan`.
- Pushing approved drafts to Adapto → `adapto:content-upload`.
- Translating existing content → `adapto:translate`.

## Inputs
- The **approved briefs** in the latest `.adapto/plans/<date>-cycle.md` (and their ledger rows).
- **The brain** — `voice.md`, `glossary.md`, `identity.md`, `audience.md`, `inventory.md` (for internal links).
- **The standards** — [seo-standards.md](../../shared/seo-standards.md),
  [prose-standards.md](../../shared/prose-standards.md) (the anti-slop rules the editor hard-gates on),
  and the frontmatter contract (content-pipeline.md §2).

## Outputs
- A **dated Markdown draft** per piece at `.adapto/drafts/<YYYY-MM-DD>-<slug>.md` with full frontmatter
  (the `adapto:` + `seo:` blocks) and an on-brand body — the artifact **you review**.
- Ledger rows advanced to `status: drafted` (with `draft_path`).
- **Next step:** review the drafts, then `adapto:content-upload` to push the ones you approve to Adapto (as
  drafts).

## Creation (write → critique → revise)
1. **Select** the briefs to write this run (default: all `briefed` in the latest cycle; or a subset the user names).
2. **Write each brief — dispatch `adapto-writer`** (one per brief). For briefs marked `cornerstone: true`,
   dispatch the writer at the **top model tier (Opus-class)**; otherwise Sonnet-class
   ([sub-agents.md](../../shared/sub-agents.md) §7). The writer reads the brain + standards and produces the
   md draft with full frontmatter.
3. **Slop gate (deterministic) — before critiquing**, grep each draft body for em dashes:
   `awk '/^---$/{n++;next} n>=2' <draft> | grep -c '—' || true` must return **0**
   ([prose-standards.md](../../shared/prose-standards.md) — en dashes in numeric ranges are fine).
   If it's non-zero, hand the draft straight back to the writer to strip the em dashes (and the other AI
   tells) before spending an editor pass. No draft advances to `drafted` with em dashes in the body.
4. **Critique — dispatch `adapto-editor`** on each draft (voice fit, SEO/AEO/GEO completeness, internal-link
   coverage, structure, and the **slop check** — any prose-standards.md ban-list hit forces `revise`). If the
   verdict is `revise`, hand the gaps back to the writer and revise until solid.
5. **Write the drafts** to `.adapto/drafts/`, advance the ledger to `drafted`, and tell the user **which files
   to read** (perfectly named + dated). Point to `adapto:content-upload` for the ones they approve.
   A first draft is a new file — but when **revising a draft that already exists**, read it first
   ([conventions.md](../../shared/conventions.md) §15): the harness blocks a write to an unread file, and the user
   may have edited it since.

## Preconditions
- **Preflight** with the `adapto:doctor` checks.
- A cycle plan with **briefs** (run `adapto:content-plan` first).
- No auth/tenant needed (no CMS writes). `adapto` CLI `>= 0.1.3`.

## Errors and recovery
- **No briefs** → suggest `adapto:content-plan`.
- **`adapto-writer` unavailable** → write inline at the best available tier and say so; never silently
  downgrade a cornerstone piece without flagging it.
- **Editor keeps returning `revise`** → after a couple of passes, surface the remaining gaps to the user
  rather than looping forever.
- **A brief references a missing internal-link target** → write the link as planned but flag it;
  `content-upload` re-checks against the inventory and warns.

## Forbidden actions
- Never write to the CMS (`mutates: false`) — drafts are local md for review.
- Never write raw HTML bodies — drafts are Markdown; `content-upload` converts to HTML.
- Never fabricate an author or invent facts/metrics — use the brief's references + the brain.
- Never skip the voice — every draft matches `voice.md` unless the user overrode it for that piece.
- Never deliver a draft that failed the editor's slop gate un-revised — if the revise loop stalls, surface
  the remaining hits to the user; don't ship around the gate.
- Plus the global list in [forbidden-actions.md](../../shared/forbidden-actions.md) — notably: **never delete CMS content** (archive instead; conventions §9a).

