configs/skills/blog-brand/SKILL.md
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, all blog sub-skills auto-load these files before writing or reviewing. 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".
npx skillsauth add shenxingy/claude-code-kit blog-brandInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Generates two project-root files that every blog sub-skill auto-loads when present:
BRAND.md: who the audience is, what the brand stands for, what to never sayVOICE.md: how the brand sounds, structurally and lexicallyThese are the editorial equivalent of impeccable's PRODUCT.md / DESIGN.md pattern: persistent context that survives across sessions and propagates to every command.
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.
| 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 |
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.
Ask:
Ask:
Ask:
Ask:
Ask:
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
- **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]
Write to project root as:
# Voice Context
> This file is auto-loaded by all blog sub-skills. Last updated: YYYY-MM-DD.
## Pronoun stance
[first-person / second-person / third-person / mixed]
## Lexical rules
- **Contractions**: [full / partial / none]
- **Sentence ceiling**: [N words max]
- **Paragraph ceiling**: [N words max, default 150]
- **Summary label**: [Key Takeaways / TL;DR / etc.]
## Headline patterns
- **Favor**: [list]
- **Avoid**: [list]
## Voice fingerprint (from blog-persona)
- Funny vs serious: [0.0 to 1.0]
- Formal vs casual: [0.0 to 1.0]
- Respectful vs irreverent: [0.0 to 1.0]
- Enthusiastic vs matter-of-fact: [0.0 to 1.0]
## Readability target
- Audience tier: [consumer / professional / technical]
- Flesch Grade: [range]
- Flesch Ease: [range]
## Reference samples
- [URL 1] (extracted patterns: [summary])
- [URL 2] (extracted patterns: [summary])
BRAND.md and VOICE.md at project root./blog brand init.Same as Init, but pre-fills every answer with the current value. The user can press enter to accept or type a new value. After collecting all answers, overwrite both files with the new contents and update the Last updated: line.
When /blog write, /blog rewrite, /blog brief, /blog outline, /blog calendar, or /blog strategy runs, the orchestrator (skills/blog/SKILL.md) checks for BRAND.md and VOICE.md at the project root. If present, the contents are injected into the system prompt for downstream agents (blog-researcher, blog-writer, blog-seo, blog-reviewer).
If absent, behavior is unchanged. The orchestrator does not prompt the user to create them; they are opt-in context.
| Concern | blog-persona | blog-brand | |---|---|---| | Structured persona JSON for programmatic use | Yes | No | | Readable brand context for cross-skill prompts | No | Yes | | Audience and positioning | No | Yes | | Taboo phrases and editorial don'ts | Partial (don't list) | Full (taboo + disclosures + scope) | | Competitor differentiation | No | Yes | | Topic boundaries | No | Yes | | Voice fingerprint (tone sliders) | Yes (canonical) | Mirror (read-only) |
blog-brand does not replace blog-persona; it consumes it. The persona JSON remains the source of truth for tone dimensions, sentence-length distribution, and contraction frequency. VOICE.md mirrors the readable parts so prompts are self-contained.
If no persona exists when /blog brand init runs, the voice questions still produce a VOICE.md. Users who want programmatic enforcement can run /blog persona create after.
testing
Test-suite diet — consolidate near-identical tests into table-driven cases, delete trivial/mock-only/brittle tests, and report every piece of coverage intentionally given up. Counterweight to AI test bloat that erodes loop clock speed.
development
In-session iterative loop — keeps Claude running in the current session until a task is done. Unlike /loop (which spawns background workers), /iloop stays in the current session and re-prompts each iteration via Stop hook. Use for: 'keep fixing until tests pass', 'iterate until this feature works', autonomous debugging. Triggers on: '/iloop', 'in-session loop', 'keep iterating', 'loop until done'.
development
Compose high-converting emails using proven copy frameworks (PAS, AIDA, BAB, FAB, 4Ps). Generates subject line variants with scores, responsive HTML templates with dark mode support, plain-text fallback, and preheader recommendations. Optimized for cold outreach, newsletters, product launches, promotions, and transactional emails. Adapts to user context from email-profile.md.
tools
Designs complete email automation sequences with timing, subject lines, copy, and conditional logic. Supports welcome series, nurture campaigns, re-engagement, abandoned cart, post-purchase, review requests, and custom sequences. Adapts sequence type, cadence, frameworks, and conditional branching to business context. Use when user wants to create an automated email series triggered by subscriber actions or time intervals.