Skip to content
Development
Skill

/voice-writer

Unified voice content generation pipeline with mandatory validation and joy-check. 13-phase pipeline: LOAD, GROUND, STATS-CHECKPOINT, GENERATE, HOOK-GATE, VALIDATE, REFINE, VARIETY-GATE, JOY-CHECK, ANTI-AI, CLOSE-GATE, OUTPUT, CLEANUP. Use when writing articles, blog posts, or

From plugin
vexjoy-agent
421122 skills198 agents11 commands76 hooks
Install
$ npx -y skills add notque/vexjoy-agent --skill voice-writer --agent claude-code

How it fires

How this skill 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.
  • Slash command/voice-writer

Context preview

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

Unified voice content generation pipeline with mandatory validation and joy-check. 13-phase pipeline: LOAD, GROUND, STATS-CHECKPOINT, GENERATE, HOOK-GATE, VALIDATE, REFINE, VARIETY-GATE, JOY-CHECK, ANTI-AI, CLOSE-GATE, OUTPUT, CLEANUP. Use when writing articles, blog posts, or

SKILL.md

voice-writer.SKILL.md
name: voice-writer
description: |
  Unified voice content generation pipeline with mandatory validation and
  joy-check. 13-phase pipeline: LOAD, GROUND, STATS-CHECKPOINT, GENERATE,
  HOOK-GATE, VALIDATE, REFINE, VARIETY-GATE, JOY-CHECK, ANTI-AI, CLOSE-GATE,
  OUTPUT, CLEANUP. Use when writing articles, blog posts, or any content that
  uses a voice profile. Use for "write article", "blog post", "write in voice",
  "generate content", "draft article", "write about".
user-invocable: true
argument-hint: "<topic or title>"
command: /voice-writer
context: fork
allowed-tools:
  - Read
  - Write
  - Bash
  - Grep
  - Glob
  - Edit
  - Task
  - Skill
routing:
  force_route: true
  triggers:
    - "write article"
    - "blog post"
    - "write in voice"
    - "blog post voice"
    - "content pipeline"
    - "publish article"
    - "draft post"
    - "write about"
    - "blog post writer"
    - "/write"
    - "voice pipeline"
    - "voice-writer"
    - "voice writer"
    - "use voice-writer"
    - "use voice writer"
    - "rewrite article"
    - "rewrite this article"
    - "write blog post"
    - "full voice pipeline"
    - "run voice pipeline"
    - "use voice pipeline"
    - "write post"
    - "draft article"
    - "generate content"
    - "article about"
    - "write for blog"
    - "write for website"
    - "write essay"
    - "write piece"
    - "ghost write"
  not_for: "scheduling or calendaring a content series (use content-calendar); drafting interpersonal emails, memos, meeting summaries, or professional pushback messages (use professional-communication). This skill generates articles and blog posts from a voice profile."
  category: voice
  pairs_with:
    - voice-validator
    - joy-check

Voice Writer — 13-Phase Pipeline

> **Mandatory enforcement**: This pipeline is REQUIRED for all voice-profiled content. No article should be published without passing all 13 phase gates.

Pipeline Overview

LOAD → GROUND → STATS-CHECKPOINT → GENERATE → HOOK-GATE → VALIDATE → REFINE → VARIETY-GATE → JOY-CHECK → ANTI-AI → CLOSE-GATE → OUTPUT → CLEANUP

Execution Model (MANDATORY — DO NOT COLLAPSE PHASES)

**Each phase runs as a SEPARATE agent dispatch.** The orchestrator (parent session) dispatches one agent per phase sequentially. Each agent: 1. Reads the input artifact from the previous phase 2. Loads the selected voice profile and any phase-specific references 3. Executes the phase steps 4. Writes its output artifact to disk 5. Reports pass/fail on the phase gate

**No single agent runs multiple phases.** This ensures each phase gets a fresh context window with the full voice profile loaded, preventing context drift and ensuring the voice is the primary authority at every step. An orchestrator that attempts to combine phases or skip agent dispatches is violating this rule.

**Phase artifacts are files on disk**, not context passed between agents. Each phase reads and writes to well-known paths:

| Phase | Input Artifact | Output Artifact | |-------|---------------|-----------------| | 1. LOAD | User request + existing draft (if any) | `.voice-phase/01-load.json` (profile metadata, paths) | | 2. GROUND | `.voice-phase/01-load.json` + source material | `.voice-phase/02-grounding.md` | | 3. STATS-CHECKPOINT | `.voice-phase/01-load.json` | `.voice-phase/03-stats-baseline.json` | | 4. GENERATE | `.voice-phase/02-grounding.md` + stats baseline | `.voice-phase/04-draft.md` | | 5. HOOK-GATE | `.voice-phase/04-draft.md` | `.voice-phase/05-hook-score.json` + updated draft | | 6. VALIDATE | `.voice-phase/04-draft.md` (or updated) | `.voice-phase/06-validation-report.json` | | 7. REFINE | Draft + `.voice-phase/06-validation-report.json` | `.voice-phase/07-refined-draft.md` | | 8. VARIETY-GATE | `.voice-phase/07-refined-draft.md` | `.voice-phase/08-variety-score.json` + updated draft | | 9. JOY-CHECK | Latest draft | `.voice-phase/09-joy-report.json` + updated draft | | 10. ANTI-AI | Latest draft | `.voice-phase/10-antiai-report.json` + updated draft | | 11. CLOSE-GATE | Latest draft | `.voice-phase/11-close-score.json` + updated draft | | 12. OUTPUT | Latest draft + all reports | Final file in `content/posts/` + `.voice-pipeline-complete` | | 13. CLEANUP | All `.voice-phase/` artifacts | Summary report (artifacts cleaned up) |

**The orchestrator creates `.voice-phase/` directory at the start and each agent writes its artifact there. Phase N agent MUST verify Phase N-1 artifact exists before starting.**

**Every phase agent prompt MUST include:**

  • "Read the selected voice profile's SKILL.md at `/home/feedgen/.claude/skills/{voice_profile}/skill/SKILL.md`"
  • "Read the writing samples at `/home/feedgen/.claude/skills/{voice_profile}/references/samples/`"
  • "Read `profile.json` at `/home/feedgen/.claude/skills/{voice_profile}/profile.json`"
  • The specific phase instructions from this skill file
  • "Write your output artifact to `.voice-phase/NN-name.ext`"

Where `{voice_profile}` is the voice skill selected in Phase 1 (e.g., `voice-myprofile`, `voice-myvoice`).

**Environment**: The orchestrator sets `VOICE_WRITER_ACTIVE=1` before dispatching any phase agent. This allows the pipeline-phase-gate hook to permit writes to `content/posts/`.

---

Phase 1: LOAD

**Goal**: Load the correct voice profile and all reference materials.

**Steps**: 0. Set environment: `export VOICE_WRITER_ACTIVE=1` (allows pipeline-phase-gate to permit writes during pipeline execution) 1. Determine target voice from user context or explicit request. Available voice profiles:

  • Any `voice-*` skill in `~/.claude/skills/` — run `ls ~/.claude/skills/ | grep voice-` to see available profiles

2. Read the voice profile's `profile.json` and all files under `references/` 3. Read the target site's `CLAUDE.md` for structural conventions (front matter template, slug rules, tags) 4. If a topic-brainstormer outline exists, load it as structural input

**Gate**: Voice profile loaded and confirmed. Profile name echoed back. P

Read more
Ships withvexjoy-agent

Essays and writing behind this toolkit live at vexjoy.com. VexJoy Agent connects plain-English requests to specialist agents, skills, and workflows. /do selects the knowledge and tools needed for your task.

Get the whole plugin

Other skills on vexjoy-agent.