Skills DirectorySkills Directory
SkillsLearnSecurityCategoriesDocsBlogPro
Sign InSubmit Skill
Skills Directory

Security-tested agent skills for Claude, coding agents, and AI workflows.

Directory

  • Browse Skills
  • All Skills A–Z
  • Claude Skills
  • Claude Code Skills
  • Agent Skills
  • Categories
  • Authors
  • Submit a Skill

Learn

  • Learn Hub
  • Install Claude Skills
  • Write SKILL.md
  • Skills vs MCP
  • Directories Compared

Security

  • Security
  • Methodology
  • Secure Claude Skills
  • Security Badges
  • Chrome Extension
  • Skill Manager

Company

  • About
  • Community
  • Blog
  • API Docs
  • Advertise

2026 Skills Directory. All rights reserved.

ProTermsPrivacyRefunds
Back to skills

Blog Brand

ASecurity

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 ...

2 stars
0 votes
0 copies
2 views
Added 9/29/2026
ai-agentsgoexpressgit

Works with

cli

Security Analysis

A100/100

Scanned 9/29/2026

$npx -y skills add aicodedecode/awesome-muse-skills --skill blog-brand --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Blog Brand?

Add the live security badge to your README — it updates automatically with every re-scan.

Security grade badge for Blog Brand
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/aicodedecode-blog-brand/badge)](https://www.skillsdirectory.com/skills/aicodedecode-blog-brand)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
Files
SKILL.md
---
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:

```markdown
# 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:

```markdown
# 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])
```

## Show Workflow

1. Check for `BRAND.md` and `VOICE.md` at project root.
2. If both exist, print a summary table (key sections only) and the file paths.
3. If one or both are missing, print which are missing and suggest `/blog brand init`.

## Update Workflow

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.

## Integration with the blog orchestrator

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.

## Relationship to blog-persona

| 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.

## Error Handling

- **Project root unclear**: ask the user where to write the files. Default is the current working directory.
- **Files already exist on init**: ask whether to overwrite or run update instead.
- **Persona referenced but missing**: ask whether to leave the persona reference blank or create one.
- **Reader provides minimal answers**: prompt for at least 2 audience bullets and 3 editorial rules; refuse to write skeletons.

Attribution

aicodedecodeaicodedecode
View sourceSee grades on GitHubMore from aicodedecode →
SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments (0)

No comments yet. Be the first to comment!

SSkills DirectorySkills Directory

Ship a skill? Prove it's safe.

Free 120-pattern security scan, letter grade, and an embeddable README badge.

Submit a skill

Related Skills

Caveman

Terse caveman voice: answer first, fluff gone, every technical fact kept. Use for /caveman, "caveman mode", "talk like caveman", "be brief", "less tokens". Stays on until "stop caveman" or "normal mode".

1100021 votes

Hyperplan

Adversarial multi-agent planning skill. Self-orchestrates 5 hostile category members (unspecified-low, unspecified-high, deep, ultrabrain, artistry) via team-mode for ruthless cross-critique debate, distills only the defensible insights, then MANDATORILY hands the distilled insight bundle to the `plan` agent for executable plan formalization. Use when planning needs maximum rigor and surfacing of weak assumptions, blind spots, and over-engineering. Triggers: 'hyperplan', 'hpp', '/hyperplan', ...

698431 votes

Writing Skills

Create and manage Claude Code skills in HASH repository following Anthropic best practices. Use when creating new skills, modifying skill-rules.json, understanding trigger patterns, working with hooks, debugging skill activation, or implementing progressive disclosure. Covers skill structure, YAML frontmatter, trigger types (keywords, intent patterns), UserPromptSubmit hook, and the 500-line rule. Includes validation and debugging with SKILL_DEBUG. Examples include rust-error-stack, cargo-dep...

3931 votes

Mcp Code Execution

Routes multi-tool workflows through MCP servers for large datasets and pipelines. Use when Bash tool overhead is limiting throughput on data-heavy tasks.

3421 votes

catchup

Recovers the conversation and failed tool calls of a previous Codex, Amp, Claude Code, Antigravity, Cline, Copilot CLI, Cursor, DeepSeek Harness, Grok Build, Kimi, OpenCode, Pi Agent, or ZCode session. Use when the user says "catch up", "what did the last session do", "get me up to speed", "I switched agents", asks to recover/summarize a previous session before continuing, or asks to diagnose or report a catchup failure. Do NOT use for the current conversation, git history, or any non-agent log.

741 votes
View all in ai-agents →