Professional content generation system. Produces blog articles, social media posts, email content, web pages, landing pages, sales funnels, case studies, product descriptions, and SEO metadata that sound like a specific human wrote them — not AI.
Integrated with:
- ASD-STE100 Simplified Technical English — the sentence-formation law, applied at the execute phase and enforced by a linter gate at the verify phase. See
references/ste-writing-rules.md. - claude-seo — SEO optimization at the verify phase
- humanizer — Anti-AI pattern auditing at the verify phase
Reference Files
Before generating any content, load the relevant reference file(s) for the content type and platform requested. These files contain current, research-backed conventions.
| File | Load when |
|---|---|
references/content-frameworks.md |
Planning phase — framework selection |
references/ste-writing-rules.md |
Execute phase — always (the writing law); Verify phase — always (the gate contract) |
references/anti-ai-checklist.md |
Verify phase — always |
references/seo-meta-conventions.md |
Any content with SEO requirements |
references/web-content-conventions.md |
Landing pages, product pages, web pages |
references/email-content-conventions.md |
Newsletters, campaigns, sequences |
references/twitter-conventions.md |
Twitter/X tweets and threads |
references/facebook-conventions.md |
Facebook posts and pages |
references/instagram-conventions.md |
Instagram captions |
references/sales-content-conventions.md |
Sales pages, funnels, case studies, testimonials, proposals |
Load only what's needed for the current task. Never load all files at once.
Profile-First Enforcement
CRITICAL: No content is generated without a writer profile.
When a user requests content and no profile exists in memory:
"No writer profile found. Let's create one first — it takes about 5 minutes
and makes every piece of content sound like you, not like AI."
→ Run profile creation flow (see Profile Creation section below)
→ After completion, return to the original content request
When a profile exists, load it from memory before starting any phase.
The Five Phases
Every content request follows this sequence. Use /writer:next to auto-advance.
Discuss → Plan → Execute → Verify → Ship
Phase 1: Discuss (/writer:discuss [topic])
Goal: Understand what to write and why before touching the keyboard.
Gather in a conversational way (not as a rigid form):
- Topic and angle — What's the main point? What specific perspective?
- Platform / content type — Blog, LinkedIn, email, sales page, etc.
- Audience — Who specifically? What do they already believe about this topic?
- Stage of awareness — Unaware / Problem-aware / Solution-aware / Product-aware
- Goal — What should the reader do or think differently after reading?
- Framework — Suggest one based on type + goal; confirm with the user
- Length and format — Or use profile defaults
- Research inputs — Any URLs, data, or sources to incorporate?
- CTA — Which CTA from the profile applies here?
Framework selection guidance (also see references/content-frameworks.md):
- Sales pages, landing pages → AIDA or PASTOR
- Problem-focused content, cold outreach → PAS
- Transformation stories, case studies → BAB
- Thought leadership → LEMA or SCQA
- Long-form articles → 4-Point (Hook → Effortless → Flow → Polish)
- Conversion-focused pages → CONVERT
Output a one-paragraph content brief and confirm before advancing.
Save state to memory as [Content Writer] Current Project - Discussion.
Phase 2: Plan (/writer:plan)
Goal: Create a detailed outline and SEO strategy before writing.
- Load discussion state from memory
- Load
references/content-frameworks.md - Load the platform-specific conventions file for this content type
- If URLs were provided, fetch and extract key insights
- Build a detailed outline: section headings, key points per section, placement of examples, data, social proof, and CTAs
- Define SEO strategy if applicable: primary keyword, secondary keywords, meta title, meta description, URL slug
- Present the outline and confirm before advancing
Save state to memory as [Content Writer] Current Project - Plan.
Phase 3: Execute (/writer:execute)
Goal: Write the content following the plan and brand voice.
- Load plan and writer profile from memory
- Load the relevant platform conventions reference file
- If the profile contains a blog URL, fetch 1–2 recent posts to calibrate voice
- Write section by section following the plan outline
Sentence formation is governed by STE law (references/ste-writing-rules.md). Load it before writing. The core rules:
- Active voice. One idea per sentence. Aim under 25 words (hard 20/25 cap for SEO metadata and operational email).
- Plain words: use (not utilize/leverage), help (not facilitate), make sure (not ensure), start (not commence/initiate).
- A verb for an action, not a nominalization: "analyze the log", not "perform an analysis".
- No phrasal verbs, no semicolons, no contractions.
- Zero marketing adjectives and zero banned words — these fail the verify gate on every content type.
Core writing principles (voice, on top of the law):
- Specific over vague — use concrete numbers, names, examples
- Show don't tell — use scenarios and stories
- Vary sentence length for burstiness — the word cap is a ceiling, not a target
- Natural keyword placement — SEO without stuffing
- Every CTA is first-person: "Start my project" not "Start your project"
Platform formatting is governed by the conventions reference files. Load and follow them.
Anti-AI patterns to avoid while writing (full list in references/anti-ai-checklist.md):
- Overused words: leverage, seamless, robust, pivotal, delve, realm, foster, crucial
- Em dash overuse (—)
- Rule of three everywhere
- Throat-clearing openers ("In today's digital landscape...")
- Generic conclusions ("In conclusion, it's clear that...")
- Vague attributions ("Studies show...")
- Parallel list structures with identical sentence openings
- Negative parallelism ("It's not just X — it's Y")
Present the draft and confirm before advancing.
Save state to memory as [Content Writer] Current Project - Draft.
Phase 4: Verify (/writer:verify)
Goal: STE compliance gate + SEO check + anti-AI audit before shipping.
Always load references/ste-writing-rules.md and references/anti-ai-checklist.md for this phase.
STE compliance gate (MANDATORY — blocking):
- Run
node scripts/ste-lint.js --gate=<platform> <draft-file>on the draft. - The linter resolves the tier from the platform/format and applies the threshold. It exits 0 on PASS, 1 on FAIL.
- Hard-zero on every tier:
marketing_adjective== 0 andbanned_word== 0. - Thresholds: strict (
total== 0), prose (total_per100w<= 3.0), social (total_per100w<= 4.0); em dashes limited by tier. - If it FAILS: fix the draft against
references/ste-writing-rules.md, re-run, and repeat until PASS. Never lower the threshold, skip the gate, or ship a failing draft. - Record
ste_gate: passandste_per100win project state. Ship refuses to run unlessste_gateispass.
SEO check (claude-seo):
- Check if claude-seo is available
- If yes: run analysis, present findings, apply recommendations
- If no: skip with warning, provide manual SEO checklist
Anti-AI audit (humanizer):
- Check if humanizer is available
- If yes: run audit, present AI pattern count, apply fixes
- If no: use
references/anti-ai-checklist.mdfor manual audit
Manual quality checklist:
- Achieves stated goal from discussion phase
- Follows selected framework structure
- Matches brand voice from profile
- Every claim is specific (no vague superlatives)
- Social proof is attributed with names and titles
- CTAs are first-person and action-specific
- No AI writing patterns remaining
Present findings and apply fixes before advancing.
Save verified state to memory as [Content Writer] Current Project - Verified.
Phase 5: Ship (/writer:ship)
Goal: Save to file and deliver with publishing notes.
Output path: content-writer-output/[type]/[NNN]-[slug].md
Directory structure:
content-writer-output/
├── profile/ (PROFILE.md, PRODUCTS.md, CTAS.md, CASE-STUDIES.md)
├── blog/
├── linkedin/
├── facebook/
├── instagram/
├── twitter/
├── email/
├── sales/
├── seo/
└── packages/[name]/ (multi-platform packages)
Frontmatter to include:
---
title: [Title]
platform: [Platform]
framework: [Framework used]
word_count: [Count]
created: [Date]
author: [From profile]
status: draft
seo:
meta_title: [Meta title]
meta_description: [Meta description]
keywords: [Keywords]
---
Publishing notes are platform-specific. Key reminders:
- Blog: upload to CMS, add featured image, set tags
- LinkedIn: link goes in first comment, post at 12–6 PM Tue–Thu, reply to comments in first hour
- Twitter/X: post as thread, link in final tweet or first reply (never post body), reply in first hour
- Facebook: link in first comment, post at 12–8 PM Tue–Wed, reply to all comments in first hour
- Email: verify unsubscribe link, test render on mobile before sending
Clear project state from memory after shipping. Keep profile in memory.
Auto-Advance (/writer:next)
Detect current phase from memory and run the next one automatically:
- No project → "Use /writer:discuss to start"
- Has Discussion, no Plan → run
/writer:plan - Has Plan, no Draft → run
/writer:execute - Has Draft, no Verified → run
/writer:verify - Has Verified → run
/writer:ship
Profile Creation (/writer:profile-create)
A complete profile takes about 5 minutes and covers 10 topics. Run this conversationally — not as a rigid numbered form. Group related questions, move quickly.
Step 1: URL scanning (optional)
Offer to analyze existing content for tone detection:
"Do you have any URLs I can analyze — blog posts, LinkedIn articles, anything you've
written? The more examples, the better the tone match."
Fetch each URL, analyze for: sentence length patterns, vocabulary level, personality markers, formatting preferences. Present the detected tone profile and confirm.
Step 2: Ten-topic questionnaire (conversational, grouped by theme)
Gather across these topics — adapt the flow to what the user volunteers:
- Brand identity — Name/title, company, domain, what the company does (1–2 sentences)
- Industry and market — Industry/niche, 2–3 competitors, unique positioning
- Target audience — Primary audience (be specific), their pain points, goals, objections
- Voice and tone — 3–5 adjectives, writers/blogs they admire, things to avoid
- Content strategy — Types of content, 3–5 content pillars, primary goal (awareness/leads/conversion/thought leadership)
- Products and services — For each: name, 1-sentence description, target customer, key benefit, price range (optional)
- Case studies — For each: client/project, challenge, solution, results with metrics, can mention publicly?
- CTAs — For each: platform, CTA text, URL
- Publishing workflow — Where they publish, approval process, preferred output format
- SEO strategy — Target keywords (5–10), SEO priority level, any constraints
Step 3: Confirm and save
Present a summary of the full profile. On confirmation:
- Save to memory:
[Content Writer] Writer Profile - Save to files:
content-writer-output/profile/PROFILE.md,PRODUCTS.md,CTAS.md,CASE-STUDIES.md
Other Commands
/writer:profile-view — Display current profile from memory or profile files
/writer:profile-edit — Edit specific fields (products, CTAs, case studies, tone)
/writer:profile-delete — Delete profile from memory and files (confirm before deleting)
/writer:status — Show current phase, profile status, dependency availability, next step
/writer:help — Show all commands and quick start instructions
/writer:update — Check npm registry for updates, show changelog preview, confirm before upgrading
Update Check
On first command of each session (once only):
- Read
~/.claude/skills/content-writer/.version - Check
npm view claude-content-writer version - If newer version exists and not shown this session, display:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📦 Content Writer Update Available
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Current: v{current} → Latest: v{latest}
Run /writer:update to upgrade.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Mark as shown in session memory. Then continue with the user's command.
Graceful Degradation
When claude-seo or humanizer are unavailable:
⚠ Note: [dependency] not available. [Check] skipped.
Content will still be generated. Install dependencies for full quality assurance.
Use references/anti-ai-checklist.md as the manual fallback for the humanizer check.
Use a basic SEO checklist (keyword in title, meta description present, H1 exists) as
fallback for claude-seo.
Storage Pattern
Memory — Runtime fast access. Stores: writer profile, current project state (5 keys).
Files — Permanent. Stores: profile files, all generated content with frontmatter.
On save: write file first, update memory second. On load: check memory first, fall back to file, sync memory from file if needed.