当学生说"Common App 活动栏写不下"、"这段活动描述超字数了"、"帮我把这几条压到限制内"时使用。先按官方申请表核对当季字符限额,再逐条检查;一次把所有条目量完并直接给出压缩版,只在需要砍掉实质内容时才用选择题问该保哪部分。每改一版都用工具重新数一遍字符,绝不凭感觉说"这样应该够了"。只压缩,不代写空白。
日本語の概要は準備中です。原文の説明を表示しています。
当使用者说"帮我填词"、"按这个字数模板写歌词"、"用多Agent对抗式写词"、"这首副歌帮我想几句"时使用,前提是字数骨架和这首歌写什么都已经有了;只有主题、还没定写什么时先用 lyric-concept-builder。
拿一份字数骨架和意象系统,派三个 sonnet 子代理按不同路子并行独立起草(场景派 / 口语派 / 意象派),再派一个红队子代理逐句挑毛病,主 Agent 按句裁决拼稿,最后统一辙口与意象。收敛判据卡死:字数用 lyric-doctor 的脚本对模板数、每段同辙、hook 不含陈词、主歌二对主歌一有推进。
不抄现有歌词,不替使用者决定这首歌要说什么。
インストールする前に、エージェントに与えられる指示の中身を確認できます。
多个子代理并行独立起草,红队逐句挑,主 Agent 按句裁决。
为什么要对抗:一个模型写一稿,第二段一定是第一段的同义换词,副歌 A/B 一定重复。 让三个互不可见的子代理各写一稿,句子之间才有真正的差异可挑。 主 Agent 不起草句子:新句子只来自起草子代理,主 Agent 只做骨架、派活、裁决, 能动手的只有第 4 轮那种不改意思、不换句的统一化小改。一旦主 Agent 自己下场写, 它会不自觉地把三稿往自己那版上靠,对抗就塌了。
写词不是写诗,每一条约束都对应旋律里的一件事:
| 词里的东西 | 对应曲里的什么 |
|---|---|
| 每行字数 | 小节里的节拍数。字多一个就得挤进半拍,唱起来赶 |
| 行内停顿 | 换气点,也是乐句的分句 |
| 韵脚 | 旋律回到主音的落点。同辙 = 听觉上"回来了" |
| hook | 副歌的记忆点,整首歌被记住的那一句 |
| 段落长短变化 | 编曲的动态:预副收紧、副歌铺开、桥段抽空 |
所以字数不是格式要求,是节奏本身。改字数等于改旋律,宁可换整句说法也不要多塞一个字。
这个技能不产出:旋律、和弦、编曲、demo 音频。它只产出词和词的自检信息。
xxx 模板,或 lyric-structure-mapper 生成的)lyric-concept-builder 定过)不适用于 / Not for:
lyric-concept-builder,直接开写必出套话lyric-structure-mapperlyric-doctor,那是定点修改,不重写缺任何一样就先补,别硬写:
用 Agent 工具起三个子代理,model: "sonnet",run_in_background: false,同一条消息里一次发出。
用 sonnet 而不是更强的模型,理由是这一轮要的是量和差异:三稿里大半的句子会被丢掉, 并行三份 sonnet 草稿比一份精雕细琢的稿子更有得挑。裁决和终稿一致性由主 Agent 负责。
三个子代理拿到完全相同的骨架、素材和黑名单,但路子不同:
| 代号 | 路子 | 硬约束 |
|---|---|---|
| A 场景派 | 只写能拍成镜头的东西 | 全稿禁止出现直接的情绪形容词(疲惫、温柔、勇敢…),情绪靠动作和物件带出来 |
| B 口语派 | 像在跟一个具体的人说话 | 允许不完整句、口语词、语气词;禁止书面语和成语 |
| C 意象派 | 一个母意象贯穿全篇 | 先定一个具体物件或场所,其余每一句都必须和它有关 |
给每个子代理的提示里必须包含:完整骨架(含每行字数与停顿)、这首歌在说什么、
可用素材、_shared/craft-reference.md 第 2 节的黑名单、以及它自己那条路子的硬约束。
不要把对话历史整个塞给子代理,也不要告诉它另外两个代理的存在 —— 知道了就会互相找平。
每个子代理返回:
完整初稿(按段落,每行后标 [字数])
本稿各段用的辙
我自己最不满意的三行,以及为什么
子代理自标的字数只作参考,字数以脚本为准。三稿收回后,主 Agent 把骨架存成 x 模板
(骨架只有表格时按每行字数和停顿写,4+5 写成 xxxx xxxxx),每稿去掉行尾的 [字数] 标注
(标注里的"字"也会被数进去)后存成文件,各跑一遍:
python3 ../lyric-doctor/scripts/lyric_check.py 稿1.txt --template 模板.txt
路径相对本 skill 目录,在仓库根下是 skills/songwriting/lyric-doctor/scripts/lyric_check.py。
段落名照骨架写,「主」和「主歌 1」脚本都对得上;报"模板里没有对应的段落"时先改段落名再跑。
一个 sonnet 子代理,拿到三份稿子的正文和每稿的脚本结果(不告诉它哪稿是谁写的,也不给路子说明),
另给 _shared/craft-reference.md 第 1 节的十三辙表和"副歌用开口辙"那一条,rubric 里的开口辙、闭口音按它判。
按下面的 rubric 逐句过:
| 检查项 | 判据 |
|---|---|
| 字数 | 看脚本结果,不自己数:±1 以内算过;同段对应行必须同长 |
| 辙 | 每段是否同辙;副歌是否用了开口辙 |
| 陈词 | 命中黑名单几个;hook 里有没有 |
| 画面 | 这一行能不能拍成镜头;不能的比例多高 |
| 推进 | 主歌二相对主歌一,时间/地点/事件/视角至少变了一样吗 |
| 重复 | 副歌 A/B 是不是同义换词 |
| 倒装 | 有没有为了押韵扭曲语序 |
| 长音 | 行末字是不是闭口音 |
红队的输出是问题清单,不是第四稿:
[稿号-段落-行号] 问题类型:具体毛病。改法方向(不给成句)
明确禁止红队重写整稿。一旦它交出一份"我改好的版本",那份稿子会因为最新最完整而被默认采用, 三稿对抗的成果就白费了。
主 Agent 自己做,不派子代理:
裁决时的取舍顺序:能拍成画面 > 不含陈词 > 有推进 > 押得顺 > 意思到位。 意思到位排最后,因为三稿都是照同一个意思写的,意思本来就都到位。
派一个 sonnet 子代理做终稿统一,任务只有四件,不许改意思、不许换句:
全过才能交付,任何一条不过就回到对应的轮次:
lyric_check.py,报"机械问题 0 处"(每行在骨架 ±1 内、停顿对得上、
没有对不上模板的段落);同段对应行同长,对照脚本打出的各行字数流程里有两样东西不是每个运行时都有:Claude Code 的子代理(Agent 工具、model: "sonnet"),
和能执行 Python 跑 lyric_check.py。缺了就按下面换,并在输出里如实标注:
没有子代理:能发互不共享上下文的独立调用(新会话、单独的模型请求)时,三个起草、一个红队 各用一次,每次只给该角色那份提示。做不到就在同一个上下文里按角色依次做:三稿一稿写完再写下一稿, 写每稿前只重读骨架、素材和本稿的路子,不回看前一稿;再换成红队出问题清单,最后裁决。 自检表加一行"流程 | 降级:各角色互相看得见",并告诉使用者三稿之间的差异会比并行时小。
能执行 Python、但找不到 lyric_check.py:用下面的命令逐行数汉字,再对照模板,
自检表的字数一行标"降级计算":
python3 -c "import re,sys; [print(len(re.findall(r'[一-鿿]', l)), l.rstrip()) for l in open(sys.argv[1], encoding='utf-8') if l.strip()]" 终稿.txt
完全不能执行代码:字数一行写"未验证",不用目测冒充"全部命中"。
## 歌词
主歌 1
<每行>
...
(各段照排)
## 自检
| 项 | 结果 |
|---|---|
| 字数(lyric_check.py) | 机械问题 0 处 / 第 X 段第 Y 行差 1 字(说明为什么留着) |
| 辙 | 主歌=言前 副歌=江阳 桥段=遥条 |
| hook | 「<那一句>」,出现 2 次 |
| 抽象情绪词 | 3 个:<列出来> |
## 备选句
<被否掉但还不错的句子,按位置列,供替换>
## 我妥协的地方
- <哪一行、为什么、有什么代价>
备选句这一段不要省。用户对某一行不满意时,有现成的候选比重跑一轮快得多。
| 版本 | 日期 | 变更 | 类型 |
|---|---|---|---|
| 0.1.1 | 2026-09-26 | 字数改由 lyric-doctor 的 lyric_check.py 对模板数(三稿收回后和终稿各跑一次),不再靠子代理自报;红队拿脚本结果和开口辙定义;"主 Agent 不起草句子"与第 3、4 轮统一:待补行退回第 1 轮;补"没有这些工具时(降级)";description 删掉与 lyric-concept-builder 撞车的"我们在写一首关于X的歌",写明前提 | patch |
| 0.1.0 | 2026-08-11 | 初始草稿 | minor |
まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
当学生说"Common App 活动栏写不下"、"这段活动描述超字数了"、"帮我把这几条压到限制内"时使用。先按官方申请表核对当季字符限额,再逐条检查;一次把所有条目量完并直接给出压缩版,只在需要砍掉实质内容时才用选择题问该保哪部分。每改一版都用工具重新数一遍字符,绝不凭感觉说"这样应该够了"。只压缩,不代写空白。
日本語の概要は準備中です。原文の説明を表示しています。
当学生说"我参加过一些活动但没整理过"、"帮我把经历录进去"、"我的活动档案是空的"时使用。让学生一口气把记得的活动说出来,直接把这段话拆成结构化的长期事项(角色、组织、起止时间、做了什么、结果、级别),说不清的字段留空标"待补"而不是编,再用一张选择题卡把级别判定与是否重复这类关键项一次问完,然后提案入库。只记录学生真正说出口的内容,级别按事实判定,绝不往高了写。
日本語の概要は準備中です。原文の説明を表示しています。
当学生问"招生官会怎么看我的档案"、"我的背景还差什么"、"帮我评估一下现在的申请竞争力"时使用。以顶尖大学招生官的视角通读学生的档案、长期活动与已写下的反思,不问任何前置问题直接产出一份指名道姓的坦诚点评:这份材料的亮点、招生官真实的解读方式、明显的短板与空白、以及接下来最值得做的一到两件事。只读不写,不修改学生的任何数据,也不代写任何申请材料。
日本語の概要は準備中です。原文の説明を表示しています。
当想知道一段 AI 回答"哪些能直接用、哪些必须先验证、哪些只能当建议"时使用。按声明类型分四级——低风险草稿材料、观点与策略建议、可查证的事实声明、会改变状态的可执行指令——每级配一句默认处置动作;再按影响半径排序,给出最小的下一步检查。可执行类一律标"不能直接执行;先做代码审阅/沙箱测试/回滚准备",其中破坏性或提权的命令排在最前。教的是一套可复用的复查习惯,不是替使用者把所有内容都核实一遍:本 skill 只分级、排序、定处置,要逐条核实走 ai-output-fact-checker,整段代码要做入库体检走 ai-code-onboarding-checklist。
日本語の概要は準備中です。原文の説明を表示しています。
当拿到一段 AI 生成的代码,还没决定要不要信、要不要跑、要不要往上继续加东西时使用。先做一遍客观体检:行数与嵌套深度、有没有测试、有没有硬编码密钥或遗留 TODO、依赖是不是真实存在、有没有危险调用(eval/exec、shell=True、递归删除、反序列化、提权、外发网络,按正文给的 grep 模式逐类查);再给风险评级和下一步动作。老实写明它查不了算法正确性——体检通过不等于代码是对的。回答里文字、事实和代码混在一起时先用 ai-answer-triage 分级;只审相对已有代码的一份改动用 ai-diff-review-protocol。
日本語の概要は準備中です。原文の説明を表示しています。
当 AI 改完代码、要决定这份 diff 放不放行时使用。不逐行精读,按四步走查高风险点——意图是否匹配、有没有碰到边界条件、副作用面有多大、能不能回滚——每步有明确的放过与打回判据。改动文件数、增删行数、动到的迁移/锁文件/CI/配置/鉴权/测试文件和危险 hunk 先由 scripts/diff_risk.py 统计(粘贴进来的 diff 文本也能读,不需要 Git),越过固定阈值时必须人工逐段过。只有口头描述、没有改动内容时不给结论,只列要补的材料。diff 里新写的测试可不可信交给 ai-generated-test-auditor;没有基线的整段新代码走 ai-code-onboarding-checklist。
日本語の概要は準備中です。原文の説明を表示しています。