# Draft

> This skill should be used when the user asks to write a blog post, draft a post, start a new post, or wants help writing content. Trigger phrases: "draftloom draft", "write a blog post", "start a new post", "I want to write a post", "help me write a blog post", "draft a blog post", "/draftloom:draft". Use this skill whenever the user wants to draft a blog post, article, or long-form post — even if they don't use the exact phrase "blog post".

- Skill: `neotherapper/draft` (Agent Skill, multi-file: 8 files)
- Install (CLI): `npx skillmds@latest add neotherapper/draft`
- Raw SKILL.md: https://api.skillmd.com/api/skills/neotherapper/draft/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- License: MIT
- Author: neotherapper (https://skillmd.com/u/neotherapper)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/neotherapper/draft

---


# Draftloom Draft Skill

Orchestrates the full blog post workflow: profile selection → brief interview → wireframe → eval loop → distribution.

A complete draft run moves through: session recovery check → profile selection → brief interview (4 mandatory + 3 optional questions) → wireframe layout with parse-able edits → orchestrator-driven eval loop (writer + 4 eval agents in parallel, up to 3 iterations) → distribution copy generation. All inter-step state is written to `posts/{slug}/` so sessions can be recovered after interruption.

## Entry point: session recovery check

Before anything else, check for existing `session.json` files in `posts/*/session.json` where `draft_status` is not `published` or `abandoned`.

If an incomplete session is found:
- Show: "Found incomplete draft: '{title}' (checkpoint: {checkpoint}). Resume? (y/n)"
- If yes: load `state.json` and `session.json`, skip to the appropriate checkpoint step below
- If no: proceed with a new draft

---

## Step 1: Profile selection

Check `.draftloom/profiles/` (and `~/.draftloom/profiles/` if `config.json` has `storage_mode: "global"`).

**No profiles found:**
Show: "No profiles found. Run `/draftloom:setup` to create your first writing profile." Stop.

**One profile found:**
Show profile name and confirm: "Using profile '{name}'. Continue? (y/n)"

**Multiple profiles found:**
Show a tiered list. Recent profiles (used in last 30 days) appear first with their last-used date and draft count. All others listed below. User types a number or search string to select.

Write selected `profile_id` to `session.json` → checkpoint: `profile_selected`.

---

## Step 2: Brief interview

Load `references/brief-questions.md` for the exact question wording and validation rules.

Ask the 4 mandatory questions **one at a time**. Wait for each answer before asking the next. After the 4 mandatory questions, offer: "Would you like to add SEO targeting, competitor reference URLs, or a publish date? (y/n)"

If yes, ask the 3 optional questions from brief-questions.md.

Generate a slug from the post topic (lowercase, hyphens, max 50 chars). Check if `posts/{slug}/` already exists. If it does, append a short suffix (e.g. `-2`).

Create workspace directory `posts/{slug}/`. Load `references/workspace-schema.md` for the complete file contract — every file created must be documented there.

Write `brief.md` with all answers. Write `meta.json` with title (derived from topic), slug, profile_id, `draft_status: "drafting"`, and timestamps.

Write `session.json` → checkpoint: `brief_complete`, `brief_answered: true`.

Set `state.json` → `current_iteration: 0`, `locked_brief: true`.

---

## Step 3: Wireframe layout

Load `references/layout-templates.md` for section templates and word-count ranges.

Propose a numbered section outline based on the brief topic, core insight, and target length. Display in this format:

```
① Hook           ~120w  — bold claim + surprising stat
② Problem setup  ~200w  — agitate the pain
③ Core insight   ~350w  — the non-obvious perspective
④ Evidence       ~250w  — stories, data, code
⑤ CTA            ~80w   — one clear ask

Total: ~1000w (matches your medium preference)
Tweaks? (e.g. "change 3 to 500w", "add backstory between 1 and 2: 150w", "remove 4")
```

Accept parse-able edit commands. Apply each edit, recompute total word count, show updated wireframe. Validate total against profile `typical_length` (short: 300–700w, medium: 700–1500w, long: 1500–3000w). Warn if significantly over or under.

Ask: "Looks good?" When confirmed, append wireframe as a Sections block to `brief.md`.

Write `session.json` → checkpoint: `wireframe_approved`, `wireframe_approved: true`.

---

## Step 4: Delegate to orchestrator

Dispatch the `draftloom:orchestrator` agent with context:
- Path to `posts/{slug}/`
- Profile JSON path
- Mode: `"full_draft"` (writer runs first, then eval loop)

The orchestrator owns all further steps — scoring, patching, iteration decisions. This skill waits for the orchestrator to signal completion.

Load `references/scoring-rubric.md` if the orchestrator surfaces a routing decision that requires user input (escalation when a dimension scores < 50, or max iterations reached).

---

## Step 5: Post-completion output

When orchestrator signals `loop_end`, display:

```
✓ Draft complete: posts/{slug}/
  draft.md          — your post
  distribution.json — X hook · LinkedIn opener · email subject · newsletter blurb
  scores.json       — final eval scores
```

Load `references/distribution-guide.md` to format the distribution copy display correctly (respecting character limits per platform).

If Turso is enabled in `.draftloom/config.json`, load `references/turso-setup.md` to confirm the post was synced.

---

## Halt detection

If the user types "finalize", "publish now", "skip iterations", "good enough", or "ship it" at any point after the wireframe is approved, relay the halt signal to the orchestrator immediately. The orchestrator will dispatch the distribution agent with the current draft.

---

## Reference files

Load these files at the step indicated — do not preload all at once:

- **`references/brief-questions.md`** — exact wording for all 7 brief questions (4 mandatory, 3 optional), validation rules, and the brief.md output format (load at Step 2)
- **`references/workspace-schema.md`** ★ — source of truth for all 13 workspace files, ownership, schemas, and the atomic write protocol (load at Step 2 before creating any workspace file)
- **`references/layout-templates.md`** — 8 section types, 3 default wireframes by length, parse-able edit commands, word count validation (load at Step 3)
- **`references/scoring-rubric.md`** — routing table, pass threshold (≥ 75 per dimension), escalation questions, halt phrases, per-dimension rubrics (load when orchestrator surfaces a routing decision)
- **`references/eval-output-spec.md`** — the eval agents' output contract (the JSON each eval agent emits); not read directly by this skill — it is consumed by the eval agents and surfaced via the orchestrator at Step 4
- **`references/distribution-guide.md`** — platform character limits, X/LinkedIn/email/newsletter copy templates, enforcement rules (load at Step 5)
- **`references/turso-setup.md`** — optional Turso MCP analytics backend, setup steps, schema, failure handling (load only if `turso_enabled: true` in config.json)

