$npx -y skills add AgriciDaniel/claude-blog --skill blog-brandEstablish durable brand and voice context for cross-skill consumption. Generates BRAND.md (audience, positioning, do/don't editorial rules, taboo phrases, competitor differentiation) and VOICE.md (existing persona JSON re-expressed as readable prose), both written to the project
| 1 | # Blog Brand: Durable Editorial Context |
| 2 | |
| 3 | Generates two project-root files that every blog sub-skill auto-loads when present: |
| 4 | |
| 5 | - `BRAND.md`: who the audience is, what the brand stands for, what to never say |
| 6 | - `VOICE.md`: how the brand sounds, structurally and lexically |
| 7 | |
| 8 | These are the editorial equivalent of impeccable's PRODUCT.md / DESIGN.md pattern: persistent context that survives across sessions and propagates to every command. |
| 9 | |
| 10 | ## Why this exists |
| 11 | |
| 12 | Today, persona JSON (from `blog-persona`) is loaded by some skills and not others. Topic-cluster context lives inside cluster vaults. Competitor positioning lives nowhere. Each blog command re-derives "what is the brand" from whatever context it has. |
| 13 | |
| 14 | `BRAND.md` and `VOICE.md` fix this: one canonical source, loaded by the `blog` orchestrator at the start of every command. |
| 15 | |
| 16 | When neither file exists, behavior is unchanged from v1.7.1. Backward compatible. |
| 17 | |
| 18 | ## Commands |
| 19 | |
| 20 | | Command | Purpose | |
| 21 | |---|---| |
| 22 | | `/blog brand init` | Interactive interview, writes BRAND.md and VOICE.md to project root | |
| 23 | | `/blog brand show` | Display current contents (or report missing) | |
| 24 | | `/blog brand update` | Re-run the interview with current values as defaults | |
| 25 | |
| 26 | ## Init Workflow |
| 27 | |
| 28 | Run the 5-step interactive interview. Ask each step, wait for response, then proceed. If `blog-persona` JSON already exists, pre-fill voice answers from it. |
| 29 | |
| 30 | ### Step 1: Audience |
| 31 | |
| 32 | Ask: |
| 33 | - **Primary audience role** (e.g. "head of marketing at a 50-500 person B2B SaaS") |
| 34 | - **Secondary audience** (optional) |
| 35 | - **Reader expertise level**: beginner / intermediate / advanced / mixed |
| 36 | - **Problems the reader is actively trying to solve** (3 to 5 bullets) |
| 37 | - **Common misconceptions the audience holds** (used to anchor information gain) |
| 38 | |
| 39 | ### Step 2: Positioning |
| 40 | |
| 41 | Ask: |
| 42 | - **One-sentence brand mission** (what the brand helps people do) |
| 43 | - **Distinctive point of view** (the contrarian or non-obvious belief that shapes content) |
| 44 | - **What this brand is NOT** (anti-positioning, what to never be confused with) |
| 45 | - **Top 3 direct competitors** with the one-line differentiator vs each |
| 46 | |
| 47 | ### Step 3: Editorial rules |
| 48 | |
| 49 | Ask: |
| 50 | - **Do list** (3 to 7 things the blog will always do; e.g. "cite primary sources only," "name the practitioner not the product") |
| 51 | - **Don't list** (3 to 7 things the blog will never do; e.g. "no clickbait titles," "no listicle filler") |
| 52 | - **Taboo phrases** (specific words or phrases this brand never uses; complements but is separate from the AI-detection blocklist) |
| 53 | - **Required disclosures** (e.g. affiliate disclosure, AI-content disclosure, conflict-of-interest patterns) |
| 54 | |
| 55 | ### Step 4: Topic boundaries |
| 56 | |
| 57 | Ask: |
| 58 | - **Topics fully in scope** (core content pillars) |
| 59 | - **Topics partially in scope** (adjacent; covered only with original angle) |
| 60 | - **Topics out of scope** (will not cover; redirect to partner content) |
| 61 | - **Recurring formats / column names** if any (e.g. "Monthly Field Notes," "Reader Q&A") |
| 62 | |
| 63 | ### Step 5: Voice (auto-fill from blog-persona if present) |
| 64 | |
| 65 | Ask: |
| 66 | - **Pronoun stance**: first-person (we / I), second-person (you), third-person (the team), or mixed |
| 67 | - **Acceptable contractions**: full / partial / none |
| 68 | - **Sentence ceiling**: max words per sentence as a hard cap |
| 69 | - **Paragraph ceiling**: max words per paragraph (default 150) |
| 70 | - **Headline patterns to favor**: numbered / question / promise / statement |
| 71 | - **Headline patterns to avoid**: any patterns banned for this brand |
| 72 | - **Summary box label**: from blog-persona, or pick one |
| 73 | |
| 74 | ## Output Files |
| 75 | |
| 76 | ### BRAND.md template |
| 77 | |
| 78 | Write to project root as: |
| 79 | |
| 80 | ```markdown |
| 81 | # Brand Context |
| 82 | |
| 83 | > This file is auto-loaded by all blog sub-skills. Last updated: YYYY-MM-DD. |
| 84 | |
| 85 | ## Audience |
| 86 | |
| 87 | - **Primary**: [role + context] |
| 88 | - **Secondary**: [if any] |
| 89 | - **Expertise**: [level] |
| 90 | - **Active problems**: |
| 91 | - [problem 1] |
| 92 | - [problem 2] |
| 93 | - [problem 3] |
| 94 | - **Common misconceptions**: |
| 95 | - [misconception 1] |
| 96 | - [misconception 2] |
| 97 | |
| 98 | ## Positioning |
| 99 | |
| 100 | - **Mission**: [one sentence] |
| 101 | - **Distinctive POV**: [contrarian or non-obvious belief] |
| 102 | - **What we are NOT**: [anti-positioning] |
| 103 | - **Competitors**: |
| 104 | - [Competitor A]: [our one-line differentiator] |
| 105 | - [Competitor B]: [our one-line differentiator] |
| 106 | - [Competitor C]: [our one-line differentiator] |
| 107 | |
| 108 | ## Editorial Rules |
| 109 | |
| 110 | ### Always do |
| 111 | - [rule 1] |
| 112 | - [rule 2] |
| 113 | - [rule 3] |
| 114 | |
| 115 | ### |