关于 blog-brand
blog-brand 为博客项目建立并维护持久的编辑背景信息。它将受众、品牌定位、编辑规则和语气规范写入 BRAND.md 与 VOICE.md,供博客命令跨会话加载。
主要功能
- 01创建 BRAND.md 和 VOICE.md
- 02记录受众与品牌定位
- 03整理编辑规则和选题边界
- 04设定语气和写作约束
- 05查看或更新现有背景信息
- 06向博客命令提供上下文
适用场景
- 01建立博客的编辑基准
- 02跨会话保持品牌规范一致
- 03更新受众和语气要求
- 04为博客写作工作流提供共享背景
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ infrasity-labs/ dev-gtm-claude-skills --skill blog-brand安装后在 Claude Code 中输入/blog-brand确认已加载。
详细介绍
博客品牌:持久化编辑语境
生成两个项目根目录文件;只要这两个文件存在,每个博客子技能都会自动加载:
BRAND.md:受众是谁、品牌代表什么、哪些内容绝对不能说VOICE.md:品牌在结构和用词上的表达风格
这些文件提供持久化的编辑语境,可跨会话保留,并传递给每条命令。
为什么需要它
目前,部分技能会加载 persona JSON(来自 blog-persona),其他技能则不会。主题集群语境存在于集群知识库中。竞品定位则无处保存。每条博客命令都会根据现有语境重新推导“品牌是什么”。
BRAND.md 和 VOICE.md 解决了这个问题:它们是唯一规范来源,由 blog 编排器在每条命令开始时加载。
如果这两个文件都不存在,行为保持不变。向后兼容。
命令
| 命令 | 用途 |
|---|---|
/blog brand init | 交互式访谈,在项目根目录写入 BRAND.md 和 VOICE.md |
/blog brand show | 显示当前内容(或报告文件缺失) |
/blog brand update | 使用当前值作为默认值,重新进行访谈 |
初始化工作流
进行 5 步交互式访谈。逐步提问,等待回答后再继续。如果已存在 blog-persona JSON,则预先填入其中的语气风格答案。
第 1 步:受众
提问:
- 主要受众角色(例如“任职于 50–500 人 B2B SaaS 公司的市场负责人”)
- 次要受众(可选)
- 读者专业水平:初级 / 中级 / 高级 / 混合
- 读者正在积极尝试解决的问题(3 至 5 条)
- 受众普遍存在的误解(用于锚定信息增益)
第 2 步:定位
提问:
- 一句话品牌使命(品牌帮助人们做什么)
- 鲜明的观点(塑造内容的逆向或非显而易见的信念)
- 这个品牌不是什么(反向定位,即绝不能被误认为是什么)
- 排名前三的直接竞品,以及各自的一句话差异化说明
第 3 步:编辑规则
提问:
- 要做的事(博客始终会做的 3 至 7 件事;例如“仅引用一手来源”“提及从业者,而非产品”)
- 不做的事(博客绝不会做的 3 至 7 件事;例如“标题不搞标题党”“不添加凑数的清单内容”)
- 禁用短语(此品牌绝不使用的特定词语或短语;与 AI 检测禁用列表互为补充,但彼此独立)
- 必须披露的信息(例如联盟营销披露、AI 内容披露、利益冲突模式)
第 4 步:主题边界
提问:
- 完全涵盖的主题(核心内容支柱)
- 部分涵盖的主题(相关主题;仅在有原创角度时涵盖)
- 不涵盖的主题(不会涉及;引导至合作伙伴内容)
- 固定形式 / 专栏名称(如有;例如“月度实地笔记”“读者问答”)
第 5 步:语气风格(若存在,则从 blog-persona 自动填入)
提问:
- 人称立场:第一人称(we / I)、第二人称(you)、第三人称(the team)或混合
- 可接受的缩略形式:完整 / 部分 / 不使用
- 句子长度上限:每句话的字数硬性上限
- 段落长度上限:每段的字数上限(默认 150)
- 优先使用的标题模式:数字式 / 疑问式 / 承诺式 / 陈述式
- 应避免的标题模式:此品牌禁用的任何模式
- 摘要框标签:使用 blog-persona 中的标签,或自行选择
输出文件
BRAND.md 模板
写入项目根目录:
# 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]
VOICE.md 模板
写入项目根目录:
# 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和VOICE.md。 - 如果两个文件都存在,打印摘要表格(仅显示关键章节)和文件路径。
- 如果其中一个或两个文件缺失,打印缺失的文件,并建议使用
/blog brand init。
更新工作流
与初始化相同,但会将每个答案预填为当前值。用户可以按回车接受,也可以输入新值。收集完所有答案后,使用新内容覆盖两个文件,并更新 Last updated: 行。
与博客编排器集成
运行 /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)的系统提示词中。
如果文件不存在,行为保持不变。编排器不会提示用户创建这些文件;它们是可选上下文。
与 blog-persona 的关系
| 事项 | blog-persona | blog-brand |
|---|---|---|
| 用于程序化处理的结构化 persona JSON | 是 | 否 |
| 用于跨技能提示词的可读品牌上下文 | 否 | 是 |
| 受众与定位 | 否 | 是 |
| 禁用短语与编辑规范禁忌 | 部分(禁用项列表) | 完整(禁忌项 + 披露 + 范围) |
| 竞争对手差异化 | 否 | 是 |
| 主题边界 | 否 | 是 |
| 语气特征(语气滑块) | 是(权威来源) | 镜像(只读) |
blog-brand 不会取代 blog-persona;它会使用后者。persona JSON 仍然是语气维度、句长分布和缩写频率的权威来源。VOICE.md 会镜像其中可读的部分,让提示词内容完整自足。
如果运行 /blog brand init 时不存在 persona,语气相关问题仍会生成 VOICE.md。想要以程序化方式强制执行的用户,可以之后运行 /blog persona create。
错误处理
- 项目根目录不明确:询问用户要将文件写入何处。默认使用当前工作目录。
- 初始化时文件已存在:询问是覆盖文件,还是改为运行更新。
- 引用了 persona 但文件不存在:询问是将 persona 引用留空,还是创建一个。
- 用户提供的答案过于简略:要求至少提供 2 条受众要点和 3 条编辑规则;拒绝写入空壳文件。