lyric-concept-builder

当使用者说"我想写一首关于X的歌"、"这首歌想表达Y"、"帮我想想这首歌写什么"、"疗愈主题的歌该怎么切入"时使用,适用于只有主题词或一句念头、还没定具体处境的时候;处境和字数骨架都已齐、只差句子时改用 adversarial-lyric-writer。动笔写句子之前先定四样东西:这首歌的具体处境(谁、在什么状况、发生了什么变化)、一套只属于同一个世界的意象系统、情绪弧线的起点转折点终点、五条 h

SKILL.md

GitHub

定这首歌写什么 / Lyric Concept Builder

在写第一句之前,把这首歌的处境、意象系统、情绪弧线和 hook 候选定下来。

这一步省的是返工。跳过它直接填词,写出来的一定是形容词堆砌 —— 因为没有素材的时候,模型只剩下形容词可用。

主题不是效果

"疗愈""治愈""成长""青春"都不是主题,是听完之后的效果。 把它们当主题写,出来的就是"你已经很勇敢""慢慢来不用匆忙"这类谁都能说的话。

主题必须是一个具体处境:

效果词 换成处境
疗愈 一个人连续加班三个月后的第一个周六早上,醒来不知道该干什么
成长 搬家那天发现高中的校服还在衣柜最里面
遗憾 那条编辑了四次最后没发出去的消息

处境包含三件事:谁、在什么状况下、发生了什么变化。三样缺一样,这首歌就没有落点。

何时使用 / When to use

  • 有一个主题词或一句话的想法,还没开始写
  • 写了几句发现全是套话,想推倒重来
  • 一首歌写到一半失去方向,不知道副歌该说什么

不适用于 / Not for:

  • 已经知道要写什么、只差句子 → 直接用 adversarial-lyric-writer
  • 手上有成稿要改 → 用 lyric-doctor

流程 / Process

1. 只问两个问题

先问,因为这两个答案会决定后面所有内容,猜错了整套要重做:

  1. 这首歌唱给谁:唱给自己听 / 唱给某个具体的人 / 唱给泛听众。 对象不同,人称、口气、能说多私密的话全都不同
  2. 有没有真实的画面可以用:真实发生过的事、一个物件、一个地点、一句原话。 有就用他的;确实没有,就明说这首歌只能写通感,不能写细节

这两个问题一次问完。不要再问"你喜欢什么风格""想要什么调性",那些等有词了再定也不迟。

2. 派三个子代理,各提一个切入角

用 Agent 工具,model: "sonnet",三个并行,同一条消息发出。 每个拿到相同的处境和素材,但被指定不同的切入位置:

代号 切入位置 要求
近景 一个具体动作或物件 整首歌不离开这一个东西,情绪全从它身上长出来
时间 两个时间点的对照 用"那时候 / 现在"的落差承载变化,不直接说变化
对话 一句没说出口的话 整首歌是对某个人说的,那句话到副歌才出现

每个子代理返回:处境的一句话表述、母意象 + 三到五个子意象、情绪弧线三点、 两条 hook 候选。不许写完整段落,这一步不是写词。

3. 主 Agent 收敛

三个角里挑一个,或者取其中两个的组合。挑的时候看:

  • 哪个角能撑满整首歌,而不是只够写一段副歌
  • 哪个角的意象来自使用者给的真实素材,而不是子代理编的
  • 哪个角在主歌二那里还有话可说(很多角只够写一遍,第二遍就没了)

挑完之后自己补全其余三项,产出下面的概念卡。

4. 意象系统必须来自同一个世界

三到五个子意象要能出现在同一个场景里。厨房、通勤、病房、深夜便利店、老家的院子, 选一个,其余的删掉。

星空 + 海洋 + 森林 + 翅膀同时在场,就是没有意象系统。 那是把所有"听起来美"的词堆在一起,听众抓不住任何一个。

判据:这五个意象能不能拍进同一个镜头里?不能就砍。

5. hook 候选给五条

hook 是副歌里被记住的那一句,通常在副歌第一句或最后一句。要求:

  • 7 到 12 个字,能单独成立(拆出来发朋友圈不显得莫名其妙)
  • 口语,不是书面语
  • 不含 _shared/craft-reference.md 第 2 节黑名单里的词
  • 五条要在说法上真的不同,不是同一句话换五种措辞

给五条不是为了让使用者挑一条,是因为写到副歌时前四条大概率会不合节奏, 手上有备份比重想快。

没有这些工具时(降级)

第 2 步用到 Claude Code 的子代理(Agent 工具、model: "sonnet")。没有子代理时:

  • 能发互不共享上下文的独立调用(新会话、单独的模型请求)就用它,三个切入角各一次, 每次只给处境、素材和那一个切入位置的要求
  • 做不到就在同一个上下文里依次提三个切入角:每提一个之前只重读处境、素材和这个角的要求, 不回看前一个角;三个都提完再收敛
  • 概念卡最后加一行"降级:各角色互相看得见",并告诉使用者三个角之间的差别会比并行时小

输出格式 / Output

## 处境
<谁 / 在什么状况下 / 发生了什么变化,三句话之内>

## 意象系统
母意象:<一个具体物件或场所>
子意象:<3-5 个,全部来自同一个世界>
不用:<明确排除掉的高危意象,写出来免得后面又飘回去>

## 情绪弧线
起点:<第一段听众感到什么>
转折:<在哪一段、因为什么翻转>
终点:<结束时停在哪里>

## hook 候选
1. <7-12 字>
2. ...

## 素材清单
<使用者提供的真实画面、物件、原话,逐条列出,填词时只能用这些>

## 我拿不准的
<需要使用者确认的地方>

终点不必是"好起来了"。疗愈题材最常见的失败就是强行给一个圆满结局, 停在"还没好但今天能出门"比停在"一切都会好起来"可信得多。

边界 / Boundaries

  • 不替使用者编经历。他没说过的事就是没有。要细节就问他, 编一个"外婆院子里的柿子树"出来,整首歌的地基就是假的。
  • 不把效果词当主题交差。产出里出现"这首歌想表达温暖与治愈"这种句子,就是这一步没做。
  • 不在这一步写完整歌词。概念卡是给填词用的输入,越界写了整段,后面的对抗起草就被锚死了。
  • 不替他选情绪终点。停在释然还是停在没解决,是使用者的判断,给建议但不代定。
  • 不抄现有歌曲的概念。参考某首歌时说的是结构和手法,不是照搬它的意象系统。

Token 控制 / Token discipline

  • 两个问题一次问完,不要一问一答
  • 三个子代理并行,提示自包含,不传对话历史
  • 子代理只返回概念卡的四项,明确禁止它写段落 —— 写了就是白烧 token

变更记录 / Changelog

版本 日期 变更 类型
0.1.1 2026-09-26 补"没有这些工具时(降级)":流程依赖子代理却声明 generic-llm-agent,没有子代理时改为独立调用或按角色依次提切入角并标注降级;description 补一句与 adversarial-lyric-writer 的分流判别 patch
0.1.0 2026-08-11 初始草稿 minor