/blog-brand
Establish 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
$ npx -y skills add AgriciDaniel/claude-blog --skill blog-brand --agent claude-codeHow 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
/blog-brand
Context preview
The summary Claude sees to decide when to auto-load this skill.
Establish 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
SKILL.md
blog-brand.SKILL.mdname: blog-brand
description: >
Establish 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 root. When
present, the blog orchestrator auto-loads these files for write, rewrite,
brief, outline, calendar, and strategy workflows. Pairs with blog-persona, which manages the structured persona
JSON. Use when user says "blog brand", "create brand context", "brand
voice doc", "BRAND.md", "VOICE.md", "establish editorial brand",
"brand guidelines for blog".
user-invokable: true
argument-hint: "[init|show|update]"
license: MIT
Blog Brand: Durable Editorial Context
Generates two project-root files that the blog orchestrator auto-loads for supported writing and planning commands when present:
- `BRAND.md`: who the audience is, what the brand stands for, what to never say
- `VOICE.md`: how the brand sounds, structurally and lexically
These are the editorial equivalent of impeccable's PRODUCT.md / DESIGN.md pattern: persistent context that survives across sessions and propagates to every command.
Why this exists
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.
`BRAND.md` and `VOICE.md` fix this: one canonical source, loaded by the `blog` orchestrator at the start of every command.
When neither file exists, behavior is unchanged from v1.7.1. Backward compatible.
Commands
| Command | Purpose | |---|---| | `/blog brand init` | Interactive interview, writes BRAND.md and VOICE.md to project root | | `/blog brand show` | Display current contents (or report missing) | | `/blog brand update` | Re-run the interview with current values as defaults |
Init Workflow
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.
Step 1: Audience
Ask:
- **Primary audience role** (e.g. "head of marketing at a 50-500 person B2B SaaS")
- **Secondary audience** (optional)
- **Reader expertise level**: beginner / intermediate / advanced / mixed
- **Problems the reader is actively trying to solve** (3 to 5 bullets)
- **Common misconceptions the audience holds** (used to anchor information gain)
Step 2: Positioning and Canonical Entity
Ask:
- **Official entity name** (legal or public brand name)
- **Homepage URL** (canonical brand front door)
- **Logo URL or file path** (preferred square or SVG asset)
- **sameAs profiles** (LinkedIn, X, YouTube, Crunchbase, GitHub, or other official profiles)
- **Wikidata Q-ID** if one exists; leave blank if not notable
- **One-sentence brand mission** (what the brand helps people do)
- **Distinctive point of view** (the contrarian or non-obvious belief that shapes content)
- **What this brand is NOT** (anti-positioning, what to never be confused with)
- **Top 3 direct competitors** with the one-line differentiator vs each
Step 3: Editorial rules
Ask:
- **Do list** (3 to 7 things the blog will always do; e.g. "cite primary sources only," "name the practitioner not the product")
- **Don't list** (3 to 7 things the blog will never do; e.g. "no clickbait titles," "no listicle filler")
- **Taboo phrases** (specific words or phrases this brand never uses; separate
from the repository's optional project style list)
- **Required disclosures** (e.g. affiliate disclosure, AI-content disclosure, conflict-of-interest patterns)
Step 4: Topic boundaries
Ask:
- **Topics fully in scope** (core content pillars)
- **Topics partially in scope** (adjacent; covered only with original angle)
- **Topics out of scope** (will not cover; redirect to partner content)
- **Recurring formats / column names** if any (e.g. "Monthly Field Notes," "Reader Q&A")
Step 5: Voice (auto-fill from blog-persona if present)
Ask:
- **Pronoun stance**: first-person (we / I), second-person (you), third-person (the team), or mixed
- **Acceptable contractions**: full / partial / none
- **Sentence ceiling**: max words per sentence as a hard cap
- **Paragraph ceiling**: max words per paragraph (default 150)
- **Headline patterns to favor**: numbered / question / promise / statement
- **Headline patterns to avoid**: any patterns banned for this brand
- **Summary box label**: from blog-persona, or pick one
Output Files
BRAND.md template
Write to project root as:
# Brand Context
> This file is auto-loaded by all blog sub-skills. Last updated: YYYY-MM-DD.
## Audience
- **Primary**: [role + context]
- **Secondary**: [if any]
- **Expertise**: [level]
- **Active problems**:
- [problem 1]
- [problem 2]
- [problem 3]
- **Common misconceptions**:
- [misconception 1]
- [misconception 2]
## Positioning
- **Official entity name**: [brand/entity]
- **Homepage**: [canonical URL]
- **Logo**: [URL or file path]
- **sameAs profiles**:
- [profile URL 1]
- [profile URL 2]
- **Wikidata Q-ID**: [QID or none]
- **Mission**: [one sentence]
- **Distinctive POV**: [contrarian or non-obvious belief]
- **What we are NOT**: [anti-positioning]
- **Competitors**:
- [Competitor A]: [our one-line differentiator]
- [Competitor B]: [our one-line differentiator]
- [Competitor C]: [our one-line differentiator]
## Editorial Rules
### Always do
- [rule 1]
- [rule 2]
- [rule 3]
### Never do
- [rule 1]
- [rule 2]
- [rule 3]
### Taboo phrases
- [phrase 1]
- [phrase 2]
### Required disclosures
- [disclosure rule]
## Topic Scope
- **In scope**: [pillars]
- **Partial scope**: [adjacent topics]
- **Out of scope**: [topics to refuse]
- **Recurring formats**: [if any]
VOICE.md template
Write to project root as:
# Voice Con
Read more
name: blog-brand description: > Establish 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 root. When present, the blog orchestrator auto-loads these files for write, rewrite, brief, outline, calendar, and strategy workflows. Pairs with blog-persona, which manages the structured persona JSON. Use when user says "blog brand", "create brand context", "brand voice doc", "BRAND.md", "VOICE.md", "establish editorial brand", "brand guidelines for blog". user-invokable: true argument-hint: "[init|show|update]" license: MIT
Blog Brand: Durable Editorial Context
Generates two project-root files that the blog orchestrator auto-loads for supported writing and planning commands when present:
- `BRAND.md`: who the audience is, what the brand stands for, what to never say
- `VOICE.md`: how the brand sounds, structurally and lexically
These are the editorial equivalent of impeccable's PRODUCT.md / DESIGN.md pattern: persistent context that survives across sessions and propagates to every command.
Why this exists
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.
`BRAND.md` and `VOICE.md` fix this: one canonical source, loaded by the `blog` orchestrator at the start of every command.
When neither file exists, behavior is unchanged from v1.7.1. Backward compatible.
Commands
| Command | Purpose | |---|---| | `/blog brand init` | Interactive interview, writes BRAND.md and VOICE.md to project root | | `/blog brand show` | Display current contents (or report missing) | | `/blog brand update` | Re-run the interview with current values as defaults |
Init Workflow
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.
Step 1: Audience
Ask:
- **Primary audience role** (e.g. "head of marketing at a 50-500 person B2B SaaS")
- **Secondary audience** (optional)
- **Reader expertise level**: beginner / intermediate / advanced / mixed
- **Problems the reader is actively trying to solve** (3 to 5 bullets)
- **Common misconceptions the audience holds** (used to anchor information gain)
Step 2: Positioning and Canonical Entity
Ask:
- **Official entity name** (legal or public brand name)
- **Homepage URL** (canonical brand front door)
- **Logo URL or file path** (preferred square or SVG asset)
- **sameAs profiles** (LinkedIn, X, YouTube, Crunchbase, GitHub, or other official profiles)
- **Wikidata Q-ID** if one exists; leave blank if not notable
- **One-sentence brand mission** (what the brand helps people do)
- **Distinctive point of view** (the contrarian or non-obvious belief that shapes content)
- **What this brand is NOT** (anti-positioning, what to never be confused with)
- **Top 3 direct competitors** with the one-line differentiator vs each
Step 3: Editorial rules
Ask:
- **Do list** (3 to 7 things the blog will always do; e.g. "cite primary sources only," "name the practitioner not the product")
- **Don't list** (3 to 7 things the blog will never do; e.g. "no clickbait titles," "no listicle filler")
- **Taboo phrases** (specific words or phrases this brand never uses; separate
from the repository's optional project style list)
- **Required disclosures** (e.g. affiliate disclosure, AI-content disclosure, conflict-of-interest patterns)
Step 4: Topic boundaries
Ask:
- **Topics fully in scope** (core content pillars)
- **Topics partially in scope** (adjacent; covered only with original angle)
- **Topics out of scope** (will not cover; redirect to partner content)
- **Recurring formats / column names** if any (e.g. "Monthly Field Notes," "Reader Q&A")
Step 5: Voice (auto-fill from blog-persona if present)
Ask:
- **Pronoun stance**: first-person (we / I), second-person (you), third-person (the team), or mixed
- **Acceptable contractions**: full / partial / none
- **Sentence ceiling**: max words per sentence as a hard cap
- **Paragraph ceiling**: max words per paragraph (default 150)
- **Headline patterns to favor**: numbered / question / promise / statement
- **Headline patterns to avoid**: any patterns banned for this brand
- **Summary box label**: from blog-persona, or pick one
Output Files
BRAND.md template
Write to project root as:
# Brand Context > This file is auto-loaded by all blog sub-skills. Last updated: YYYY-MM-DD. ## Audience - **Primary**: [role + context] - **Secondary**: [if any] - **Expertise**: [level] - **Active problems**: - [problem 1] - [problem 2] - [problem 3] - **Common misconceptions**: - [misconception 1] - [misconception 2] ## Positioning - **Official entity name**: [brand/entity] - **Homepage**: [canonical URL] - **Logo**: [URL or file path] - **sameAs profiles**: - [profile URL 1] - [profile URL 2] - **Wikidata Q-ID**: [QID or none] - **Mission**: [one sentence] - **Distinctive POV**: [contrarian or non-obvious belief] - **What we are NOT**: [anti-positioning] - **Competitors**: - [Competitor A]: [our one-line differentiator] - [Competitor B]: [our one-line differentiator] - [Competitor C]: [our one-line differentiator] ## Editorial Rules ### Always do - [rule 1] - [rule 2] - [rule 3] ### Never do - [rule 1] - [rule 2] - [rule 3] ### Taboo phrases - [phrase 1] - [phrase 2] ### Required disclosures - [disclosure rule] ## Topic Scope - **In scope**: [pillars] - **Partial scope**: [adjacent topics] - **Out of scope**: [topics to refuse] - **Recurring formats**: [if any]
VOICE.md template
Write to project root as:
# Voice Con
claude-blog is a Claude Code skill suite that writes, optimizes, audits, localizes, and refreshes blog content at scale. Every article is evaluated for Google-aligned usefulness and internal AI citation readiness heuristics.
Repo: AgriciDaniel/claude-blog
Other skills on claude-blog.
- /blog-analyze
Audit and score blog posts on a 5-category 100-point scoring system covering content quality, SEO optimization, E-E-A-T signals, technical elements, and AI citation readiness. Includes advisory editorial style diagnostics (sentence-length variation, configured phrase lists,
Open skill - /blog-audio
Generate audio narration of blog posts using Google Gemini TTS. Supports summary narration, full article read-aloud, and two-speaker podcast/dialogue mode with 30 voice options. Outputs MP3 with HTML5 audio embed code. Works standalone via /blog audio or internally from
Open skill - /blog-audit
Full-site blog health assessment scanning all blog files for quality scores, orphan pages, topic cannibalization, stale content, and AI citation readiness. Runs canonical batch analysis before site-wide checks. Produces per-post scores and a prioritized action queue. Use when
Open skill - /blog-brief
Generate detailed content briefs for blog posts with target keywords, content outlines, competitive analysis, recommended statistics, image and chart suggestions, word count targets, internal linking architecture, template recommendations (12 types), TL;DR drafts,
Open skill - /blog-calendar
Generate editorial calendars for blogs with topic clusters, publishing schedules, material-change reviews, update plans, seasonal opportunities, content mix formula, template integration, and distribution scheduling. Plans monthly or quarterly calendars around reader needs,
Open skill - /blog-cannibalization
Detect keyword cannibalization across blog posts by extracting primary keywords from titles and headings, clustering semantically similar targets, and flagging posts competing for the same search intent. Supports local-only mode (grep-based) and DataForSEO API mode (Page
Open skill

