Design a writing voice through guided questioning — either from scratch or by emulating references — then generate a personalized writer skill and full writing assistant subagent. Takes ~20-25 minutes through a comprehensive questionnaire covering audience, reading level, emotional temperature, pacing, and anti-voice definition.
From lexisimnpx claudepluginhub aaronbassett/agent-foundry --plugin lexisimThis skill uses the workspace's default tool permissions.
assets/writer-agent-template.mdassets/writer-skill-template.mdreferences/ai-tells.mdreferences/anti-voice-catalog.mdreferences/question-bank.mdreferences/reading-level-calibration.mdGuides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Migrates code, prompts, and API calls from Claude Sonnet 4.0/4.5 or Opus 4.1 to Opus 4.5, updating model strings on Anthropic, AWS, GCP, Azure platforms.
Analyzes BMad project state from catalog CSV, configs, artifacts, and query to recommend next skills or answer questions. Useful for help requests, 'what next', or starting BMad.
Design a writing voice through deep, structured questioning. Either build one from scratch through guided preference exploration, or start from reference samples and refine from there. The output is a ready-to-use writer skill and writing assistant agent tuned to the designed voice.
If plan mode is active, exit it now using ExitPlanMode before starting this workflow. All lexisim commands run in execute mode.
Shallow instructions like "write casually" or "be professional" collapse into generic output. Stylometry research shows that writing voice lives in the interplay of independent axes — sentence length variance, vocabulary register, punctuation fingerprints, information density, emotional temperature, and transition patterns. By probing each axis independently and then testing for coherence, this questionnaire produces voice profiles that are richer and more distinctive than any single-paragraph style description could achieve.
All reference files live within this skill's directory. ${CLAUDE_SKILL_DIR} resolves to the directory containing this SKILL.md. Use these exact paths — do not search or glob.
${CLAUDE_SKILL_DIR}/references/question-bank.md${CLAUDE_SKILL_DIR}/references/reading-level-calibration.md${CLAUDE_SKILL_DIR}/references/ai-tells.md${CLAUDE_SKILL_DIR}/references/anti-voice-catalog.md${CLAUDE_SKILL_DIR}/assets/writer-skill-template.md${CLAUDE_SKILL_DIR}/assets/writer-agent-template.mdPhase 1: Entry Path & Setup (~2 min) → Choose path, name profile, set scope
Phase 2: Reference Analysis (~3 min) → Emulate path only — analyze pasted samples
Phase 3: Audience Persona (~3 min) → Who reads this, what they need
Phase 4: Reading Level Calibration (~4 min) → 8 show-don't-tell comparison pairs
Phase 5: Voice Character (~4 min) → Emotional temperature, pacing, structure
Phase 6: Anti-Voice Definition (~3 min) → What this voice is NOT
Phase 7: Implicit Influence Probe (~1 min) → Design path only — name influences
Phase 8: Uncanny Valley Detection (~3 min) → Test paragraphs, collect reactions
Phase 9: Data Extraction (auto) → Build structured handoff document
Phase 10: Analysis & Generation (~1 min) → Sub-agent analyzes + generates files
Total: ~20-25 minutes for a comprehensive voice profile.
Work ONLY with data collected through this questionnaire. Do NOT:
Everything needed to build the voice profile comes from the user's responses to the prompts below.
Present questions Q1-Q3 from the question bank (references/question-bank.md → Phase 1).
PROFILE_NAME. Convert spaces to lowercase kebab-case.SCOPE. Resolve output paths — project scope writes to .claude/skills/ and .claude/agents/ in the current working directory; user scope writes to ~/.claude/skills/ and ~/.claude/agents/.Skip this phase entirely if ENTRY_PATH is "Design from scratch". Proceed directly to Phase 3.
Present questions Q4-Q6 from the question bank (references/question-bank.md → Phase 2).
When the user provides samples (Q4), perform lightweight stylometric analysis on each:
Store both the verbatim samples and the analysis results.
Q5 reveals which dimensions of the reference the user is drawn to versus which are incidental. Use it to weight the Q4 analysis — amplify the dimensions the user calls out, treat uncalled dimensions as secondary.
If the user selects "Add more influences" in Q6, loop back to Q4 and Q5 for additional references. Cap at 3 total reference sets to avoid dilution.
Present questions Q7-Q10 from the question bank (references/question-bank.md → Phase 3).
After collecting all answers, synthesize a brief audience persona summary and confirm with the user: "Here's who we're writing for: [summary]. Sound right?" Use AskUserQuestion with options: "Yes, that's right" / "Close, but let me adjust".
Cross-reference Q8 (knowledge level) with Q9 (reader frustrations) — frustrations often reveal implicit knowledge level assumptions. If the user wants to adjust, collect the correction as free text and update the synthesized persona before proceeding.
Read the reference file references/reading-level-calibration.md for the 8 example pairs.
Present Q11-Q18 from the question bank (references/question-bank.md → Phase 4). For each pair, show both Version A and Version B in full from the calibration file, then present the AskUserQuestion.
Each dimension is tested twice. Average the two responses per dimension:
Build a 4-axis reading level profile:
After all 8 pairs, cross-reference the reading level profile with the audience persona from Phase 3. Flag contradictions and surface them to the user. Common tensions:
For the Emulate path: also compare these preferences against the empirical analysis of reference samples from Q4. If the reference samples sit at a different reading level than the stated preferences, note this — it indicates the user wants to adjust the reference rather than replicate it exactly.
Transitional message:
Now let's get into the personality of this voice — how it sounds, how it moves, how it opens.
Present questions Q19-Q24 from the question bank (references/question-bank.md → Phase 5).
For Q21 (Sentence Structure), this is a show-don't-tell question — present the three preview paragraphs from the question bank before the AskUserQuestion options.
After collecting all voice character answers:
Great, that gives me a clear picture of the voice character. Now let's define what this voice is NOT — sometimes the boundaries matter more than the center.
Read the reference file references/ai-tells.md for archetype descriptions.
Present questions Q25-Q27 from the question bank (references/question-bank.md → Phase 6).
For Q25 (Anti-Voice Archetypes): after the user selects their rejected archetypes, read references/anti-voice-catalog.md and expand each selected archetype to its full list of forbidden phrases, structures, and patterns. Store the expanded pattern lists. If the user selected "The AI Default" archetype in Q25, consider pre-selecting all Q26 options and asking the user to confirm or deselect any they're actually fine with.
After Q26, also ask as free text for any additional banned words or phrases.
After collecting all anti-voice answers, read the Tension Detection section from references/anti-voice-catalog.md. Check ALL collected answers from Phases 3-6 against the tension table.
Compare the user's positive voice choices (emotional temperature, pacing, audience, etc.) against their anti-voice rejections. The common tensions to check include:
If tensions are found, surface them one at a time using the resolution questions from the tension table. For each tension:
Do NOT silently resolve tensions. The resolved tension is one of the most valuable outputs of the entire questionnaire.
Skip this phase if ENTRY_PATH is "Emulate a reference". Proceed directly to Phase 8.
Present Q28 from the question bank (references/question-bank.md → Phase 7).
If the user names a specific source or pastes samples, perform the same lightweight stylometric analysis as Phase 2. Store the results as influence data for the handoff document.
If the user says "nothing comes to mind," accept it and move on. Do not push for an answer.
This phase is not a traditional question — it is a generative test-and-refine loop. The main agent (not a sub-agent) generates test content because it has the full conversation context.
Using ALL collected data from Phases 1-7, generate 2-3 short paragraphs (3-5 sentences each) that demonstrate the designed voice applied to a realistic topic. Choose a topic relevant to the user's stated audience (Q7) and domain context.
Each paragraph should exercise different aspects of the voice:
Show all paragraphs and ask as free text (not AskUserQuestion):
Here are three samples of what this voice sounds like in practice. Read them and tell me: what feels right, what feels off, and what's missing? Be specific — "the tone in paragraph 2 is too aggressive" is more useful than "it's not quite right."
Parse the user's feedback into adjustment categories:
If the feedback is substantial (more than minor tweaks), regenerate the test paragraphs incorporating adjustments and present again. Cap at 3 iterations — if the voice isn't landing after 3 rounds, earlier phases may have internal conflicts that need explicit resolution.
When the user is satisfied (or close enough), confirm:
Are you happy with this voice, or do you want to adjust anything before I generate the skill files?
Record ALL feedback from this phase as calibration notes. Phase 8 feedback is the highest-priority calibration signal — it overrides earlier questionnaire answers when they conflict, because it represents the user's reaction to actual output rather than their prediction of what they'd want.
This step is critical. Before delegating to a sub-agent, compile all collected data into a single structured handoff document. This keeps the sub-agent's context clean and focused.
Tell the user:
I've got everything I need. Give me a moment to analyze and generate your voice profile.
Build the following document by extracting from the conversation. Copy writing samples and free-text responses VERBATIM — do not summarize, clean up, or paraphrase.
# Lexisim Data: {PROFILE_NAME}
## Config
- Profile name: {PROFILE_NAME}
- Entry path: {ENTRY_PATH}
- Scope: {SCOPE}
- Output skill path: {resolved path}
- Output agent path: {resolved path}
- Date: {DATE}
## Reference Samples (if emulate path)
{verbatim pasted samples from Q4}
{lightweight analysis results — sentence metrics, vocabulary register, punctuation fingerprint}
## What User Likes About References (if emulate path)
{verbatim response to Q5}
## Influence Blending (if emulate path)
{Q6 response and any additional references}
## Audience Persona
- Audience type: {Q7 answer}
- Knowledge level: {Q8 answer}
- Reader frustrations: {Q9 answer verbatim}
- Time budget: {Q10 answer}
- Synthesized persona: {the confirmed summary from Phase 3}
## Reading Level Calibration
- Q11 (Vocab Pair 1 — Caching strategy): {A/B/between}
- Q12 (Vocab Pair 2 — API rate limiter): {A/B/between}
- Q13 (Syntax Pair 1 — Feature flag deployment): {A/B/between}
- Q14 (Syntax Pair 2 — Database index): {A/B/between}
- Q15 (Density Pair 1 — Microservices latency): {A/B/between}
- Q16 (Density Pair 2 — Load balancer): {A/B/between}
- Q17 (Scaffold Pair 1 — Environment variables): {A/B/between}
- Q18 (Scaffold Pair 2 — Pull request workflow): {A/B/between}
- 4-axis profile:
- Vocabulary: {simple/moderate/technical}
- Syntax: {direct/moderate/complex}
- Density: {low/moderate/high}
- Scaffolding: {high/moderate/low}
## Voice Character
- Emotional temperature: {Q19 answer}
- Pacing: {Q20 answer}
- Sentence structure: {Q21 answer}
- Transition style: {Q22 answer}
- Opening style: {Q23 answer}
- Personal voice: {Q24 answer}
## Anti-Voice
- Rejected archetypes: {Q25 selections}
- Rejected AI patterns: {Q26 selections}
- Additional rejected phrases: {Q26 freeform additions}
- Emoji preference: {Q27 answer}
- Expanded pattern list: {all forbidden phrases, structures, and patterns from rejected archetypes via anti-voice-catalog}
## Influences (design path — if provided)
{Q28 response}
{analysis results if any samples were provided}
## Influences (emulate path)
{Q4-Q6 responses and analysis}
## Platform Preferences
{Inferred from audience persona, content type context, and voice character. The style-analyzer should adapt voice guidance for common platforms: social media (short-form), blog (long-form), documentation (reference), email (direct). If the user mentioned specific platforms during the questionnaire, note them here. Otherwise, leave as "Not specified — infer from voice character and audience."}
## Tension Resolutions
{each tension surfaced, the resolution question asked, the user's response, and the calibration note derived}
{or "None detected" if no tensions found}
## Uncanny Valley Feedback
- Test paragraph 1 (casual/conversational): {paragraph text}
→ Feedback: {user feedback verbatim}
- Test paragraph 2 (explanatory/technical): {paragraph text}
→ Feedback: {user feedback verbatim}
- Test paragraph 3 (opinionated/persuasive): {paragraph text}
→ Feedback: {user feedback verbatim}
- Iteration notes: {any adjustments made across iterations}
## Cross-Reference Notes
{any conflicts detected between phases and how they were resolved}
## Freeform Notes
{any additional instructions or preferences the user volunteered during the questionnaire that don't fit the categories above — copy verbatim}
{or "None" if nothing extra was provided}
Important: Copy ALL data verbatim. The sub-agent needs raw text for accurate analysis. Do not paraphrase or editorialize.
Use the Agent tool to spawn the style-analyzer sub-agent with the handoff document.
Agent(
subagent_type: "style-analyzer",
description: "Analyze style + generate writer skill and agent",
prompt: "[INSERT FULL HANDOFF DOCUMENT FROM PHASE 9]
TEMPLATE AND REFERENCE FILES TO READ:
- Writer skill template: [resolved path to assets/writer-skill-template.md]
- Writer agent template: [resolved path to assets/writer-agent-template.md]
- AI tells catalog: [resolved path to references/ai-tells.md]
- Anti-voice catalog: [resolved path to references/anti-voice-catalog.md]
OUTPUT LOCATIONS:
- Writer skill: [resolved output skill path]/{PROFILE_NAME}-writer/SKILL.md
- Writer agent: [resolved output agent path]/{PROFILE_NAME}-writer.md
"
)
The style-analyzer agent file contains all analysis and generation instructions. Do NOT include analysis steps in this prompt — let the agent handle them.
Verify the output files were created:
{resolved skill path}/{PROFILE_NAME}-writer/SKILL.md should exist{resolved agent path}/{PROFILE_NAME}-writer.md should existIf either file is missing, report the issue to the user rather than attempting to regenerate in the main context.
Report to the user:
Your writing style has been generated! Two files created:
- Writer skill: {skill path}/{PROFILE_NAME}-writer/SKILL.md
- Writing assistant: {agent path}/{PROFILE_NAME}-writer.md
The writing assistant can draft, revise, critique, and adapt content in the {PROFILE_NAME} voice. Try it by asking it to write something.
This skill should feel like a conversation, not a form. Between phases:
When inputs from different phases disagree, prioritize in this order:
The exception is anti-patterns (Phase 6): these are hard constraints that override everything. If the user says "never do X," the voice never does X, regardless of what other signals suggest.