ECC brand-discovery Skill 详解:磁盘持久化状态驱动的八模块品牌身份结构化访谈方法
ECC 仓库中的 brand-discovery Skill 定义了一套可跨多次会话续跑的品牌身份访谈流程:它以 8 个编号模块(10 到 90)依次访谈品牌的目的、定位、受众、人格、语气、叙事与创始人品牌张力,每个模块的原始回答与综合结论实时落盘为 Markdown 文件,配合 state.json 检查点实现断点恢复,最终产出一份可直接用于指导设计师、写手和外部协作方的主品牌手册 90_SYNTHESIS.md。读完本文,你将掌握该 Skill 的完整会话协议、访谈纪律、状态文件 Schema、多创始人模式的路径安全校验规则,以及全部 8 份模块模板的内部结构,能够在自己的项目中复刻或审计这套方法。
Skill 定位:一次结构化的多会话品牌访谈
brand-discovery 的核心目标是产出一个完整的 90_SYNTHESIS.md——一份组织可以用来指导设计师、写手和外部协作方的主品牌手册(master brandbook)。它不是"一次聊完"的提示词,而是一个被明确设计为跨天、跨周多次会话运行的访谈引擎:每次会话开始时先从磁盘恢复进度,访谈过程中把每一次回答都捕获到磁盘,避免对话结束时 elicited knowledge(已挖掘出的知识)丢失,让后续会话可以从上一次停止的位置继续。
该 Skill 文件同时存在于两处且内容完全一致(已用 diff 核对):
模块模板(references/ 目录下 8 份 Markdown 文件)在两个位置同样保持一致。
激活条件(When to Activate)
SKILL.md 给出了 5 个明确的激活场景,全部指向"品牌知识需要被显性化并持久化":
- 品牌正在被创建、重新定位,或需要一份书面的身份参考来指导协作方;
- 预期访谈会跨越多次会话——对话将持续数天甚至数周;
- 有多位创始人或多干系人,需要先分别访谈再做一致性核对(reconciliation);
- 用户要的是结构化、可复用的方法,而不是即兴聊天;
- 现有品牌文档是分散的、隐含的、或高度依赖创始人本人的,需要被显性化。
Skill 元数据配置
在 .agents/skills/brand-discovery/agents/openai.yaml 中,该 Skill 声明了接口元数据与调用策略:
interface:
display_name: "Brand Discovery"
short_description: "Adaptive multi-session brand identity interviews"
brand_color: "#8B5CF6"
default_prompt: "Use $brand-discovery to run a structured brand identity interview."
policy:
allow_implicit_invocation: true
从该配置看,Skill 允许隐式调用(allow_implicit_invocation: true),即当会话上下文符合激活条件时,Agent 无需用户显式输入 $brand-discovery 也可触发流程。
会话开始协议:先读状态,再问问题
SKILL.md 要求每次激活时,在提出任何访谈问题之前先执行三步协议:
- 检查既有进度。 在项目品牌的 brand-identity 目录中查找已有的模块文件集合与
state.json检查点。若不存在,则属于全新开始——确认品牌名称、参与人、brand-identity 文件的保存位置,然后从第一个模块开始。 - 读取当前进行中的模块文件(如果有的话),扫描其 Raw 部分中此前已捕获的回答。
- 向用户汇报,用两三句话说明:当前处于哪个模块、该模块的状态、剩余内容是什么。然后问一句:"从这里继续,还是切换模块?"
这个协议把"状态恢复"放在了"内容生成"之前,是多会话设计里防止失忆的关键。
访谈纪律:8 条贯穿所有模块的规则
SKILL.md 定义了一套必须贯穿每个模块的访谈纪律,这也是该 Skill 与"随便聊聊品牌"的本质区别所在:
-
一次只问一个问题。 绝不呈现问题列表——列表只会换来清单式的回答,换不来真实洞察。
-
每个回答之后: 先用简短的复述(paraphrase)确认理解,然后做一个深挖追问,或者在该话题已饱和时收线。绝不无声无息地跳到下一个话题。
-
Laddering(梯级追问): 对每一个 "what" 类回答,都追问一句"Why does that matter to you?",直到核心价值浮现(通常 2 到 4 轮迭代)。
-
5 Whys: 对信念或定位类主张,一路追问到根因,而不是停留在表面声明。
-
检测空洞回答: 如果回答泛泛、堆术语或含糊,要求给出一个具体例子、一个客户故事或一个数字。
-
投射技法(projective techniques): 每个模块使用一次,用于打破平台期:
- "如果品牌是一个人,他会怎样走进一个房间?"
- 品牌讣告:"如果组织五年后关闭,客户会怀念什么?你会遗憾自己没说过什么?"
- 竞品对照:"说一个你欣赏但绝不想成为的同行。他们具体是哪里是错误范式?"
-
饱和信号(saturation signal): 当连续两个追问不再产生新信息时,总结并关闭该模块。
-
模块收尾: 写一份结构化的模块文件,包含两个部分:
## Raw——逐字引用与例子;## Synthesis——你的解读、三个候选表述、开放问题、参与者之间的矛盾。
然后更新
state.json检查点(见下文状态协议)。
八模块序列:文件、标签与框架映射
SKILL.md 用一张表定义了模块顺序。每个模块对应一份模板文件、一个标签和一组使用的品牌框架:
| 文件 | 标签 | 使用的框架 |
|---|---|---|
10_purpose-why.md |
Purpose / Why | Sinek 黄金圈、Lencioni 组织目的 |
20_positioning.md |
Positioning | Dunford《Obviously Awesome》、Moore 模板 |
30_audience-niche.md |
Audience & Niche | Baker《Business of Expertise》、ICP |
40_personality-archetype.md |
Personality & Archetype | Mark & Pearson 12 原型、J. Aaker 5 维度 |
50_voice-tone.md |
Voice & Tone | 品牌语气指南 |
60_narrative-story.md |
Narrative / Story | Neumeier trueline、品牌故事弧线 |
70_founder-tension.md |
Founder Brands vs Studio Brand | Enns《Win Without Pitching》 |
90_SYNTHESIS.md |
Master Brandbook | Kapferer 品牌棱镜、Aaker 品牌系统 |
模块必须按序完成;如果用户要求跳模块,可以遵从,但必须在 state.json 中记下这次跳过。
模块模板解剖:references/ 目录下的 8 份文件
每个模块模板都遵循统一骨架:文件头声明所用框架与模块目标(Goal),正文分为 ## Raw 与 ## Synthesis 两节。Raw 节用注释明确要求"记录逐字语言,复述属于 Synthesis 不属于这里",并预置了该模块专属的追问小节;Synthesis 节预置了该模块的产出结构。以下逐模块拆解模板内部内容。
Module 10 — Purpose / Why
10_purpose-why.md 的目标是把品牌的核心信念——独立于卖什么、怎么交付而存在的 Why——挖出来,捕获的是创立时的信念(founding conviction),而不是电梯演讲。
Raw 节预置四个捕获小节:
- 核心信念(why does this exist?)
- 行为化的 How(价值观落在行动上,而不是海报口号)
- 品牌拒绝成为或拒绝去做什么
- 足够强、可以成为内部锚点的创始人语录
Synthesis 节要求输出 2–3 个不同语体与具体程度的候选 Why 表述(candidate Why formulations)、留给后续模块的开放问题线、多创始人间的矛盾,以及一个桥接问题:"这个 Why 如何约束或支撑定位?"——直接指向 Module 20。
Module 20 — Positioning
20_positioning.md 定义品牌的竞争框架:为谁、在什么品类里竞争、独特之处、以及这对目标客户为何重要。Raw 节包含 6 个捕获小节:目标客户(角色、公司类型、情境)、竞争的品类、与品类内替代方案的差异、目标客户最看重什么、创始人点名的竞争替代方案(包括"什么都不做/自建团队"这类隐性替代)、以及创始人描述业务时自然使用的短语或隐喻。
Synthesis 节预置了 Dunford 模板的定位声明骨架:
For [target client] who [situation / JTBD], [brand name] is the [category] that [unique value]. Unlike [alternatives], we [key differentiator].
并要求给出替代框架(变换品类或差异化点)、白空间假设(white-space hypothesis:哪个空白位没有竞争对手在占、而该品牌可以拥有)、开放问题,以及与 Module 10 的 Why 之间的张力——任何矛盾都标记留给 Module 90 的调和环节。
Module 30 — Audience & Niche
30_audience-niche.md 的目标是把目标受众做到"具体到可以直接交给文案写手或投放团队"的程度——不是人口统计素描,而是心理画像加情境画像。Raw 节要求描述"一个具体的人,而不是一个客群",并捕获触发情境、此前尝试过什么以及为何失败、成功在他们自己的语言中是什么样、他们害怕什么、最不适配的客户(品牌不想服务的人及原因),以及能说明理想匹配的真实客户故事。
Synthesis 节的核心是一张 8 维 ICP 表:
| 维度 | 说明 |
|---|---|
| Role / title | 角色/头衔 |
| Organisation type & size | 组织类型与规模 |
| Trigger situation | 触发情境 |
| Primary pain | 主要痛点 |
| Desired outcome | 期望结果 |
| Budget signal | 预算信号 |
| Red-flag / disqualifier | 红旗/排除条件 |
外加 2–3 句心理画像、一个"最小可行市场"的 niche 假设,以及主/次 ICP 存在歧义时待测的受众分层。
Module 40 — Personality & Archetype
40_personality-archetype.md 建立品牌的"人格"——把它当人看会怎么行事。模板文件头直接列出 Mark & Pearson 12 原型清单:Creator、Caregiver、Ruler、Jester、Regular Person、Lover、Hero、Outlaw、Magician、Innocent、Sage、Explorer;并采用 J. Aaker 的五维品牌人格(sincerity / excitement / competence / sophistication / ruggedness)。
Raw 节包含投射技法问题("走进房间")、创始人对 12 原型的直觉反应、三个最自然的形容词、一个欣赏但绝不该成为的品牌/公众人物(及具体要避免什么)、一个想贴近其语气档位(register)的对象,以及"品牌应该让客户感受到什么"(注意模板特意区分了 feel 与 think)。
Synthesis 节要求输出主原型及其"阴影面"(primary archetype 可能滑向的失控形态,是什么让它保持诚实)、Aaker 五维 1–5 打分表(每维附证据)、3 条由原型推导的行为准则,以及"反人格"清单——品牌绝不能听起来/看起来像什么。
Module 50 — Voice & Tone
50_voice-tone.md 把品牌的言语档位(verbal register)编码到"两个不同写手产出的文案听起来像同一个人"的精度。模板给出的原则是:Voice 恒定,Tone 随场景变化(首页 vs 错误页 vs 提案封面)。
Raw 节要求收集创始人欣赏的文案样本(注明来源)、认为"档位错误"的文案及具体错在哪、品牌惯用词与主动回避词、不同场景(销售页/错误消息/提案)应如何发声,以及"We always…" / "We never…" 式的沟通自述。
Synthesis 节包含一张 5 档声音光谱表(Formal←→Casual、Serious←→Playful、Distant←→Warm、Conventional←→Irreverent、Minimal←→Expressive,各 1–5 分加备注)、一段写手可以内化的 voice statement、一张按内容类型分行的语气矩阵(首页标题 / 案例证据 / 提案商务 / 错误与致歉 / 社媒非正式),以及"每份稿件必须通过的三项检查"。
Module 60 — Narrative / Story
60_narrative-story.md 目标是凝练品牌的故事弧线——它为解决什么冲突而生、交付什么转变、向客户发出什么邀请。核心概念是 Neumeier 的 trueline:一句能撑起品牌所有故事的句子,模板给出句式 "[Brand] is the only [category] that [unique claim].",并要求 2–3 个不同抽象层次的变化版本。
Synthesis 节还预置了四拍故事弧表格(Context 世界原貌 → Conflict 哪里坏了 → Resolution 品牌做了什么 → Invitation 客户被要求做什么),以及一条结构性原则:品牌是向导(guide)而非英雄(hero)——写客户获得了什么,而不是品牌做了什么。
Module 70 — Founder Brand vs Organisation Brand
70_founder-tension.md 处理创始人个人声望与组织品牌的关系,文件头特别点出:"未解决的 founder-brand 张力是常见的规模化瓶颈"。Raw 节的问题设计带有证据取向,例如"Do clients buy the founder or the organisation? (ask for evidence, not instinct)"——要证据不要直觉。
Synthesis 节的核心是一张 1–5 光谱:
[Founder IS the brand] ←————————→ [Organisation brand stands alone]
1 2 3 4 5
要求标注当前位置与 3 年目标位置,并分别划清"创始人品牌应拥有什么(且持续拥有)"与"组织品牌需要独立拥有什么",若要从创始人中心向机构化迁移则给出过渡计划草图,并评估"什么都不改变"的风险。
Module 90 — Master Brandbook(终局合成)
90_SYNTHESIS.md 是整条流水线的终点。它的定位是"source of truth":把前 7 个模块调和成一份可执行的品牌手册,解决模块间张力、承诺具体表述、翻译成实操指南。该模板的 Raw 节特意注明"Module 90 汇合 10–70 的产出,这里只收集极少的新输入"——仅捕获合成过程中创始人的最终陈述或更正。
Synthesis 节包含 10 个编号小节:
- The Why(来自 Module 10):核心信念、行为化 How、拒绝成为什么;
- Positioning(来自 Module 20):定位声明 + 品牌拥有的白空间;
- Audience(来自 Module 30):一段式 ICP 画像、正在建立的 niche、红旗/排除条件;
- Kapferer 品牌身份棱镜:六面表格——Physique(可见可触的属性)、Personality(品牌若是人)、Culture(背后的价值观)、Relationship(与客户的关系)、Reflection(客户用这个品牌时如何看自己)、Self-image(客户使用时的内在感受); 4b. Aaker 品牌系统(来自 Module 40):主/次原型、四维品牌身份(Brand as product / organisation / person / symbol)、3–5 个品牌应占有的联想、品牌资产信号(该品牌消失时客户将失去什么);
- Voice & Tone 摘要(来自 Module 50):一段式 voice statement + 三项稿件检查;
- Narrative 资产(来自 Module 60):trueline + 一段可直接用作 About 页起点的品牌故事弧;
- Founder / organisation 品牌边界(来自 Module 70):双方各自拥有什么;
- Tensions resolved:一张四列表格(Tension | Module A | Module B | Resolution),记录并解决模块间冲突;
- 开放问题:留给下一次会话的未决项;
- Practical next steps:3–5 个品牌可基于该 brandbook 立即执行的行动。
状态写入协议:state.json 检查点
每个模块达到 saturation 或 done 状态后,SKILL.md 规定必须写两个文件:
模块文件,位于 modules/{moduleFile}——包含完整的 Raw 与 Synthesis 内容。
state.json——一个轻量检查点,让后续会话可以恢复。需要更新的字段为 completedModules、inProgressModule、nextModule、lastUpdated。Schema 如下:
{
"session": "{brand_name}-brand-{YYYY-MM}",
"outputPath": "{path_to_brand_identity_directory}",
"completedModules": [],
"inProgressModule": "10_purpose-why.md",
"nextModule": "20_positioning.md",
"participants": ["founder-A"],
"lastUpdated": "{ISO-8601}"
}
写入后必须向用户确认一句固定话术:"Module X saved. State updated. Next: Y."
终局模块(90_SYNTHESIS.md)有特殊的状态机处理:写最终合成时,先把 inProgressModule 设为 "90_SYNTHESIS.md"、nextModule 设为 null;写完后再把 completedModules 加入 "90_SYNTHESIS.md",然后把 inProgressModule 置为 null——SKILL.md 明确解释了原因:如果 inProgressModule 保持有值,未来的会话恢复逻辑会把已完成的品牌手册误判为"仍进行中"。完成时确认话术为:"Brandbook complete. All modules saved."
这套两阶段提交(先标记进行中、完成后再清空)本质上是一个用文件模拟的小型状态机,防止断点恢复逻辑在终态上死循环。
多创始人模式:路径安全校验与一致性核对
当不止一位创始人参与时,SKILL.md 规定每人回答写入 founders/{participant}.md 而非主模块文件。写入之前必须做三项校验:
- 校验
participant名称:只接受字母数字与连字符(如founder-a、anna);拒绝包含路径分隔符(/、\、..)或特殊字符的名称。 - 校验
moduleFile:对照枚举的模块序列(仅 10 到 90)验证,防止任意文件名注入。 - 校验
outputPath:必须是项目目录内的绝对路径——拒绝相对路径,拒绝通过..段逃逸出项目目录。
这三项校验把"用户提供的字符串直接拼接进文件路径"这一常见注入面显式关死:参与者名、模块名、输出路径三条输入通道都被白名单或路径边界检查约束。
所有创始人完成某模块后,执行 reconciliation pass(一致性核对):在模块文件中总结各人回答的收敛点与分歧点,并把"productive tensions(有建设性的张力)"标记出来,留给团队对齐工作坊处理。
反模式清单
SKILL.md 最后列出了 5 个必须避免的反模式,每一条都对应前述某个协议的失效模式:
- 不读状态就开始。 每次会话必须以检查既有模块文件和
state.json开场——跳过这一步会丢失之前所有会话的连续性。 - 一次问多个问题。 一次一问不是可选项——列表式提问只会产生清单式回答,而不是真实洞察。
- 未饱和就跳到 Synthesis。 如果最近两个追问没产生新信息,模块才算完成;反之则未完成。
- 跳过多创始人核对。 涉及多个干系人时,个人访谈必须全部完成后再做 reconciliation——先集体讨论品牌会引入锚定偏差(anchoring bias)。
- 当作一次性会话来做。 该 Skill 就是为多会话设计的。赶着一场对话写完
90_SYNTHESIS.md,只会得到浅薄的产出。
关联 Skill 与在 ECC 中的位置
SKILL.md 末尾声明了两个协作 Skill,且两者在仓库中均已确认存在:
- competitive-platform-analysis —— 在 brand-discovery 建立定位简报之后,用它来界定并归类竞争对手集合;
- brand-voice —— 如果 voice-and-tone 模块需要一份独立的、从源材料推导的写作风格档案,用它补充。
从模块模板与 Skill 主文件的分工可以推断出 ECC 的 Skill 设计模式:SKILL.md 承载流程协议(何时激活、会话纪律、状态机、安全校验),references/ 目录承载可复用的结构化模板(框架声明、Raw/Synthesis 骨架、预置表格),而 agents/openai.yaml 承载跨 Harness 的接口元数据。这一"协议 + 模板 + 元数据"三层结构使 brand-discovery 既能作为 Claude Code / Codex / Cursor 等环境的技能运行,又保证所有品牌产出物(模块文件、state.json、90_SYNTHESIS.md)以纯文件形式留在项目目录中,天然可审计、可版本管理、可跨会话续跑。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0623
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00