当学生说"Common App 活动栏写不下"、"这段活动描述超字数了"、"帮我把这几条压到限制内"时使用。先按官方申请表核对当季字符限额,再逐条检查;一次把所有条目量完并直接给出压缩版,只在需要砍掉实质内容时才用选择题问该保哪部分。每改一版都用工具重新数一遍字符,绝不凭感觉说"这样应该够了"。只压缩,不代写空白。
The English summary is being prepared. Showing the original description.
当使用者说"帮我填词"、"按这个字数模板写歌词"、"用多Agent对抗式写词"、"这首副歌帮我想几句"时使用,前提是字数骨架和这首歌写什么都已经有了;只有主题、还没定写什么时先用 lyric-concept-builder。
拿一份字数骨架和意象系统,派三个 sonnet 子代理按不同路子并行独立起草(场景派 / 口语派 / 意象派),再派一个红队子代理逐句挑毛病,主 Agent 按句裁决拼稿,最后统一辙口与意象。收敛判据卡死:字数用 lyric-doctor 的脚本对模板数、每段同辙、hook 不含陈词、主歌二对主歌一有推进。
不抄现有歌词,不替使用者决定这首歌要说什么。
The English summary is being prepared. Showing the original description.
See how to installReview the instructions the agent will receive before you install.
多个子代理并行独立起草,红队逐句挑,主 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 |
No reviews yet. Tell others what you thought.
No login needed. Share how it worked for you, ask a question, or note where it did not run.
No comments yet. Be the first to write one.
当学生说"Common App 活动栏写不下"、"这段活动描述超字数了"、"帮我把这几条压到限制内"时使用。先按官方申请表核对当季字符限额,再逐条检查;一次把所有条目量完并直接给出压缩版,只在需要砍掉实质内容时才用选择题问该保哪部分。每改一版都用工具重新数一遍字符,绝不凭感觉说"这样应该够了"。只压缩,不代写空白。
The English summary is being prepared. Showing the original description.
当学生说"我参加过一些活动但没整理过"、"帮我把经历录进去"、"我的活动档案是空的"时使用。让学生一口气把记得的活动说出来,直接把这段话拆成结构化的长期事项(角色、组织、起止时间、做了什么、结果、级别),说不清的字段留空标"待补"而不是编,再用一张选择题卡把级别判定与是否重复这类关键项一次问完,然后提案入库。只记录学生真正说出口的内容,级别按事实判定,绝不往高了写。
The English summary is being prepared. Showing the original description.
当学生问"招生官会怎么看我的档案"、"我的背景还差什么"、"帮我评估一下现在的申请竞争力"时使用。以顶尖大学招生官的视角通读学生的档案、长期活动与已写下的反思,不问任何前置问题直接产出一份指名道姓的坦诚点评:这份材料的亮点、招生官真实的解读方式、明显的短板与空白、以及接下来最值得做的一到两件事。只读不写,不修改学生的任何数据,也不代写任何申请材料。
The English summary is being prepared. Showing the original description.
当想知道一段 AI 回答"哪些能直接用、哪些必须先验证、哪些只能当建议"时使用。按声明类型分四级——低风险草稿材料、观点与策略建议、可查证的事实声明、会改变状态的可执行指令——每级配一句默认处置动作;再按影响半径排序,给出最小的下一步检查。可执行类一律标"不能直接执行;先做代码审阅/沙箱测试/回滚准备",其中破坏性或提权的命令排在最前。教的是一套可复用的复查习惯,不是替使用者把所有内容都核实一遍:本 skill 只分级、排序、定处置,要逐条核实走 ai-output-fact-checker,整段代码要做入库体检走 ai-code-onboarding-checklist。
The English summary is being prepared. Showing the original description.
当拿到一段 AI 生成的代码,还没决定要不要信、要不要跑、要不要往上继续加东西时使用。先做一遍客观体检:行数与嵌套深度、有没有测试、有没有硬编码密钥或遗留 TODO、依赖是不是真实存在、有没有危险调用(eval/exec、shell=True、递归删除、反序列化、提权、外发网络,按正文给的 grep 模式逐类查);再给风险评级和下一步动作。老实写明它查不了算法正确性——体检通过不等于代码是对的。回答里文字、事实和代码混在一起时先用 ai-answer-triage 分级;只审相对已有代码的一份改动用 ai-diff-review-protocol。
The English summary is being prepared. Showing the original description.
当 AI 改完代码、要决定这份 diff 放不放行时使用。不逐行精读,按四步走查高风险点——意图是否匹配、有没有碰到边界条件、副作用面有多大、能不能回滚——每步有明确的放过与打回判据。改动文件数、增删行数、动到的迁移/锁文件/CI/配置/鉴权/测试文件和危险 hunk 先由 scripts/diff_risk.py 统计(粘贴进来的 diff 文本也能读,不需要 Git),越过固定阈值时必须人工逐段过。只有口头描述、没有改动内容时不给结论,只列要补的材料。diff 里新写的测试可不可信交给 ai-generated-test-auditor;没有基线的整段新代码走 ai-code-onboarding-checklist。
The English summary is being prepared. Showing the original description.