blog-brand

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Blog Brand: Durable Editorial Context

博客品牌:持久的编辑语境

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 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.
生成两个项目根目录文件,所有博客子Skill在文件存在时会自动加载:
  • BRAND.md
    :受众群体、品牌主张、禁忌内容
  • VOICE.md
    :品牌语调的结构与用词风格
这相当于编辑领域中impeccable的PRODUCT.md / DESIGN.md模式:可跨会话留存并传递至每个命令的持久化语境。

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.
目前,来自
blog-persona
的persona JSON仅被部分Skill加载,主题集群语境存储在集群库中,竞品定位无统一存储位置。每个博客命令都要从自身拥有的语境中重新推导“品牌是什么”。
BRAND.md
VOICE.md
解决了这个问题:提供单一权威来源,由
blog
编排器在每个命令启动时加载。
当两个文件都不存在时,行为与v1.7.1版本保持一致,具备向后兼容性。

Commands

命令

CommandPurpose
/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
命令用途
/blog brand init
交互式访谈,将BRAND.md和VOICE.md写入项目根目录
/blog brand show
显示当前文件内容(或报告文件缺失)
/blog brand update
以当前值为默认值重新运行访谈

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.
运行包含5个步骤的交互式访谈。逐个提问,等待用户回复后再进行下一步。如果
blog-persona
的JSON已存在,则自动填充语调相关问题的答案。

Step 1: Audience

步骤1:受众

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)
提问:
  • 核心受众角色(例如:“50-500人规模B2B SaaS公司的营销负责人”)
  • 次要受众(可选)
  • 读者专业水平:入门级 / 进阶级 / 专家级 / 混合
  • 读者正在解决的核心问题(3-5条)
  • 受众常见误解(用于锚定信息增量)

Step 2: Positioning

步骤2:品牌定位

Ask:
  • 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
提问:
  • 一句话品牌使命(品牌能帮助用户完成什么)
  • 独特观点(塑造内容的逆向或非显而易见的理念)
  • 品牌非定位(反向定位,绝不与哪些内容混淆)
  • Top 3直接竞品及与每个竞品的差异化描述(一句话)

Step 3: Editorial rules

步骤3:编辑规则

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; complements but is separate from the AI-detection blocklist)
  • Required disclosures (e.g. affiliate disclosure, AI-content disclosure, conflict-of-interest patterns)
提问:
  • 必做事项(博客始终遵循的3-7条规则;例如:“仅引用一手资料”“提及从业者而非产品”)
  • 禁止事项(博客绝不触碰的3-7条规则;例如:“拒绝标题党”“拒绝列表凑数内容”)
  • 禁忌用语(品牌绝不使用的特定词汇或短语;与AI检测黑名单互补但相互独立)
  • 强制披露要求(例如: affiliate披露、AI内容披露、利益冲突声明规则)

Step 4: Topic boundaries

步骤4:主题边界

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)

步骤5:语调(若存在blog-persona则自动填充)

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
提问:
  • 人称立场:第一人称(我们/我)、第二人称(你)、第三人称(团队)或混合
  • 允许的缩写形式:全部允许 / 部分允许 / 不允许
  • 句子长度上限:单句最大单词数(硬性限制)
  • 段落长度上限:单段最大单词数(默认150)
  • 偏好的标题格式:数字式 / 疑问式 / 承诺式 / 陈述式
  • 禁用的标题格式:品牌禁止的任何格式
  • 摘要框标签:来自blog-persona或自定义选择

Output Files

输出文件

BRAND.md template

BRAND.md模板

Write to project root as:
markdown
undefined
写入项目根目录,格式如下:
markdown
undefined

Brand Context

Brand Context

This file is auto-loaded by all blog sub-skills. Last updated: YYYY-MM-DD.
This file is auto-loaded by all blog sub-skills. Last updated: YYYY-MM-DD.

Audience

Audience

  • Primary: [role + context]
  • Secondary: [if any]
  • Expertise: [level]
  • Active problems:
    • [problem 1]
    • [problem 2]
    • [problem 3]
  • Common misconceptions:
    • [misconception 1]
    • [misconception 2]
  • Primary: [role + context]
  • Secondary: [if any]
  • Expertise: [level]
  • Active problems:
    • [problem 1]
    • [problem 2]
    • [problem 3]
  • Common misconceptions:
    • [misconception 1]
    • [misconception 2]

Positioning

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]
  • 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

Editorial Rules

Always do

Always do

  • [rule 1]
  • [rule 2]
  • [rule 3]
  • [rule 1]
  • [rule 2]
  • [rule 3]

Never do

Never do

  • [rule 1]
  • [rule 2]
  • [rule 3]
  • [rule 1]
  • [rule 2]
  • [rule 3]

Taboo phrases

Taboo phrases

  • [phrase 1]
  • [phrase 2]
  • [phrase 1]
  • [phrase 2]

Required disclosures

Required disclosures

  • [disclosure rule]
  • [disclosure rule]

Topic Scope

Topic Scope

  • In scope: [pillars]
  • Partial scope: [adjacent topics]
  • Out of scope: [topics to refuse]
  • Recurring formats: [if any]
undefined
  • In scope: [pillars]
  • Partial scope: [adjacent topics]
  • Out of scope: [topics to refuse]
  • Recurring formats: [if any]
undefined

VOICE.md template

VOICE.md模板

Write to project root as:
markdown
undefined
写入项目根目录,格式如下:
markdown
undefined

Voice Context

Voice Context

This file is auto-loaded by all blog sub-skills. Last updated: YYYY-MM-DD.
This file is auto-loaded by all blog sub-skills. Last updated: YYYY-MM-DD.

Pronoun stance

Pronoun stance

[first-person / second-person / third-person / mixed]
[first-person / second-person / third-person / mixed]

Lexical rules

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

Headline patterns

  • Favor: [list]
  • Avoid: [list]
  • Favor: [list]
  • Avoid: [list]

Voice fingerprint (from blog-persona)

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]
  • 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

Readability target

  • Audience tier: [consumer / professional / technical]
  • Flesch Grade: [range]
  • Flesch Ease: [range]
  • Audience tier: [consumer / professional / technical]
  • Flesch Grade: [range]
  • Flesch Ease: [range]

Reference samples

Reference samples

  • [URL 1] (extracted patterns: [summary])
  • [URL 2] (extracted patterns: [summary])
undefined
  • [URL 1] (extracted patterns: [summary])
  • [URL 2] (extracted patterns: [summary])
undefined

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
    .
  1. 检查项目根目录下是否存在
    BRAND.md
    VOICE.md
  2. 若两者均存在,打印关键内容的摘要表格及文件路径。
  3. 若其中一个或两个缺失,打印缺失情况并建议运行
    /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.
与初始化流程相同,但所有问题均以当前值为默认值。用户可按回车接受默认值或输入新值。收集所有答案后,覆盖两个文件的内容并更新
Last updated:
行。

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.
当运行
/blog write
/blog rewrite
/blog brief
/blog outline
/blog calendar
/blog strategy
时,编排器(
skills/blog/SKILL.md
)会检查项目根目录下的
BRAND.md
VOICE.md
。若文件存在,内容会被注入下游Agent(
blog-researcher
blog-writer
blog-seo
blog-reviewer
)的系统提示词中。
若文件不存在,行为保持不变。编排器不会提示用户创建文件,属于可选语境。

Relationship to blog-persona

与blog-persona的关系

Concernblog-personablog-brand
Structured persona JSON for programmatic useYesNo
Readable brand context for cross-skill promptsNoYes
Audience and positioningNoYes
Taboo phrases and editorial don'tsPartial (don't list)Full (taboo + disclosures + scope)
Competitor differentiationNoYes
Topic boundariesNoYes
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.
关注点blog-personablog-brand
用于程序化调用的结构化persona JSON
用于跨Skill提示词的易读品牌语境
受众与品牌定位
禁忌用语与编辑禁止事项部分支持(禁止列表)全面支持(禁忌用语+披露要求+主题范围)
竞品差异化
主题边界
语调特征(滑块)是(权威来源)镜像(只读)
blog-brand
不会替代
blog-persona
,而是基于它进行拓展。persona JSON仍是语调维度、句子长度分布及缩写使用频率的权威来源。
VOICE.md
镜像其中易读的部分,使提示词具备自包含性。
若运行
/blog brand init
时不存在persona,语调相关问题仍会生成
VOICE.md
。需要程序化执行规则的用户可在后续运行
/blog persona create

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.
  • 项目根目录不明确:询问用户文件写入位置,默认当前工作目录。
  • 初始化时文件已存在:询问用户是否覆盖或改为运行更新流程。
  • 引用的persona不存在:询问用户是否留空persona引用或创建新的persona。
  • 用户提供的答案过于简略:提示用户至少提供2条受众问题和3条编辑规则,拒绝生成骨架文件。