mcpField
B
blog-brand

blog-brand

github.com/infrasity-labs营销与增长15195 次安装18 周前更新
代码仓库

关于 blog-brand

blog-brand 为博客项目建立并维护持久的编辑背景信息。它将受众、品牌定位、编辑规则和语气规范写入 BRAND.md 与 VOICE.md,供博客命令跨会话加载。

主要功能

  1. 01创建 BRAND.md 和 VOICE.md
  2. 02记录受众与品牌定位
  3. 03整理编辑规则和选题边界
  4. 04设定语气和写作约束
  5. 05查看或更新现有背景信息
  6. 06向博客命令提供上下文

适用场景

  1. 01建立博客的编辑基准
  2. 02跨会话保持品牌规范一致
  3. 03更新受众和语气要求
  4. 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])

查看工作流

  1. 检查项目根目录中是否存在 BRAND.md 和 VOICE.md。
  2. 如果两个文件都存在,打印摘要表格(仅显示关键章节)和文件路径。
  3. 如果其中一个或两个文件缺失,打印缺失的文件,并建议使用 /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-personablog-brand
用于程序化处理的结构化 persona JSON是否
用于跨技能提示词的可读品牌上下文否是
受众与定位否是
禁用短语与编辑规范禁忌部分(禁用项列表)完整(禁忌项 + 披露 + 范围)
竞争对手差异化否是
主题边界否是
语气特征(语气滑块)是(权威来源)镜像(只读)

blog-brand 不会取代 blog-persona;它会使用后者。persona JSON 仍然是语气维度、句长分布和缩写频率的权威来源。VOICE.md 会镜像其中可读的部分,让提示词内容完整自足。

如果运行 /blog brand init 时不存在 persona,语气相关问题仍会生成 VOICE.md。想要以程序化方式强制执行的用户,可以之后运行 /blog persona create。

错误处理

  • 项目根目录不明确:询问用户要将文件写入何处。默认使用当前工作目录。
  • 初始化时文件已存在:询问是覆盖文件,还是改为运行更新。
  • 引用了 persona 但文件不存在:询问是将 persona 引用留空,还是创建一个。
  • 用户提供的答案过于简略:要求至少提供 2 条受众要点和 3 条编辑规则;拒绝写入空壳文件。

评论

支持 Markdown