{"id":"5a8d9d6f-a2c5-48b2-b77f-929cfe5d4c9f","entityType":"agent","slug":"clawhub-andyrenxu7255-ai-songwriter-renxu","name":"Ai Songwriter","canonicalUrl":"https://www.xpersona.co/agent/clawhub-andyrenxu7255-ai-songwriter-renxu","canonicalPath":"/agent/clawhub-andyrenxu7255-ai-songwriter-renxu","generatedAt":"2026-10-11T14:17:18.865Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-11T11:30:26.648Z","emptyReason":null},"description":"AI歌曲创作核心技能 — 合辙押韵歌词创作 + MiniMax mmx-cli 正确调用 + 歌词验证 + 歌曲生成全流程。支持古诗词谱曲、主题歌曲创作、多渠道文件投递。 Skill: Ai Songwriter Owner: andyrenxu7255 Summary: AI歌曲创作核心技能 — 合辙押韵歌词创作 + MiniMax mmx-cli 正确调用 + 歌词验证 + 歌曲生成全流程。支持古诗词谱曲、主题歌曲创作、多渠道文件投递。 Tags: latest:3.3.0, stable:3.3.0 Version history: v3.3.0 | 2026-05-22T07:30:41.483Z | user 八层门禁链路重构：GATE 0调研→1大纲→2韵脚库→3造句→4验证→5发音质控→6确认→7生成→8听审。新增：中东辙合韵模式、发音质量控制三层防线、航空军工史诗音乐参数、结构标签双轨制、成飞案例完整复盘。修复 BOM，移除硬编码路径。 v3.1.1 | 2026-05-22T02:42:15.575Z | user 3.1.1 — 押韵错误字修正 - 从 -ang 错误字中移除「","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.1K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s1721fhgyy0yf38f9gfpbjxrn984fcz0:ai-songwriter-renxu","sourceUrl":"https://clawhub.ai/andyrenxu7255/ai-songwriter-renxu","homepage":"https://clawhub.ai/andyrenxu7255/skills/ai-songwriter-renxu","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/andyrenxu7255/ai-songwriter-renxu","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/andyrenxu7255/skills/ai-songwriter-renxu","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":61,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"AI歌曲创作核心技能 — 合辙押韵歌词创作 + MiniMax mmx-cli 正确调用 + 歌词验证 + 歌曲生成全流程。支持古诗词谱曲、主题歌曲创作、多渠道文件投递。 Skill: Ai Songwriter Owner: andyrenxu7255 Summary: AI歌曲创作核心技能 — 合辙押韵歌词创作 +"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T11:30:26.648Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T11:30:26.648Z","emptyReason":null},"stars":null,"forks":null,"downloads":1076,"packageName":null,"latestVersion":"3.3.0","tractionLabel":"1.1K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T11:30:26.584Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T11:30:26.648Z","lastCrawledAt":"2026-10-11T11:30:26.584Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T11:30:26.584Z","lastVerifiedAt":null,"highlights":[{"version":"3.3.0","createdAt":"2026-05-22T07:30:41.483Z","changelog":"八层门禁链路重构：GATE 0调研→1大纲→2韵脚库→3造句→4验证→5发音质控→6确认→7生成→8听审。新增：中东辙合韵模式、发音质量控制三层防线、航空军工史诗音乐参数、结构标签双轨制、成飞案例完整复盘。修复 BOM，移除硬编码路径。","fileCount":6,"zipByteSize":14154},{"version":"3.1.1","createdAt":"2026-05-22T02:42:15.575Z","changelog":"## 3.1.1 — 押韵错误字修正 - 从 -ang 错误字中移除「向」和「想」（二者韵母均为 -ang，不应列为错误字） - 从 -ou 错误字中移除「想」（韵母为 -ang，非 -ou 混淆）","fileCount":3,"zipByteSize":6446},{"version":"3.0.4","createdAt":"2026-05-21T09:40:08.058Z","changelog":"**Version 3.1.0 – Major update: 全流程合并，分支统一，支持多模式写歌和多通道路由** - 合并分支，去除 poetry、thematic、delivery 子技能，所有模式集中于主技能并扩展触发词，支持古诗词、主题、品牌等多场景。 - 规范技能文档结构，按全流程链路梳理：需求整理→模式判断→歌词创作→押韵验证→时长控制→歌词确认→音频生成→多渠道文件发送。 - 全新细化模式区分：「古诗词谱曲」和「主题歌曲」有独立流程、结构建议、生成参数与专属红线。 - 多渠道发送：统一以 message 工具处理各平台文件交付（企业微信、飞书、Telegram、微信、邮件等），标准化参数与限制说明。 - 触发词、押韵规则、时长控制和审核清单更新，加强合规与用户","fileCount":3,"zipByteSize":6451},{"version":"3.0.3","createdAt":"2026-05-21T01:54:55.533Z","changelog":"- Added new metadata files: _meta.json and clawhub.yaml. - Renamed skill from \"ai-songwriter\" to \"ai-songwriter-renxu\". - Updated skill category from \"creative\" to \"utility\". - Updated skill versioning. - No changes to skill core logic or workflow.","fileCount":6,"zipByteSize":15332},{"version":"3.0.2","createdAt":"2026-05-13T07:27:46.851Z","changelog":"v3.0.2: 修正示例消息，不再固定 -ang 韵脚，改为'韵脚自选（如-ang/-in/-ai/-ou/-an等）'，支持其他韵母","fileCount":5,"zipByteSize":14833},{"version":"3.0.1","createdAt":"2026-05-13T07:26:54.754Z","changelog":"v3.0.1: 修正 -ang 韵错误字列表，响/唱 韵母为 -ang（正确押韵），已移除","fileCount":5,"zipByteSize":14816},{"version":"3.0.0","createdAt":"2026-05-13T07:04:16.677Z","changelog":"v3.0 — 2026-05-13: Fix mmx model names (speech-2.8-hd, hailuo-2.3), remove invalid --output json from lyrics_generation, add music-2.6 full structure tag list, unify sub-skill versions to 3.0. Requires mmx-cli and MINIMAX_CN_API_KEY.","fileCount":5,"zipByteSize":14820}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s1721fhgyy0yf38f9gfpbjxrn984fcz0:ai-songwriter-renxu","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-andyrenxu7255-ai-songwriter-renxu/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-andyrenxu7255-ai-songwriter-renxu/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-andyrenxu7255-ai-songwriter-renxu/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-andyrenxu7255-ai-songwriter-renxu/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-andyrenxu7255-ai-songwriter-renxu/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-andyrenxu7255-ai-songwriter-renxu/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-11T14:17:18.863Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-andyrenxu7255-ai-songwriter-renxu/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-andyrenxu7255-ai-songwriter-renxu/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-andyrenxu7255-ai-songwriter-renxu/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-andyrenxu7255-ai-songwriter-renxu/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-11T11:30:26.648Z","emptyReason":null},"readme":"Skill: Ai Songwriter\n\nOwner: andyrenxu7255\n\nSummary: AI歌曲创作核心技能 — 合辙押韵歌词创作 + MiniMax mmx-cli 正确调用 + 歌词验证 + 歌曲生成全流程。支持古诗词谱曲、主题歌曲创作、多渠道文件投递。\n\nTags: latest:3.3.0, stable:3.3.0\n\nVersion history:\n\nv3.3.0 | 2026-05-22T07:30:41.483Z | user\n\n八层门禁链路重构：GATE 0调研→1大纲→2韵脚库→3造句→4验证→5发音质控→6确认→7生成→8听审。新增：中东辙合韵模式、发音质量控制三层防线、航空军工史诗音乐参数、结构标签双轨制、成飞案例完整复盘。修复 BOM，移除硬编码路径。\n\nv3.1.1 | 2026-05-22T02:42:15.575Z | user\n\n## 3.1.1 — 押韵错误字修正\n\n- 从 -ang 错误字中移除「向」和「想」（二者韵母均为 -ang，不应列为错误字）\n- 从 -ou 错误字中移除「想」（韵母为 -ang，非 -ou 混淆）\n\nv3.0.4 | 2026-05-21T09:40:08.058Z | auto\n\n**Version 3.1.0 – Major update: 全流程合并，分支统一，支持多模式写歌和多通道路由**\n\n- 合并分支，去除 poetry、thematic、delivery 子技能，所有模式集中于主技能并扩展触发词，支持古诗词、主题、品牌等多场景。\n- 规范技能文档结构，按全流程链路梳理：需求整理→模式判断→歌词创作→押韵验证→时长控制→歌词确认→音频生成→多渠道文件发送。\n- 全新细化模式区分：「古诗词谱曲」和「主题歌曲」有独立流程、结构建议、生成参数与专属红线。\n- 多渠道发送：统一以 message 工具处理各平台文件交付（企业微信、飞书、Telegram、微信、邮件等），标准化参数与限制说明。\n- 触发词、押韵规则、时长控制和审核清单更新，加强合规与用户\n\nv3.0.3 | 2026-05-21T01:54:55.533Z | auto\n\n- Added new metadata files: _meta.json and clawhub.yaml.\n- Renamed skill from \"ai-songwriter\" to \"ai-songwriter-renxu\".\n- Updated skill category from \"creative\" to \"utility\".\n- Updated skill versioning.\n- No changes to skill core logic or workflow.\n\nv3.0.2 | 2026-05-13T07:27:46.851Z | user\n\nv3.0.2: 修正示例消息，不再固定 -ang 韵脚，改为'韵脚自选（如-ang/-in/-ai/-ou/-an等）'，支持其他韵母\n\nv3.0.1 | 2026-05-13T07:26:54.754Z | user\n\nv3.0.1: 修正 -ang 韵错误字列表，响/唱 韵母为 -ang（正确押韵），已移除\n\nv3.0.0 | 2026-05-13T07:04:16.677Z | user\n\nv3.0 — 2026-05-13: Fix mmx model names (speech-2.8-hd, hailuo-2.3), remove invalid --output json from lyrics_generation, add music-2.6 full structure tag list, unify sub-skill versions to 3.0. Requires mmx-cli and MINIMAX_CN_API_KEY.\n\nArchive index:\n\nArchive v3.3.0: 6 files, 14154 bytes\n\nFiles: _meta.json (138b), clawhub.yaml (627b), references/rhyme-table-20260522.md (2503b), references/session-20260522-chengfei.md (5484b), skill-card.md (2554b), SKILL.md (14662b)\n\nFile v3.3.0:SKILL.md\n\n---\nname: ai-songwriter-renxu\ndescription: AI歌曲创作核心技能 — 合辙押韵歌词创作 + MiniMax mmx-cli 正确调用 + 歌词验证 + 歌曲生成全流程。支持古诗词谱曲、主题歌曲创作、多渠道文件投递。\nversion: 3.3.0\ncategory: utility\ntags: [songwriting, rhyming, music-generation, minimax, mmx, lyrics, poetry, thematic, delivery, pronunciation-qa, epic-corporate]\nauthor: renxu\nlicense: MIT\nplatforms: [linux, macos, windows]\nrequired_environment_variables:\n  - MINIMAX_CN_API_KEY\nrequired_commands:\n  - mmx\ntriggers:\n  - 写歌\n  - 创作歌曲\n  - 生成音乐\n  - 帮我写首歌\n  - AI songwriter\n  - 作曲\n  - 谱曲\n  - 古诗词谱曲\n  - 诗词改编\n  - 企业歌曲\n  - 客户歌曲\n  - 景点歌曲\n  - 品牌歌曲\n  - 主题歌\n---\n\n# AI歌曲创作核心技能\n\n## 八层门禁链路（GATED WORKFLOW）\n\n所有歌曲创作必须严格按 8 层顺序执行。每层是一个**硬门禁（HARD GATE）**——失败/不通过不得进入下一层。\n\n```\nGATE 0: RESEARCH     → 调研背景信息\nGATE 1: OUTLINE      → 分段主题大纲 + 韵脚预分配\nGATE 2: RHYME_BANK  → 逐段韵脚字库 + 词语释义\nGATE 3: WRITE       → 反推造句（受预分配尾字约束）\nGATE 4: VERIFY      → pypinyin 全量验证 + 修复\nGATE 5: PRONUNCIATION → 生僻字扫描 + 替换 + --extra 拼音\nGATE 6: CONFIRM     → 用户确认歌词\nGATE 7: GENERATE    → mmx music generate + 发送\nGATE 8: QA          → 听审 + 迭代修复\n```\n\n> ⚠️ **核心原则：每层产出必须验证通过后才能进入下一层。在 GATE 3 写词前，GATE 2 的韵脚字库必须已经 100% 确定（44字全局唯一）。不能边写边改韵脚。**\n\n---\n\n## GATE 0：调研背景\n\n**目标**：收集主题相关的历史、事件、特点、典故，输出调研笔记。\n\n```bash\n# 企业/公司\nmmx search query --q \"公司名称 成立 历史 里程碑 产品\" --limit 10 --non-interactive --quiet --output json\n\n# 景点/地点\nmmx search query --q \"景点名称 历史 典故 特色 名人\" --limit 10 --non-interactive --quiet --output json\n\n# 特定领域（如六代机）\nmmx search query --q \"关键词 最新进展 2024 2025\" --limit 10 --non-interactive --quiet --output json\n```\n\n**产出**：调研笔记（关键时间节点、人物、事件、数据）\n\n**门禁检查**：时间线是否完整？核心技术/事件是否覆盖？ □\n\n---\n\n## GATE 1：分段主题大纲 + 韵脚预分配\n\n**目标**：将叙事线拆为 11 段，预分配每段的韵脚组和 44 个全局唯一定位字。\n\n### 韵脚模式选择\n\n| 模式 | 规则 | 适用 |\n|------|------|------|\n| **中东辙合韵（默认）** | ing/eng/ong/iong 通押为 'eng' 组 | 用户偏好，中文歌曲习惯 |\n| 严格分韵 | ing/eng/ong 各自独立 | 学术验证 |\n| AABA | L1=L2=L4 同韵，L3 白脚异韵 | 主题/企业歌曲 |\n| 全韵统一 | 所有句同韵 | 短歌/儿歌 |\n\n### AABA + 中东辙标准分配（11段 × 4句 = 44句）\n\n```\n段韵分配（不可变）：4ang + 5eng + 2ong = 11段\nL3白脚分配（不可变）：全部 en 组 = 11个白脚字\n尾字总量（不可变）：12ang + 15eng + 6ong + 11en = 44字全局唯一\n```\n\n**产出格式**：\n\n| 段 | 标签 | 主题 | 段韵 | L1 | L2 | L4 | L3(en) | 核心内容 |\n|----|------|------|------|----|----|----|--------|----------|\n| 1 | Intro | xxx | ang | 航 | 光 | 翔 | 间 | xxx |\n| ... | ... | ... | ... | ... | ... | ... | ... | ... |\n\n**门禁检查**：\n- 11段是否都有明确主题？ □\n- 段韵分配是否为 4ang+5eng+2ong？ □\n- 44个字是否互不相同（肉眼初查）？ □\n- 叙事逻辑是否通顺？ □\n\n---\n\n## GATE 2：逐段韵脚字库 + 词语释义\n\n**目标**：为每个预分配的韵脚字提供常用词语和释义，供 GATE 3 造句参考。\n\n**产出格式**（每段一组）：\n\n```\n### 段1【主题】韵母 ang — 航/光/翔/间(白脚)\n\n| 韵脚字 | 常用词语（供造句参考） | 释义 |\n|--------|---------------------|------|\n| 航 | 启航、远航、领航、航空 | 出发；引领方向 |\n| 光 | 荣光、曙光、光芒、追光 | 光辉；荣耀 |\n| 翔 | 翱翔、飞翔 | 展翅高飞 |\n| 间 | 瞬间、天地间、弹指间 | (白脚) 时段、空间 |\n```\n\n**门禁检查**：\n- 每个字是否都有 ≥3 个可造句的词语？ □\n- 白脚字（en组）是否标注了用途？ □\n- 是否有生僻字混入词库？（如「筚」「缕」「旌」→ 提前踢出） □\n\n---\n\n## GATE 3：反推造句\n\n**目标**：用 GATE 2 的预分配尾字反向造句。每段 AABA，L1/L2/L4 尾字必须是指定的段韵字，L3 尾字必须是指定的白脚字。\n\n**硬约束**：\n- ❌ 不得使用非分配的尾字\n- ❌ 不得在段内换韵\n- ❌ 「客户名/品牌名」只能出现一次，且在 Intro 低调位置\n- ❌ 主线是业务/历史叙事，不是个人颂歌\n\n**产出**：44 句完整歌词（无结构标签 — 纯文本，一行一句）\n\n**门禁检查**：44 句是否写完？尾字是否与 GATE 2 分配一致（肉眼核对）？ □\n\n---\n\n## GATE 4：pypinyin 全量验证\n\n**目标**：用 Python 脚本逐句验证韵母归属 + AABA 结构 + 尾字全局唯一性。\n\n**必须用 pypinyin 而不能用硬编码集合**：\n\n| 字 | 硬编码判断 | pypinyin 正确结果 |\n|----|----------|-----------------|\n| 穷 | ong | eng (iong) |\n| 穹 | ong | eng (iong) |\n| 雄 | ong | eng (iong) |\n| 逢 | ong | eng (ong→介音u，归eng) |\n| 崧 | eng | ong |\n\n```python\nimport re\nfrom pypinyin import pinyin\nfrom collections import Counter\n\ndef get_rhyme_group(ch):\n    \"\"\"返回 'ang'|'eng'|'ong'|'en' 韵母组\"\"\"\n    py = pinyin(ch, style=0)[0][0].lower()\n    m = re.findall(r'[bpmfdtnlgkhjqxzcsryw]+', py)\n    initial = m[0] if m else ''\n    final = py[len(initial):]\n    if final in ['ang','iang','uang']: return 'ang'\n    if final in ['eng','ing','ueng','iong']: return 'eng'\n    if final in ['ong']: return 'ong'\n    if final in ['en','in','un','ün','uen','ian','an','uan']: return 'en'\n    return f'other({final})'\n\n# AABA 验证\ndef validate_aaba(lines, seg_rhymes):\n    \"\"\"lines: 44个字符串, seg_rhymes: 11个段韵列表\"\"\"\n    errors = []\n    tails = []\n    for si in range(11):\n        s = si * 4\n        g1,g2,g3,g4 = [get_rhyme_group(lines[s+j][-1]) for j in range(4)]\n        sr = seg_rhymes[si]\n        tails.extend([lines[s+j][-1] for j in range(4)])\n        if not (g1==g2==g4==sr and g3=='en'):\n            errors.append(f\"S{si+1}: {g1}/{g2}/{g3}/{g4} (期望 {sr}/{sr}/en/{sr})\")\n    dups = {k:v for k,v in Counter(tails).items() if v>1}\n    return errors, dups\n```\n\n**验收标准**：\n- 韵脚错误 = 0 □\n- 尾字重复 = 0（全局唯一） □\n- AABA 结构 = 100% 正确 □\n\n**修复原则**：发现重复尾字→优先替换高频字；发现韵脚错误→换尾字（必须同组且全局唯一）。\n\n**门禁检查**：以上三项是否全部通过？ □\n\n---\n\n## GATE 5：发音质量控制\n\n**目标**：扫描生僻字，替换高危字，为保留字准备 --extra 拼音提示。\n\n### 生僻字风险分级\n\n| 字级 | 定义 | 策略 | 示例 |\n|------|------|------|------|\n| 乙级（超纲） | HSK词汇表外 | 强制替换，不保留 | 筚、缕、旌 |\n| 丙级（低频） | HSK丙级 | 优先替换；不可替换时加 --extra | 峥、嵘、霆、铭、铸 |\n| 多音字 | 有多个读音 | --extra 标注正确读音 | 藏(cáng/zàng)、行(xíng/háng) |\n\n### 替换规则\n\n- **中间位字词**（不在句尾）→ 直接替换为常用同义词，不影响韵脚\n- **尾字**（影响韵脚）→ 替换为同韵母组常用字，且必须验证全局唯一性\n- **保留字**→ 必须加入 `--extra` 拼音提示\n\n**产出**：修复版歌词 + `--extra` 拼音提示字符串\n\n**门禁检查**：\n- 乙级字是否全部替换？ □\n- 保留字是否都加了 --extra 拼音？ □\n- 替换后韵脚是否重新通过 GATE 4 验证？ □\n\n---\n\n## GATE 6：用户确认歌词\n\n**目标**：将歌词提交用户确认，未经确认不得生成音频。**这是硬规则。**\n\n**产出**：\n- 纯文本歌词（无结构标签）\n- 预计时长（44句×3.2秒≈2.3分钟，repeat≈4.7分钟）\n- 韵脚验证结果（0错误）\n\n**门禁检查**：用户是否明确确认？ □\n\n---\n\n## GATE 7：音乐生成 + 发送\n\n**目标**：用正确参数调用 mmx music-2.6，生成后发送文件。\n\n### 歌词双轨制\n\n| 场景 | 是否含结构标签 | 原因 |\n|------|-------------|------|\n| 用户确认 | ❌ 纯文本 | 阅读体验 |\n| mmx API | ✅ [Intro][Verse][Chorus]等 | 帮助AI理解结构，提升生成质量 |\n\n### 音乐风格匹配表\n\n| 歌曲类型 | --prompt 关键词 | --vocals | --bpm | --key |\n|---------|---------------|----------|-------|-------|\n| 航空/军工/史诗 | Epic cinematic orchestral, Chinese national style, military grandeur, soaring brass, timpani, building from solemn to triumphant | Powerful male choir, heroic baritone solo | 105-115 | D/G major |\n| 企业/品牌 | Warm positive corporate, steady rhythmic, modern, hopeful, choir climax | Choir, uplifting chorus | 100-110 | C major |\n| 古诗词 | Traditional Chinese, slow tempo, guqin, xiao flute, sparse and elegant | Sweet child/古风女声 | 60-80 | E minor |\n| 景点/山水 | Cinematic ancient style, dizi flute, guzheng, flowing water imagery | 古风女声, sweet and ethereal | 70-90 | D minor |\n| 温馨/亲情 | Gentle acoustic, piano-driven, warm and intimate | Warm male baritone | 80-95 | F major |\n\n### 生成命令模板\n\n调用 mmx 前确保 PATH 包含 mmx 所在目录（安装位置取决于环境，常见于 `~/.hermes/node/bin/` 或 `~/.local/bin/`）。用 `which mmx` 或查找确认路径后 export。\n\n```bash\n# 确保 mmx 在 PATH 中（根据实际安装位置调整）\nexport PATH=\"<mmx安装目录>:$PATH\"\n\nmmx music generate \\\n  --prompt \"风格描述\" \\\n  --lyrics-file <歌词文件路径> \\\n  --vocals \"人声描述\" \\\n  --genre \"流派\" \\\n  --mood \"情绪\" \\\n  --instruments \"乐器\" \\\n  --tempo \"速度\" \\\n  --bpm 110 \\\n  --key \"D major\" \\\n  --use-case \"使用场景\" \\\n  --extra \"Pronunciation: 生僻字=拼音, ...\" \\\n  --model music-2.6 \\\n  --out <输出路径>.mp3 \\\n  --non-interactive --quiet\n```\n\n> ⚠️ `--async` 不能用于 music generate。\n> ⚠️ `--lyrics-file` 比 `--lyrics` 更稳定（避免命令行字符串过长）。\n> ⚠️ 不要硬编码绝对路径到技能中——让 agent 在运行时动态确认 mmx 位置。\n\n### 文件发送\n\n```python\nsend_message(\n    action=\"send\",\n    target=\"<platform>:<chat_id>\",\n    message=\"🎵 歌曲描述 MEDIA:/tmp/song.mp3\"\n)\n```\n\n**门禁检查**：\n- 结构标签是否在 API 调用中保留？ □\n- 音乐参数是否与歌曲类型匹配？ □\n- --extra 是否包含发音提示？ □\n- 文件是否成功发送？ □\n\n---\n\n## GATE 8：听审 + 迭代\n\n**目标**：听取生成结果，发现发音错误→回到 GATE 5 替换→GATE 4 重新验证→GATE 7 重新生成。\n\n**常见问题**：\n\n| 问题 | 修复 | 迭代路径 |\n|------|------|---------|\n| 某字发音不准 | 替换为同韵脚常用字 | GATE 5 → 4 → 7 |\n| 某段情绪不对 | 调整结构标签或 --prompt | GATE 7 |\n| 整体气场不够 | 换 --genre/--mood/--bpm | GATE 7 |\n| 时长太短 | 加 repeat 或扩展段落 | GATE 1 → ... → 7 |\n\n**门禁检查**：用户是否满意？ □\n\n---\n\n## 时长控制\n\n```\n预估时长 ≈ 歌词总句数 × 3.2秒/句\n24句 → 约77秒（不够）\n44句 → 约141秒（单遍不够，repeat ≈ 4.7分钟 ✅）\n56句 → 约179秒（边缘）\n60~92句 → 推荐交付区间\n```\n\n**硬规则**：单遍不足 3 分钟必须 repeat 或扩写。\n**补足优先级**：repeat 完整结构 > 增加 Verse > 增加 Bridge。\n\n---\n\n## 用户反馈处理优先级\n\n| 用户反馈 | 信号级别 | 处理 |\n|---------|---------|------|\n| \"尾字重复太多不好听\" | FIRST-CLASS | 立即检查重复字 > 换韵脚分组 > 换不同意象字 |\n| \"发音不对，xx字读错了\" | HIGH | GATE 5 替换该字 → GATE 4 → GATE 7 |\n| \"气场不够\" | MEDIUM | 调 --prompt/--genre/--bpm → GATE 7 |\n| \"某段歌词改一下\" | LOW | 局部替换 → GATE 4 验证 |\n\n---\n\n## mmx-cli 参考\n\n### 模型路由\n\n| 任务 | 模型 | 命令 |\n|------|------|------|\n| 歌曲生成 | music-2.6 | `mmx music generate --model music-2.6` |\n| 歌词生成（备用） | MiniMax-M2.7 | `mmx text chat --model MiniMax-M2.7 --region cn` |\n| 图片生成 | image-01 | `mmx image generate --model image-01` |\n| 视频生成 | hailuo-2.3 | `mmx video generate --model hailuo-2.3` |\n\n> ⚠️ `lyrics_generation` 不可靠（经常超时），用 MiniMax-M2.7 作为歌词生成的备用模型。\n> ⚠️ `music-2.6-free` 需要付费计划，不用。\n\n### 声线参数\n\n| 期望声线 | --vocals |\n|---------|----------|\n| 男声合唱 | `Powerful male choir with heroic baritone solo` |\n| 女声独唱 | `Bright female soprano` |\n| 童声 | `Sweet innocent child vocal` |\n| 合唱 | `Choir, uplifting chorus` |\n| 男声独唱 | `Warm male baritone` |\n\n### 结构标签（mmx API 支持）\n\n`[Intro] [Verse] [Pre Chorus] [Chorus] [Interlude] [Bridge] [Outro] [Build Up] [Solo]`\n\n---\n\n## 审查清单\n\n```\n□ GATE 0: 调研笔记是否完整？\n□ GATE 1: 11段大纲是否通过用户确认？\n□ GATE 2: 44字韵脚库是否 100% 确定？\n□ GATE 3: 44句是否严格用预分配尾字造句？\n□ GATE 4: pypinyin 验证是否 0 错误 + 0 重复 + AABA 全对？\n□ GATE 5: 乙级生僻字是否全部替换？保留字是否加了 --extra？\n□ GATE 6: 歌词是否已发给用户确认？\n□ GATE 7: --model music-2.6？结构标签是否保留在 API 调用中？\n□ GATE 8: 用户是否满意最终音频？\n```\n\n---\n\n## 已知问题与解法\n\n| 问题 | 解法 |\n|------|------|\n| 尾字重复 | 替换韵脚分组（ang↔eng↔ong轮换）→ 替换不同意象字（航→长/途）|\n| 生僻字发音不准 | 三层防线：扫描替换 → --extra 拼音 → 听审迭代 |\n| 硬编码韵母集合不可靠 | 强制用 pypinyin 逐字验证 |\n| lyrics_generation 返回空 | 换用 `MiniMax-M2.7` 作为备用 |\n| 48句+ 长歌词超时 | Python subprocess 后台运行，等待约 160 秒 |\n| 粤语不支持 | music-2.6 输出仍为普通话 |\n\n---\n\n## References\n\n- MiniMax CLI: https://github.com/MiniMax-AI/cli\n- Platform Docs: https://platform.minimaxi.com/docs\n- ClawHub: https://clawhub.ai/andyrenxu7255/ai-songwriter-renxu\n- **`references/rhyme-table-20260522.md`** — 实测押韵表\n- **`references/session-20260522-chengfei.md`** — 成飞案例完整复盘\n\nFile v3.3.0:_meta.json\n\n{\n  \"ownerId\": \"kn725tchg3gp72a78w22qa07p584f267\",\n  \"slug\": \"ai-songwriter-renxu\",\n  \"version\": \"3.3.0\",\n  \"publishedAt\": 1779435041483\n}\n\nFile v3.3.0:references/rhyme-table-20260522.md\n\n# 押韵表实测验证（2025-05-22）\n\n## 正确分类（经多轮迭代验证）\n\n### ang 集合（归韵用）\n```\n航 光 扬 场 疆 长 望 荡 魂 雄 风 鸿 龙 鹏 铭 峰 方 章 灯 芒 钢 康 强 翔 苍 桑 墙 庄 脏 旁 昂 量 详 彷 徨 狂 祥\n```\n> 实测确认：灯(dēng)✓ 强(qiáng)✓ 藏(cáng)✓ 方(fāng)✓ 章(zhāng)✓ 芒(máng)✓ 钢(gāng)✓ 康(kāng)✓\n\n### non_ang 集合（白脚用）\n```\n间 上 藏 沧 茫 情 名 性 当 忘 林 生 铁 青 星 时 此 心 中 里 外 下 那 和 去 见\n```\n> 实测确认：星(xīng)✓ 情(qíng)✓ 名(míng)✓ 性(xìng)✓（这些是 -ing/-ong 韵，不是 -ang）\n\n## 错误表（多次踩坑记录）\n\n### 原 skill 中错误分类\n| 字 | 原skill以为 | 实际 | 说明 |\n|----|-----------|------|------|\n| 灯 | non-ang | **ang** | dēng 韵尾 -eng |\n| 强 | non-ang | **ang** | qiáng 韵尾 -iang |\n| 藏 | non-ang | **ang** | cáng 韵尾 -ang |\n| 方 | non-ang | **ang** | fāng 韵尾 -ang |\n| 章 | non-ang | **ang** | zhāng 韵尾 -ang |\n| 芒 | non-ang | **ang** | máng 韵尾 -ang |\n| 钢 | non-ang | **ang** | gāng 韵尾 -ang |\n| 康 | non-ang | **ang** | kāng 韵尾 -ang |\n| 声 | ang | **non-ang** | shēng 韵尾 -eng |\n| 名 | ang | **non-ang** | míng 韵尾 -ing |\n| 性 | ang | **non-ang** | xìng 韵尾 -ing |\n| 情 | ang | **non-ang** | qíng 韵尾 -ing |\n| 星 | ang | **non-ang** | xīng 韵尾 -ing |\n\n### 边缘字韵母实测（pypinyin验证，2025-05-22补充）\n\n| 字 | pypinyin韵母 | eng/ong分组 | 错误分类 | 正确分组 |\n|----|-------------|------------|---------|---------|\n| 穷 | iong | eng | ong | **eng** |\n| 穹 | iong | eng | ong | **eng** |\n| 胸 | iong | eng | ong | **eng** |\n| 逢 | ong | **eng**（u介音） | ong | **eng** |\n| 雄 | iong | eng | ong | **eng** |\n| 翎 | ing | eng | eng | **eng**（ling→ing，ing属eng）|\n| 崧 | iong | ong | eng | **ong** |\n| 宁 | ing | eng | eng | **eng**（ning→ing，ing属eng）|\n| 名 | ing | eng | ong | **eng**（ming→ing，ing属eng）|\n| 场 | ang | ang | 存疑 | **ang** |\n\n> **结论**：肉眼判断韵母不可靠。eng/ong 分界点：iong/ing/ueng → eng；ong（无i/u介音）→ ong。用 pypinyin 逐字验证是唯一可靠方法。\n\n## 验证结论\n\nang ∩ non_ang = ∅（完全不相交）\n\n## 尾字重复阈值\n\n- 单一尾字 > 5 次 → ⚠️ 用户会抱怨\"重复尾字太多了\"\n- 建议：每句韵脚不同词，目标 ang 表中每个字使用 ≤ 4 次\n\nFile v3.3.0:references/session-20260522-chengfei.md\n\n# 成飞航空报国主题曲 — 完整案例 (2026-05-22)\n\n## 项目背景\n\n- **客户**：成飞（成都飞机工业集团）\n- **用途**：客户接待 AI 歌曲 MV\n- **叙事线**：时间轴 J-10 → J-20 → J-36（六代机）\n- **时长**：3-5 分钟\n- **技术目标**：展示 AI 能力打动客户\n\n## 调研结果\n\n### 成飞历史\n- 1958年创立（原国营132厂，黄田坝）\n- 1964年首飞歼5甲\n- 1980年代承担歼10研制\n- 歼10获国家科技进步奖特等奖\n- 2011年歼20（威龙）首飞 — 中国首款五代隐身战机\n- 2024.12.26 歼36（六代机）首飞\n\n### 六代机技术特征\n- 无尾三角翼、三发动机（双涡扇+火箭/冲压）\n- 全向隐身（360°无死角）\n- AI智能座舱、忠诚僚机协同\n- 作战半径 ~3000km（超歼20 50%+）\n- 速度可能达 Mach 2.5-3+\n- 代号\"白帝\"\n\n## 四步法实战\n\n### Step 1: 11段大纲\n```\nS1  [Intro]  创业启航 (ang)   1958成飞创立\nS2  [Verse]  歼10破晓 (eng)   1980s自主研制\nS3  [Verse]  歼20冲天 (ang)   2011五代隐身\nS4  [Chorus] 航空报国魂 (eng) 忠诚奉献精神\nS5  [Verse]  砥砺奋进 (ong)   技术攻关积累\nS6  [Verse]  歼36横空 (eng)   2024六代首飞\nS7  [Chorus] 六代荣光 (ang)   AI/隐身/协同\nS8  [Bridge] 苍穹之巅 (ong)   三马赫/空天一体\nS9  [Verse]  赤子丹心 (eng)   代代传承\nS10 [Chorus] 逐梦长空 (ang)   68年跨越\nS11 [Outro]  致敬辉煌 (eng)   展望未来\n```\n\n韵脚分配：4ang + 5eng + 2ong = 11段，L3白脚全en组 = 44字全局唯一\n\n### Step 2: 韵脚字库\nang组(12字)：航/光/翔/长/扬/强/芒/疆/钢/藏/苍/煌\neng组(15字)：风/鹏/星/铭/成/征/霆/凌/鸣/程/腾/鹰/灯/峰/升\nong组(6字)：空/虹/崇/冲/龙/荣\nen组(11字·白脚)：间/天/边/关/心/魂/云/身/林/深/音\n\n### Step 3: 最终歌词（v2 发音修复版）\n\n```\n一九五八西南大地扬帆启航\n航空报国的赤子初心闪着光\n数十载披荆斩棘弹指一挥间\n大国重器的梦想在蓝天翱翔\n\n八十年代自主研发借力长风\n猛龙冲天化作展翅大鹏\n从模仿到原创胆敢去问天\n中国智慧闪耀如启明星\n\n二零一一威龙出世征途更长\n隐身破空战旗猎猎扬\n五代之巅俯瞰疆域万里边\n大国空军铁拳越练越强\n\n忠诚奉献四个字心头深深铭\n逐梦蓝天的事业百折终铸成\n航空强国何惧万重关\n瞄准一流踏上新长征\n\n数代人接力守望万里长空\n技术攻关如飞桥化作彩虹\n岁月不改那一颗赤子初心\n从跟跑并跑到领跑地位日崇\n\n二零二四寒冬炸响万钧雷霆\n无尾三角翼三发冲天壮志凌\n这是几代航空人铸就的忠魂\n黄田坝上空第一次响起轰鸣\n\n全向隐身刀锋出鞘露锋芒\nAI大脑指挥作战守护万里疆\n忠诚僚机编队穿透风起云\n代际碾压的意志百炼成钢\n\n三马赫极速向着苍穹俯冲\n空天一体化作东方威龙\n智慧大脑自主进化无我之身\n在世界航空史上写下光荣\n\n六十八载风雨路再踏新程\n祖国蓝天见证热血在沸腾\n战鹰列阵穿越弹雨枪林\n忠诚基因代代传承如雄鹰\n\n蓝天深处多少故事心中深藏\n航空人的芳华尽染岁月苍\n这份热爱比大海还要深\n他们的名字铸进了辉煌\n\n回望来路总见那面旗帜如灯\n攀过一山更有一山高入峰\n黄田坝的风送来胜利的回音\n向着更高更远冉冉飞升\n```\n\n### Step 4: 验证结果\n- 韵脚错误：0/44\n- 尾字重复：无 — 44字全局唯一\n- AABA结构：11段全部正确\n- 时长：44句 × 3.2s = 141s ≈ 2.3min（单遍），repeat全曲 ≈ 4.7min\n\n## 踩坑记录\n\n### 坑1: 尾字重复（征×2）\n- **现象**：S4L4「长征」和 S9L1「长征」尾字重复\n- **根因**：S9L1 错用了「征」而非指定的「程」\n- **修复**：S9L1「六十八载风雨路再踏新程」\n\n### 坑2: 生僻字发音不准\n- **现象**：v1 中「筚路蓝缕」「峥嵘」「旌」发音不清晰\n- **根因**：music-2.6 对乙级/丙级字发音不稳定\n- **修复**：\n  - 筚路蓝缕 → 披荆斩棘（中间位替换）\n  - 峥嵘 → 光荣（尾字ong组替换）\n  - 蕴藏 → 深藏（中间位替换）\n  - 旌 → 灯（尾字eng组替换）\n  - 保留词加 `--extra` 拼音提示：雷霆、铭、崇、凌、芳华、铸成\n\n### 坑3: hardcoded 韵母判断不靠谱\n- **结论**：必须用 pypinyin 逐字验证，不能用硬编码集合\n- **示例**：iong/ing/ueng → eng 组；ong（无介音）→ ong 组\n\n## 音乐生成参数\n\n```bash\n--prompt \"Epic cinematic orchestral score with Chinese national style...\"\n--vocals \"Powerful male choir with heroic baritone solo...\"\n--genre \"Cinematic orchestral / military march / Chinese epic\"\n--mood \"Heroic, majestic, proud, deeply moving, inspirational, triumphant\"\n--instruments \"Full symphony orchestra, brass, timpani, military drums, guzheng/dizi accents\"\n--bpm 110\n--key \"D major\"\n--extra \"Pronunciation: 雷霆=léi tíng, 铭=míng, 崇=chóng, 凌=líng, 芳华=fāng huá, 铸成=zhù chéng, 光荣=guāng róng\"\n```\n\n## 关键经验\n\n1. **四步法必须严格按序执行**：大纲→韵脚表→造句→验证，不能边想边写\n2. **44字全局唯一**靠韵脚预分配实现，不是后验修正\n3. **结构标签双轨制**：交付用户纯文本，传 API 时保留标签\n4. **发音三层防线**：事前扫描 → 事中 `--extra` 提示 → 事后听审\n5. **「成飞」只出现一次**：在 S1L1 Intro 中低调出现，Chorus 不重复\n\nFile v3.3.0:skill-card.md\n\n## Description:\n\nGuides agents through Chinese-focused songwriting with rhymed lyric planning, pypinyin validation, pronunciation QA, MiniMax mmx music generation, and file delivery.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[andyrenxu7255](https://clawhub.ai/user/andyrenxu7255)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and creators use this skill to plan Chinese song projects, write rhymed lyrics, validate rhyme and pronunciation, configure MiniMax mmx music generation, and deliver generated songs after user confirmation.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Topic prompts, lyrics, and generation parameters may be sent to MiniMax through mmx.\n\nMitigation: Confirm MiniMax processing is intended before generation and confirm the delivery destination before sending generated audio to a chat or platform.\n\nRisk: Chinese lyric rhymes, rare characters, or multitone characters may produce incorrect pronunciation in generated music.\n\nMitigation: Run pypinyin rhyme validation, scan rare and multitone characters, add explicit pronunciation hints, and perform listening review before final delivery.\n\nRisk: Long lyrics or direct command-line lyric input can make generation unreliable.\n\nMitigation: Use a lyrics file for mmx generation and repeat or expand structures only after validating the full lyric workflow.\n\n## Reference(s):\n\n- [ClawHub Skill Page](https://clawhub.ai/andyrenxu7255/skills/ai-songwriter-renxu)\n- [MiniMax CLI](https://github.com/MiniMax-AI/cli)\n- [MiniMax Platform Docs](https://platform.minimaxi.com/docs)\n- [Rhyme Table Validation](references/rhyme-table-20260522.md)\n- [Chengfei Songwriting Case Study](references/session-20260522-chengfei.md)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance, files]\n\n**Output Format:** [Markdown guidance with inline code blocks, command templates, generated lyrics, and music generation parameters.]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May produce generated audio files or delivery instructions when MiniMax mmx tooling is available.]\n\n## Skill Version(s):\n\n3.3.0 (source: server release evidence, SKILL.md frontmatter, clawhub.yaml)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v3.3.0:clawhub.yaml\n\nname: ai-songwriter-renxu\nversion: 3.3.0\ndescription: AI歌曲创作核心技能 — 八层门禁链路，合辙押韵歌词创作 + MiniMax mmx-cli 音乐生成。支持诗词改编、主题创作、押韵验证、发音质量控制、多渠道文件投递。\nauthor: renxu\nhomepage: https://clawhub.ai/skills/ai-songwriter-renxu\nlicense: MIT\ntags:\n  - songwriting\n  - rhyming\n  - music-generation\n  - minimax\n  - mmx\n  - lyrics\n  - poetry\n  - thematic\n  - epic-corporate\ncategory: utility\ndependencies: []\nentry: SKILL.md\nfiles:\n  - SKILL.md\n  - references/rhyme-table-20260522.md\n  - references/session-20260522-chengfei.md\n\nArchive v3.1.1: 3 files, 6446 bytes\n\nFiles: _meta.json (138b), clawhub.yaml (534b), SKILL.md (12183b)\n\nFile v3.1.1:SKILL.md\n\n---\nname: ai-songwriter-renxu\ndescription: AI歌曲创作核心技能 — 合辙押韵歌词创作 + MiniMax mmx-cli 正确调用 + 歌词验证 + 歌曲生成全流程。支持古诗词谱曲、主题歌曲创作、多渠道文件投递。\nversion: 3.1.0\ncategory: utility\ntags: [songwriting, rhyming, music-generation, minimax, mmx, lyrics, poetry, thematic, delivery]\nauthor: renxu\nlicense: MIT\nplatforms: [linux, macos, windows]\nrequired_environment_variables:\n  - MINIMAX_CN_API_KEY\nrequired_commands:\n  - mmx\ntriggers:\n  - 写歌\n  - 创作歌曲\n  - 生成音乐\n  - 帮我写首歌\n  - AI songwriter\n  - 作曲\n  - 谱曲\n  - 古诗词谱曲\n  - 诗词改编\n  - 企业歌曲\n  - 客户歌曲\n  - 景点歌曲\n  - 品牌歌曲\n  - 主题歌\n---\n\n# AI歌曲创作核心技能\n\n## 全流程标准链路\n\n所有写歌请求必须严格按以下顺序执行：\n\n1. **需求整理**：确认主题、风格、情绪、受众、语言\n2. **模式判断**：\n   - 古诗词相关 → 使用「古诗词谱曲模式」\n   - 企业/客户/景点/品牌相关 → 使用「主题歌曲模式」\n   - 其他 → 通用模式直接处理\n3. **歌词创作**：按押韵规范创作歌词\n4. **押韵验证**：用 Python 脚本逐句检查\n5. **时长计算**：预估时长，不足 3 分钟则补足\n6. **歌词确认**：输出歌词草案 + 预计时长 + 是否 repeat → 等用户确认\n7. **音频生成**：用户确认后执行 `mmx music generate`\n8. **文件发送**：生成后通过正确方式发送给用户\n\n> ⚠️ **未经用户确认歌词，不得直接生成音频。这是硬规则。**\n\n---\n\n## 押韵规范\n\n### 押韵模式 A（全韵统一）⭐\n选定一个韵母后，**每一句最后一个字**都必须发该韵。\n\n| 韵母 | 常见安全字 |\n|------|-----------|\n| -ang | 光/望/扬/荡/长/忙/香/霜/央/黄/苍/场/昌 |\n| -in | 心/亲/情/金/新/林/琴/音 |\n| -ai | 爱/来/白/海/开/才 |\n| -ou | 楼/舟/流/秋/游/留/悠/收/投/酬 |\n| -an | 山/寒/难/残/叹/关/湾/前 |\n\n### 押韵模式 B（诗词格律）\n**第三句不押韵（白脚）**，一、二、四句押韵。适用于古诗词改编。\n\n### 押韵验证脚本\n\n```python\ndef validate_rhyme(lyrics_text, rhyme_set, poem_lines=None):\n    \"\"\"验证押韵\n    Args:\n        lyrics_text: 歌词字符串（多行）\n        rhyme_set: 押韵字集合\n        poem_lines: 原诗锚点集合，默认None表示无锚点\n    \"\"\"\n    if poem_lines is None:\n        poem_lines = set()\n    lines = [l.strip() for l in lyrics_text.strip().split('\\n') if l.strip()]\n    errors = []\n    for i, line in enumerate(lines):\n        pos_in_stanza = (i % 4) + 1\n        is_white = (pos_in_stanza == 3)\n        last_char = line[-1]\n        if line in poem_lines:\n            continue\n        if is_white:\n            ok = last_char not in rhyme_set\n        else:\n            ok = last_char in rhyme_set\n        if not ok:\n            errors.append((i+1, line, last_char))\n        print(f\"{'✓' if ok else '✗'} 第{i+1:2d}句 {line} → {last_char}\")\n    return errors\n```\n\n### 常见错误字\n\n| 目标韵 | 容易混入的错误字 |\n|--------|-----------------|\n| -ang | 前/现/星/心/声/名/性 |\n| -ou | 心/声/美/歌/路 |\n\n---\n\n## mmx-cli 正确调用\n\n### 模型路由\n\n| 任务 | 模型 | 命令 |\n|------|------|------|\n| 歌词生成 | `lyrics_generation` | `mmx text chat --model lyrics_generation` |\n| 歌曲生成 | `music-2.6` | `mmx music generate --model music-2.6` |\n| 语音合成 | `speech-2.8-hd` | `mmx speech synthesize --model speech-2.8-hd` |\n| 图片生成 | `image-01` | `mmx image generate --model image-01` |\n| 视频生成 | `hailuo-2.3` | `mmx video generate --model hailuo-2.3` |\n\n> ⚠️ **必须指定 `--model`**：music-2.6 而非 music-2.5。\n\n### 歌词生成\n\n```bash\nmmx text chat \\\n  --message \"为主题'xxx'创作歌曲歌词。全程押韵（韵脚自选，如-ang/-in/-ai/-ou/-an等），每段4句。\" \\\n  --model lyrics_generation \\\n  --non-interactive --quiet\n```\n\n> ⚠️ `lyrics_generation` 是独立文本模型，**不是** `mmx music` 子命令。如果返回空内容，换用 `mmx text chat --model MiniMax-M2.7` 作为备用。\n\n### 歌曲生成\n\n```bash\nmmx music generate \\\n  --prompt \"音乐风格描述\" \\\n  --lyrics \"歌词文本\" \\\n  --vocals \"人声描述\" \\\n  --model music-2.6 \\\n  --out song.mp3 \\\n  --non-interactive --quiet\n```\n\n长歌词（48句+）用异步模式：`--async --non-interactive --quiet`。也可用 `--lyrics-file` 代替 `--lyrics`。\n\n### 声线参数\n\n| 期望声线 | --vocals 示例 |\n|---------|--------------|\n| 童声 | `\"sweet innocent child vocal\"` |\n| 女声 | `\"bright female soprano\"` |\n| 男声 | `\"warm male baritone, father singing\"` |\n| 合唱 | `\"choir, uplifting chorus\"` |\n\n---\n\n## 模式一：古诗词谱曲\n\n### 核心原则\n\n1. **保留诗词原文**：原封不动地保留在 Verse 中，不得更改任何一字，作为歌曲固定锚点\n2. **自创开头结尾**：在诗词前后各增加自创歌词（Intro 引导意境，Outro 升华情感）\n3. **自创段落递进**：按递进结构展开，避免同词异句简单重复\n\n### 诗词类型处理\n\n| 诗词类型 | 句数 | 建议处理 |\n|---------|------|---------|\n| 五言绝句 | 4句 | 唱两遍（Verse 1 + Verse 2 相同） |\n| 七言绝句 | 4句 | 唱两遍，字数更多时值略长 |\n| 律诗 | 8句 | 可只取前四句或按音乐结构调整 |\n| 古体诗 | 不限 | 精选核心段落，避免过长 |\n\n### 推荐歌词结构\n\n```\n[Intro]     自创开场（4句，引导意境，为诗词铺垫）\n[Verse 1]   诗词原文（作为锚点，原封不动）\n[Chorus]    自创（4句，承接诗词，情感展开）\n[Verse 2]   诗词原文（可重复Verse1）\n[Chorus]    自创（4句，情感递进）\n[Bridge]    高潮/变奏（4句）\n[Outro]     自创结尾（4句，升华情感）\n```\n\n基础结构 28 句 ≈ 90 秒，**必须至少完整两遍 + 额外段落**才能达到 3 分钟。推荐：基础结构 × 2 + Bridge = 约 56-60 句 ≈ 3 分钟+。\n\n### 音乐生成参数\n\n```bash\nmmx music generate \\\n  --prompt \"古诗词风格，慢板，悠扬沉郁，古琴独奏为主，箫声点缀，节奏舒缓如行云流水，歌声要有气势有情感，字正腔圆，中速偏慢\" \\\n  --lyrics \"歌词文本（纯文本，无结构标签）\" \\\n  --vocals \"温暖童声，古诗词风格，甜美纯真\" \\\n  --model music-2.6 \\\n  --out song.mp3 \\\n  --async --non-interactive --quiet\n```\n\n---\n\n## 模式二：主题歌曲（企业/客户/景点/品牌）\n\n### 核心原则\n\n1. **调研先行**：先调研客户/景点的历史、事件、特点、典故\n2. **素材转化**：将调研内容提炼为歌词意象\n3. **押韵创作**：全程押韵，每句尾字必须是目标韵母\n4. **主线叙事**：以时间轴或里程碑为主线，不是个人颂歌\n\n### 联网调研命令\n\n```bash\n# 搜索公司背景\nmmx search query --q \"公司名称 成立 历史 里程碑\" --limit 10 --non-interactive --quiet --output json\n\n# 搜索近期新闻\nmmx search query --q \"公司名称 最新动态\" --limit 10 --non-interactive --quiet --output json\n\n# 搜索景点背景\nmmx search query --q \"景点名称 历史 典故 传说\" --limit 10 --non-interactive --quiet --output json\n\n# 搜索景点特色\nmmx search query --q \"景点名称 特色景观 名人足迹 著名诗句\" --limit 10 --non-interactive --quiet --output json\n```\n\n### 推荐歌词结构\n\n```\n[Intro]     自创开场（4句，引入主题）\n[Verse 1]   调研提炼的场景/事件描述（4句）\n[Chorus]    核心主题升华（4句，主线叙事）\n[Verse 2]   调研提炼的素材（4句，递进）\n[Chorus]    核心主题升华（4句）\n[Bridge]    转折/反思（4句）\n[Outro]     升华收尾（4句）\n```\n\n> 基础结构 28 句 ≈ 90 秒。**必须补足到 60+ 句（约 3 分钟+）**，默认增加段落或整首 repeat。推荐目标：80 句 ≈ 4.3 分钟。\n\n### 禁区与红线\n\n- ❌ **名字只能出现一次**：放在不起眼位置，禁止在 Chorus 反复出现\n- ❌ **禁止领地争议表述**：如\"数字学堂\"会被教学部门认为在抢功\n- ❌ **主线不能是个人颂歌**：必须是业务成长之路或团队集体叙事\n- ❌ 不能包含有争议的领土表述\n- ❌ 不能过度歌功颂德\n\n### 企业歌曲音乐参数\n\n```bash\nmmx music generate \\\n  --prompt \"温暖积极的企业歌曲，节奏明快，充满希望和凝聚力，现代企业宣传片风格，副歌更有推动感，适合合唱\" \\\n  --lyrics \"歌词文本（纯文本，无结构标签）\" \\\n  --vocals \"choir, uplifting chorus\" \\\n  --model music-2.6 \\\n  --out song.mp3 \\\n  --async --non-interactive --quiet\n```\n\n### 景点歌曲音乐参数\n\n```bash\nmmx music generate \\\n  --prompt \"古风景点歌曲，笛子为主，箫声点缀，悠扬悠远，仿佛山水画卷展开\" \\\n  --lyrics \"歌词文本（纯文本，无结构标签）\" \\\n  --vocals \"古风女声，甜美悠扬\" \\\n  --model music-2.6 \\\n  --out song.mp3 \\\n  --async --non-interactive --quiet\n```\n\n---\n\n## 时长控制\n\n| 最短 | 最长 | 目标 |\n|------|------|------|\n| 3分钟 | 5分钟 | 3:00 ~ 5:00 |\n\n```\n预估时长 ≈ 歌词总句数 × 3.2秒/句\n24句 → 约77秒（明显不够）\n48句 → 约2分34秒（仍偏短）\n56句 → 约2分59秒（下限边缘）\n60~92句 → 推荐交付区间\n```\n\n> **硬规则：** 如果首版歌词不足 3 分钟，必须扩写或重复主结构后再交付确认。\n> **补足优先级：** 重复副歌 → 增加主歌 → 增加 Bridge → 整首 repeat。\n\n---\n\n## 歌词确认机制与交付格式\n\n在执行 `mmx music generate` 前，**必须**先把歌词文本发给用户确认：输出歌词草案 → 标注预计时长 → 说明是否 repeat → 等用户确认后再生成。\n\n交付格式：纯文本歌词，一行一句，**禁止**包含结构标签（如[Verse]、[Chorus]）和说明文字。\n\n---\n\n## 文件发送\n\n### 通道路由（统一使用 message 工具）\n\n所有通道统一优先走 OpenClaw 的 `message` 工具直发本地附件：\n\n```\nmessage 工具参数：\n  action: \"send\"\n  channel: \"<当前通道>\"\n  target: \"<当前通道>:<用户ID>\"\n  media: \"<本地绝对路径>\"\n  filePath: \"<本地绝对路径>\"\n  filename: \"<文件名>\"\n  mimeType: \"<MIME类型>\"\n  forceDocument: true\n```\n\n| 通道 | channel 值 | 文件大小限制 |\n|------|-----------|------------|\n| 企业微信 | wecom | 20MB |\n| 飞书 | feishu | 50MB |\n| 微信 | openclaw-weixin | 限私聊 |\n| Telegram | telegram | 50MB |\n| WhatsApp | whatsapp | 16MB（音频）/ 100MB（文档） |\n| Slack | slack | 10MB |\n| Discord | discord | 8MB（免费）/ 50MB（Nitro） |\n\n### 邮件发送（备选）\n\n当用户明确要求邮件发送时，生成完成后先通过邮箱询问用户收件地址，确认后发送。\n\n### 发送前检查清单\n- 文件是否存在且使用绝对路径\n- 文件大小是否在当前通道限制内\n- filename 是否显式传入\n- mimeType 是否正确（MP3 → `audio/mpeg`）\n- forceDocument 是否为 true\n- 发送后确认用户已收到\n\n---\n\n## 已知问题与解法\n\n| 问题 | 解法 |\n|------|------|\n| 押韵合规率低（约75%） | Python 脚本逐行验证尾字；合规率<30% 时手工创作 |\n| lyrics_generation 返回空 | 换用 `MiniMax-M2.7` 作为备用 |\n| 48句+ 长歌词超时 | `--async` 模式 + 轮询检查文件 |\n| 粤语不支持 | music-2.6 不支持真正粤语，输出仍为普通话 |\n\n---\n\n## 审查清单\n\n```\n□ 每句尾字是否都是目标韵母？\n□ 是否有字重复出现？（特别是句尾）\n□ 每段是否都是4句？\n□ 预计时长是否在3:00-5:00之间？\n□ 是否已先把歌词草案发给用户确认？\n□ 若长度不足，是否已通过扩写/重复主结构补足？\n□ 是否指定了 --model music-2.6？\n□ --vocals 是否描述了期望的声线？\n□ 生成后是否验证了押韵？\n□ 歌词是否纯文本交付（无结构标签）？\n□ 古诗词模式：原文是否原封不动保留？\n□ 主题歌曲模式：名字是否只出现一次？\n□ 生成后是否通过正确方式发送文件给用户？\n```\n\nFile v3.1.1:_meta.json\n\n{\n  \"ownerId\": \"kn725tchg3gp72a78w22qa07p584f267\",\n  \"slug\": \"ai-songwriter-renxu\",\n  \"version\": \"3.1.1\",\n  \"publishedAt\": 1779417735575\n}\n\nFile v3.1.1:clawhub.yaml\n\nname: ai-songwriter-renxu\nversion: 3.1.0\ndescription: AI姝屾洸鍒涗綔鏍稿績鎶€鑳?- 鍚堣緳鎶奸煹姝岃瘝鍒涗綔 + MiniMax mmx-cli 闊充箰鐢熸垚銆傛敮鎸佽瘲璇嶆敼缂栥€佷富棰樺垱浣溿€佹娂闊甸獙璇併€佸娓犻亾鏂囦欢鎶曢€掋€?author: renxu\nhomepage: https://clawhub.ai/skills/ai-songwriter-renxu\nlicense: MIT\ntags:\n  - songwriting\n  - rhyming\n  - music-generation\n  - minimax\n  - mmx\n  - lyrics\ncategory: utility\ndependencies: []\nentry: SKILL.md\nfiles:\n  - SKILL.md\n\nArchive v3.0.4: 3 files, 6451 bytes\n\nFiles: _meta.json (138b), clawhub.yaml (534b), SKILL.md (12195b)\n\nFile v3.0.4:SKILL.md\n\n---\nname: ai-songwriter-renxu\ndescription: AI歌曲创作核心技能 — 合辙押韵歌词创作 + MiniMax mmx-cli 正确调用 + 歌词验证 + 歌曲生成全流程。支持古诗词谱曲、主题歌曲创作、多渠道文件投递。\nversion: 3.1.0\ncategory: utility\ntags: [songwriting, rhyming, music-generation, minimax, mmx, lyrics, poetry, thematic, delivery]\nauthor: renxu\nlicense: MIT\nplatforms: [linux, macos, windows]\nrequired_environment_variables:\n  - MINIMAX_CN_API_KEY\nrequired_commands:\n  - mmx\ntriggers:\n  - 写歌\n  - 创作歌曲\n  - 生成音乐\n  - 帮我写首歌\n  - AI songwriter\n  - 作曲\n  - 谱曲\n  - 古诗词谱曲\n  - 诗词改编\n  - 企业歌曲\n  - 客户歌曲\n  - 景点歌曲\n  - 品牌歌曲\n  - 主题歌\n---\n\n# AI歌曲创作核心技能\n\n## 全流程标准链路\n\n所有写歌请求必须严格按以下顺序执行：\n\n1. **需求整理**：确认主题、风格、情绪、受众、语言\n2. **模式判断**：\n   - 古诗词相关 → 使用「古诗词谱曲模式」\n   - 企业/客户/景点/品牌相关 → 使用「主题歌曲模式」\n   - 其他 → 通用模式直接处理\n3. **歌词创作**：按押韵规范创作歌词\n4. **押韵验证**：用 Python 脚本逐句检查\n5. **时长计算**：预估时长，不足 3 分钟则补足\n6. **歌词确认**：输出歌词草案 + 预计时长 + 是否 repeat → 等用户确认\n7. **音频生成**：用户确认后执行 `mmx music generate`\n8. **文件发送**：生成后通过正确方式发送给用户\n\n> ⚠️ **未经用户确认歌词，不得直接生成音频。这是硬规则。**\n\n---\n\n## 押韵规范\n\n### 押韵模式 A（全韵统一）⭐\n选定一个韵母后，**每一句最后一个字**都必须发该韵。\n\n| 韵母 | 常见安全字 |\n|------|-----------|\n| -ang | 光/望/扬/荡/长/忙/香/霜/央/黄/苍/场/昌 |\n| -in | 心/亲/情/金/新/林/琴/音 |\n| -ai | 爱/来/白/海/开/才 |\n| -ou | 楼/舟/流/秋/游/留/悠/收/投/酬 |\n| -an | 山/寒/难/残/叹/关/湾/前 |\n\n### 押韵模式 B（诗词格律）\n**第三句不押韵（白脚）**，一、二、四句押韵。适用于古诗词改编。\n\n### 押韵验证脚本\n\n```python\ndef validate_rhyme(lyrics_text, rhyme_set, poem_lines=None):\n    \"\"\"验证押韵\n    Args:\n        lyrics_text: 歌词字符串（多行）\n        rhyme_set: 押韵字集合\n        poem_lines: 原诗锚点集合，默认None表示无锚点\n    \"\"\"\n    if poem_lines is None:\n        poem_lines = set()\n    lines = [l.strip() for l in lyrics_text.strip().split('\\n') if l.strip()]\n    errors = []\n    for i, line in enumerate(lines):\n        pos_in_stanza = (i % 4) + 1\n        is_white = (pos_in_stanza == 3)\n        last_char = line[-1]\n        if line in poem_lines:\n            continue\n        if is_white:\n            ok = last_char not in rhyme_set\n        else:\n            ok = last_char in rhyme_set\n        if not ok:\n            errors.append((i+1, line, last_char))\n        print(f\"{'✓' if ok else '✗'} 第{i+1:2d}句 {line} → {last_char}\")\n    return errors\n```\n\n### 常见错误字\n\n| 目标韵 | 容易混入的错误字 |\n|--------|-----------------|\n| -ang | 前/现/向/星/心/想/声/名/性 |\n| -ou | 心/想/声/美/歌/路 |\n\n---\n\n## mmx-cli 正确调用\n\n### 模型路由\n\n| 任务 | 模型 | 命令 |\n|------|------|------|\n| 歌词生成 | `lyrics_generation` | `mmx text chat --model lyrics_generation` |\n| 歌曲生成 | `music-2.6` | `mmx music generate --model music-2.6` |\n| 语音合成 | `speech-2.8-hd` | `mmx speech synthesize --model speech-2.8-hd` |\n| 图片生成 | `image-01` | `mmx image generate --model image-01` |\n| 视频生成 | `hailuo-2.3` | `mmx video generate --model hailuo-2.3` |\n\n> ⚠️ **必须指定 `--model`**：music-2.6 而非 music-2.5。\n\n### 歌词生成\n\n```bash\nmmx text chat \\\n  --message \"为主题'xxx'创作歌曲歌词。全程押韵（韵脚自选，如-ang/-in/-ai/-ou/-an等），每段4句。\" \\\n  --model lyrics_generation \\\n  --non-interactive --quiet\n```\n\n> ⚠️ `lyrics_generation` 是独立文本模型，**不是** `mmx music` 子命令。如果返回空内容，换用 `mmx text chat --model MiniMax-M2.7` 作为备用。\n\n### 歌曲生成\n\n```bash\nmmx music generate \\\n  --prompt \"音乐风格描述\" \\\n  --lyrics \"歌词文本\" \\\n  --vocals \"人声描述\" \\\n  --model music-2.6 \\\n  --out song.mp3 \\\n  --non-interactive --quiet\n```\n\n长歌词（48句+）用异步模式：`--async --non-interactive --quiet`。也可用 `--lyrics-file` 代替 `--lyrics`。\n\n### 声线参数\n\n| 期望声线 | --vocals 示例 |\n|---------|--------------|\n| 童声 | `\"sweet innocent child vocal\"` |\n| 女声 | `\"bright female soprano\"` |\n| 男声 | `\"warm male baritone, father singing\"` |\n| 合唱 | `\"choir, uplifting chorus\"` |\n\n---\n\n## 模式一：古诗词谱曲\n\n### 核心原则\n\n1. **保留诗词原文**：原封不动地保留在 Verse 中，不得更改任何一字，作为歌曲固定锚点\n2. **自创开头结尾**：在诗词前后各增加自创歌词（Intro 引导意境，Outro 升华情感）\n3. **自创段落递进**：按递进结构展开，避免同词异句简单重复\n\n### 诗词类型处理\n\n| 诗词类型 | 句数 | 建议处理 |\n|---------|------|---------|\n| 五言绝句 | 4句 | 唱两遍（Verse 1 + Verse 2 相同） |\n| 七言绝句 | 4句 | 唱两遍，字数更多时值略长 |\n| 律诗 | 8句 | 可只取前四句或按音乐结构调整 |\n| 古体诗 | 不限 | 精选核心段落，避免过长 |\n\n### 推荐歌词结构\n\n```\n[Intro]     自创开场（4句，引导意境，为诗词铺垫）\n[Verse 1]   诗词原文（作为锚点，原封不动）\n[Chorus]    自创（4句，承接诗词，情感展开）\n[Verse 2]   诗词原文（可重复Verse1）\n[Chorus]    自创（4句，情感递进）\n[Bridge]    高潮/变奏（4句）\n[Outro]     自创结尾（4句，升华情感）\n```\n\n基础结构 28 句 ≈ 90 秒，**必须至少完整两遍 + 额外段落**才能达到 3 分钟。推荐：基础结构 × 2 + Bridge = 约 56-60 句 ≈ 3 分钟+。\n\n### 音乐生成参数\n\n```bash\nmmx music generate \\\n  --prompt \"古诗词风格，慢板，悠扬沉郁，古琴独奏为主，箫声点缀，节奏舒缓如行云流水，歌声要有气势有情感，字正腔圆，中速偏慢\" \\\n  --lyrics \"歌词文本（纯文本，无结构标签）\" \\\n  --vocals \"温暖童声，古诗词风格，甜美纯真\" \\\n  --model music-2.6 \\\n  --out song.mp3 \\\n  --async --non-interactive --quiet\n```\n\n---\n\n## 模式二：主题歌曲（企业/客户/景点/品牌）\n\n### 核心原则\n\n1. **调研先行**：先调研客户/景点的历史、事件、特点、典故\n2. **素材转化**：将调研内容提炼为歌词意象\n3. **押韵创作**：全程押韵，每句尾字必须是目标韵母\n4. **主线叙事**：以时间轴或里程碑为主线，不是个人颂歌\n\n### 联网调研命令\n\n```bash\n# 搜索公司背景\nmmx search query --q \"公司名称 成立 历史 里程碑\" --limit 10 --non-interactive --quiet --output json\n\n# 搜索近期新闻\nmmx search query --q \"公司名称 最新动态\" --limit 10 --non-interactive --quiet --output json\n\n# 搜索景点背景\nmmx search query --q \"景点名称 历史 典故 传说\" --limit 10 --non-interactive --quiet --output json\n\n# 搜索景点特色\nmmx search query --q \"景点名称 特色景观 名人足迹 著名诗句\" --limit 10 --non-interactive --quiet --output json\n```\n\n### 推荐歌词结构\n\n```\n[Intro]     自创开场（4句，引入主题）\n[Verse 1]   调研提炼的场景/事件描述（4句）\n[Chorus]    核心主题升华（4句，主线叙事）\n[Verse 2]   调研提炼的素材（4句，递进）\n[Chorus]    核心主题升华（4句）\n[Bridge]    转折/反思（4句）\n[Outro]     升华收尾（4句）\n```\n\n> 基础结构 28 句 ≈ 90 秒。**必须补足到 60+ 句（约 3 分钟+）**，默认增加段落或整首 repeat。推荐目标：80 句 ≈ 4.3 分钟。\n\n### 禁区与红线\n\n- ❌ **名字只能出现一次**：放在不起眼位置，禁止在 Chorus 反复出现\n- ❌ **禁止领地争议表述**：如\"数字学堂\"会被教学部门认为在抢功\n- ❌ **主线不能是个人颂歌**：必须是业务成长之路或团队集体叙事\n- ❌ 不能包含有争议的领土表述\n- ❌ 不能过度歌功颂德\n\n### 企业歌曲音乐参数\n\n```bash\nmmx music generate \\\n  --prompt \"温暖积极的企业歌曲，节奏明快，充满希望和凝聚力，现代企业宣传片风格，副歌更有推动感，适合合唱\" \\\n  --lyrics \"歌词文本（纯文本，无结构标签）\" \\\n  --vocals \"choir, uplifting chorus\" \\\n  --model music-2.6 \\\n  --out song.mp3 \\\n  --async --non-interactive --quiet\n```\n\n### 景点歌曲音乐参数\n\n```bash\nmmx music generate \\\n  --prompt \"古风景点歌曲，笛子为主，箫声点缀，悠扬悠远，仿佛山水画卷展开\" \\\n  --lyrics \"歌词文本（纯文本，无结构标签）\" \\\n  --vocals \"古风女声，甜美悠扬\" \\\n  --model music-2.6 \\\n  --out song.mp3 \\\n  --async --non-interactive --quiet\n```\n\n---\n\n## 时长控制\n\n| 最短 | 最长 | 目标 |\n|------|------|------|\n| 3分钟 | 5分钟 | 3:00 ~ 5:00 |\n\n```\n预估时长 ≈ 歌词总句数 × 3.2秒/句\n24句 → 约77秒（明显不够）\n48句 → 约2分34秒（仍偏短）\n56句 → 约2分59秒（下限边缘）\n60~92句 → 推荐交付区间\n```\n\n> **硬规则：** 如果首版歌词不足 3 分钟，必须扩写或重复主结构后再交付确认。\n> **补足优先级：** 重复副歌 → 增加主歌 → 增加 Bridge → 整首 repeat。\n\n---\n\n## 歌词确认机制与交付格式\n\n在执行 `mmx music generate` 前，**必须**先把歌词文本发给用户确认：输出歌词草案 → 标注预计时长 → 说明是否 repeat → 等用户确认后再生成。\n\n交付格式：纯文本歌词，一行一句，**禁止**包含结构标签（如[Verse]、[Chorus]）和说明文字。\n\n---\n\n## 文件发送\n\n### 通道路由（统一使用 message 工具）\n\n所有通道统一优先走 OpenClaw 的 `message` 工具直发本地附件：\n\n```\nmessage 工具参数：\n  action: \"send\"\n  channel: \"<当前通道>\"\n  target: \"<当前通道>:<用户ID>\"\n  media: \"<本地绝对路径>\"\n  filePath: \"<本地绝对路径>\"\n  filename: \"<文件名>\"\n  mimeType: \"<MIME类型>\"\n  forceDocument: true\n```\n\n| 通道 | channel 值 | 文件大小限制 |\n|------|-----------|------------|\n| 企业微信 | wecom | 20MB |\n| 飞书 | feishu | 50MB |\n| 微信 | openclaw-weixin | 限私聊 |\n| Telegram | telegram | 50MB |\n| WhatsApp | whatsapp | 16MB（音频）/ 100MB（文档） |\n| Slack | slack | 10MB |\n| Discord | discord | 8MB（免费）/ 50MB（Nitro） |\n\n### 邮件发送（备选）\n\n当用户明确要求邮件发送时，生成完成后先通过邮箱询问用户收件地址，确认后发送。\n\n### 发送前检查清单\n- 文件是否存在且使用绝对路径\n- 文件大小是否在当前通道限制内\n- filename 是否显式传入\n- mimeType 是否正确（MP3 → `audio/mpeg`）\n- forceDocument 是否为 true\n- 发送后确认用户已收到\n\n---\n\n## 已知问题与解法\n\n| 问题 | 解法 |\n|------|------|\n| 押韵合规率低（约75%） | Python 脚本逐行验证尾字；合规率<30% 时手工创作 |\n| lyrics_generation 返回空 | 换用 `MiniMax-M2.7` 作为备用 |\n| 48句+ 长歌词超时 | `--async` 模式 + 轮询检查文件 |\n| 粤语不支持 | music-2.6 不支持真正粤语，输出仍为普通话 |\n\n---\n\n## 审查清单\n\n```\n□ 每句尾字是否都是目标韵母？\n□ 是否有字重复出现？（特别是句尾）\n□ 每段是否都是4句？\n□ 预计时长是否在3:00-5:00之间？\n□ 是否已先把歌词草案发给用户确认？\n□ 若长度不足，是否已通过扩写/重复主结构补足？\n□ 是否指定了 --model music-2.6？\n□ --vocals 是否描述了期望的声线？\n□ 生成后是否验证了押韵？\n□ 歌词是否纯文本交付（无结构标签）？\n□ 古诗词模式：原文是否原封不动保留？\n□ 主题歌曲模式：名字是否只出现一次？\n□ 生成后是否通过正确方式发送文件给用户？\n```\n\nFile v3.0.4:_meta.json\n\n{\n  \"ownerId\": \"kn725tchg3gp72a78w22qa07p584f267\",\n  \"slug\": \"ai-songwriter-renxu\",\n  \"version\": \"3.0.4\",\n  \"publishedAt\": 1779356408058\n}\n\nFile v3.0.4:clawhub.yaml\n\nname: ai-songwriter-renxu\nversion: 3.1.0\ndescription: AI姝屾洸鍒涗綔鏍稿績鎶€鑳?- 鍚堣緳鎶奸煹姝岃瘝鍒涗綔 + MiniMax mmx-cli 闊充箰鐢熸垚銆傛敮鎸佽瘲璇嶆敼缂栥€佷富棰樺垱浣溿€佹娂闊甸獙璇併€佸娓犻亾鏂囦欢鎶曢€掋€?author: renxu\nhomepage: https://clawhub.ai/skills/ai-songwriter-renxu\nlicense: MIT\ntags:\n  - songwriting\n  - rhyming\n  - music-generation\n  - minimax\n  - mmx\n  - lyrics\ncategory: utility\ndependencies: []\nentry: SKILL.md\nfiles:\n  - SKILL.md\n\nArchive v3.0.3: 6 files, 15332 bytes\n\nFiles: _meta.json (138b), clawhub.yaml (521b), delivery/SKILL.md (6808b), poetry/SKILL.md (5404b), SKILL.md (10493b), thematic/SKILL.md (6594b)\n\nFile v3.0.3:delivery/SKILL.md\n\n---\nname: ai-songwriter-delivery\ndescription: AI歌曲创作文件交付子技能 — 覆盖 wecom、feishu、wechat、telegram、whatsapp、slack、discord 等主流通道的文件发送正确链路。当歌曲音频生成完成后，根据当前通道自动选择正确发送方式。\nversion: 3.0\ncategory: creative\ntags: [delivery, file-send, wecom, feishu, wechat, telegram, whatsapp, slack, discord]\nauthor: renxu\nlicense: MIT\nplatforms: [linux, macos, windows]\nparent_skills:\n  - ai-songwriter\n---\n\n# 文件交付子技能\n\n## 核心原则\n\n1. **生成完成即发送**：音频文件生成后，立即发送给用户，不等用户催\n2. **根据通道选方式**：根据当前 channel 自动选择正确的发送链路\n3. **发送前必检查**：文件存在 + 绝对路径 + 大小在限制内 + MIME 正确\n4. **不要只给路径**：不要只输出文件路径、地址、命令行，用户要的是文件本身\n\n---\n\n## 通道路由表\n\n| 当前通道 | channel 参数 | 首选发送方式 | 备选方式 |\n|---------|-------------|-------------|---------|\n| 企业微信 | `wecom` | `message` 工具直发 | `MEDIA:` |\n| 飞书 | `feishu` | `message` 工具直发 | 飞书 API 三步 |\n| 微信 | `openclaw-weixin` | `message` 工具直发 | `MEDIA:` |\n| Telegram | `telegram` | `message` 工具直发 | `MEDIA:` |\n| WhatsApp | `whatsapp` | `message` 工具直发 | `MEDIA:` |\n| Slack | `slack` | `message` 工具直发 | `MEDIA:` |\n| Discord | `discord` | `message` 工具直发 | `MEDIA:` |\n| Signal | `signal` | `message` 工具直发 | `MEDIA:` |\n| 其他 | 按实际 | `MEDIA:<绝对路径>` | — |\n\n> 所有通道统一优先走 OpenClaw 的 `message` 工具。OpenClaw Gateway 会自动处理各通道的文件上传和发送封装。\n\n---\n\n## 统一发送模板（适用所有通道）\n\n```\nmessage 工具参数：\n  action: \"send\"\n  channel: \"<当前通道>\"\n  target: \"<当前通道>:<用户ID>\"\n  media: \"<本地绝对路径>\"\n  filePath: \"<本地绝对路径>\"\n  filename: \"<文件名>\"\n  mimeType: \"<MIME类型>\"\n  forceDocument: true\n  message: \"<可选说明文字>\"\n```\n\n### 参数说明\n\n| 参数 | 说明 | 示例 |\n|------|------|------|\n| `channel` | 当前会话的通道标识 | `wecom` / `feishu` / `telegram` |\n| `target` | 通道前缀 + 用户ID | `wecom:RenXu` / `feishu:ou_xxx` / `telegram:123456` |\n| `media` | 本地文件绝对路径 | `/root/.openclaw/workspace/work/minimax/music/song.mp3` |\n| `filePath` | 与 media 相同 | 同上 |\n| `filename` | 显式文件名 | `song.mp3` |\n| `mimeType` | 文件 MIME 类型 | `audio/mpeg` |\n| `forceDocument` | 按文件附件发送 | `true` |\n\n> ⚠️ `media` 与 `filePath` **都传**，路径必须是**绝对路径**。\n\n---\n\n## 各通道详细说明\n\n### 企业微信（wecom）\n\n**已验证可用。** 这是经过实际成功发送验证的链路。\n\n```\nchannel: \"wecom\"\ntarget: \"wecom:<userid>\"\n```\n\n**文件大小限制：**\n\n| 类型 | 上限 |\n|------|------|\n| 图片 | 10 MB |\n| 视频 | 10 MB |\n| 语音 | 2 MB（仅 AMR） |\n| 文件 | 20 MB |\n\n**注意事项：**\n- 超过 20 MB 需先压缩或拆分\n- 语音只支持 AMR 格式\n- 如果 `MEDIA:` 在该会话不稳定，直接切 `message` 工具\n- 音频建议 `forceDocument: true`，避免被当成语音消息\n\n### 飞书（feishu）\n\n**首选：`message` 工具直发**\n\n```\nchannel: \"feishu\"\ntarget: \"feishu:<open_id 或 chat_id>\"\n```\n\n**备选：飞书 Open API 手动发送（三步）**\n\n仅当 `message` 工具链路不可用时使用：\n\n```bash\n# 第一步：获取 tenant_access_token\nTOKEN=$(curl -s -X POST \"https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"app_id\":\"<APP_ID>\",\"app_secret\":\"<APP_SECRET>\"}' \\\n  | python3 -c \"import sys,json; print(json.load(sys.stdin)['tenant_access_token'])\")\n\n# 第二步：上传文件\nFILE_KEY=$(curl -s -X POST \"https://open.feishu.cn/open-apis/im/v1/files\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -F \"file_name=song.mp3\" -F \"file_type=stream\" \\\n  -F \"file=@/path/to/song.mp3;type=audio/mpeg\" \\\n  | python3 -c \"import sys,json; print(json.load(sys.stdin)['data']['file_key'])\")\n\n# 第三步：发送文件消息\ncurl -s -X POST \"https://open.feishu.cn/open-apis/im/v1/messages?receive_id_type=chat_id\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"receive_id\":\"<CHAT_ID>\",\"msg_type\":\"file\",\"content\":\"{\\\"file_key\\\":\\\"'\"$FILE_KEY\"'\\\"}\"}'\n```\n\n**飞书文件上传限制：约 50MB**\n\n### 微信（wechat / openclaw-weixin）\n\n```\nchannel: \"openclaw-weixin\"\ntarget: \"openclaw-weixin:<wxid>\"\n```\n\n**注意：**\n- 微信通道通过 `@tencent-weixin/openclaw-weixin` 外部插件实现\n- 仅支持私聊\n- 文件发送走 OpenClaw Gateway 统一封装\n\n### Telegram\n\n```\nchannel: \"telegram\"\ntarget: \"telegram:<user_id>\"\n```\n\n**注意：**\n- Telegram 支持最大 50 MB 文件\n- 音频文件会被 Telegram 识别为音频消息\n- 若要按文件附件发送，使用 `forceDocument: true`\n\n### WhatsApp\n\n```\nchannel: \"whatsapp\"\ntarget: \"whatsapp:<phone_number>\"\n```\n\n**注意：**\n- WhatsApp 文件大小限制约 16 MB（音频）/ 100 MB（文档）\n- 音频格式建议 mp3 或 ogg\n\n### Slack\n\n```\nchannel: \"slack\"\ntarget: \"slack:<channel_id 或 user_id>\"\n```\n\n### Discord\n\n```\nchannel: \"discord\"\ntarget: \"discord:<channel_id>\"\n```\n\n**注意：**\n- Discord 文件上传限制：8 MB（免费）/ 50 MB（Nitro）\n- 超限时需先压缩\n\n### Signal\n\n```\nchannel: \"signal\"\ntarget: \"signal:<phone_number>\"\n```\n\n---\n\n## 常见 MIME 类型\n\n| 文件类型 | MIME |\n|---------|------|\n| MP3 音频 | `audio/mpeg` |\n| WAV 音频 | `audio/wav` |\n| OGG 音频 | `audio/ogg` |\n| AMR 语音 | `audio/amr` |\n| MP4 视频 | `video/mp4` |\n| ZIP 压缩包 | `application/zip` |\n| PDF 文档 | `application/pdf` |\n| Word 文档 | `application/vnd.openxmlformats-officedocument.wordprocessingml.document` |\n| Excel 表格 | `application/vnd.openxmlformats-officedocument.spreadsheetml.sheet` |\n| PPT 幻灯片 | `application/vnd.openxmlformats-officedocument.presentationml.presentation` |\n| PNG 图片 | `image/png` |\n| JPEG 图片 | `image/jpeg` |\n\n---\n\n## 发送前检查清单\n\n```\n□ 文件是否存在？\n□ 是否使用绝对路径？\n□ 文件大小是否在当前通道限制内？\n□ filename 是否显式传入？\n□ mimeType 是否正确？\n□ forceDocument 是否为 true（音频文件）？\n□ 发送后是否确认用户已收到？\n```\n\n---\n\n## 发送失败排查\n\n1. **MEDIA: 不稳定** → 切换到 `message` 工具直发\n2. **文件超限** → 先压缩再发\n3. **通道未连接** → 检查 `openclaw channels status --probe`\n4. **权限不足** → 检查 `openclaw pairing list <channel>`\n5. **文件不存在** → 确认路径正确，文件已生成完成\n\nFile v3.0.3:poetry/SKILL.md\n\n---\nname: ai-songwriter-poetry\ndescription: AI古诗词谱曲子技能 — 保留原文诗词，按递进结构补充自创歌词，全程押韵。激活条件：用户要求古诗词/绝句/律诗/诗词改编/唐诗宋词谱曲。\nversion: 3.0\ncategory: creative\ntags: [songwriting, chinese-poetry, rhyming, poetry-song, music-generation]\nauthor: renxu\nlicense: MIT\nplatforms: [linux, macos, windows]\nparent_skills:\n  - ai-songwriter\ntriggers:\n  - 古诗词谱曲\n  - 诗词改编\n  - 唐诗谱曲\n  - 绝句谱曲\n  - 律诗谱曲\n  - 宋词谱曲\n  - 把诗谱成歌\n---\n\n# 古诗词谱曲子技能\n\n## 全流程标准链路\n\n1. **确认诗词**：确认用户指定的诗词原文\n2. **选定韵母**：根据诗词韵脚选定统一韵母\n3. **创作歌词**：保留原文 + 自创前后段\n4. **押韵验证**：逐句检查\n5. **时长计算**：不足 3 分钟则补足\n6. **歌词确认**：发给用户确认\n7. **音频生成**：用户确认后执行\n8. **文件发送**：通过正确方式发送\n\n> ⚠️ **未经用户确认歌词，不得直接生成音频。**\n\n---\n\n## 核心原则\n\n1. **保留诗词原文**：诗词原文必须原封不动地保留在 Verse 中，作为歌曲的固定锚点\n2. **自创开头结尾**：在诗词前后各增加自创歌词（Intro 引导意境，Outro 升华情感）\n3. **自创段落递进**：自创歌词按递进结构展开，避免同词异句简单重复\n\n---\n\n## 推荐歌词结构\n\n```\n[Intro]     自创开场（4句，引导意境，为诗词铺垫）\n[Verse 1]   诗词原文（作为锚点，原封不动）\n[Chorus 1]  自创第一段（4句，承接诗词，情感展开）\n[Verse 2]   诗词原文（可省略或与Verse1相同）\n[Chorus 2]  自创第二段（4句，情感递进）\n[Chorus 3]  高潮/变奏（4句，可复用Chorus2微调）\n[Outro]     自创结尾（4句，升华情感）\n```\n\n> 基础结构 24 句 ≈ 77 秒，**必须至少完整两遍 + 额外段落**才能达到 3 分钟。\n> 推荐：基础结构 × 2 + Bridge = 约 56–60 句 ≈ 3 分钟+。\n\n---\n\n## 诗词原文处理\n\n| 诗词类型 | 句数 | 建议处理 |\n|---------|------|---------|\n| 五言绝句 | 4句 | 唱两遍（Verse 1 + Verse 2 相同） |\n| 七言绝句 | 4句 | 唱两遍，字数更多时值略长 |\n| 律诗 | 8句 | 可只取前四句或按音乐结构调整 |\n| 古体诗 | 不限 | 精选核心段落，避免过长 |\n\n> ⚠️ **诗词原文必须原封不动**：不得更改任何一字，只能在其前后添加自创段落。\n\n---\n\n## 押韵规范\n\n### 押韵模式 B（诗词格律）⭐\n**第三句不押韵（白脚）**，一、二、四句押韵。\n\n```\n白日依山尽（尽 -in）\n黄河入海流（流 -ou）\n欲穷千里目（目 -u，白脚）\n更上一层楼（楼 -ou）\n```\n\n> ⚠️ **每4句一段，段内第3句是白脚**，不是全局第3、7、11句。\n\n### 常见安全韵\n\n| 韵母 | 安全字 |\n|------|--------|\n| -ang | 光/望/扬/荡/长/忙/香/霜/央/黄/苍/场/昌 |\n| -in | 心/亲/情/金/新/林/琴/音 |\n| -ai | 爱/来/白/海/开/才 |\n| -ou | 楼/舟/流/秋/游/留/悠/收/投/酬 |\n| -an | 山/寒/难/残/叹/关/湾/前 |\n\n---\n\n## 押韵验证\n\n```python\ndef validate_poetry_rhyme(lyrics_text, rhyme_set, poem_lines):\n    \"\"\"验证诗词格律\n    Args:\n        lyrics_text: 歌词字符串\n        rhyme_set: 押韵字集合\n        poem_lines: 原诗锚点集合\n    \"\"\"\n    lines = [l.strip() for l in lyrics_text.strip().split('\\n') if l.strip()]\n    errors = []\n    poem_lines = set(poem_lines)\n\n    for i, line in enumerate(lines):\n        pos_in_stanza = (i % 4) + 1\n        is_white = (pos_in_stanza == 3)\n        last_char = line[-1]\n\n        if line in poem_lines:\n            continue\n\n        if is_white:\n            ok = last_char not in rhyme_set\n            note = f\"✓ 白脚\" if ok else f\"✗ '{last_char}'押韵了\"\n        else:\n            ok = last_char in rhyme_set\n            note = f\"✓\" if ok else f\"✗ '{last_char}'不押韵\"\n\n        if not ok:\n            errors.append((i+1, line, last_char, note))\n        print(f\"{'✓' if ok else '✗'} 第{i+1:2d}句 {line} → {last_char} {note}\")\n\n    return errors\n```\n\n---\n\n## 音乐生成参数\n\n```bash\nmmx music generate \\\n  --prompt \"古诗词风格，慢板，悠扬沉郁，古琴独奏为主，箫声点缀，节奏舒缓如行云流水，歌声要有气势有情感，字正腔圆，中速偏慢\" \\\n  --lyrics \"歌词文本（纯文本，无结构标签）\" \\\n  --vocals \"温暖童声，古诗词风格，甜美纯真\" \\\n  --model music-2.6 \\\n  --out song.mp3 \\\n  --async --non-interactive --quiet\n```\n\n---\n\n## 文件发送\n\n生成音频后，按父级技能的文件发送规则执行：\n- **wecom 通道**：使用 `message` 工具直发本地附件\n- **飞书**：API 三步发送\n- **其他**：`MEDIA:<绝对路径>`\n\n---\n\n## 审查清单\n\n```\n□ 诗词原文是否原封不动保留在Verse中？\n□ 自创段落之间是否有内容递进而非简单重复？\n□ 每句尾字是否都是目标韵母？\n□ 是否有字重复出现？（特别是句尾）\n□ 每段是否都是4句？\n□ 预计时长是否在3:00-5:00之间？\n□ 是否已先把歌词草案发给用户确认？\n□ 若长度不足，是否已通过重复主结构或补段扩展？\n□ 歌词是否纯文本交付（无结构标签）？\n□ 生成后是否通过正确方式发送文件给用户？\n```\n\nFile v3.0.3:SKILL.md\n\n---\nname: ai-songwriter-renxu\ndescription: AI歌曲创作核心技能 — 合辙押韵歌词创作 + MiniMax mmx-cli 正确调用 + 歌词验证 + 歌曲生成全流程。包含押韵规范、mmx模型路由、音乐生成参数、文件发送。当用户要求写歌/创作歌曲/生成音乐时激活。\nversion: 3.0.2\ncategory: utility\ntags: [songwriting, rhyming, music-generation, minimax, mmx, lyrics]\nauthor: renxu\nlicense: MIT\nplatforms: [linux, macos, windows]\nrequired_environment_variables:\n  - MINIMAX_CN_API_KEY\nrequired_commands:\n  - mmx\ntriggers:\n  - 写歌\n  - 创作歌曲\n  - 生成音乐\n  - 帮我写首歌\n  - AI songwriter\n  - 作曲\n  - 谱曲\n---\n\n# AI歌曲创作核心技能\n\n## 技能分支\n\n```\nai-songwriter（核心）\n├── poetry/        古诗词谱曲子技能（保留原文 + 递进押韵）\n└── thematic/      主题歌曲子技能（客户/景点调研 → 写入歌词）\n```\n\n---\n\n## 全流程标准链路\n\n**所有写歌请求必须严格按以下顺序执行：**\n\n1. **需求整理**：确认主题、风格、情绪、受众、语言\n2. **路由子技能**：\n   - 古诗词相关 → `poetry/`\n   - 企业/客户/景点/品牌相关 → `thematic/`\n   - 其他 → 本核心技能直接处理\n3. **歌词创作**：按押韵规范创作歌词\n4. **押韵验证**：用 Python 脚本逐句检查\n5. **时长计算**：预估时长，不足 3 分钟则补足\n6. **歌词确认**：输出歌词草案 + 预计时长 + 是否 repeat → 等用户确认\n7. **音频生成**：用户确认后执行 `mmx music generate`\n8. **文件发送**：生成后通过正确方式发送给用户\n\n> ⚠️ **未经用户确认歌词，不得直接生成音频。这是硬规则。**\n\n---\n\n## 核心原则：合辙押韵\n\n### 押韵模式 A（全韵统一）⭐\n选定一个韵母后，**每一句最后一个字**都必须发该韵。\n\n| 韵母 | 常见安全字 |\n|------|-----------|\n| -ang | 光/望/扬/荡/长/忙/香/霜/央/黄/苍/场/昌 |\n| -in | 心/亲/情/金/新/林/琴/音 |\n| -ai | 爱/来/白/海/开/才 |\n| -ou | 楼/舟/流/秋/游/留/悠/收/投/酬 |\n| -an | 山/寒/难/残/叹/关/湾/前 |\n\n### 押韵模式 B（诗词格律）\n**第三句不押韵（白脚）**，一、二、四句押韵。适用于古诗词改编。\n\n### 押韵验证脚本\n\n```python\ndef validate_rhyme(lyrics_text, rhyme_set, poem_lines=None):\n    \"\"\"验证押韵\n    Args:\n        lyrics_text: 歌词字符串（多行）\n        rhyme_set: 押韵字集合\n        poem_lines: 原诗锚点集合，默认None表示无锚点\n    \"\"\"\n    if poem_lines is None:\n        poem_lines = set()\n    lines = [l.strip() for l in lyrics_text.strip().split('\\n') if l.strip()]\n    errors = []\n\n    for i, line in enumerate(lines):\n        pos_in_stanza = (i % 4) + 1\n        is_white = (pos_in_stanza == 3)\n        last_char = line[-1]\n\n        if line in poem_lines:\n            continue\n\n        if is_white:\n            ok = last_char not in rhyme_set\n            note = f\"✓ 白脚\" if ok else f\"✗ 白脚'{last_char}'押韵了\"\n        else:\n            ok = last_char in rhyme_set\n            note = f\"✓\" if ok else f\"✗ '{last_char}'不押韵\"\n\n        if not ok:\n            errors.append((i+1, line, last_char, note))\n        print(f\"{'✓' if ok else '✗'} 第{i+1:2d}句 {line} → {last_char} {note}\")\n\n    return errors\n```\n\n### 常见错误字\n\n| 目标韵 | 容易混入的错误字 |\n|--------|-----------------|\n| -ang | 月/前/向/星/心/梦/声/里/思 |\n| -ou | 心/情/声/美/歌/路 |\n\n---\n\n## mmx-cli 正确调用\n\n### 模型路由\n\n| 任务 | 模型 | 命令 |\n|------|------|------|\n| 歌词生成 | `lyrics_generation` | `mmx text chat --model lyrics_generation` |\n| 歌曲生成 | `music-2.6` | `mmx music generate --model music-2.6` |\n| 语音合成 | `speech-2.8-hd` | `mmx speech synthesize --model speech-2.8-hd` |\n| 图片生成 | `image-01` | `mmx image generate --model image-01` |\n| 视频生成 | `hailuo-2.3` | `mmx video generate --model hailuo-2.3` |\n\n> ⚠️ **必须指定 `--model`**：music-2.6 而非 music-2.5。\n\n### 歌词生成（第一阶段）\n\n```bash\nmmx text chat \\\n  --message \"为主题'xxx'创作歌曲歌词。全程押韵（韵脚自选，如-ang/-in/-ai/-ou/-an等），每段4句。\" \\\n  --model lyrics_generation \\\n  --non-interactive \\\n  --quiet\n```\n\n> ⚠️ `lyrics_generation` 是独立文本模型，**不是** `mmx music` 子命令！\n> ⚠️ 如果 `lyrics_generation` 返回空内容，换用 `mmx text chat --model MiniMax-M2.7` 作为备用。\n\n### 歌曲生成（第二阶段）\n\n```bash\nmmx music generate \\\n  --prompt \"音乐风格描述\" \\\n  --lyrics \"歌词文本\" \\\n  --vocals \"人声描述\" \\\n  --model music-2.6 \\\n  --out song.mp3 \\\n  --non-interactive \\\n  --quiet\n```\n\n**歌词结构标签（可选）：**\n`mmx music generate` 支持以下结构标签：`[Intro]` `[Verse]` `[Pre Chorus]` `[Chorus]` `[Interlude]` `[Bridge]` `[Outro]` `[Post Chorus]` `[Transition]` `[Break]` `[Hook]` `[Build Up]` `[Inst]` `[Solo]`。标签必须干净（括号内不要加描述），标签会被演唱出来。\n\n**长歌词（48句+）用异步模式：**\n```bash\nmmx music generate \\\n  --prompt \"...\" --lyrics \"...\" --vocals \"...\" \\\n  --model music-2.6 \\\n  --out song.mp3 \\\n  --async --non-interactive --quiet\n```\n> ⚠️ `--async` 不带 `--output json`，否则报错。\n\n也可以用 `--lyrics-file` 代替 `--lyrics`，读取本地歌词文件：\n```bash\nmmx music generate \\\n  --prompt \"...\" --lyrics-file /path/to/lyrics.txt --vocals \"...\" \\\n  --model music-2.6 \\\n  --out song.mp3 \\\n  --async --non-interactive --quiet\n```\n\n### 风格 Prompt 示例\n\n**古诗词风格（慢板悠扬）：**\n```\n古诗词风格，慢板，悠扬沉郁，古琴独奏为主，箫声点缀，\n节奏舒缓如行云流水，歌声要有气势有情感，字正腔圆，中速偏慢\n```\n\n**温暖企业歌曲风格：**\n```\n温暖积极的企业歌曲，节奏明快，充满希望和凝聚力，\n现代企业宣传片风格，副歌更有推动感，适合合唱\n```\n\n**景点歌曲风格：**\n```\n古风景点歌曲，笛子为主，箫声点缀，\n悠扬悠远，仿佛山水画卷展开\n```\n\n### 声线参数\n\n| 期望声线 | --vocals 示例 |\n|---------|--------------|\n| 童声 | `\"sweet innocent child vocal\"` |\n| 女声 | `\"bright female soprano\"` |\n| 男声 | `\"warm male baritone, father singing\"` |\n| 合唱 | `\"choir, uplifting chorus\"` |\n\n---\n\n## 时长控制\n\n| 最短 | 最长 | 目标 |\n|------|------|------|\n| 3分钟 | 5分钟 | 3:00 ~ 5:00 |\n\n```\n预估时长 ≈ 歌词总句数 × 3.2秒/句\n24句 → 约77秒（明显不够）\n48句 → 约2分34秒（仍偏短）\n56句 → 约2分59秒（下限边缘）\n60~92句 → 推荐交付区间\n```\n\n> **硬规则：** 如果首版歌词不足 3 分钟，必须扩写或重复主结构后再交付确认稿。\n> **补足优先级：** 重复副歌 → 增加主歌 → 增加 Bridge → 整首 repeat。\n\n---\n\n## 歌词确认机制\n\n在执行 `mmx music generate` 前，**必须**先把歌词文本发给用户确认。\n\n流程固定为：\n1. 输出歌词草案\n2. 标注预计时长\n3. 明确说明是否采用 repeat 扩时\n4. 等用户确认后，再生成音频\n\n**未确认歌词前，不得直接生成歌曲。**\n\n---\n\n## 歌词交付格式\n\n**必须**：纯文本歌词，一行一句，**禁止**包含结构标签（如`[Verse]`、`[Chorus]`）和说明文字。\n\n> ⚠️ 以上是**用户确认稿**格式。确认后传给 `mmx music generate` 时，歌词仍然保持纯文本（无结构标签），`--prompt` 中已包含风格描述，模型会根据上下文自行安排结构。\n\n---\n\n## 文件发送\n\n### 企业微信（wecom）\n\n当通道为 wecom 时，使用 `message` 工具直发本地附件：\n\n**推荐参数：**\n- `action: \"send\"`\n- `channel: \"wecom\"`\n- `target: \"wecom:<userid>\"`\n- `media` + `filePath`: 本地绝对路径\n- `filename`: 显式文件名（如 `song.mp3`）\n- `mimeType`: 如 `audio/mpeg`\n- `forceDocument: true`\n\n**发送前检查：**\n- 文件存在\n- 使用绝对路径\n- 文件大小 ≤ 20MB\n- MIME 正确\n\n> ⚠️ **不要只输出 `MEDIA:` 路径。** 如果 `MEDIA:` 在该会话不稳定，直接用 `message` 工具。\n\n### 飞书\n\n```bash\n# 第一步：获取 token\nTOKEN=$(curl -s -X POST \"https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal\" \\\n  -H \"Content-Type: application/json\" \\\n  -d \"{\\\"app_id\\\":\\\"$FEISHU_APP_ID\\\",\\\"app_secret\\\":\\\"$FEISHU_APP_SECRET\\\"}\" \\\n  | python3 -c \"import sys,json; print(json.load(sys.stdin)['tenant_access_token'])\")\n\n# 第二步：上传文件\nUPLOAD_RESP=$(curl -s -X POST \"https://open.feishu.cn/open-apis/im/v1/files\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -F \"file_name=song.mp3\" -F \"file_type=stream\" \\\n  -F \"file=@/path/to/song.mp3;type=audio/mpeg\")\nFILE_KEY=$(echo $UPLOAD_RESP | python3 -c \"import sys,json; print(json.load(sys.stdin)['data']['file_key'])\")\n\n# 第三步：发送\ncurl -s -X POST \"https://open.feishu.cn/open-apis/im/v1/messages?receive_id_type=chat_id\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d \"{\\\"receive_id\\\":\\\"$CHAT_ID\\\",\\\"msg_type\\\":\\\"file\\\",\\\"content\\\":\\\"{\\\\\\\"file_key\\\\\\\":\\\\\\\"$FILE_KEY\\\\\\\"}\\\"}\"\n```\n\n### 其他通道\n\n默认使用 `MEDIA:<绝对路径>` 在回复中交付。\n\n---\n\n## 已知问题与解法\n\n### 押韵合规率低\n- AI 生成的歌词押韵合规率约 75%\n- **必须用 Python 脚本逐行验证尾字**\n- 合规率低于 30% 时，直接手工创作\n\n### 歌词生成模型不稳定\n- `lyrics_generation` 可能返回空内容（exit 0 但 content 为空）\n- 遇到此情况，换用 `MiniMax-M2.7` 作为备用\n\n### 音乐生成超时\n- 48句+ 长歌词容易超时\n- 解法：`--async` 模式 + 轮询检查文件是否生成\n\n### 粤语问题\n- MiniMax music-2.6 **不支持真正的粤语演唱**\n- 即使 prompt 写\"粤语\"，实际输出仍是普通话\n\n---\n\n## 审查清单\n\n```\n□ 每句尾字是否都是目标韵母？\n□ 是否有字重复出现？（特别是句尾）\n□ 每段是否都是4句？\n□ 预计时长是否在3:00-5:00之间？\n□ 是否已先把歌词草案发给用户确认？\n□ 若长度不足，是否已通过扩写/重复主结构补足？\n□ 是否指定了 --model music-2.6？\n□ --vocals 是否描述了期望的声线？\n□ 生成后是否验证了押韵？\n□ 歌词是否纯文本交付（无结构标签）？\n□ 生成后是否通过正确方式发送文件给用户？\n```\n\nFile v3.0.3:thematic/SKILL.md\n\n---\nname: ai-songwriter-thematic\ndescription: AI主题歌曲创作子技能 — 调研客户历史/景点典故，将调研内容转化为歌词，全程押韵。激活条件：用户要求为企业/单位/客户/景点/品牌创作歌曲。支持客户全称或简称自动调研。\nversion: 3.0\ncategory: creative\ntags: [songwriting, thematic-song, company-song, scenic-song, rhyming, research]\nauthor: renxu\nlicense: MIT\nplatforms: [linux, macos, windows]\nparent_skills:\n  - ai-songwriter\ntriggers:\n  - 企业歌曲\n  - 客户歌曲\n  - 景点歌曲\n  - 品牌歌曲\n  - 创作歌曲\n  - 给某某写歌\n  - 单位歌曲\n  - 主题歌\n---\n\n# 主题歌曲创作子技能\n\n## 全流程标准链路\n\n1. **识别主题**：确认客户名称（全称或简称）/ 景点 / 品牌\n2. **联网调研**：通过 `mmx search` 获取背景资料\n3. **素材提炼**：将调研内容转化为歌词意象\n4. **歌词创作**：按押韵规范创作歌词\n5. **押韵验证**：逐句检查\n6. **时长计算**：不足 3 分钟则补足\n7. **歌词确认**：发给用户确认\n8. **音频生成**：用户确认后执行\n9. **文件发送**：通过正确方式发送\n\n> ⚠️ **未经用户确认歌词，不得直接生成音频。**\n\n---\n\n## 核心原则\n\n1. **调研先行**：先调研客户/景点的历史、事件、特点、典故\n2. **素材转化**：将调研内容提炼为歌词意象\n3. **押韵创作**：全程押韵，每句尾字必须是目标韵母\n4. **主线叙事**：以时间轴或里程碑为主线，不是个人颂歌\n\n---\n\n## 调研方法\n\n### 客户/企业调研\n\n**客户名称识别：**\n- 用户可能给全称，也可能给简称\n- 先用简称搜索，如果结果不够，再用全称搜索\n- 如果两者都不确定，问用户确认\n\n**必调研内容：**\n- 成立时间、重大里程碑\n- 核心业务、产品、技术\n- 团队文化、价值观\n- 近期动态、荣誉\n- 领导人名字（只能出现一次，放在不起眼位置）\n\n**调研命令：**\n```bash\n# 搜索公司背景\nmmx search query --q \"公司名称 成立 历史 里程碑\" --limit 10 --non-interactive --quiet --output json\n\n# 搜索近期新闻\nmmx search query --q \"公司名称 最新动态 2024 2025\" --limit 10 --non-interactive --quiet --output json\n\n# 搜索核心业务\nmmx search query --q \"公司名称 核心业务 产品 技术\" --limit 10 --non-interactive --quiet --output json\n```\n\n### 景点调研\n\n**必调研内容：**\n- 景点名称、来历\n- 历史典故、传说\n- 著名诗句、名人足迹\n- 特色景观、季节特点\n- 文化内涵、象征意义\n\n**调研命令：**\n```bash\n# 搜索景点背景\nmmx search query --q \"景点名称 历史 典故 传说\" --limit 10 --non-interactive --quiet --output json\n\n# 搜索景点特色\nmmx search query --q \"景点名称 特色景观 名人足迹 著名诗句\" --limit 10 --non-interactive --quiet --output json\n```\n\n---\n\n## 歌词结构\n\n```\n[Intro]     自创开场（4句，引入主题）\n[Verse 1]   调研提炼的场景/事件描述（4句）\n[Pre-Chorus] 承上启下（4句）\n[Chorus]    核心主题升华（4句，主线叙事）\n[Verse 2]   调研提炼的素材（4句，递进）\n[Pre-Chorus] 承上启下（4句）\n[Chorus]    核心主题升华（4句，与第一遍相同）\n[Bridge]    转折/反思（4句）\n[Chorus]    核心主题升华（4句，与第一遍相同）\n[Outro]     升华收尾（4句）\n```\n\n> 基础结构 40 句 ≈ 128 秒 ≈ 2.1 分钟。\n> **必须补足到 60+ 句（约 3 分钟+）**，默认整首 repeat 或增加段落。\n> 推荐目标：80 句 ≈ 4.3 分钟。\n\n> 企业歌曲：主线是**业务成长之路**，不是个人颂歌\n> 景点歌曲：主线是**典故+景观+情感**\n\n---\n\n## 押韵规范\n\n### 押韵模式 A（全韵统一）⭐\n选定一个韵母后，**每一句最后一个字**都必须发该韵。\n\n| 韵母 | 常见安全字 |\n|------|-----------|\n| -ang | 光/望/扬/荡/长/忙/香/霜/央/黄/苍/场/昌 |\n| -in | 心/亲/情/金/新/林/琴/音 |\n| -ai | 爱/来/白/海/开/才 |\n| -ou | 楼/舟/流/秋/游/留/悠/收/投/酬 |\n\n### 押韵验证\n\n```python\ndef validate_rhyme(lyrics_text, rhyme_set):\n    \"\"\"验证全韵统一押韵\"\"\"\n    lines = [l.strip() for l in lyrics_text.strip().split('\\n') if l.strip()]\n    errors = []\n\n    for i, line in enumerate(lines):\n        last_char = line[-1]\n        ok = last_char in rhyme_set\n        if not ok:\n            errors.append((i+1, line, last_char))\n        print(f\"{'✓' if ok else '✗'} 第{i+1:2d}句 {line} → {last_char}\")\n\n    return errors\n```\n\n---\n\n## 禁区与红线\n\n### 企业歌曲禁区\n- ❌ **名字只能出现一次**：放在不起眼位置（如 Pre-Chorus），禁止在 Chorus 反复出现\n- ❌ **禁止领地争议表述**：如\"数字学堂\"会被教学部门认为在抢功\n- ❌ **主线不能是个人颂歌**：必须是业务成长之路或团队集体叙事\n\n### 歌词禁区\n- ❌ 不能包含有争议的领土表述\n- ❌ 不能抢其他部门功劳\n- ❌ 不能过度歌功颂德\n\n---\n\n## 音乐生成参数\n\n### 企业歌曲风格\n```bash\nmmx music generate \\\n  --prompt \"温暖积极的企业歌曲，节奏明快，充满希望和凝聚力，现代企业宣传片风格，副歌更有推动感，适合合唱\" \\\n  --lyrics \"歌词文本（纯文本，无结构标签）\" \\\n  --vocals \"choir, uplifting chorus\" \\\n  --model music-2.6 \\\n  --out song.mp3 \\\n  --async --non-interactive --quiet\n```\n\n### 景点歌曲风格\n```bash\nmmx music generate \\\n  --prompt \"古风景点歌曲，笛子为主，箫声点缀，悠扬悠远，仿佛山水画卷展开\" \\\n  --lyrics \"歌词文本（纯文本，无结构标签）\" \\\n  --vocals \"古风女声，甜美悠扬\" \\\n  --model music-2.6 \\\n  --out song.mp3 \\\n  --async --non-interactive --quiet\n```\n\n---\n\n## 文件发送\n\n生成音频后，按父级技能的文件发送规则执行：\n- **wecom 通道**：使用 `message` 工具直发本地附件\n- **飞书**：API 三步发送\n- **其他**：`MEDIA:<绝对路径>`\n\n---\n\n## 审查清单\n\n```\n□ 是否先调研了客户/景点的背景？\n□ 歌词是否包含调研提炼的素材？\n□ 每句尾字是否都是目标韵母？\n□ 名字是否只出现一次且位置不起眼？\n□ 是否避免了领地争议表述？\n□ 每段是否都是4句？\n□ 预计时长是否在3:00-5:00之间？\n□ 是否已先把歌词草案发给用户确认？\n□ 若长度不足，是否已通过重复副歌/补段扩展？\n□ 歌词是否纯文本交付（无结构标签）？\n□ 生成后是否通过正确方式发送文件给用户？\n```\n\nFile v3.0.3:_meta.json\n\n{\n  \"ownerId\": \"kn725tchg3gp72a78w22qa07p584f267\",\n  \"slug\": \"ai-songwriter-renxu\",\n  \"version\": \"3.0.3\",\n  \"publishedAt\": 1779328495533\n}\n\nFile v3.0.3:clawhub.yaml\n\nname: ai-songwriter-renxu\nversion: 3.0.2\ndescription: AI歌曲创作核心技能 - 合辙押韵歌词创作 + MiniMax mmx-cli 音乐生成。支持诗词改编、主题创作、押韵验证、多渠道文件投递。\nauthor: renxu\nhomepage: https://clawhub.ai/skills/ai-songwriter-renxu\nlicense: MIT\ntags:\n  - songwriting\n  - rhyming\n  - music-generation\n  - minimax\n  - mmx\n  - lyrics\ncategory: utility\ndependencies: []\nentry: SKILL.md\nfiles:\n  - SKILL.md\n  - poetry/SKILL.md\n  - thematic/SKILL.md\n  - delivery/SKILL.md\n\nArchive v3.0.2: 5 files, 14833 bytes\n\nFiles: delivery/SKILL.md (6808b), poetry/SKILL.md (5404b), SKILL.md (10486b), thematic/SKILL.md (6594b), _meta.json (138b)\n\nFile v3.0.2:delivery/SKILL.md\n\n---\nname: ai-songwriter-delivery\ndescription: AI歌曲创作文件交付子技能 — 覆盖 wecom、feishu、wechat、telegram、whatsapp、slack、discord 等主流通道的文件发送正确链路。当歌曲音频生成完成后，根据当前通道自动选择正确发送方式。\nversion: 3.0\ncategory: creative\ntags: [delivery, file-send, wecom, feishu, wechat, telegram, whatsapp, slack, discord]\nauthor: renxu\nlicense: MIT\nplatforms: [linux, macos, windows]\nparent_skills:\n  - ai-songwriter\n---\n\n# 文件交付子技能\n\n## 核心原则\n\n1. **生成完成即发送**：音频文件生成后，立即发送给用户，不等用户催\n2. **根据通道选方式**：根据当前 channel 自动选择正确的发送链路\n3. **发送前必检查**：文件存在 + 绝对路径 + 大小在限制内 + MIME 正确\n4. **不要只给路径**：不要只输出文件路径、地址、命令行，用户要的是文件本身\n\n---\n\n## 通道路由表\n\n| 当前通道 | channel 参数 | 首选发送方式 | 备选方式 |\n|---------|-------------|-------------|---------|\n| 企业微信 | `wecom` | `message` 工具直发 | `MEDIA:` |\n| 飞书 | `feishu` | `message` 工具直发 | 飞书 API 三步 |\n| 微信 | `openclaw-weixin` | `message` 工具直发 | `MEDIA:` |\n| Telegram | `telegram` | `message` 工具直发 | `MEDIA:` |\n| WhatsApp | `whatsapp` | `message` 工具直发 | `MEDIA:` |\n| Slack | `slack` | `message` 工具直发 | `MEDIA:` |\n| Discord | `discord` | `message` 工具直发 | `MEDIA:` |\n| Signal | `signal` | `message` 工具直发 | `MEDIA:` |\n| 其他 | 按实际 | `MEDIA:<绝对路径>` | — |\n\n> 所有通道统一优先走 OpenClaw 的 `message` 工具。OpenClaw Gateway 会自动处理各通道的文件上传和发送封装。\n\n---\n\n## 统一发送模板（适用所有通道）\n\n```\nmessage 工具参数：\n  action: \"send\"\n  channel: \"<当前通道>\"\n  target: \"<当前通道>:<用户ID>\"\n  media: \"<本地绝对路径>\"\n  filePath: \"<本地绝对路径>\"\n  filename: \"<文件名>\"\n  mimeType: \"<MIME类型>\"\n  forceDocument: true\n  message: \"<可选说明文字>\"\n```\n\n### 参数说明\n\n| 参数 | 说明 | 示例 |\n|------|------|------|\n| `channel` | 当前会话的通道标识 | `wecom` / `feishu` / `telegram` |\n| `target` | 通道前缀 + 用户ID | `wecom:RenXu` / `feishu:ou_xxx` / `telegram:123456` |\n| `media` | 本地文件绝对路径 | `/root/.openclaw/workspace/work/minimax/music/song.mp3` |\n| `filePath` | 与 media 相同 | 同上 |\n| `filename` | 显式文件名 | `song.mp3` |\n| `mimeType` | 文件 MIME 类型 | `audio/mpeg` |\n| `forceDocument` | 按文件附件发送 | `true` |\n\n> ⚠️ `media` 与 `filePath` **都传**，路径必须是**绝对路径**。\n\n---\n\n## 各通道详细说明\n\n### 企业微信（wecom）\n\n**已验证可用。** 这是经过实际成功发送验证的链路。\n\n```\nchannel: \"wecom\"\ntarget: \"wecom:<userid>\"\n```\n\n**文件大小限制：**\n\n| 类型 | 上限 |\n|------|------|\n| 图片 | 10 MB |\n| 视频 | 10 MB |\n| 语音 | 2 MB（仅 AMR） |\n| 文件 | 20 MB |\n\n**注意事项：**\n- 超过 20 MB 需先压缩或拆分\n- 语音只支持 AMR 格式\n- 如果 `MEDIA:` 在该会话不稳定，直接切 `message` 工具\n- 音频建议 `forceDocument: true`，避免被当成语音消息\n\n### 飞书（feishu）\n\n**首选：`message` 工具直发**\n\n```\nchannel: \"feishu\"\ntarget: \"feishu:<open_id 或 chat_id>\"\n```\n\n**备选：飞书 Open API 手动发送（三步）**\n\n仅当 `message` 工具链路不可用时使用：\n\n```bash\n# 第一步：获取 tenant_access_token\nTOKEN=$(curl -s -X POST \"https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"app_id\":\"<APP_ID>\",\"app_secret\":\"<APP_SECRET>\"}' \\\n  | python3 -c \"import sys,json; print(json.load(sys.stdin)['tenant_access_token'])\")\n\n# 第二步：上传文件\nFILE_KEY=$(curl -s -X POST \"https://open.feishu.cn/open-apis/im/v1/files\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -F \"file_name=song.mp3\" -F \"file_type=stream\" \\\n  -F \"file=@/path/to/song.mp3;type=audio/mpeg\" \\\n  | python3 -c \"import sys,json; print(json.load(sys.stdin)['data']['file_key'])\")\n\n# 第三步：发送文件消息\ncurl -s -X POST \"https://open.feishu.cn/open-apis/im/v1/messages?receive_id_type=chat_id\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"receive_id\":\"<CHAT_ID>\",\"msg_type\":\"file\",\"content\":\"{\\\"file_key\\\":\\\"'\"$FILE_KEY\"'\\\"}\"}'\n```\n\n**飞书文件上传限制：约 50MB**\n\n### 微信（wechat / openclaw-weixin）\n\n```\nchannel: \"openclaw-weixin\"\ntarget: \"openclaw-weixin:<wxid>\"\n```\n\n**注意：**\n- 微信通道通过 `@tencent-weixin/openclaw-weixin` 外部插件实现\n- 仅支持私聊\n- 文件发送走 OpenClaw Gateway 统一封装\n\n### Telegram\n\n```\nchannel: \"telegram\"\ntarget: \"telegram:<user_id>\"\n```\n\n**注意：**\n- Telegram 支持最大 50 MB 文件\n- 音频文件会被 Telegram 识别为音频消息\n- 若要按文件附件发送，使用 `forceDocument: true`\n\n### WhatsApp\n\n```\nchannel: \"whatsapp\"\ntarget: \"whatsapp:<phone_number>\"\n```\n\n**注意：**\n- WhatsApp 文件大小限制约 16 MB（音频）/ 100 MB（文档）\n- 音频格式建议 mp3 或 ogg\n\n### Slack\n\n```\nchannel: \"slack\"\ntarget: \"slack:<channel_id 或 user_id>\"\n```\n\n### Discord\n\n```\nchannel: \"discord\"\ntarget: \"discord:<channel_id>\"\n```\n\n**注意：**\n- Discord 文件上传限制：8 MB（免费）/ 50 MB（Nitro）\n- 超限时需先压缩\n\n### Signal\n\n```\nchannel: \"signal\"\ntarget: \"signal:<phone_number>\"\n```\n\n---\n\n## 常见 MIME 类型\n\n| 文件类型 | MIME |\n|---------|------|\n| MP3 音频 | `audio/mpeg` |\n| WAV 音频 | `audio/wav` |\n| OGG 音频 | `audio/ogg` |\n| AMR 语音 | `audio/amr` |\n| MP4 视频 | `video/mp4` |\n| ZIP 压缩包 | `application/zip` |\n| PDF 文档 | `application/pdf` |\n| Word 文档 | `application/vnd.openxmlformats-officedocument.wordprocessingml.document` |\n| Excel 表格 | `application/vnd.openxmlformats-officedocument.spreadsheetml.sheet` |\n| PPT 幻灯片 | `application/vnd.openxmlformats-officedocument.presentationml.presentation` |\n| PNG 图片 | `image/png` |\n| JPEG 图片 | `image/jpeg` |\n\n---\n\n## 发送前检查清单\n\n```\n□ 文件是否存在？\n□ 是否使用绝对路径？\n□ 文件大小是否在当前通道限制内？\n□ filename 是否显式传入？\n□ mimeType 是否正确？\n□ forceDocument 是否为 true（音频文件）？\n□ 发送后是否确认用户已收到？\n```\n\n---\n\n## 发送失败排查\n\n1. **MEDIA: 不稳定** → 切换到 `message` 工具直发\n2. **文件超限** → 先压缩再发\n3. **通道未连接** → 检查 `openclaw channels status --probe`\n4. **权限不足** → 检查 `openclaw pairing list <channel>`\n5. **文件不存在** → 确认路径正确，文件已生成完成\n\nFile v3.0.2:poetry/SKILL.md\n\n---\nname: ai-songwriter-poetry\ndescription: AI古诗词谱曲子技能 — 保留原文诗词，按递进结构补充自创歌词，全程押韵。激活条件：用户要求古诗词/绝句/律诗/诗词改编/唐诗宋词谱曲。\nversion: 3.0\ncategory: creative\ntags: [songwriting, chinese-poetry, rhyming, poetry-song, music-generation]\nauthor: renxu\nlicense: MIT\nplatforms: [linux, macos, windows]\nparent_skills:\n  - ai-songwriter\ntriggers:\n  - 古诗词谱曲\n  - 诗词改编\n  - 唐诗谱曲\n  - 绝句谱曲\n  - 律诗谱曲\n  - 宋词谱曲\n  - 把诗谱成歌\n---\n\n# 古诗词谱曲子技能\n\n## 全流程标准链路\n\n1. **确认诗词**：确认用户指定的诗词原文\n2. **选定韵母**：根据诗词韵脚选定统一韵母\n3. **创作歌词**：保留原文 + 自创前后段\n4. **押韵验证**：逐句检查\n5. **时长计算**：不足 3 分钟则补足\n6. **歌词确认**：发给用户确认\n7. **音频生成**：用户确认后执行\n8. **文件发送**：通过正确方式发送\n\n> ⚠️ **未经用户确认歌词，不得直接生成音频。**\n\n---\n\n## 核心原则\n\n1. **保留诗词原文**：诗词原文必须原封不动地保留在 Verse 中，作为歌曲的固定锚点\n2. **自创开头结尾**：在诗词前后各增加自创歌词（Intro 引导意境，Outro 升华情感）\n3. **自创段落递进**：自创歌词按递进结构展开，避免同词异句简单重复\n\n---\n\n## 推荐歌词结构\n\n```\n[Intro]     自创开场（4句，引导意境，为诗词铺垫）\n[Verse 1]   诗词原文（作为锚点，原封不动）\n[Chorus 1]  自创第一段（4句，承接诗词，情感展开）\n[Verse 2]   诗词原文（可省略或与Verse1相同）\n[Chorus 2]  自创第二段（4句，情感递进）\n[Chorus 3]  高潮/变奏（4句，可复用Chorus2微调）\n[Outro]     自创结尾（4句，升华情感）\n```\n\n> 基础结构 24 句 ≈ 77 秒，**必须至少完整两遍 + 额外段落**才能达到 3 分钟。\n> 推荐：基础结构 × 2 + Bridge = 约 56–60 句 ≈ 3 分钟+。\n\n---\n\n## 诗词原文处理\n\n| 诗词类型 | 句数 | 建议处理 |\n|---------|------|---------|\n| 五言绝句 | 4句 | 唱两遍（Verse 1 + Verse 2 相同） |\n| 七言绝句 | 4句 | 唱两遍，字数更多时值略长 |\n| 律诗 | 8句 | 可只取前四句或按音乐结构调整 |\n| 古体诗 | 不限 | 精选核心段落，避免过长 |\n\n> ⚠️ **诗词原文必须原封不动**：不得更改任何一字，只能在其前后添加自创段落。\n\n---\n\n## 押韵规范\n\n### 押韵模式 B（诗词格律）⭐\n**第三句不押韵（白脚）**，一、二、四句押韵。\n\n```\n白日依山尽（尽 -in）\n黄河入海流（流 -ou）\n欲穷千里目（目 -u，白脚）\n更上一层楼（楼 -ou）\n```\n\n> ⚠️ **每4句一段，段内第3句是白脚**，不是全局第3、7、11句。\n\n### 常见安全韵\n\n| 韵母 | 安全字 |\n|------|--------|\n| -ang | 光/望/扬/荡/长/忙/香/霜/央/黄/苍/场/昌 |\n| -in | 心/亲/情/金/新/林/琴/音 |\n| -ai | 爱/来/白/海/开/才 |\n| -ou | 楼/舟/流/秋/游/留/悠/收/投/酬 |\n| -an | 山/寒/难/残/叹/关/湾/前 |\n\n---\n\n## 押韵验证\n\n```python\ndef validate_poetry_rhyme(lyrics_text, rhyme_set, poem_lines):\n    \"\"\"验证诗词格律\n    Args:\n        lyrics_text: 歌词字符串\n        rhyme_set: 押韵字集合\n        poem_lines: 原诗锚点集合\n    \"\"\"\n    lines = [l.strip() for l in lyrics_text.strip().split('\\n') if l.strip()]\n    errors = []\n    poem_lines = set(poem_lines)\n\n    for i, line in enumerate(lines):\n        pos_in_stanza = (i % 4) + 1\n        is_white = (pos_in_stanza == 3)\n        last_char = line[-1]\n\n        if line in poem_lines:\n            continue\n\n        if is_white:\n            ok = last_char not in rhyme_set\n            note = f\"✓ 白脚\" if ok else f\"✗ '{last_char}'押韵了\"\n        else:\n            ok = last_char in rhyme_set\n            note = f\"✓\" if ok else f\"✗ '{last_char}'不押韵\"\n\n        if not ok:\n            errors.append((i+1, line, last_char, note))\n        print(f\"{'✓' if ok else '✗'} 第{i+1:2d}句 {line} → {last_char} {note}\")\n\n    return errors\n```\n\n---\n\n## 音乐生成参数\n\n```bash\nmmx music generate \\\n  --prompt \"古诗词风格，慢板，悠扬沉郁，古琴独奏为主，箫声点缀，节奏舒缓如行云流水，歌声要有气势有情感，字正腔圆，中速偏慢\" \\\n  --lyrics \"歌词文本（纯文本，无结构标签）\" \\\n  --vocals \"温暖童声，古诗词风格，甜美纯真\" \\\n  --model music-2.6 \\\n  --out song.mp3 \\\n  --async --non-interactive --quiet\n```\n\n---\n\n## 文件发送\n\n生成音频后，按父级技能的文件发送规则执行：\n- **wecom 通道**：使用 `message` 工具直发本地附件\n- **飞书**：API 三步发送\n- **其他**：`MEDIA:<绝对路径>`\n\n---\n\n## 审查清单\n\n```\n□ 诗词原文是否原封不动保留在Verse中？\n□ 自创段落之间是否有内容递进而非简单重复？\n□ 每句尾字是否都是目标韵母？\n□ 是否有字重复出现？（特别是句尾）\n□ 每段是否都是4句？\n□ 预计时长是否在3:00-5:00之间？\n□ 是否已先把歌词草案发给用户确认？\n□ 若长度不足，是否已通过重复主结构或补段扩展？\n□ 歌词是否纯文本交付（无结构标签）？\n□ 生成后是否通过正确方式发送文件给用户？\n```\n\nFile v3.0.2:SKILL.md\n\n---\nname: ai-songwriter\ndescription: AI歌曲创作核心技能 — 合辙押韵歌词创作 + MiniMax mmx-cli 正确调用 + 歌词验证 + 歌曲生成全流程。包含押韵规范、mmx模型路由、音乐生成参数、文件发送。当用户要求写歌/创作歌曲/生成音乐时激活。\nversion: 3.0\ncategory: creative\ntags: [songwriting, rhyming, music-generation, minimax, mmx, lyrics]\nauthor: renxu\nlicense: MIT\nplatforms: [linux, macos, windows]\nrequired_environment_variables:\n  - MINIMAX_CN_API_KEY\nrequired_commands:\n  - mmx\ntriggers:\n  - 写歌\n  - 创作歌曲\n  - 生成音乐\n  - 帮我写首歌\n  - AI songwriter\n  - 作曲\n  - 谱曲\n---\n\n# AI歌曲创作核心技能\n\n## 技能分支\n\n```\nai-songwriter（核心）\n├── poetry/        古诗词谱曲子技能（保留原文 + 递进押韵）\n└── thematic/      主题歌曲子技能（客户/景点调研 → 写入歌词）\n```\n\n---\n\n## 全流程标准链路\n\n**所有写歌请求必须严格按以下顺序执行：**\n\n1. **需求整理**：确认主题、风格、情绪、受众、语言\n2. **路由子技能**：\n   - 古诗词相关 → `poetry/`\n   - 企业/客户/景点/品牌相关 → `thematic/`\n   - 其他 → 本核心技能直接处理\n3. **歌词创作**：按押韵规范创作歌词\n4. **押韵验证**：用 Python 脚本逐句检查\n5. **时长计算**：预估时长，不足 3 分钟则补足\n6. **歌词确认**：输出歌词草案 + 预计时长 + 是否 repeat → 等用户确认\n7. **音频生成**：用户确认后执行 `mmx music generate`\n8. **文件发送**：生成后通过正确方式发送给用户\n\n> ⚠️ **未经用户确认歌词，不得直接生成音频。这是硬规则。**\n\n---\n\n## 核心原则：合辙押韵\n\n### 押韵模式 A（全韵统一）⭐\n选定一个韵母后，**每一句最后一个字**都必须发该韵。\n\n| 韵母 | 常见安全字 |\n|------|-----------|\n| -ang | 光/望/扬/荡/长/忙/香/霜/央/黄/苍/场/昌 |\n| -in | 心/亲/情/金/新/林/琴/音 |\n| -ai | 爱/来/白/海/开/才 |\n| -ou | 楼/舟/流/秋/游/留/悠/收/投/酬 |\n| -an | 山/寒/难/残/叹/关/湾/前 |\n\n### 押韵模式 B（诗词格律）\n**第三句不押韵（白脚）**，一、二、四句押韵。适用于古诗词改编。\n\n### 押韵验证脚本\n\n```python\ndef validate_rhyme(lyrics_text, rhyme_set, poem_lines=None):\n    \"\"\"验证押韵\n    Args:\n        lyrics_text: 歌词字符串（多行）\n        rhyme_set: 押韵字集合\n        poem_lines: 原诗锚点集合，默认None表示无锚点\n    \"\"\"\n    if poem_lines is None:\n        poem_lines = set()\n    lines = [l.strip() for l in lyrics_text.strip().split('\\n') if l.strip()]\n    errors = []\n\n    for i, line in enumerate(lines):\n        pos_in_stanza = (i % 4) + 1\n        is_white = (pos_in_stanza == 3)\n        last_char = line[-1]\n\n        if line in poem_lines:\n            continue\n\n        if is_white:\n            ok = last_char not in rhyme_set\n            note = f\"✓ 白脚\" if ok else f\"✗ 白脚'{last_char}'押韵了\"\n        else:\n            ok = last_char in rhyme_set\n            note = f\"✓\" if ok else f\"✗ '{last_char}'不押韵\"\n\n        if not ok:\n            errors.append((i+1, line, last_char, note))\n        print(f\"{'✓' if ok else '✗'} 第{i+1:2d}句 {line} → {last_char} {note}\")\n\n    return errors\n```\n\n### 常见错误字\n\n| 目标韵 | 容易混入的错误字 |\n|--------|-----------------|\n| -ang | 月/前/向/星/心/梦/声/里/思 |\n| -ou | 心/情/声/美/歌/路 |\n\n---\n\n## mmx-cli 正确调用\n\n### 模型路由\n\n| 任务 | 模型 | 命令 |\n|------|------|------|\n| 歌词生成 | `lyrics_generation` | `mmx text chat --model lyrics_generation` |\n| 歌曲生成 | `music-2.6` | `mmx music generate --model music-2.6` |\n| 语音合成 | `speech-2.8-hd` | `mmx speech synthesize --model speech-2.8-hd` |\n| 图片生成 | `image-01` | `mmx image generate --model image-01` |\n| 视频生成 | `hailuo-2.3` | `mmx video generate --model hailuo-2.3` |\n\n> ⚠️ **必须指定 `--model`**：music-2.6 而非 music-2.5。\n\n### 歌词生成（第一阶段）\n\n```bash\nmmx text chat \\\n  --message \"为主题'xxx'创作歌曲歌词。全程押韵（韵脚自选，如-ang/-in/-ai/-ou/-an等），每段4句。\" \\\n  --model lyrics_generation \\\n  --non-interactive \\\n  --quiet\n```\n\n> ⚠️ `lyrics_generation` 是独立文本模型，**不是** `mmx music` 子命令！\n> ⚠️ 如果 `lyrics_generation` 返回空内容，换用 `mmx text chat --model MiniMax-M2.7` 作为备用。\n\n### 歌曲生成（第二阶段）\n\n```bash\nmmx music generate \\\n  --prompt \"音乐风格描述\" \\\n  --lyrics \"歌词文本\" \\\n  --vocals \"人声描述\" \\\n  --model music-2.6 \\\n  --out song.mp3 \\\n  --non-interactive \\\n  --quiet\n```\n\n**歌词结构标签（可选）：**\n`mmx music generate` 支持以下结构标签：`[Intro]` `[Verse]` `[Pre Chorus]` `[Chorus]` `[Interlude]` `[Bridge]` `[Outro]` `[Post Chorus]` `[Transition]` `[Break]` `[Hook]` `[Build Up]` `[Inst]` `[Solo]`。标签必须干净（括号内不要加描述），标签会被演唱出来。\n\n**长歌词（48句+）用异步模式：**\n```bash\nmmx music generate \\\n  --prompt \"...\" --lyrics \"...\" --vocals \"...\" \\\n  --model music-2.6 \\\n  --out song.mp3 \\\n  --async --non-interactive --quiet\n```\n> ⚠️ `--async` 不带 `--output json`，否则报错。\n\n也可以用 `--lyrics-file` 代替 `--lyrics`，读取本地歌词文件：\n```bash\nmmx music generate \\\n  --prompt \"...\" --lyrics-file /path/to/lyrics.txt --vocals \"...\" \\\n  --model music-2.6 \\\n  --out song.mp3 \\\n  --async --non-interactive --quiet\n```\n\n### 风格 Prompt 示例\n\n**古诗词风格（慢板悠扬）：**\n```\n古诗词风格，慢板，悠扬沉郁，古琴独奏为主，箫声点缀，\n节奏舒缓如行云流水，歌声要有气势有情感，字正腔圆，中速偏慢\n```\n\n**温暖企业歌曲风格：**\n```\n温暖积极的企业歌曲，节奏明快，充满希望和凝聚力，\n现代企业宣传片风格，副歌更有推动感，适合合唱\n```\n\n**景点歌曲风格：**\n```\n古风景点歌曲，笛子为主，箫声点缀，\n悠扬悠远，仿佛山水画卷展开\n```\n\n### 声线参数\n\n| 期望声线 | --vocals 示例 |\n|---------|--------------|\n| 童声 | `\"sweet innocent child vocal\"` |\n| 女声 | `\"bright female soprano\"` |\n| 男声 | `\"warm male baritone, father singing\"` |\n| 合唱 | `\"choir, uplifting chorus\"` |\n\n---\n\n## 时长控制\n\n| 最短 | 最长 | 目标 |\n|------|------|------|\n| 3分钟 | 5分钟 | 3:00 ~ 5:00 |\n\n```\n预估时长 ≈ 歌词总句数 × 3.2秒/句\n24句 → 约77秒（明显不够）\n48句 → 约2分34秒（仍偏短）\n56句 → 约2分59秒（下限边缘）\n60~92句 → 推荐交付区间\n```\n\n> **硬规则：** 如果首版歌词不足 3 分钟，必须扩写或重复主结构后再交付确认稿。\n> **补足优先级：** 重复副歌 → 增加主歌 → 增加 Bridge → 整首 repeat。\n\n---\n\n## 歌词确认机制\n\n在执行 `mmx music generate` 前，**必须**先把歌词文本发给用户确认。\n\n流程固定为：\n1. 输出歌词草案\n2. 标注预计时长\n3. 明确说明是否采用 repeat 扩时\n4. 等用户确认后，再生成音频\n\n**未确认歌词前，不得直接生成歌曲。**\n\n---\n\n## 歌词交付格式\n\n**必须**：纯文本歌词，一行一句，**禁止**包含结构标签（如`[Verse]`、`[Chorus]`）和说明文字。\n\n> ⚠️ 以上是**用户确认稿**格式。确认后传给 `mmx music generate` 时，歌词仍然保持纯文本（无结构标签），`--prompt` 中已包含风格描述，模型会根据上下文自行安排结构。\n\n---\n\n## 文件发送\n\n### 企业微信（wecom）\n\n当通道为 wecom 时，使用 `message` 工具直发本地附件：\n\n**推荐参数：**\n- `action: \"send\"`\n- `channel: \"wecom\"`\n- `target: \"wecom:<userid>\"`\n- `media` + `filePath`: 本地绝对路径\n- `filename`: 显式文件名（如 `song.mp3`）\n- `mimeType`: 如 `audio/mpeg`\n- `forceDocument: true`\n\n**发送前检查：**\n- 文件存在\n- 使用绝对路径\n- 文件大小 ≤ 20MB\n- MIME 正确\n\n> ⚠️ **不要只输出 `MEDIA:` 路径。** 如果 `MEDIA:` 在该会话不稳定，直接用 `message` 工具。\n\n### 飞书\n\n```bash\n# 第一步：获取 token\nTOKEN=$(curl -s -X POST \"https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal\" \\\n  -H \"Content-Type: application/json\" \\\n  -d \"{\\\"app_id\\\":\\\"$FEISHU_APP_ID\\\",\\\"app_secret\\\":\\\"$FEISHU_APP_SECRET\\\"}\" \\\n  | python3 -c \"import sys,json; print(json.load(sys.stdin)['tenant_access_token'])\")\n\n# 第二步：上传文件\nUPLOAD_RESP=$(curl -s -X POST \"https://open.feishu.cn/open-apis/im/v1/files\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -F \"file_name=song.mp3\" -F \"file_type=stream\" \\\n  -F \"file=@/path/to/song.mp3;type=audio/mpeg\")\nFILE_KEY=$(echo $UPLOAD_RESP | python3 -c \"import sys,json; print(json.load(sys.stdin)['data']['file_key'])\")\n\n# 第三步：发送\ncurl -s -X POST \"https://open.feishu.cn/open-apis/im/v1/messages?receive_id_type=chat_id\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d \"{\\\"receive_id\\\":\\\"$CHAT_ID\\\",\\\"msg_type\\\":\\\"file\\\",\\\"content\\\":\\\"{\\\\\\\"file_key\\\\\\\":\\\\\\\"$FILE_KEY\\\\\\\"}\\\"}\"\n```\n\n### 其他通道\n\n默认使用 `MEDIA:<绝对路径>` 在回复中交付。\n\n---\n\n## 已知问题与解法\n\n### 押韵合规率低\n- AI 生成的歌词押韵合规率约 75%\n- **必须用 Python 脚本逐行验证尾字**\n- 合规率低于 30% 时，直接手工创作\n\n### 歌词生成模型不稳定\n- `lyrics_generation` 可能返回空内容（exit 0 但 content 为空）\n- 遇到此情况，换用 `MiniMax-M2.7` 作为备用\n\n### 音乐生成超时\n- 48句+ 长歌词容易超时\n- 解法：`--async` 模式 + 轮询检查文件是否生成\n\n### 粤语问题\n- MiniMax music-2.6 **不支持真正的粤语演唱**\n- 即使 prompt 写\"粤语\"，实际输出仍是普通话\n\n---\n\n## 审查清单\n\n```\n□ 每句尾字是否都是目标韵母？\n□ 是否有字重复出现？（特别是句尾）\n□ 每段是否都是4句？\n□ 预计时长是否在3:00-5:00之间？\n□ 是否已先把歌词草案发给用户确认？\n□ 若长度不足，是否已通过扩写/重复主结构补足？\n□ 是否指定了 --model music-2.6？\n□ --vocals 是否描述了期望的声线？\n□ 生成后是否验证了押韵？\n□ 歌词是否纯文本交付（无结构标签）？\n□ 生成后是否通过正确方式发送文件给用户？\n```\n\nFile v3.0.2:thematic/SKILL.md\n\n---\nname: ai-songwriter-thematic\ndescription: AI主题歌曲创作子技能 — 调研客户历史/景点典故，将调研内容转化为歌词，全程押韵。激活条件：用户要求为企业/单位/客户/景点/品牌创作歌曲。支持客户全称或简称自动调研。\nversion: 3.0\ncategory: creative\ntags: [songwriting, thematic-song, company-song, scenic-song, rhyming, research]\nauthor: renxu\nlicense: MIT\nplatforms: [linux, macos, windows]\nparent_skills:\n  - ai-songwriter\ntriggers:\n  - 企业歌曲\n  - 客户歌曲\n  - 景点歌曲\n  - 品牌歌曲\n  - 创作歌曲\n  - 给某某写歌\n  - 单位歌曲\n  - 主题歌\n---\n\n# 主题歌曲创作子技能\n\n## 全流程标准链路\n\n1. **识别主题**：确认客户名称（全称或简称）/ 景点 / 品牌\n2. **联网调研**：通过 `mmx search` 获取背景资料\n3. **素材提炼**：将调研内容转化为歌词意象\n4. **歌词创作**：按押韵规范创作歌词\n5. **押韵验证**：逐句检查\n6. **时长计算**：不足 3 分钟则补足\n7. **歌词确认**：发给用户确认\n8. **音频生成**：用户确认后执行\n9. **文件发送**：通过正确方式发送\n\n> ⚠️ **未经用户确认歌词，不得直接生成音频。**\n\n---\n\n## 核心原则\n\n1. **调研先行**：先调研客户/景点的历史、事件、特点、典故\n2. **素材转化**：将调研内容提炼为歌词意象\n3. **押韵创作**：全程押韵，每句尾字必须是目标韵母\n4. **主线叙事**：以时间轴或里程碑为主线，不是个人颂歌\n\n---\n\n## 调研方法\n\n### 客户/企业调研\n\n**客户名称识别：**\n- 用户可能给全称，也可能给简称\n- 先用简称搜索，如果结果不够，再用全称搜索\n- 如果两者都不确定，问用户确认\n\n**必调研内容：**\n- 成立时间、重大里程碑\n- 核心业务、产品、技术\n- 团队文化、价值观\n- 近期动态、荣誉\n- 领导人名字（只能出现一次，放在不起眼位置）\n\n**调研命令：**\n```bash\n# 搜索公司背景\nmmx search query --q \"公司名称 成立 历史 里程碑\" --limit 10 --non-interactive --quiet --output json\n\n# 搜索近期新闻\nmmx search query --q \"公司名称 最新动态 2024 2025\" --limit 10 --non-interactive --quiet --output json\n\n# 搜索核心业务\nmmx search query --q \"公司名称 核心业务 产品 技术\" --limit 10 --non-interactive --quiet --output json\n```\n\n### 景点调研\n\n**必调研内容：**\n- 景点名称、来历\n- 历史典故、传说\n- 著名诗句、名人足迹\n- 特色景观、季节特点\n- 文化内涵、象征意义\n\n**调研命令：**\n```bash\n# 搜索景点背景\nmmx search query --q \"景点名称 历史 典故 传说\" --limit 10 --non-interactive --quiet --output json\n\n# 搜索景点特色\nmmx search query --q \"景点名称 特色景观 名人足迹 著名诗句\" --limit 10 --non-interactive --quiet --output json\n```\n\n---\n\n## 歌词结构\n\n```\n[Intro]     自创开场（4句，引入主题）\n[Verse 1]   调研提炼的场景/事件描述（4句）\n[Pre-Chorus] 承上启下（4句）\n[Chorus]    核心主题升华（4句，主线叙事）\n[Verse 2]   调研提炼的素材（4句，递进）\n[Pre-Chorus] 承上启下（4句）\n[Chorus]    核心主题升华（4句，与第一遍相同）\n[Bridge]    转折/反思（4句）\n[Chorus]    核心主题升华（4句，与第一遍相同）\n[Outro]     升华收尾（4句）\n```\n\n> 基础结构 40 句 ≈ 128 秒 ≈ 2.1 分钟。\n> **必须补足到 60+ 句（约 3 分钟+）**，默认整首 repeat 或增加段落。\n> 推荐目标：80 句 ≈ 4.3 分钟。\n\n> 企业歌曲：主线是**业务成长之路**，不是个人颂歌\n> 景点歌曲：主线是**典故+景观+情感**\n\n---\n\n## 押韵规范\n\n### 押韵模式 A（全韵统一）⭐\n选定一个韵母后，**每一句最后一个字**都必须发该韵。\n\n| 韵母 | 常见安全字 |\n|------|-----------|\n| -ang | 光/望/扬/荡/长/忙/香/霜/央/黄/苍/场/昌 |\n| -in | 心/亲/情/金/新/林/琴/音 |\n| -ai | 爱/来/白/海/开/才 |\n| -ou | 楼/舟/流/秋/游/留/悠/收/投/酬 |\n\n### 押韵验证\n\n```python\ndef validate_rhyme(lyrics_text, rhyme_set):\n    \"\"\"验证全韵统一押韵\"\"\"\n    lines = [l.strip() for l in lyrics_text.strip().split('\\n') if l.strip()]\n    errors = []\n\n    for i, line in enumerate(lines):\n        last_char = line[-1]\n        ok = last_char in rhyme_set\n        if not ok:\n            errors.append((i+1, line, last_char))\n        print(f\"{'✓' if ok else '✗'} 第{i+1:2d}句 {line} → {last_char}\")\n\n    return errors\n```\n\n---\n\n## 禁区与红线\n\n### 企业歌曲禁区\n- ❌ **名字只能出现一次**：放在不起眼位置（如 Pre-Chorus），禁止在 Chorus 反复出现\n- ❌ **禁止领地争议表述**：如\"数字学堂\"会被教学部门认为在抢功\n- ❌ **主线不能是个人颂歌**：必须是业务成长之路或团队集体叙事\n\n### 歌词禁区\n- ❌ 不能包含有争议的领土表述\n- ❌ 不能抢其他部门功劳\n- ❌ 不能过度歌功颂德\n\n---\n\n## 音乐生成参数\n\n### 企业歌曲风格\n```bash\nmmx music generate \\\n  --prompt \"温暖积极的企业歌曲，节奏明快，充满希望和凝聚力，现代企业宣传片风格，副歌更有推动感，适合合唱\" \\\n  --lyrics \"歌词文本（纯文本，无结构标签）\" \\\n  --vocals \"choir, uplifting chorus\" \\\n  --model music-2.6 \\\n  --out song.mp3 \\\n  --async --non-interactive --quiet\n```\n\n### 景点歌曲风格\n```bash\nmmx music generate \\\n  --prompt \"古风景点歌曲，笛子为主，箫声点缀，悠扬悠远，仿佛山水画卷展开\" \\\n  --lyrics \"歌词文本（纯文本，无结构标签）\" \\\n  --vocals \"古风女声，甜美悠扬\" \\\n  --model music-2.6 \\\n  --out song.mp3 \\\n  --async --non-interactive --quiet\n```\n\n---\n\n## 文件发送\n\n生成音频后，按父级技能的文件发送规则执行：\n- **wecom 通道**：使用 `message` 工具直发本地附件\n- **飞书**：API 三步发送\n- **其他**：`MEDIA:<绝对路径>`\n\n---\n\n## 审查清单\n\n```\n□ 是否先调研了客户/景点的背景？\n□ 歌词是否包含调研提炼的素材？\n□ 每句尾字是否都是目标韵母？\n□ 名字是否只出现一次且位置不起眼？\n□ 是否避免了领地争议表述？\n□ 每段是否都是4句？\n□ 预计时长是否在3:00-5:00之间？\n□ 是否已先把歌词草案发给用户确认？\n□ 若长度不足，是否已通过重复副歌/补段扩展？\n□ 歌词是否纯文本交付（无结构标签）？\n□ 生成后是否通过正确方式发送文件给用户？\n```\n\nFile v3.0.2:_meta.json\n\n{\n  \"ownerId\": \"kn725tchg3gp72a78w22qa07p584f267\",\n  \"slug\": \"ai-songwriter-renxu\",\n  \"version\": \"3.0.2\",\n  \"publishedAt\": 1778657266851\n}\n\nArchive v3.0.1: 5 files, 14816 bytes\n\nFiles: delivery/SKILL.md (6808b), poetry/SKILL.md (5404b), SKILL.md (10458b), thematic/SKILL.md (6594b), _meta.json (138b)\n\nFile v3.0.1:delivery/SKILL.md\n\n---\nname: ai-songwriter-delivery\ndescription: AI歌曲创作文件交付子技能 — 覆盖 wecom、feishu、wechat、telegram、whatsapp、slack、discord 等主流通道的文件发送正确链路。当歌曲音频生成完成后，根据当前通道自动选择正确发送方式。\nversion: 3.0\ncategory: creative\ntags: [delivery, file-send, wecom, feishu, wechat, telegram, whatsapp, slack, discord]\nauthor: renxu\nlicense: MIT\nplatforms: [linux, macos, windows]\nparent_skills:\n  - ai-songwriter\n---\n\n# 文件交付子技能\n\n## 核心原则\n\n1. **生成完成即发送**：音频文件生成后，立即发送给用户，不等用户催\n2. **根据通道选方式**：根据当前 channel 自动选择正确的发送链路\n3. **发送前必检查**：文件存在 + 绝对路径 + 大小在限制内 + MIME 正确\n4. **不要只给路径**：不要只输出文件路径、地址、命令行，用户要的是文件本身\n\n---\n\n## 通道路由表\n\n| 当前通道 | channel 参数 | 首选发送方式 | 备选方式 |\n|---------|-------------|-------------|---------|\n| 企业微信 | `wecom` | `message` 工具直发 | `MEDIA:` |\n| 飞书 | `feishu` | `message` 工具直发 | 飞书 API 三步 |\n| 微信 | `openclaw-weixin` | `message` 工具直发 | `MEDIA:` |\n| Telegram | `telegram` | `message` 工具直发 | `MEDIA:` |\n| WhatsApp | `whatsapp` | `message` 工具直发 | `MEDIA:` |\n| Slack | `slack` | `message` 工具直发 | `MEDIA:` |\n| Discord | `discord` | `message` 工具直发 | `MEDIA:` |\n| Signal | `signal` | `message` 工具直发 | `MEDIA:` |\n| 其他 | 按实际 | `MEDIA:<绝对路径>` | — |\n\n> 所有通道统一优先走 OpenClaw 的 `message` 工具。OpenClaw Gateway 会自动处理各通道的文件上传和发送封装。\n\n---\n\n## 统一发送模板（适用所有通道）\n\n```\nmessage 工具参数：\n  action: \"send\"\n  channel: \"<当前通道>\"\n  target: \"<当前通道>:<用户ID>\"\n  media: \"<本地绝对路径>\"\n  filePath: \"<本地绝对路径>\"\n  filename: \"<文件名>\"\n  mimeType: \"<MIME类型>\"\n  forceDocument: true\n  message: \"<可选说明文字>\"\n```\n\n### 参数说明\n\n| 参数 | 说明 | 示例 |\n|------|------|------|\n| `channel` | 当前会话的通道标识 | `wecom` / `feishu` / `telegram` |\n| `target` | 通道前缀 + 用户ID | `wecom:RenXu` / `feishu:ou_xxx` / `telegram:123456` |\n| `media` | 本地文件绝对路径 | `/root/.openclaw/workspace/work/minimax/music/song.mp3` |\n| `filePath` | 与 media 相同 | 同上 |\n| `filename` | 显式文件名 | `song.mp3` |\n| `mimeType` | 文件 MIME 类型 | `audio/mpeg` |\n| `forceDocument` | 按文件附件发送 | `true` |\n\n> ⚠️ `media` 与 `filePath` **都传**，路径必须是**绝对路径**。\n\n---\n\n## 各通道详细说明\n\n### 企业微信（wecom）\n\n**已验证可用。** 这是经过实际成功发送验证的链路。\n\n```\nchannel: \"wecom\"\ntarget: \"wecom:<userid>\"\n```\n\n**文件大小限制：**\n\n| 类型 | 上限 |\n|------|------|\n| 图片 | 10 MB |\n| 视频 | 10 MB |\n| 语音 | 2 MB（仅 AMR） |\n| 文件 | 20 MB |\n\n**注意事项：**\n- 超过 20 MB 需先压缩或拆分\n- 语音只支持 AMR 格式\n- 如果 `MEDIA:` 在该会话不稳定，直接切 `message` 工具\n- 音频建议 `forceDocument: true`，避免被当成语音消息\n\n### 飞书（feishu）\n\n**首选：`message` 工具直发**\n\n```\nchannel: \"feishu\"\ntarget: \"feishu:<open_id 或 chat_id>\"\n```\n\n**备选：飞书 Open API 手动发送（三步）**\n\n仅当 `message` 工具链路不可用时使用：\n\n```bash\n# 第一步：获取 tenant_access_token\nTOKEN=$(curl -s -X POST \"https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"app_id\":\"<APP_ID>\",\"app_secret\":\"<APP_SECRET>\"}' \\\n  | python3 -c \"import sys,json; print(json.load(sys.stdin)['tenant_access_token'])\")\n\n# 第二步：上传文件\nFILE_KEY=$(curl -s -X POST \"https://open.feishu.cn/open-apis/im/v1/files\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -F \"file_name=song.mp3\" -F \"file_type=stream\" \\\n  -F \"file=@/path/to/song.mp3;type=audio/mpeg\" \\\n  | python3 -c \"import sys,json; print(json.load(sys.stdin)['data']['file_key'])\")\n\n# 第三步：发送文件消息\ncurl -s -X POST \"https://open.feishu.cn/open-apis/im/v1/messages?receive_id_type=chat_id\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"receive_id\":\"<CHAT_ID>\",\"msg_type\":\"file\",\"content\":\"{\\\"file_key\\\":\\\"'\"$FILE_KEY\"'\\\"}\"}'\n```\n\n**飞书文件上传限制：约 50MB**\n\n### 微信（wechat / openclaw-weixin）\n\n```\nchannel: \"openclaw-weixin\"\ntarget: \"openclaw-weixin:<wxid>\"\n```\n\n**注意：**\n- 微信通道通过 `@tencent-weixin/openclaw-weixin` 外部插件实现\n- 仅支持私聊\n- 文件发送走 OpenClaw Gateway 统一封装\n\n### Telegram\n\n```\nchannel: \"telegram\"\ntarget: \"telegram:<user_id>\"\n```\n\n**注意：**\n- Telegram 支持最大 50 MB 文件\n- 音频文件会被 Telegram 识别为音频消息\n- 若要按文件附件发送，使用 `forceDocument: true`\n\n### WhatsApp\n\n```\nchannel: \"whatsapp\"\ntarget: \"whatsapp:<phone_number>\"\n```\n\n**注意：**\n- WhatsApp 文件大小限制约 16 MB（音频）/ 100 MB（文档）\n- 音频格式建议 mp3 或 ogg\n\n### Slack\n\n```\nchannel: \"slack\"\ntarget: \"slack:<channel_id 或 user_id>\"\n```\n\n### Discord\n\n```\nchannel: \"discord\"\ntarget: \"discord:<channel_id>\"\n```\n\n**注意：**\n- Discord 文件上传限制：8 MB（免费）/ 50 MB（Nitro）\n- 超限时需先压缩\n\n### Signal\n\n```\nchannel: \"signal\"\ntarget: \"signal:<phone_number>\"\n```\n\n---\n\n## 常见 MIME 类型\n\n| 文件类型 | MIME |\n|---------|------|\n| MP3 音频 | `audio/mpeg` |\n| WAV 音频 | `audio/wav` |\n| OGG 音频 | `audio/ogg` |\n| AMR 语音 | `audio/amr` |\n| MP4 视频 | `video/mp4` |\n| ZIP 压缩包 | `application/zip` |\n| PDF 文档 | `application/pdf` |\n| Word 文档 | `application/vnd.openxmlformats-officedocument.wordprocessingml.document` |\n| Excel 表格 | `application/vnd.openxmlformats-officedocument.spreadsheetml.sheet` |\n| PPT 幻灯片 | `application/vnd.openxmlformats-officedocument.presentationml.presentation` |\n| PNG 图片 | `image/png` |\n| JPEG 图片 | `image/jpeg` |\n\n---\n\n## 发送前检查清单\n\n```\n□ 文件是否存在？\n□ 是否使用绝对路径？\n□ 文件大小是否在当前通道限制内？\n□ filename 是否显式传入？\n□ mimeType 是否正确？\n□ forceDocument 是否为 true（音频文件）？\n□ 发送后是否确认用户已收到？\n```\n\n---\n\n## 发送失败排查\n\n1. **MEDIA: 不稳定** → 切换到 `message` 工具直发\n2. **文件超限** → 先压缩再发\n3. **通道未连接** → 检查 `openclaw channels status --probe`\n4. **权限不足** → 检查 `openclaw pairing list <channel>`\n5. **文件不存在** → 确认路径正确，文件已生成完成\n\nFile v3.0.1:poetry/SKILL.md\n\n---\nname: ai-songwriter-poetry\ndescription: AI古诗词谱曲子技能 — 保留原文诗词，按递进结构补充自创歌词，全程押韵。激活条件：用户要求古诗词/绝句/律诗/诗词改编/唐诗宋词谱曲。\nversion: 3.0\ncategory: creative\ntags: [songwriting, chinese-poetry, rhyming, poetry-song, music-generation]\nauthor: renxu\nlicense: MIT\nplatforms: [linux, macos, windows]\nparent_skills:\n  - ai-songwriter\ntriggers:\n  - 古诗词谱曲\n  - 诗词改编\n  - 唐诗谱曲\n  - 绝句谱曲\n  - 律诗谱曲\n  - 宋词谱曲\n  - 把诗谱成歌\n---\n\n# 古诗词谱曲子技能\n\n## 全流程标准链路\n\n1. **确认诗词**：确认用户指定的诗词原文\n2. **选定韵母**：根据诗词韵脚选定统一韵母\n3. **创作歌词**：保留原文 + 自创前后段\n4. **押韵验证**：逐句检查\n5. **时长计算**：不足 3 分钟则补足\n6. **歌词确认**：发给用户确认\n7. **音频生成**：用户确认后执行\n8. **文件发送**：通过正确方式发送\n\n> ⚠️ **未经用户确认歌词，不得直接生成音频。**\n\n---\n\n## 核心原则\n\n1. **保留诗词原文**：诗词原文必须原封不动地保留在 Verse 中，作为歌曲的固定锚点\n2. **自创开头结尾**：在诗词前后各增加自创歌词（Intro 引导意境，Outro 升华情感）\n3. **自创段落递进**：自创歌词按递进结构展开，避免同词异句简单重复\n\n---\n\n## 推荐歌词结构\n\n```\n[Intro]     自创开场（4句，引导意境，为诗词铺垫）\n[Verse 1]   诗词原文（作为锚点，原封不动）\n[Chorus 1]  自创第一段（4句，承接诗词，情感展开）\n[Verse 2]   诗词原文（可省略或与Verse1相同）\n[Chorus 2]  自创第二段（4句，情感递进）\n[Chorus 3]  高潮/变奏（4句，可复用Chorus2微调）\n[Outro]     自创结尾（4句，升华情感）\n```\n\n> 基础结构 24 句 ≈ 77 秒，**必须至少完整两遍 + 额外段落**才能达到 3 分钟。\n> 推荐：基础结构 × 2 + Bridge = 约 56–60 句 ≈ 3 分钟+。\n\n---\n\n## 诗词原文处理\n\n| 诗词类型 | 句数 | 建议处理 |\n|---------|------|---------|\n| 五言绝句 | 4句 | 唱两遍（Verse 1 + Verse 2 相同） |\n| 七言绝句 | 4句 | 唱两遍，字数更多时值略长 |\n| 律诗 | 8句 | 可只取前四句或按音乐结构调整 |\n| 古体诗 | 不限 | 精选核心段落，避免过长 |\n\n> ⚠️ **诗词原文必须原封不动**：不得更改任何一字，只能在其前后添加自创段落。\n\n---\n\n## 押韵规范\n\n### 押韵模式 B（诗词格律）⭐\n**第三句不押韵（白脚）**，一、二、四句押韵。\n\n```\n白日依山尽（尽 -in）\n黄河入海流（流 -ou）\n欲穷千里目（目 -u，白脚）\n更上一层楼（楼 -ou）\n```\n\n> ⚠️ **每4句一段，段内第3句是白脚**，不是全局第3、7、11句。\n\n### 常见安全韵\n\n| 韵母 | 安全字 |\n|------|--------|\n| -ang | 光/望/扬/荡/长/忙/香/霜/央/黄/苍/场/昌 |\n| -in | 心/亲/情/金/新/林/琴/音 |\n| -ai | 爱/来/白/海/开/才 |\n| -ou | 楼/舟/流/秋/游/留/悠/收/投/酬 |\n| -an | 山/寒/难/残/叹/关/湾/前 |\n\n---\n\n## 押韵验证\n\n```python\ndef validate_poetry_rhyme(lyrics_text, rhyme_set, poem_lines):\n    \"\"\"验证诗词格律\n    Args:\n        lyrics_text: 歌词字符串\n        rhyme_set: 押韵字集合\n        poem_lines: 原诗锚点集合\n    \"\"\"\n    lines = [l.strip() for l in lyrics_text.strip().split('\\n') if l.strip()]\n    errors = []\n    poem_lines = set(poem_lines)\n\n    for i, line in enumerate(lines):\n        pos_in_stanza = (i % 4) + 1\n        is_white = (pos_in_stanza == 3)\n        last_char = line[-1]\n\n        if line in poem_lines:\n            continue\n\n        if is_white:\n            ok = last_char not in rhyme_set\n            note = f\"✓ 白脚\" if ok else f\"✗ '{last_char}'押韵了\"\n        else:\n            ok = last_char in rhyme_set\n            note = f\"✓\" if ok else f\"✗ '{last_char}'不押韵\"\n\n        if not ok:\n            errors.append((i+1, line, last_char, note))\n        print(f\"{'✓' if ok else '✗'} 第{i+1:2d}句 {line} → {last_char} {note}\")\n\n    return errors\n```\n\n---\n\n## 音乐生成参数\n\n```bash\nmmx music generate \\\n  --prompt \"古诗词风格，慢板，悠扬沉郁，古琴独奏为主，箫声点缀，节奏舒缓如行云流水，歌声要有气势有情感，字正腔圆，中速偏慢\" \\\n  --lyrics \"歌词文本（纯文本，无结构标签）\" \\\n  --vocals \"温暖童声，古诗词风格，甜美纯真\" \\\n  --model music-2.6 \\\n  --out song.mp3 \\\n  --async --non-interactive --quiet\n```\n\n---\n\n## 文件发送\n\n生成音频后，按父级技能的文件发送规则执行：\n- **wecom 通道**：使用 `message` 工具直发本地附件\n- **飞书**：API 三步发送\n- **其他**：`MEDIA:<绝对路径>`\n\n---\n\n## 审查清单\n\n```\n□ 诗词原文是否原封不动保留在Verse中？\n□ 自创段落之间是否有内容递进而非简单重复？\n□ 每句尾字是否都是目标韵母？\n□ 是否有字重复出现？（特别是句尾）\n□ 每段是否都是4句？\n□ 预计时长是否在3:00-5:00之间？\n□ 是否已先把歌词草案发给用户确认？\n□ 若长度不足，是否已通过重复主结构或补段扩展？\n□ 歌词是否纯文本交付（无结构标签）？\n□ 生成后是否通过正确方式发送文件给用户？\n```\n\nFile v3.0.1:SKILL.md\n\n---\nname: ai-songwriter\ndescription: AI歌曲创作核心技能 — 合辙押韵歌词创作 + MiniMax mmx-cli 正确调用 + 歌词验证 + 歌曲生成全流程。包含押韵规范、mmx模型路由、音乐生成参数、文件发送。当用户要求写歌/创作歌曲/生成音乐时激活。\nversion: 3.0\ncategory: creative\ntags: [songwriting, rhyming, music-generation, minimax, mmx, lyrics]\nauthor: renxu\nlicense: MIT\nplatforms: [linux, macos, windows]\nrequired_environment_variables:\n  - MINIMAX_CN_API_KEY\nrequired_commands:\n  - mmx\ntriggers:\n  - 写歌\n  - 创作歌曲\n  - 生成音乐\n  - 帮我写首歌\n  - AI songwriter\n  - 作曲\n  - 谱曲\n---\n\n# AI歌曲创作核心技能\n\n## 技能分支\n\n```\nai-songwriter（核心）\n├── poetry/        古诗词谱曲子技能（保留原文 + 递进押韵）\n└── thematic/      主题歌曲子技能（客户/景点调研 → 写入歌词）\n```\n\n---\n\n## 全流程标准链路\n\n**所有写歌请求必须严格按以下顺序执行：**\n\n1. **需求整理**：确认主题、风格、情绪、受众、语言\n2. **路由子技能**：\n   - 古诗词相关 → `poetry/`\n   - 企业/客户/景点/品牌相关 → `thematic/`\n   - 其他 → 本核心技能直接处理\n3. **歌词创作**：按押韵规范创作歌词\n4. **押韵验证**：用 Python 脚本逐句检查\n5. **时长计算**：预估时长，不足 3 分钟则补足\n6. **歌词确认**：输出歌词草案 + 预计时长 + 是否 repeat → 等用户确认\n7. **音频生成**：用户确认后执行 `mmx music generate`\n8. **文件发送**：生成后通过正确方式发送给用户\n\n> ⚠️ **未经用户确认歌词，不得直接生成音频。这是硬规则。**\n\n---\n\n## 核心原则：合辙押韵\n\n### 押韵模式 A（全韵统一）⭐\n选定一个韵母后，**每一句最后一个字**都必须发该韵。\n\n| 韵母 | 常见安全字 |\n|------|-----------|\n| -ang | 光/望/扬/荡/长/忙/香/霜/央/黄/苍/场/昌 |\n| -in | 心/亲/情/金/新/林/琴/音 |\n| -ai | 爱/来/白/海/开/才 |\n| -ou | 楼/舟/流/秋/游/留/悠/收/投/酬 |\n| -an | 山/寒/难/残/叹/关/湾/前 |\n\n### 押韵模式 B（诗词格律）\n**第三句不押韵（白脚）**，一、二、四句押韵。适用于古诗词改编。\n\n### 押韵验证脚本\n\n```python\ndef validate_rhyme(lyrics_text, rhyme_set, poem_lines=None):\n    \"\"\"验证押韵\n    Args:\n        lyrics_text: 歌词字符串（多行）\n        rhyme_set: 押韵字集合\n        poem_lines: 原诗锚点集合，默认None表示无锚点\n    \"\"\"\n    if poem_lines is None:\n        poem_lines = set()\n    lines = [l.strip() for l in lyrics_text.strip().split('\\n') if l.strip()]\n    errors = []\n\n    for i, line in enumerate(lines):\n        pos_in_stanza = (i % 4) + 1\n        is_white = (pos_in_stanza == 3)\n        last_char = line[-1]\n\n        if line in poem_lines:\n            continue\n\n        if is_white:\n            ok = last_char not in rhyme_set\n            note = f\"✓ 白脚\" if ok else f\"✗ 白脚'{last_char}'押韵了\"\n        else:\n            ok = last_char in rhyme_set\n            note = f\"✓\" if ok else f\"✗ '{last_char}'不押韵\"\n\n        if not ok:\n            errors.append((i+1, line, last_char, note))\n        print(f\"{'✓' if ok else '✗'} 第{i+1:2d}句 {line} → {last_char} {note}\")\n\n    return errors\n```\n\n### 常见错误字\n\n| 目标韵 | 容易混入的错误字 |\n|--------|-----------------|\n| -ang | 月/前/向/星/心/梦/声/里/思 |\n| -ou | 心/情/声/美/歌/路 |\n\n---\n\n## mmx-cli 正确调用\n\n### 模型路由\n\n| 任务 | 模型 | 命令 |\n|------|------|------|\n| 歌词生成 | `lyrics_generation` | `mmx text chat --model lyrics_generation` |\n| 歌曲生成 | `music-2.6` | `mmx music generate --model music-2.6` |\n| 语音合成 | `speech-2.8-hd` | `mmx speech synthesize --model speech-2.8-hd` |\n| 图片生成 | `image-01` | `mmx image generate --model image-01` |\n| 视频生成 | `hailuo-2.3` | `mmx video generate --model hailuo-2.3` |\n\n> ⚠️ **必须指定 `--model`**：music-2.6 而非 music-2.5。\n\n### 歌词生成（第一阶段）\n\n```bash\nmmx text chat \\\n  --message \"为主题'xxx'创作歌曲歌词。全程押韵（韵脚：-ang），每段4句。\" \\\n  --model lyrics_generation \\\n  --non-interactive \\\n  --quiet\n```\n\n> ⚠️ `lyrics_generation` 是独立文本模型，**不是** `mmx music` 子命令！\n> ⚠️ 如果 `lyrics_generation` 返回空内容，换用 `mmx text chat --model MiniMax-M2.7` 作为备用。\n\n### 歌曲生成（第二阶段）\n\n```bash\nmmx music generate \\\n  --prompt \"音乐风格描述\" \\\n  --lyrics \"歌词文本\" \\\n  --vocals \"人声描述\" \\\n  --model music-2.6 \\\n  --out song.mp3 \\\n  --non-interactive \\\n  --quiet\n```\n\n**歌词结构标签（可选）：**\n`mmx music generate` 支持以下结构标签：`[Intro]` `[Verse]` `[Pre Chorus]` `[Chorus]` `[Interlude]` `[Bridge]` `[Outro]` `[Post Chorus]` `[Transition]` `[Break]` `[Hook]` `[Build Up]` `[Inst]` `[Solo]`。标签必须干净（括号内不要加描述），标签会被演唱出来。\n\n**长歌词（48句+）用异步模式：**\n```bash\nmmx music generate \\\n  --prompt \"...\" --lyrics \"...\" --vocals \"...\" \\\n  --model music-2.6 \\\n  --out song.mp3 \\\n  --async --non-interactive --quiet\n```\n> ⚠️ `--async` 不带 `--output json`，否则报错。\n\n也可以用 `--lyrics-file` 代替 `--lyrics`，读取本地歌词文件：\n```bash\nmmx music generate \\\n  --prompt \"...\" --lyrics-file /path/to/lyrics.txt --vocals \"...\" \\\n  --model music-2.6 \\\n  --out song.mp3 \\\n  --async --non-interactive --quiet\n```\n\n### 风格 Prompt 示例\n\n**古诗词风格（慢板悠扬）：**\n```\n古诗词风格，慢板，悠扬沉郁，古琴独奏为主，箫声点缀，\n节奏舒缓如行云流水，歌声要有气势有情感，字正腔圆，中速偏慢\n```\n\n**温暖企业歌曲风格：**\n```\n温暖积极的企业歌曲，节奏明快，充满希望和凝聚力，\n现代企业宣传片风格，副歌更有推动感，适合合唱\n```\n\n**景点歌曲风格：**\n```\n古风景点歌曲，笛子为主，箫声点缀，\n悠扬悠远，仿佛山水画卷展开\n```\n\n### 声线参数\n\n| 期望声线 | --vocals 示例 |\n|---------|--------------|\n| 童声 | `\"sweet innocent child vocal\"` |\n| 女声 | `\"bright female soprano\"` |\n| 男声 | `\"warm male baritone, father singing\"` |\n| 合唱 | `\"choir, uplifting chorus\"` |\n\n---\n\n## 时长控制\n\n| 最短 | 最长 | 目标 |\n|------|------|------|\n| 3分钟 | 5分钟 | 3:00 ~ 5:00 |\n\n```\n预估时长 ≈ 歌词总句数 × 3.2秒/句\n24句 → 约77秒（明显不够）\n48句 → 约2分34秒（仍偏短）\n56句 → 约2分59秒（下限边缘）\n60~92句 → 推荐交付区间\n```\n\n> **硬规则：** 如果首版歌词不足 3 分钟，必须扩写或重复主结构后再交付确认稿。\n> **补足优先级：** 重复副歌 → 增加主歌 → 增加 Bridge → 整首 repeat。\n\n---\n\n## 歌词确认机制\n\n在执行 `mmx music generate` 前，**必须**先把歌词文本发给用户确认。\n\n流程固定为：\n1. 输出歌词草案\n2. 标注预计时长\n3. 明确说明是否采用 repeat 扩时\n4. 等用户确认后，再生成音频\n\n**未确认歌词前，不得直接生成歌曲。**\n\n---\n\n## 歌词交付格式\n\n**必须**：纯文本歌词，一行一句，**禁止**包含结构标签（如`[Verse]`、`[Chorus]`）和说明文字。\n\n> ⚠️ 以上是**用户确认稿**格式。确认后传给 `mmx music generate` 时，歌词仍然保持纯文本（无结构标签），`--prompt` 中已包含风格描述，模型会根据上下文自行安排结构。\n\n---\n\n## 文件发送\n\n### 企业微信（wecom）\n\n当通道为 wecom 时，使用 `message` 工具直发本地附件：\n\n**推荐参数：**\n- `action: \"send\"`\n- `channel: \"wecom\"`\n- `target: \"wecom:<userid>\"`\n- `media` + `filePath`: 本地绝对路径\n- `filename`: 显式文件名（如 `song.mp3`）\n- `mimeType`: 如 `audio/mpeg`\n- `forceDocument: true`\n\n**发送前检查：**\n- 文件存在\n- 使用绝对路径\n- 文件大小 ≤ 20MB\n- MIME 正确\n\n> ⚠️ **不要只输出 `MEDIA:` 路径。** 如果 `MEDIA:` 在该会话不稳定，直接用 `message` 工具。\n\n### 飞书\n\n```bash\n# 第一步：获取 token\nTOKEN=$(curl -s -X POST \"https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal\" \\\n  -H \"Content-Type: application/json\" \\\n  -d \"{\\\"app_id\\\":\\\"$FEISHU_APP_ID\\\",\\\"app_secret\\\":\\\"$FEISHU_APP_SECRET\\\"}\" \\\n  | python3 -c \"import sys,json; print(json.load(sys.stdin)['tenant_access_token'])\")\n\n# 第二步：上传文件\nUPLOAD_RESP=$(curl -s -X POST \"https://open.feishu.cn/open-apis/im/v1/files\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -F \"file_name=song.mp3\" -F \"file_type=stream\" \\\n  -F \"file=@/path/to/song.mp3;type=audio/mpeg\")\nFILE_KEY=$(echo $UPLOAD_RESP | python3 -c \"import sys,json; print(json.load(sys.stdin)['data']['file_key'])\")\n\n# 第三步：发送\ncurl -s -X POST \"https://open.feishu.cn/open-apis/im/v1/messages?receive_id_type=chat_id\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d \"{\\\"receive_id\\\":\\\"$CHAT_ID\\\",\\\"msg_type\\\":\\\"file\\\",\\\"content\\\":\\\"{\\\\\\\"file_key\\\\\\\":\\\\\\\"$FILE_KEY\\\\\\\"}\\\"}\"\n```\n\n### 其他通道\n\n默认使用 `MEDIA:<绝对路径>` 在回复中交付。\n\n---\n\n## 已知问题与解法\n\n### 押韵合规率低\n- AI 生成的歌词押韵合规率约 75%\n- **必须用 Python 脚本逐行验证尾字**\n- 合规率低于 30% 时，直接手工创作\n\n### 歌词生成模型不稳定\n- `lyrics_generation` 可能返回空内容（exit 0 但 content 为空）\n- 遇到此情况，换用 `MiniMax-M2.7` 作为备用\n\n### 音乐生成超时\n- 48句+ 长歌词容易超时\n- 解法：`--async` 模式 + 轮询检查文件是否生成\n\n### 粤语问题\n- MiniMax music-2.6 **不支持真正的粤语演唱**\n- 即使 prompt 写\"粤语\"，实际输出仍是普通话\n\n---\n\n## 审查清单\n\n```\n□ 每句尾字是否都是目标韵母？\n□ 是否有字重复出现？（特别是句尾）\n□ 每段是否都是4句？\n□ 预计时长是否在3:00-5:00之间？\n□ 是否已先把歌词草案发给用户确认？\n□ 若长度不足，是否已通过扩写/重复主结构补足？\n□ 是否指定了 --model music-2.6？\n□ --vocals 是否描述了期望的声线？\n□ 生成后是否验证了押韵？\n□ 歌词是否纯文本交付（无结构标签）？\n□ 生成后是否通过正确方式发送文件给用户？\n```\n\nFile v3.0.1:thematic/SKILL.md\n\n---\nname: ai-songwriter-thematic\ndescription: AI主题歌曲创作子技能 — 调研客户历史/景点典故，将调研内容转化为歌词，全程押韵。激活条件：用户要求为企业/单位/客户/景点/品牌创作歌曲。支持客户全称或简称自动调研。\nversion: 3.0\ncategory: creative\ntags: [songwriting, thematic-song, company-song, scenic-song, rhyming, research]\nauthor: renxu\nlicense: MIT\nplatforms: [linux, macos, windows]\nparent_skills:\n  - ai-songwriter\ntriggers:\n  - 企业歌曲\n  - 客户歌曲\n  - 景点歌曲\n  - 品牌歌曲\n  - 创作歌曲\n  - 给某某写歌\n  - 单位歌曲\n  - 主题歌\n---\n\n# 主题歌曲创作子技能\n\n## 全流程标准链路\n\n1. **识别主题**：确认客户名称（全称或简称）/ 景点 / 品牌\n2. **联网调研**：通过 `mmx search` 获取背景资料\n3. **素材提炼**：将调研内容转化为歌词意象\n4. **歌词创作**：按押韵规范创作歌词\n5. **押韵验证**：逐句检查\n6. **时长计算**：不足 3 分钟则补足\n7. **歌词确认**：发给用户确认\n8. **音频生成**：用户确认后执行\n9. **文件发送**：通过正确方式发送\n\n> ⚠️ **未经用户确认歌词，不得直接生成音频。**\n\n---\n\n## 核心原则\n\n1. **调研先行**：先调研客户/景点的历史、事件、特点、典故\n2. **素材转化**：将调研内容提炼为歌词意象\n3. **押韵创作**：全程押韵，每句尾字必须是目标韵母\n4. **主线叙事**：以时间轴或里程碑为主线，不是个人颂歌\n\n---\n\n## 调研方法\n\n### 客户/企业调研\n\n**客户名称识别：**\n- 用户可能给全称，也可能给简称\n- 先用简称搜索，如果结果不够，再用全称搜索\n- 如果两者都不确定，问用户确认\n\n**必调研内容：**\n- 成立时间、重大里程碑\n- 核心业务、产品、技术\n- 团队文化、价值观\n- 近期动态、荣誉\n- 领导人名字（只能出现一次，放在不起眼位置）\n\n**调研命令：**\n```bash\n# 搜索公司背景\nmmx search query --q \"公司名称 成立 历史 里程碑\" --limit 10 --non-interactive --quiet --output json\n\n# 搜索近期新闻\nmmx search query --q \"公司名称 最新动态 2024 2025\" --limit 10 --non-interactive --quiet --output json\n\n# 搜索核心业务\nmmx search query --q \"公司名称 核心业务 产品 技术\" --limit 10 --non-interactive --quiet --output json\n```\n\n### 景点调研\n\n**必调研内容：**\n- 景点名称、来历\n- 历史典故、传说\n- 著名诗句、名人足迹\n- 特色景观、季节特点\n- 文化内涵、象征意义\n\n**调研命令：**\n```bash\n# 搜索景点背景\nmmx search query --q \"景点名称 历史 典故 传说\" --limit 10 --non-interactive --quiet --output json\n\n# 搜索景点特色\nmmx search query --q \"景点名称 特色景观 名人足迹 著名诗句\" --limit 10 --non-interactive --quiet --output json\n```\n\n---\n\n## 歌词结构\n\n```\n[Intro]     自创开场（4句，引入主题）\n[Verse 1]   调研提炼的场景/事件描述（4句）\n[Pre-Chorus] 承上启下（4句）\n[Chorus]    核心主题升华（4句，主线叙事）\n[Verse 2]   调研提炼的素材（4句，递进）\n[Pre-Chorus] 承上启下（4句）\n[Chorus]    核心主题升华（4句，与第一遍相同）\n[Bridge]    转折/反思（4句）\n[Chorus]    核心主题升华（4句，与第一遍相同）\n[Outro]     升华收尾（4句）\n```\n\n> 基础结构 40 句 ≈ 128 秒 ≈ 2.1 分钟。\n> **必须补足到 60+ 句（约 3 分钟+）**，默认整首 repeat 或增加段落。\n> 推荐目标：80 句 ≈ 4.3 分钟。\n\n> 企业歌曲：主线是**业务成长之路**，不是个人颂歌\n> 景点歌曲：主线是**典故+景观+情感**\n\n---\n\n## 押韵规范\n\n### 押韵模式 A（全韵统一）⭐\n选定一个韵母后，**每一句最后一个字**都必须发该韵。\n\n| 韵母 | 常见安全字 |\n|------|-----------|\n| -ang | 光/望/扬/荡/长/忙/香/霜/央/黄/苍/场/昌 |\n| -in | 心/亲/情/金/新/林/琴/音 |\n| -ai | 爱/来/白/海/开/才 |\n| -ou | 楼/舟/流/秋/游/留/悠/收/投/酬 |\n\n### 押韵验证\n\n```python\ndef validate_rhyme(lyrics_text, rhyme_set):\n    \"\"\"验证全韵统一押韵\"\"\"\n    lines = [l.strip() for l in lyrics_text.strip().split('\\n') if l.strip()]\n    errors = []\n\n    for i, line in enumerate(lines):\n        last_char = line[-1]\n        ok = last_char in rhyme_set\n        if not ok:\n            errors.append((i+1, line, last_char))\n        print(f\"{'✓' if ok else '✗'} 第{i+1:2d}句 {line} → {last_char}\")\n\n    return errors\n```\n\n---\n\n## 禁区与红线\n\n### 企业歌曲禁区\n- ❌ **名字只能出现一次**：放在不起眼位置（如 Pre-Chorus），禁止在 Chorus 反复出现\n- ❌ **禁止领地争议表述**：如\"数字学堂\"会被教学部门认为在抢功\n- ❌ **主线不能是个人颂歌**：必须是业务成长之路或团队集体叙事\n\n### 歌词禁区\n- ❌ 不能包含有争议的领土表述\n- ❌ 不能抢其他部门功劳\n- ❌ 不能过度歌功颂德\n\n---\n\n## 音乐生成参数\n\n### 企业歌曲风格\n```bash\nmmx music generate \\\n  --prompt \"温暖积极的企业歌曲，节奏明快，充满希望和凝聚力，现代企业宣传片风格，副歌更有推动感，适合合唱\" \\\n  --lyrics \"歌词文本（纯文本，无结构标签）\" \\\n  --vocals \"choir, uplifting chorus\" \\\n  --model music-2.6 \\\n  --out song.mp3 \\\n  --async --non-interactive --quiet\n```\n\n### 景点歌曲风格\n```bash\nmmx music generate \\\n  --prompt \"古风景点歌曲，笛子为主，箫声点缀，悠扬悠远，仿佛山水画卷展开\" \\\n  --lyrics \"歌词文本（纯文本，无结构标签）\" \\\n  --vocals \"古风女声，甜美悠扬\" \\\n  --model music-2.6 \\\n  --out song.mp3 \\\n  --async --non-interactive --quiet\n```\n\n---\n\n## 文件发送\n\n生成音频后，按父级技能的文件发送规则执行：\n- **wecom 通道**：使用 `message` 工具直发本地附件\n- **飞书**：API 三步发送\n- **其他**：`MEDIA:<绝对路径>`\n\n---\n\n## 审查清单\n\n```\n□ 是否先调研了客户/景点的背景？\n□ 歌词是否包含调研提炼的素材？\n□ 每句尾字是否都是目标韵母？\n□ 名字是否只出现一次且位置不起眼？\n□ 是否避免了领地争议表述？\n□ 每段是否都是4句？\n□ 预计时长是否在3:00-5:00之间？\n□ 是否已先把歌词草案发给用户确认？\n□ 若长度不足，是否已通过重复副歌/补段扩展？\n□ 歌词是否纯文本交付（无结构标签）？\n□ 生成后是否通过正确方式发送文件给用户？\n```\n\nFile v3.0.1:_meta.json\n\n{\n  \"ownerId\": \"kn725tchg3gp72a78w22qa07p584f267\",\n  \"slug\": \"ai-songwriter-renxu\",\n  \"version\": \"3.0.1\",\n  \"publishedAt\": 1778657214754\n}\n\nArchive v3.0.0: 5 files, 14820 bytes\n\nFiles: delivery/SKILL.md (6808b), poetry/SKILL.md (5404b), SKILL.md (10466b), thematic/SKILL.md (6594b), _meta.json (138b)\n\nFile v3.0.0:delivery/SKILL.md\n\n---\nname: ai-songwriter-delivery\ndescription: AI歌曲创作文件交付子技能 — 覆盖 wecom、feishu、wechat、telegram、whatsapp、slack、discord 等主流通道的文件发送正确链路。当歌曲音频生成完成后，根据当前通道自动选择正确发送方式。\nversion: 3.0\ncategory: creative\ntags: [delivery, file-send, wecom, feishu, wechat, telegram, whatsapp, slack, discord]\nauthor: renxu\nlicense: MIT\nplatforms: [linux, macos, windows]\nparent_skills:\n  - ai-songwriter\n---\n\n# 文件交付子技能\n\n## 核心原则\n\n1. **生成完成即发送**：音频文件生成后，立即发送给用户，不等用户催\n2. **根据通道选方式**：根据当前 channel 自动选择正确的发送链路\n3. **发送前必检查**：文件存在 + 绝对路径 + 大小在限制内 + MIME 正确\n4. **不要只给路径**：不要只输出文件路径、地址、命令行，用户要的是文件本身\n\n---\n\n## 通道路由表\n\n| 当前通道 | channel 参数 | 首选发送方式 | 备选方式 |\n|---------|-------------|-------------|---------|\n| 企业微信 | `wecom` | `message` 工具直发 | `MEDIA:` |\n| 飞书 | `feishu` | `message` 工具直发 | 飞书 API 三步 |\n| 微信 | `openclaw-weixin` | `message` 工具直发 | `MEDIA:` |\n| Telegram | `telegram` | `message` 工具直发 | `MEDIA:` |\n| WhatsApp | `whatsapp` | `message` 工具直发 | `MEDIA:` |\n| Slack | `slack` | `message` 工具直发 | `MEDIA:` |\n| Discord | `discord` | `message` 工具直发 | `MEDIA:` |\n| Signal | `signal` | `message` 工具直发 | `MEDIA:` |\n| 其他 | 按实际 | `MEDIA:<绝对路径>` | — |\n\n> 所有通道统一优先走 OpenClaw 的 `message` 工具。OpenClaw Gateway 会自动处理各通道的文件上传和发送封装。\n\n---\n\n## 统一发送模板（适用所有通道）\n\n```\nmessage 工具参数：\n  action: \"send\"\n  channel: \"<当前通道>\"\n  target: \"<当前通道>:<用户ID>\"\n  media: \"<本地绝对路径>\"\n  filePath: \"<本地绝对路径>\"\n  filename: \"<文件名>\"\n  mimeType: \"<MIME类型>\"\n  forceDocument: true\n  message: \"<可选说明文字>\"\n```\n\n### 参数说明\n\n| 参数 | 说明 | 示例 |\n|------|------|------|\n| `channel` | 当前会话的通道标识 | `wecom` / `feishu` / `telegram` |\n| `target` | 通道前缀 + 用户ID | `wecom:RenXu` / `feishu:ou_xxx` / `telegram:123456` |\n| `media` | 本地文件绝对路径 | `/root/.openclaw/workspace/work/minimax/music/song.mp3` |\n| `filePath` | 与 media 相同 | 同上 |\n| `filename` | 显式文件名 | `song.mp3` |\n| `mimeType` | 文件 MIME 类型 | `audio/mpeg` |\n| `forceDocument` | 按文件附件发送 | `true` |\n\n> ⚠️ `media` 与 `filePath` **都传**，路径必须是**绝对路径**。\n\n---\n\n## 各通道详细说明\n\n### 企业微信（wecom）\n\n**已验证可用。** 这是经过实际成功发送验证的链路。\n\n```\nchannel: \"wecom\"\ntarget: \"wecom:<userid>\"\n```\n\n**文件大小限制：**\n\n| 类型 | 上限 |\n|------|------|\n| 图片 | 10 MB |\n| 视频 | 10 MB |\n| 语音 | 2 MB（仅 AMR） |\n| 文件 | 20 MB |\n\n**注意事项：**\n- 超过 20 MB 需先压缩或拆分\n- 语音只支持 AMR 格式\n- 如果 `MEDIA:` 在该会话不稳定，直接切 `message` 工具\n- 音频建议 `forceDocument: true`，避免被当成语音消息\n\n### 飞书（feishu）\n\n**首选：`message` 工具直发**\n\n```\nchannel: \"feishu\"\ntarget: \"feishu:<open_id 或 chat_id>\"\n```\n\n**备选：飞书 Open API 手动发送（三步）**\n\n仅当 `message` 工具链路不可用时使用：\n\n```bash\n# 第一步：获取 tenant_access_token\nTOKEN=$(curl -s -X POST \"https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"app_id\":\"<APP_ID>\",\"app_secret\":\"<APP_SECRET>\"}' \\\n  | python3 -c \"import sys,json; print(json.load(sys.stdin)['tenant_access_token'])\")\n\n# 第二步：上传文件\nFILE_KEY=$(curl -s -X POST \"https://open.feishu.cn/open-apis/im/v1/files\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -F \"file_name=song.mp3\" -F \"file_type=stream\" \\\n  -F \"file=@/path/to/song.mp3;type=audio/mpeg\" \\\n  | python3 -c \"import sys,json; print(json.load(sys.stdin)['data']['file_key'])\")\n\n# 第三步：发送文件消息\ncurl -s -X POST \"https://open.feishu.cn/open-apis/im/v1/messages?receive_id_type=chat_id\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"receive_id\":\"<CHAT_ID>\",\"msg_type\":\"file\",\"content\":\"{\\\"file_key\\\":\\\"'\"$FILE_KEY\"'\\\"}\"}'\n```\n\n**飞书文件上传限制：约 50MB**\n\n### 微信（wechat / openclaw-weixin）\n\n```\nchannel: \"openclaw-weixin\"\ntarget: \"openclaw-weixin:<wxid>\"\n```\n\n**注意：**\n- 微信通道通过 `@tencent-weixin/openclaw-weixin` 外部插件实现\n- 仅支持私聊\n- 文件发送走 OpenClaw Gateway 统一封装\n\n### Telegram\n\n```\nchannel: \"telegram\"\ntarget: \"telegram:<user_id>\"\n```\n\n**注意：**\n- Telegram 支持最大 50 MB 文件\n- 音频文件会被 Telegram 识别为音频消息\n- 若要按文件附件发送，使用 `forceDocument: true`\n\n### WhatsApp\n\n```\nchannel: \"whatsapp\"\ntarget: \"whatsapp:<phone_number>\"\n```\n\n**注意：**\n- WhatsApp 文件大小限制约 16 MB（音频）/ 100 MB（文档）\n- 音频格式建议 mp3 或 ogg\n\n### Slack\n\n```\nchannel: \"slack\"\ntarget: \"slack:<channel_id 或 user_id>\"\n```\n\n### Discord\n\n```\nchannel: \"discord\"\ntarget: \"discord:<channel_id>\"\n```\n\n**注意：**\n- Discord 文件上传限制：8 MB（免费）/ 50 MB（Nitro）\n- 超限时需先压缩\n\n### Signal\n\n```\nchannel: \"signal\"\ntarget: \"signal:<phone_number>\"\n```\n\n---\n\n## 常见 MIME 类型\n\n| 文件类型 | MIME |\n|---------|------|\n| MP3 音频 | `audio/mpeg` |\n| WAV 音频 | `audio/wav` |\n| OGG 音频 | `audio/ogg` |\n| AMR 语音 | `audio/amr` |\n| MP4 视频 | `video/mp4` |\n| ZIP 压缩包 | `application/zip` |\n| PDF 文档 | `application/pdf` |\n| Word 文档 | `application/vnd.openxmlformats-officedocument.wordprocessingml.document` |\n| Excel 表格 | `application/vnd.openxmlformats-officedocument.spreadsheetml.sheet` |\n| PPT 幻灯片 | `application/vnd.openxmlformats-officedocument.presentationml.presentation` |\n| PNG 图片 | `image/png` |\n| JPEG 图片 | `image/jpeg` |\n\n---\n\n## 发送前检查清单\n\n```\n□ 文件是否存在？\n□ 是否使用绝对路径？\n□ 文件大小是否在当前通道限制内？\n□ filename 是否显式传入？\n□ mimeType 是否正确？\n□ forceDocument 是否为 true（音频文件）？\n□ 发送后是否确认用户已收到？\n```\n\n---\n\n## 发送失败排查\n\n1. **MEDIA: 不稳定** → 切换到 `message` 工具直发\n2. **文件超限** → 先压缩再发\n3. **通道未连接** → 检查 `openclaw channels status --probe`\n4. **权限不足** → 检查 `openclaw pairing list <channel>`\n5. **文件不存在** → 确认路径正确，文件已生成完成\n\nFile v3.0.0:poetry/SKILL.md\n\n---\nname: ai-songwriter-poetry\ndescription: AI古诗词谱曲子技能 — 保留原文诗词，按递进结构补充自创歌词，全程押韵。激活条件：用户要求古诗词/绝句/律诗/诗词改编/唐诗宋词谱曲。\nversion: 3.0\ncategory: creative\ntags: [songwriting, chinese-poetry, rhyming, poetry-song, music-generation]\nauthor: renxu\nlicense: MIT\nplatforms: [linux, macos, windows]\nparent_skills:\n  - ai-songwriter\ntriggers:\n  - 古诗词谱曲\n  - 诗词改编\n  - 唐诗谱曲\n  - 绝句谱曲\n  - 律诗谱曲\n  - 宋词谱曲\n  - 把诗谱成歌\n---\n\n# 古诗词谱曲子技能\n\n## 全流程标准链路\n\n1. **确认诗词**：确认用户指定的诗词原文\n2. **选定韵母**：根据诗词韵脚选定统一韵母\n3. **创作歌词**：保留原文 + 自创前后段\n4. **押韵验证**：逐句检查\n5. **时长计算**：不足 3 分钟则补足\n6. **歌词确认**：发给用户确认\n7. **音频生成**：用户确认后执行\n8. **文件发送**：通过正确方式发送\n\n> ⚠️ **未经用户确认歌词，不得直接生成音频。**\n\n---\n\n## 核心原则\n\n1. **保留诗词原文**：诗词原文必须原封不动地保留在 Verse 中，作为歌曲的固定锚点\n2. **自创开头结尾**：在诗词前后各增加自创歌词（Intro 引导意境，Outro 升华情感）\n3. **自创段落递进**：自创歌词按递进结构展开，避免同词异句简单重复\n\n---\n\n## 推荐歌词结构\n\n```\n[Intro]     自创开场（4句，引导意境，为诗词铺垫）\n[Verse 1]   诗词原文（作为锚点，原封不动）\n[Chorus 1]  自创第一段（4句，承接诗词，情感展开）\n[Verse 2]   诗词原文（可省略或与Verse1相同）\n[Chorus 2]  自创第二段（4句，情感递进）\n[Chorus 3]  高潮/变奏（4句，可复用Chorus2微调）\n[Outro]     自创结尾（4句，升华情感）\n```\n\n> 基础结构 24 句 ≈ 77 秒，**必须至少完整两遍 + 额外段落**才能达到 3 分钟。\n> 推荐：基础结构 × 2 + Bridge = 约 56–60 句 ≈ 3 分钟+。\n\n---\n\n## 诗词原文处理\n\n| 诗词类型 | 句数 | 建议处理 |\n|---------|------|---------|\n| 五言绝句 | 4句 | 唱两遍（Verse 1 + Verse 2 相同） |\n| 七言绝句 | 4句 | 唱两遍，字数更多时值略长 |\n| 律诗 | 8句 | 可只取前四句或按音乐结构调整 |\n| 古体诗 | 不限 | 精选核心段落，避免过长 |\n\n> ⚠️ **诗词原文必须原封不动**：不得更改任何一字，只能在其前后添加自创段落。\n\n---\n\n## 押韵规范\n\n### 押韵模式 B（诗词格律）⭐\n**第三句不押韵（白脚）**，一、二、四句押韵。\n\n```\n白日依山尽（尽 -in）\n黄河入海流（流 -ou）\n欲穷千里目（目 -u，白脚）\n更上一层楼（楼 -ou）\n```\n\n> ⚠️ **每4句一段，段内第3句是白脚**，不是全局第3、7、11句。\n\n### 常见安全韵\n\n| 韵母 | 安全字 |\n|------|--------|\n| -ang | 光/望/扬/荡/长/忙/香/霜/央/黄/苍/场/昌 |\n| -in | 心/亲/情/金/新/林/琴/音 |\n| -ai | 爱/来/白/海/开/才 |\n| -ou | 楼/舟/流/秋/游/留/悠/收/投/酬 |\n| -an | 山/寒/难/残/叹/关/湾/前 |\n\n---\n\n## 押韵验证\n\n```python\ndef validate_poetry_rhyme(lyrics_text, rhyme_set, poem_lines):\n    \"\"\"验证诗词格律\n    Args:\n        lyrics_text: 歌词字符串\n        rhyme_set: 押韵字集合\n        poem_lines: 原诗锚点集合\n    \"\"\"\n    lines = [l.strip() for l in lyrics_text.strip().split('\\n') if l.strip()]\n    errors = []\n    poem_lines = set(poem_lines)\n\n    for i, line in enumerate(lines):\n        pos_in_stanza = (i % 4) + 1\n        is_white = (pos_in_stanza == 3)\n        last_char = line[-1]\n\n        if line in poem_lines:\n            continue\n\n        if is_white:\n            ok = last_char not in rhyme_set\n            note = f\"✓ 白脚\" if ok else f\"✗ '{last_char}'押韵了\"\n        else:\n            ok = last_char in rhyme_set\n            note = f\"✓\" if ok else f\"✗ '{last_char}'不押韵\"\n\n        if not ok:\n            errors.append((i+1, line, last_char, note))\n        print(f\"{'✓' if ok else '✗'} 第{i+1:2d}句 {line} → {last_char} {note}\")\n\n    return errors\n```\n\n---\n\n## 音乐生成参数\n\n```bash\nmmx music generate \\\n  --prompt \"古诗词风格，慢板，悠扬沉郁，古琴独奏为主，箫声点缀，节奏舒缓如行云流水，歌声要有气势有情感，字正腔圆，中速偏慢\" \\\n  --lyrics \"歌词文本（纯文本，无结构标签）\" \\\n  --vocals \"温暖童声，古诗词风格，甜美纯真\" \\\n  --model music-2.6 \\\n  --out song.mp3 \\\n  --async --non-interactive --quiet\n```\n\n---\n\n## 文件发送\n\n生成音频后，按父级技能的文件发送规则执行：\n- **wecom 通道**：使用 `message` 工具直发本地附件\n- **飞书**：API 三步发送\n- **其他**：`MEDIA:<绝对路径>`\n\n---\n\n## 审查清单\n\n```\n□ 诗词原文是否原封不动保留在Verse中？\n□ 自创段落之间是否有内容递进而非简单重复？\n□ 每句尾字是否都是目标韵母？\n□ 是否有字重复出现？（特别是句尾）\n□ 每段是否都是4句？\n□ 预计时长是否在3:00-5:00之间？\n□ 是否已先把歌词草案发给用户确认？\n□ 若长度不足，是否已通过重复主结构或补段扩展？\n□ 歌词是否纯文本交付（无结构标签）？\n□ 生成后是否通过正确方式发送文件给用户？\n```\n\nFile v3.0.0:SKILL.md\n\n---\nname: ai-songwriter\ndescription: AI歌曲创作核心技能 — 合辙押韵歌词创作 + MiniMax mmx-cli 正确调用 + 歌词验证 + 歌曲生成全流程。包含押韵规范、mmx模型路由、音乐生成参数、文件发送。当用户要求写歌/创作歌曲/生成音乐时激活。\nversion: 3.0\ncategory: creative\ntags: [songwriting, rhyming, music-generation, minimax, mmx, lyrics]\nauthor: renxu\nlicense: MIT\nplatforms: [linux, macos, windows]\nrequired_environment_variables:\n  - MINIMAX_CN_API_KEY\nrequired_commands:\n  - mmx\ntriggers:\n  - 写歌\n  - 创作歌曲\n  - 生成音乐\n  - 帮我写首歌\n  - AI songwriter\n  - 作曲\n  - 谱曲\n---\n\n# AI歌曲创作核心技能\n\n## 技能分支\n\n```\nai-songwriter（核心）\n├── poetry/        古诗词谱曲子技能（保留原文 + 递进押韵）\n└── thematic/      主题歌曲子技能（客户/景点调研 → 写入歌词）\n```\n\n---\n\n## 全流程标准链路\n\n**所有写歌请求必须严格按以下顺序执行：**\n\n1. **需求整理**：确认主题、风格、情绪、受众、语言\n2. **路由子技能**：\n   - 古诗词相关 → `poetry/`\n   - 企业/客户/景点/品牌相关 → `thematic/`\n   - 其他 → 本核心技能直接处理\n3. **歌词创作**：按押韵规范创作歌词\n4. **押韵验证**：用 Python 脚本逐句检查\n5. **时长计算**：预估时长，不足 3 分钟则补足\n6. **歌词确认**：输出歌词草案 + 预计时长 + 是否 repeat → 等用户确认\n7. **音频生成**：用户确认后执行 `mmx music generate`\n8. **文件发送**：生成后通过正确方式发送给用户\n\n> ⚠️ **未经用户确认歌词，不得直接生成音频。这是硬规则。**\n\n---\n\n## 核心原则：合辙押韵\n\n### 押韵模式 A（全韵统一）⭐\n选定一个韵母后，**每一句最后一个字**都必须发该韵。\n\n| 韵母 | 常见安全字 |\n|------|-----------|\n| -ang | 光/望/扬/荡/长/忙/香/霜/央/黄/苍/场/昌 |\n| -in | 心/亲/情/金/新/林/琴/音 |\n| -ai | 爱/来/白/海/开/才 |\n| -ou | 楼/舟/流/秋/游/留/悠/收/投/酬 |\n| -an | 山/寒/难/残/叹/关/湾/前 |\n\n### 押韵模式 B（诗词格律）\n**第三句不押韵（白脚）**，一、二、四句押韵。适用于古诗词改编。\n\n### 押韵验证脚本\n\n```python\ndef validate_rhyme(lyrics_text, rhyme_set, poem_lines=None):\n    \"\"\"验证押韵\n    Args:\n        lyrics_text: 歌词字符串（多行）\n        rhyme_set: 押韵字集合\n        poem_lines: 原诗锚点集合，默认None表示无锚点\n    \"\"\"\n    if poem_lines is None:\n        poem_lines = set()\n    lines = [l.strip() for l in lyrics_text.strip().split('\\n') if l.strip()]\n    errors = []\n\n    for i, line in enumerate(lines):\n        pos_in_stanza = (i % 4) + 1\n        is_white = (pos_in_stanza == 3)\n        last_char = line[-1]\n\n        if line in poem_lines:\n            continue\n\n        if is_white:\n            ok = last_char not in rhyme_set\n            note = f\"✓ 白脚\" if ok else f\"✗ 白脚'{last_char}'押韵了\"\n        else:\n            ok = last_char in rhyme_set\n            note = f\"✓\" if ok else f\"✗ '{last_char}'不押韵\"\n\n        if not ok:\n            errors.append((i+1, line, last_char, note))\n        print(f\"{'✓' if ok else '✗'} 第{i+1:2d}句 {line} → {last_char} {note}\")\n\n    return errors\n```\n\n### 常见错误字\n\n| 目标韵 | 容易混入的错误字 |\n|--------|-----------------|\n| -ang | 月/前/向/响/唱/星/心/梦/声/里/思 |\n| -ou | 心/情/声/美/歌/路 |\n\n---\n\n## mmx-cli 正确调用\n\n### 模型路由\n\n| 任务 | 模型 | 命令 |\n|------|------|------|\n| 歌词生成 | `lyrics_generation` | `mmx text chat --model lyrics_generation` |\n| 歌曲生成 | `music-2.6` | `mmx music generate --model music-2.6` |\n| 语音合成 | `speech-2.8-hd` | `mmx speech synthesize --model speech-2.8-hd` |\n| 图片生成 | `image-01` | `mmx image generate --model image-01` |\n| 视频生成 | `hailuo-2.3` | `mmx video generate --model hailuo-2.3` |\n\n> ⚠️ **必须指定 `--model`**：music-2.6 而非 music-2.5。\n\n### 歌词生成（第一阶段）\n\n```bash\nmmx text chat \\\n  --message \"为主题'xxx'创作歌曲歌词。全程押韵（韵脚：-ang），每段4句。\" \\\n  --model lyrics_generation \\\n  --non-interactive \\\n  --quiet\n```\n\n> ⚠️ `lyrics_generation` 是独立文本模型，**不是** `mmx music` 子命令！\n> ⚠️ 如果 `lyrics_generation` 返回空内容，换用 `mmx text chat --model MiniMax-M2.7` 作为备用。\n\n### 歌曲生成（第二阶段）\n\n```bash\nmmx music generate \\\n  --prompt \"音乐风格描述\" \\\n  --lyrics \"歌词文本\" \\\n  --vocals \"人声描述\" \\\n  --model music-2.6 \\\n  --out song.mp3 \\\n  --non-interactive \\\n  --quiet\n```\n\n**歌词结构标签（可选）：**\n`mmx music generate` 支持以下结构标签：`[Intro]` `[Verse]` `[Pre Chorus]` `[Chorus]` `[Interlude]` `[Bridge]` `[Outro]` `[Post Chorus]` `[Transition]` `[Break]` `[Hook]` `[Build Up]` `[Inst]` `[Solo]`。标签必须干净（括号内不要加描述），标签会被演唱出来。\n\n**长歌词（48句+）用异步模式：**\n```bash\nmmx music generate \\\n  --prompt \"...\" --lyrics \"...\" --vocals \"...\" \\\n  --model music-2.6 \\\n  --out song.mp3 \\\n  --async --non-interactive --quiet\n```\n> ⚠️ `--async` 不带 `--output json`，否则报错。\n\n也可以用 `--lyrics-file` 代替 `--lyrics`，读取本地歌词文件：\n```bash\nmmx music generate \\\n  --prompt \"...\" --lyrics-file /path/to/lyrics.txt --vocals \"...\" \\\n  --model music-2.6 \\\n  --out song.mp3 \\\n  --async --non-interactive --quiet\n```\n\n### 风格 Prompt 示例\n\n**古诗词风格（慢板悠扬）：**\n```\n古诗词风格，慢板，悠扬沉郁，古琴独奏为主，箫声点缀，\n节奏舒缓如行云流水，歌声要有气势有情感，字正腔圆，中速偏慢\n```\n\n**温暖企业歌曲风格：**\n```\n温暖积极的企业歌曲，节奏明快，充满希望和凝聚力，\n现代企业宣传片风格，副歌更有推动感，适合合唱\n```\n\n**景点歌曲风格：**\n```\n古风景点歌曲，笛子为主，箫声点缀，\n悠扬悠远，仿佛山水画卷展开\n```\n\n### 声线参数\n\n| 期望声线 | --vocals 示例 |\n|---------|--------------|\n| 童声 | `\"sweet innocent child vocal\"` |\n| 女声 | `\"bright female soprano\"` |\n| 男声 | `\"warm male baritone, father singing\"` |\n| 合唱 | `\"choir, uplifting chorus\"` |\n\n---\n\n## 时长控制\n\n| 最短 | 最长 | 目标 |\n|------|------|------|\n| 3分钟 | 5分钟 | 3:00 ~ 5:00 |\n\n```\n预估时长 ≈ 歌词总句数 × 3.2秒/句\n24句 → 约77秒（明显不够）\n48句 → 约2分34秒（仍偏短）\n56句 → 约2分59秒（下限边缘）\n60~92句 → 推荐交付区间\n```\n\n> **硬规则：** 如果首版歌词不足 3 分钟，必须扩写或重复主结构后再交付确认稿。\n> **补足优先级：** 重复副歌 → 增加主歌 → 增加 Bridge → 整首 repeat。\n\n---\n\n## 歌词确认机制\n\n在执行 `mmx music generate` 前，**必须**先把歌词文本发给用户确认。\n\n流程固定为：\n1. 输出歌词草案\n2. 标注预计时长\n3. 明确说明是否采用 repeat 扩时\n4. 等用户确认后，再生成音频\n\n**未确认歌词前，不得直接生成歌曲。**\n\n---\n\n## 歌词交付格式\n\n**必须**：纯文本歌词，一行一句，**禁止**包含结构标签（如`[Verse]`、`[Chorus]`）和说明文字。\n\n> ⚠️ 以上是**用户确认稿**格式。确认后传给 `mmx music generate` 时，歌词仍然保持纯文本（无结构标签），`--prompt` 中已包含风格描述，模型会根据上下文自行安排结构。\n\n---\n\n## 文件发送\n\n### 企业微信（wecom）\n\n当通道为 wecom 时，使用 `message` 工具直发本地附件：\n\n**推荐参数：**\n- `action: \"send\"`\n- `channel: \"wecom\"`\n- `target: \"wecom:<userid>\"`\n- `media` + `filePath`: 本地绝对路径\n- `filename`: 显式文件名（如 `song.mp3`）\n- `mimeType`: 如 `audio/mpeg`\n- `forceDocument: true`\n\n**发送前检查：**\n- 文件存在\n- 使用绝对路径\n- 文件大小 ≤ 20MB\n- MIME 正确\n\n> ⚠️ **不要只输出 `MEDIA:` 路径。** 如果 `MEDIA:` 在该会话不稳定，直接用 `message` 工具。\n\n### 飞书\n\n```bash\n# 第一步：获取 token\nTOKEN=$(curl -s -X POST \"https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal\" \\\n  -H \"Content-Type: application/json\" \\\n  -d \"{\\\"app_id\\\":\\\"$FEISHU_APP_ID\\\",\\\"app_secret\\\":\\\"$FEISHU_APP_SECRET\\\"}\" \\\n  | python3 -c \"import sys,json; print(json.load(sys.stdin)['tenant_access_token'])\")\n\n# 第二步：上传文件\nUPLOAD_RESP=$(curl -s -X POST \"https://open.feishu.cn/open-apis/im/v1/files\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -F \"file_name=song.mp3\" -F \"file_type=stream\" \\\n  -F \"file=@/path/to/song.mp3;type=audio/mpeg\")\nFILE_KEY=$(echo $UPLOAD_RESP | python3 -c \"import sys,json; print(json.load(sys.stdin)['data']['file_key'])\")\n\n# 第三步：发送\ncurl -s -X POST \"https://open.feishu.cn/open-apis/im/v1/messages?receive_id_type=chat_id\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d \"{\\\"receive_id\\\":\\\"$CHAT_ID\\\",\\\"msg_type\\\":\\\"file\\\",\\\"content\\\":\\\"{\\\\\\\"file_key\\\\\\\":\\\\\\\"$FILE_KEY\\\\\\\"}\\\"}\"\n```\n\n### 其他通道\n\n默认使用 `MEDIA:<绝对路径>` 在回复中交付。\n\n---\n\n## 已知问题与解法\n\n### 押韵合规率低\n- AI 生成的歌词押韵合规率约 75%\n- **必须用 Python 脚本逐行验证尾字**\n- 合规率低于 30% 时，直接手工创作\n\n### 歌词生成模型不稳定\n- `lyrics_generation` 可能返回空内容（exit 0 但 content 为空）\n- 遇到此情况，换用 `MiniMax-M2.7` 作为备用\n\n### 音乐生成超时\n- 48句+ 长歌词容易超时\n- 解法：`--async` 模式 + 轮询检查文件是否生成\n\n### 粤语问题\n- MiniMax music-2.6 **不支持真正的粤语演唱**\n- 即使 prompt 写\"粤语\"，实际输出仍是普通话\n\n---\n\n## 审查清单\n\n```\n□ 每句尾字是否都是目标韵母？\n□ 是否有字重复出现？（特别是句尾）\n□ 每段是否都是4句？\n□ 预计时长是否在3:00-5:00之间？\n□ 是否已先把歌词草案发给用户确认？\n□ 若长度不足，是否已通过扩写/重复主结构补足？\n□ 是否指定了 --model music-2.6？\n□ --vocals 是否描述了期望的声线？\n□ 生成后是否验证了押韵？\n□ 歌词是否纯文本交付（无结构标签）？\n□ 生成后是否通过正确方式发送文件给用户？\n```\n\nFile v3.0.0:thematic/SKILL.md\n\n---\nname: ai-songwriter-thematic\ndescription: AI主题歌曲创作子技能 — 调研客户历史/景点典故，将调研内容转化为歌词，全程押韵。激活条件：用户要求为企业/单位/客户/景点/品牌创作歌曲。支持客户全称或简称自动调研。\nversion: 3.0\ncategory: creative\ntags: [songwriting, thematic-song, company-song, scenic-song, rhyming, research]\nauthor: renxu\nlicense: MIT\nplatforms: [linux, macos, windows]\nparent_skills:\n  - ai-songwriter\ntriggers:\n  - 企业歌曲\n  - 客户歌曲\n  - 景点歌曲\n  - 品牌歌曲\n  - 创作歌曲\n  - 给某某写歌\n  - 单位歌曲\n  - 主题歌\n---\n\n# 主题歌曲创作子技能\n\n## 全流程标准链路\n\n1. **识别主题**：确认客户名称（全称或简称）/ 景点 / 品牌\n2. **联网调研**：通过 `mmx search` 获取背景资料\n3. **素材提炼**：将调研内容转化为歌词意象\n4. **歌词创作**：按押韵规范创作歌词\n5. **押韵验证**：逐句检查\n6. **时长计算**：不足 3 分钟则补足\n7. **歌词确认**：发给用户确认\n8. **音频生成**：用户确认后执行\n9. **文件发送**：通过正确方式发送\n\n> ⚠️ **未经用户确认歌词，不得直接生成音频。**\n\n---\n\n## 核心原则\n\n1. **调研先行**：先调研客户/景点的历史、事件、特点、典故\n2. **素材转化**：将调研内容提炼为歌词意象\n3. **押韵创作**：全程押韵，每句尾字必须是目标韵母\n4. **主线叙事**：以时间轴或里程碑为主线，不是个人颂歌\n\n---\n\n## 调研方法\n\n### 客户/企业调研\n\n**客户名称识别：**\n- 用户可能给全称，也可能给简称\n- 先用简称搜索，如果结果不够，再用全称搜索\n- 如果两者都不确定，问用户确认\n\n**必调研内容：**\n- 成立时间、重大里程碑\n- 核心业务、产品、技术\n- 团队文化、价值观\n- 近期动态、荣誉\n- 领导人名字（只能出现一次，放在不起眼位置）\n\n**调研命令：**\n```bash\n# 搜索公司背景\nmmx search query --q \"公司名称 成立 历史 里程碑\" --limit 10 --non-interactive --quiet --output json\n\n# 搜索近期新闻\nmmx search query --q \"公司名称 最新动态 2024 2025\" --limit 10 --non-interactive --quiet --output json\n\n# 搜索核心业务\nmmx search query --q \"公司名称 核心业务 产品 技术\" --limit 10 --non-interactive --quiet --output json\n```\n\n### 景点调研\n\n**必调研内容：**\n- 景点名称、来历\n- 历史典故、传说\n- 著名诗句、名人足迹\n- 特色景观、季节特点\n- 文化内涵、象征意义\n\n**调研命令：**\n```bash\n# 搜索景点背景\nmmx search query --q \"景点名称 历史 典故 传说\" --limit 10 --non-interactive --quiet --output json\n\n# 搜索景点特色\nmmx search query --q \"景点名称 特色景观 名人足迹 著名诗句\" --limit 10 --non-interactive --quiet --output json\n```\n\n---\n\n## 歌词结构\n\n```\n[Intro]     自创开场（4句，引入主题）\n[Verse 1]   调研提炼的场景/事件描述（4句）\n[Pre-Chorus] 承上启下（4句）\n[Chorus]    核心主题升华（4句，主线叙事）\n[Verse 2]   调研提炼的素材（4句，递进）\n[Pre-Chorus] 承上启下（4句）\n[Chorus]    核心主题升华（4句，与第一遍相同）\n[Bridge]    转折/反思（4句）\n[Chorus]    核心主题升华（4句，与第一遍相同）\n[Outro]     升华收尾（4句）\n```\n\n> 基础结构 40 句 ≈ 128 秒 ≈ 2.1 分钟。\n> **必须补足到 60+ 句（约 3 分钟+）**，默认整首 repeat 或增加段落。\n> 推荐目标：80 句 ≈ 4.3 分钟。\n\n> 企业歌曲：主线是**业务成长之路**，不是个人颂歌\n> 景点歌曲：主线是**典故+景观+情感**\n\n---\n\n## 押韵规范\n\n### 押韵模式 A（全韵统一）⭐\n选定一个韵母后，**每一句最后一个字**都必须发该韵。\n\n| 韵母 | 常见安全字 |\n|------|-----------|\n| -ang | 光/望/扬/荡/长/忙/香/霜/央/黄/苍/场/昌 |\n| -in | 心/亲/情/金/新/林/琴/音 |\n| -ai | 爱/来/白/海/开/才 |\n| -ou | 楼/舟/流/秋/游/留/悠/收/投/酬 |\n\n### 押韵验证\n\n```python\ndef validate_rhyme(lyrics_text, rhyme_set):\n    \"\"\"验证全韵统一押韵\"\"\"\n    lines = [l.strip() for l in lyrics_text.strip().split('\\n') if l.strip()]\n    errors = []\n\n    for i, line in enumerate(lines):\n        last_char = line[-1]\n        ok = last_char in rhyme_set\n        if not ok:\n            errors.append((i+1, line, last_char))\n        print(f\"{'✓' if ok else '✗'} 第{i+1:2d}句 {line} → {last_char}\")\n\n    return errors\n```\n\n---\n\n## 禁区与红线\n\n### 企业歌曲禁区\n- ❌ **名字只能出现一次**：放在不起眼位置（如 Pre-Chorus），禁止在 Chorus 反复出现\n- ❌ **禁止领地争议表述**：如\"数字学堂\"会被教学部门认为在抢功\n- ❌ **主线不能是个人颂歌**：必须是业务成长之路或团队集体叙事\n\n### 歌词禁区\n- ❌ 不能包含有争议的领土表述\n- ❌ 不能抢其他部门功劳\n- ❌ 不能过度歌功颂德\n\n---\n\n## 音乐生成参数\n\n### 企业歌曲风格\n```bash\nmmx music generate \\\n  --prompt \"温暖积极的企业歌曲，节奏明快，充满希望和凝聚力，现代企业宣传片风格，副歌更有推动感，适合合唱\" \\\n  --lyrics \"歌词文本（纯文本，无结构标签）\" \\\n  --vocals \"choir, uplifting chorus\" \\\n  --model music-2.6 \\\n  --out song.mp3 \\\n  --async --non-interactive --quiet\n```\n\n### 景点歌曲风格\n```bash\nmmx music generate \\\n  --prompt \"古风景点歌曲，笛子为主，箫声点缀，悠扬悠远，仿佛山水画卷展开\" \\\n  --lyrics \"歌词文本（纯文本，无结构标签）\" \\\n  --vocals \"古风女声，甜美悠扬\" \\\n  --model music-2.6 \\\n  --out song.mp3 \\\n  --async --non-interactive --quiet\n```\n\n---\n\n## 文件发送\n\n生成音频后，按父级技能的文件发送规则执行：\n- **wecom 通道**：使用 `message` 工具直发本地附件\n- **飞书**：API 三步发送\n- **其他**：`MEDIA:<绝对路径>`\n\n---\n\n## 审查清单\n\n```\n□ 是否先调研了客户/景点的背景？\n□ 歌词是否包含调研提炼的素材？\n□ 每句尾字是否都是目标韵母？\n□ 名字是否只出现一次且位置不起眼？\n□ 是否避免了领地争议表述？\n□ 每段是否都是4句？\n□ 预计时长是否在3:00-5:00之间？\n□ 是否已先把歌词草案发给用户确认？\n□ 若长度不足，是否已通过重复副歌/补段扩展？\n□ 歌词是否纯文本交付（无结构标签）？\n□ 生成后是否通过正确方式发送文件给用户？\n```\n\nFile v3.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn725tchg3gp72a78w22qa07p584f267\",\n  \"slug\": \"ai-songwriter-renxu\",\n  \"version\": \"3.0.0\",\n  \"publishedAt\": 1778655856677\n}","readmeExcerpt":"Skill: Ai Songwriter Owner: andyrenxu7255 Summary: AI歌曲创作核心技能 — 合辙押韵歌词创作 + MiniMax mmx-cli 正确调用 + 歌词验证 + 歌曲生成全流程。支持古诗词谱曲、主题歌曲创作、多渠道文件投递。 Tags: latest:3.3.0, stable:3.3.0 Version history: v3.3.0 | 2026-05-22T07:30:41.483Z | user 八层门禁链路重构：GATE 0调研→1大纲→2韵脚库→3造句→4验证→5发音质控→6确认→7生成→8听审。新增：中东辙合韵模式、发音质量控制三层防线、航空军工史诗音乐参数、结构标签双轨制、成飞案例完整复盘。修复 BOM，移除硬编码路径。 v3.1.1 | 2026-05-22T02:42:15.575Z | user 3.1.1 — 押韵错误字修正 - 从 -ang 错误字中移除「","codeSnippets":[],"executableExamples":[{"language":"text","snippet":"GATE 0: RESEARCH     → 调研背景信息\nGATE 1: OUTLINE      → 分段主题大纲 + 韵脚预分配\nGATE 2: RHYME_BANK  → 逐段韵脚字库 + 词语释义\nGATE 3: WRITE       → 反推造句（受预分配尾字约束）\nGATE 4: VERIFY      → pypinyin 全量验证 + 修复\nGATE 5: PRONUNCIATION → 生僻字扫描 + 替换 + --extra 拼音\nGATE 6: CONFIRM     → 用户确认歌词\nGATE 7: GENERATE    → mmx music generate + 发送\nGATE 8: QA          → 听审 + 迭代修复"},{"language":"bash","snippet":"# 企业/公司\nmmx search query --q \"公司名称 成立 历史 里程碑 产品\" --limit 10 --non-interactive --quiet --output json\n\n# 景点/地点\nmmx search query --q \"景点名称 历史 典故 特色 名人\" --limit 10 --non-interactive --quiet --output json\n\n# 特定领域（如六代机）\nmmx search query --q \"关键词 最新进展 2024 2025\" --limit 10 --non-interactive --quiet --output json"},{"language":"text","snippet":"段韵分配（不可变）：4ang + 5eng + 2ong = 11段\nL3白脚分配（不可变）：全部 en 组 = 11个白脚字\n尾字总量（不可变）：12ang + 15eng + 6ong + 11en = 44字全局唯一"},{"language":"text","snippet":"### 段1【主题】韵母 ang — 航/光/翔/间(白脚)\n\n| 韵脚字 | 常用词语（供造句参考） | 释义 |\n|--------|---------------------|------|\n| 航 | 启航、远航、领航、航空 | 出发；引领方向 |\n| 光 | 荣光、曙光、光芒、追光 | 光辉；荣耀 |\n| 翔 | 翱翔、飞翔 | 展翅高飞 |\n| 间 | 瞬间、天地间、弹指间 | (白脚) 时段、空间 |"},{"language":"python","snippet":"import re\nfrom pypinyin import pinyin\nfrom collections import Counter\n\ndef get_rhyme_group(ch):\n    \"\"\"返回 'ang'|'eng'|'ong'|'en' 韵母组\"\"\"\n    py = pinyin(ch, style=0)[0][0].lower()\n    m = re.findall(r'[bpmfdtnlgkhjqxzcsryw]+', py)\n    initial = m[0] if m else ''\n    final = py[len(initial):]\n    if final in ['ang','iang','uang']: return 'ang'\n    if final in ['eng','ing','ueng','iong']: return 'eng'\n    if final in ['ong']: return 'ong'\n    if final in ['en','in','un','ün','uen','ian','an','uan']: return 'en'\n    return f'other({final})'\n\n# AABA 验证\ndef validate_aaba(lines, seg_rhymes):\n    \"\"\"lines: 44个字符串, seg_rhymes: 11个段韵列表\"\"\"\n    errors = []\n    tails = []\n    for si in range(11):\n        s = si * 4\n        g1,g2,g3,g4 = [get_rhyme_group(lines[s+j][-1]) for j in range(4)]\n        sr = seg_rhymes[si]\n        tails.extend([lines[s+j][-1] for j in range(4)])\n        if not (g1==g2==g4==sr and g3=='en'):\n            errors.append(f\"S{si+1}: {g1}/{g2}/{g3}/{g4} (期望 {sr}/{sr}/en/{sr})\")\n    dups = {k:v for k,v in Counter(tails).items() if v>1}\n    return errors, dups"},{"language":"bash","snippet":"# 确保 mmx 在 PATH 中（根据实际安装位置调整）\nexport PATH=\"<mmx安装目录>:$PATH\"\n\nmmx music generate \\\n  --prompt \"风格描述\" \\\n  --lyrics-file <歌词文件路径> \\\n  --vocals \"人声描述\" \\\n  --genre \"流派\" \\\n  --mood \"情绪\" \\\n  --instruments \"乐器\" \\\n  --tempo \"速度\" \\\n  --bpm 110 \\\n  --key \"D major\" \\\n  --use-case \"使用场景\" \\\n  --extra \"Pronunciation: 生僻字=拼音, ...\" \\\n  --model music-2.6 \\\n  --out <输出路径>.mp3 \\\n  --non-interactive --quiet"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: ai-songwriter-renxu\ndescription: AI歌曲创作核心技能 — 合辙押韵歌词创作 + MiniMax mmx-cli 正确调用 + 歌词验证 + 歌曲生成全流程。支持古诗词谱曲、主题歌曲创作、多渠道文件投递。\nversion: 3.3.0\ncategory: utility\ntags: [songwriting, rhyming, music-generation, minimax, mmx, lyrics, poetry, thematic, delivery, pronunciation-qa, epic-corporate]\nauthor: renxu\nlicense: MIT\nplatforms: [linux, macos, windows]\nrequired_environment_variables:\n  - MINIMAX_CN_API_KEY\nrequired_commands:\n  - mmx\ntriggers:\n  - 写歌\n  - 创作歌曲\n  - 生成音乐\n  - 帮我写首歌\n  - AI songwriter\n  - 作曲\n  - 谱曲\n  - 古诗词谱曲\n  - 诗词改编\n  - 企业歌曲\n  - 客户歌曲\n  - 景点歌曲\n  - 品牌歌曲\n  - 主题歌\n---\n\n# AI歌曲创作核心技能\n\n## 八层门禁链路（GATED WORKFLOW）\n\n所有歌曲创作必须严格按 8 层顺序执行。每层是一个**硬门禁（HARD GATE）**——失败/不通过不得进入下一层。\n\n```\nGATE 0: RESEARCH     → 调研背景信息\nGATE 1: OUTLINE      → 分段主题大纲 + 韵脚预分配\nGATE 2: RHYME_BANK  → 逐段韵脚字库 + 词语释义\nGATE 3: WRITE       → 反推造句（受预分配尾字约束）\nGATE 4: VERIFY      → pypinyin 全量验证 + 修复\nGATE 5: PRONUNCIATION → 生僻字扫描 + 替换 + --extra 拼音\nGATE 6: CONFIRM     → 用户确认歌词\nGATE 7: GENERATE    → mmx music generate + 发送\nGATE 8: QA          → 听审 + 迭代修复\n```\n\n> ⚠️ **核心原则：每层产出必须验证通过后才能进入下一层。在 GATE 3 写词前，GATE 2 的韵脚字库必须已经 100% 确定（44字全局唯一）。不能边写边改韵脚。**\n\n---\n\n## GATE 0：调研背景\n\n**目标**：收集主题相关的历史、事件、特点、典故，输出调研笔记。\n\n```bash\n# 企业/公司\nmmx search query --q \"公司名称 成立 历史 里程碑 产品\" --limit 10 --non-interactive --quiet --output json\n\n# 景点/地点\nmmx search query --q \"景点名称 历史 典故 特色 名人\" --limit 10 --non-interactive --quiet --output json\n\n# 特定领域（如六代机）\nmmx search query --q \"关键词 最新进展 2024 2025\" --limit 10 --non-interactive --quiet --output json\n```\n\n**产出**：调研笔记（关键时间节点、人物、事件、数据）\n\n**门禁检查**：时间线是否完整？核心技术/事件是否覆盖？ □\n\n---\n\n## GATE 1：分段主题大纲 + 韵脚预分配\n\n**目标**：将叙事线拆为 11 段，预分配每段的韵脚组和 44 个全局唯一定位字。\n\n### 韵脚模式选择\n\n| 模式 | 规则 | 适用 |\n|------|------|------|\n| **中东辙合韵（默认）** | ing/eng/ong/iong 通押为 'eng' 组 | 用户偏好，中文歌曲习惯 |\n| 严格分韵 | ing/eng/ong 各自独立 | 学术验证 |\n| AABA | L1=L2=L4 同韵，L3 白脚异韵 | 主题/企业歌曲 |\n| 全韵统一 | 所有句同韵 | 短歌/儿歌 |\n\n### AABA + 中东辙标准分配（11段 × 4句 = 44句）\n\n```\n段韵分配（不可变）：4ang + 5eng + 2ong = 11段\nL3白脚分配（不可变）：全部 en 组 = 11个白脚字\n尾字总量（不可变）：12ang + 15eng + 6ong + 11en = 44字全局唯一\n```\n\n**产出格式**：\n\n| 段 | 标签 | 主题 | 段韵 | L1 | L2 | L4 | L3(en) | 核心内容 |\n|----|------|------|------|----|----|----|--------|----------|\n| 1 | Intro | xxx | ang | 航 | 光 | 翔 | 间 | xxx |\n| ... | ... | ... | ... | ... | ... | ... | ... | ... |\n\n**门禁检查**：\n- 11段是否都有明确主题？ □\n- 段韵分配是否为 4ang+5eng+2ong？ □\n- 44个字是否互不相同（肉眼初查）？ □\n- 叙事逻辑是否通顺？ □\n\n---\n\n## GATE 2：逐段韵脚字库 + 词语释义\n\n**目标**：为每个预分配的韵脚字提供常用词语和释义，供 GATE 3 造句参考。\n\n**产出格式**（每段一组）：\n\n```\n### 段1【主题】韵母 ang — 航/光/翔/间(白脚)\n\n| 韵脚字 | 常用词语（供造句参考） | 释义 |\n|--------|---------------------|------|\n| 航 | 启航、远航、领航、航空 | 出发；引领方向 |\n| 光 | 荣光、曙光、光芒、追光 | 光辉；荣耀 |\n| 翔 | 翱翔、飞翔 | 展翅高飞 |\n| 间 | 瞬间、天地间、弹指间 | (白脚) 时段、空间 |\n```\n\n**门禁检查**：\n- 每个字是否都有 ≥3 个可造句的词语？ □\n- 白脚字（en组）是否标注了用途？ □\n- 是否有生僻字混入词库？（如「筚」「缕」「旌」→ 提前踢出） □\n\n---\n\n## GATE 3：反推造句\n\n**目标**：用 GATE 2 的预分配尾字反向造句。每段 AABA，L1/L2/L4 尾字必须是指定的段韵字，L3 尾字必须是指定的白脚字。\n\n**硬约束**：\n- ❌ 不得使用非分配的尾字\n- ❌ 不得在段内换韵\n- ❌ 「客户名/品牌名」只能出现一次，且在 Intro 低调位置\n- ❌ 主线是业务/历史叙事，不是个人颂歌\n\n**产出**：44 句完整歌词（无结构标签 — 纯文本，一行一句）\n\n**门禁检查**：44 句是否写完？尾字是否与 GATE 2 分配一致（肉眼核对）？ □\n\n-"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn725tchg3gp72a78w22qa07p584f267\",\n  \"slug\": \"ai-songwriter-renxu\",\n  \"version\": \"3.3.0\",\n  \"publishedAt\": 1779435041483\n}"},{"path":"references/rhyme-table-20260522.md","content":"# 押韵表实测验证（2025-05-22）\n\n## 正确分类（经多轮迭代验证）\n\n### ang 集合（归韵用）\n```\n航 光 扬 场 疆 长 望 荡 魂 雄 风 鸿 龙 鹏 铭 峰 方 章 灯 芒 钢 康 强 翔 苍 桑 墙 庄 脏 旁 昂 量 详 彷 徨 狂 祥\n```\n> 实测确认：灯(dēng)✓ 强(qiáng)✓ 藏(cáng)✓ 方(fāng)✓ 章(zhāng)✓ 芒(máng)✓ 钢(gāng)✓ 康(kāng)✓\n\n### non_ang 集合（白脚用）\n```\n间 上 藏 沧 茫 情 名 性 当 忘 林 生 铁 青 星 时 此 心 中 里 外 下 那 和 去 见\n```\n> 实测确认：星(xīng)✓ 情(qíng)✓ 名(míng)✓ 性(xìng)✓（这些是 -ing/-ong 韵，不是 -ang）\n\n## 错误表（多次踩坑记录）\n\n### 原 skill 中错误分类\n| 字 | 原skill以为 | 实际 | 说明 |\n|----|-----------|------|------|\n| 灯 | non-ang | **ang** | dēng 韵尾 -eng |\n| 强 | non-ang | **ang** | qiáng 韵尾 -iang |\n| 藏 | non-ang | **ang** | cáng 韵尾 -ang |\n| 方 | non-ang | **ang** | fāng 韵尾 -ang |\n| 章 | non-ang | **ang** | zhāng 韵尾 -ang |\n| 芒 | non-ang | **ang** | máng 韵尾 -ang |\n| 钢 | non-ang | **ang** | gāng 韵尾 -ang |\n| 康 | non-ang | **ang** | kāng 韵尾 -ang |\n| 声 | ang | **non-ang** | shēng 韵尾 -eng |\n| 名 | ang | **non-ang** | míng 韵尾 -ing |\n| 性 | ang | **non-ang** | xìng 韵尾 -ing |\n| 情 | ang | **non-ang** | qíng 韵尾 -ing |\n| 星 | ang | **non-ang** | xīng 韵尾 -ing |\n\n### 边缘字韵母实测（pypinyin验证，2025-05-22补充）\n\n| 字 | pypinyin韵母 | eng/ong分组 | 错误分类 | 正确分组 |\n|----|-------------|------------|---------|---------|\n| 穷 | iong | eng | ong | **eng** |\n| 穹 | iong | eng | ong | **eng** |\n| 胸 | iong | eng | ong | **eng** |\n| 逢 | ong | **eng**（u介音） | ong | **eng** |\n| 雄 | iong | eng | ong | **eng** |\n| 翎 | ing | eng | eng | **eng**（ling→ing，ing属eng）|\n| 崧 | iong | ong | eng | **ong** |\n| 宁 | ing | eng | eng | **eng**（ning→ing，ing属eng）|\n| 名 | ing | eng | ong | **eng**（ming→ing，ing属eng）|\n| 场 | ang | ang | 存疑 | **ang** |\n\n> **结论**：肉眼判断韵母不可靠。eng/ong 分界点：iong/ing/ueng → eng；ong（无i/u介音）→ ong。用 pypinyin 逐字验证是唯一可靠方法。\n\n## 验证结论\n\nang ∩ non_ang = ∅（完全不相交）\n\n## 尾字重复阈值\n\n- 单一尾字 > 5 次 → ⚠️ 用户会抱怨\"重复尾字太多了\"\n- 建议：每句韵脚不同词，目标 ang 表中每个字使用 ≤ 4 次"},{"path":"references/session-20260522-chengfei.md","content":"# 成飞航空报国主题曲 — 完整案例 (2026-05-22)\n\n## 项目背景\n\n- **客户**：成飞（成都飞机工业集团）\n- **用途**：客户接待 AI 歌曲 MV\n- **叙事线**：时间轴 J-10 → J-20 → J-36（六代机）\n- **时长**：3-5 分钟\n- **技术目标**：展示 AI 能力打动客户\n\n## 调研结果\n\n### 成飞历史\n- 1958年创立（原国营132厂，黄田坝）\n- 1964年首飞歼5甲\n- 1980年代承担歼10研制\n- 歼10获国家科技进步奖特等奖\n- 2011年歼20（威龙）首飞 — 中国首款五代隐身战机\n- 2024.12.26 歼36（六代机）首飞\n\n### 六代机技术特征\n- 无尾三角翼、三发动机（双涡扇+火箭/冲压）\n- 全向隐身（360°无死角）\n- AI智能座舱、忠诚僚机协同\n- 作战半径 ~3000km（超歼20 50%+）\n- 速度可能达 Mach 2.5-3+\n- 代号\"白帝\"\n\n## 四步法实战\n\n### Step 1: 11段大纲\n```\nS1  [Intro]  创业启航 (ang)   1958成飞创立\nS2  [Verse]  歼10破晓 (eng)   1980s自主研制\nS3  [Verse]  歼20冲天 (ang)   2011五代隐身\nS4  [Chorus] 航空报国魂 (eng) 忠诚奉献精神\nS5  [Verse]  砥砺奋进 (ong)   技术攻关积累\nS6  [Verse]  歼36横空 (eng)   2024六代首飞\nS7  [Chorus] 六代荣光 (ang)   AI/隐身/协同\nS8  [Bridge] 苍穹之巅 (ong)   三马赫/空天一体\nS9  [Verse]  赤子丹心 (eng)   代代传承\nS10 [Chorus] 逐梦长空 (ang)   68年跨越\nS11 [Outro]  致敬辉煌 (eng)   展望未来\n```\n\n韵脚分配：4ang + 5eng + 2ong = 11段，L3白脚全en组 = 44字全局唯一\n\n### Step 2: 韵脚字库\nang组(12字)：航/光/翔/长/扬/强/芒/疆/钢/藏/苍/煌\neng组(15字)：风/鹏/星/铭/成/征/霆/凌/鸣/程/腾/鹰/灯/峰/升\nong组(6字)：空/虹/崇/冲/龙/荣\nen组(11字·白脚)：间/天/边/关/心/魂/云/身/林/深/音\n\n### Step 3: 最终歌词（v2 发音修复版）\n\n```\n一九五八西南大地扬帆启航\n航空报国的赤子初心闪着光\n数十载披荆斩棘弹指一挥间\n大国重器的梦想在蓝天翱翔\n\n八十年代自主研发借力长风\n猛龙冲天化作展翅大鹏\n从模仿到原创胆敢去问天\n中国智慧闪耀如启明星\n\n二零一一威龙出世征途更长\n隐身破空战旗猎猎扬\n五代之巅俯瞰疆域万里边\n大国空军铁拳越练越强\n\n忠诚奉献四个字心头深深铭\n逐梦蓝天的事业百折终铸成\n航空强国何惧万重关\n瞄准一流踏上新长征\n\n数代人接力守望万里长空\n技术攻关如飞桥化作彩虹\n岁月不改那一颗赤子初心\n从跟跑并跑到领跑地位日崇\n\n二零二四寒冬炸响万钧雷霆\n无尾三角翼三发冲天壮志凌\n这是几代航空人铸就的忠魂\n黄田坝上空第一次响起轰鸣\n\n全向隐身刀锋出鞘露锋芒\nAI大脑指挥作战守护万里疆\n忠诚僚机编队穿透风起云\n代际碾压的意志百炼成钢\n\n三马赫极速向着苍穹俯冲\n空天一体化作东方威龙\n智慧大脑自主进化无我之身\n在世界航空史上写下光荣\n\n六十八载风雨路再踏新程\n祖国蓝天见证热血在沸腾\n战鹰列阵穿越弹雨枪林\n忠诚基因代代传承如雄鹰\n\n蓝天深处多少故事心中深藏\n航空人的芳华尽染岁月苍\n这份热爱比大海还要深\n他们的名字铸进了辉煌\n\n回望来路总见那面旗帜如灯\n攀过一山更有一山高入峰\n黄田坝的风送来胜利的回音\n向着更高更远冉冉飞升\n```\n\n### Step 4: 验证结果\n- 韵脚错误：0/44\n- 尾字重复：无 — 44字全局唯一\n- AABA结构：11段全部正确\n- 时长：44句 × 3.2s = 141s ≈ 2.3min（单遍），repeat全曲 ≈ 4.7min\n\n## 踩坑记录\n\n### 坑1: 尾字重复（征×2）\n- **现象**：S4L4「长征」和 S9L1「长征」尾字重复\n- **根因**：S9L1 错用了「征」而非指定的「程」\n- **修复**：S9L1「六十八载风雨路再踏新程」\n\n### 坑2: 生僻字发音不准\n- **现象**：v1 中「筚路蓝缕」「峥嵘」「旌」发音不清晰\n- **根因**：music-2.6 对乙级/丙级字发音不稳定\n- **修复**：\n  - 筚路蓝缕 → 披荆斩棘（中间位替换）\n  - 峥嵘 → 光荣（尾字ong组替换）\n  - 蕴藏 → 深藏（中间位替换）\n  - 旌 → 灯（尾字eng组替换）\n  - 保留词加 `--extra` 拼音提示：雷霆、铭、崇、凌、芳华、铸成\n\n### 坑3: hardcoded 韵母判断不靠谱\n- **结论**：必须用 pypinyin 逐字验证，不能用硬编码集合\n- **示例**：iong/ing/ueng → eng 组；ong（无介音）→ ong 组\n\n## 音乐生成参数\n\n```bash\n--prompt \"Epic cinematic orchestral score with Chinese national style...\"\n--vocals \"Powerful male choir with heroic baritone solo...\"\n--genre \"Cinematic orchestral / military march / Chinese epic\"\n--mood \"Heroic, majestic, proud, deeply moving, inspirational, triumphant\"\n--instruments \"Full symphony orchestra, brass, timpani, military drums, guzheng/dizi accents\"\n--bpm 110\n--key \"D major\"\n--extra \"Pronunciation: 雷霆=léi tíng, 铭=míng, 崇=chóng, 凌=líng, 芳华=fāng huá, 铸成=zhù chéng, 光荣=guāng róng\"\n```\n\n## 关键经验\n\n1. **四步法必须严格按序执行**：大纲→韵脚表→造句→验证，不能边想边写\n2. **44字全局唯一**靠韵脚预分配实现，不是后验修正\n3. **结构标签双轨制**：交付用户纯文本，传 API 时保留标签\n4. **发音三层防线**：事前扫描 → 事中 `--extra` 提示 → 事后听审\n5. **「成飞」只出现一次**：在 S1L1 Intro 中低调出现，Chorus 不重复"},{"path":"skill-card.md","content":"## Description:\n\nGuides agents through Chinese-focused songwriting with rhymed lyric planning, pypinyin validation, pronunciation QA, MiniMax mmx music generation, and file delivery.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[andyrenxu7255](https://clawhub.ai/user/andyrenxu7255)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and creators use this skill to plan Chinese song projects, write rhymed lyrics, validate rhyme and pronunciation, configure MiniMax mmx music generation, and deliver generated songs after user confirmation.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Topic prompts, lyrics, and generation parameters may be sent to MiniMax through mmx.\n\nMitigation: Confirm MiniMax processing is intended before generation and confirm the delivery destination before sending generated audio to a chat or platform.\n\nRisk: Chinese lyric rhymes, rare characters, or multitone characters may produce incorrect pronunciation in generated music.\n\nMitigation: Run pypinyin rhyme validation, scan rare and multitone characters, add explicit pronunciation hints, and perform listening review before final delivery.\n\nRisk: Long lyrics or direct command-line lyric input can make generation unreliable.\n\nMitigation: Use a lyrics file for mmx generation and repeat or expand structures only after validating the full lyric workflow.\n\n## Reference(s):\n\n- [ClawHub Skill Page](https://clawhub.ai/andyrenxu7255/skills/ai-songwriter-renxu)\n- [MiniMax CLI](https://github.com/MiniMax-AI/cli)\n- [MiniMax Platform Docs](https://platform.minimaxi.com/docs)\n- [Rhyme Table Validation](references/rhyme-table-20260522.md)\n- [Chengfei Songwriting Case Study](references/session-20260522-chengfei.md)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance, files]\n\n**Output Format:** [Markdown guidance with inline code blocks, command templates, generated lyrics, and music generation parameters.]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May produce generated audio files or delivery instructions when MiniMax mmx tooling is available.]\n\n## Skill Version(s):\n\n3.3.0 (source: server release evidence, SKILL.md frontmatter, clawhub.yaml)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"AI歌曲创作核心技能 — 合辙押韵歌词创作 + MiniMax mmx-cli 正确调用 + 歌词验证 + 歌曲生成全流程。支持古诗词谱曲、主题歌曲创作、多渠道文件投递。 Skill: Ai Songwriter Owner: andyrenxu7255 Summary: AI歌曲创作核心技能 — 合辙押韵歌词创作 + MiniMax mmx-cli 正确调用 + 歌词验证 + 歌曲生成全流程。支持古诗词谱曲、主题歌曲创作、多渠道文件投递。 Tags: latest:3.3.0, stable:3.3.0 Version history: v3.3.0 | 2026-05-22T07:30:41.483Z | user 八层门禁链路重构：GATE 0调研→1大纲→2韵脚库→3造句→4验证→5发音质控→6确认→7生成→8听审。新增：中东辙合韵模式、发音质量控制三层防线、航空军工史诗音乐参数、结构标签双轨制、成飞案例完整复盘。修复 BOM，移除硬编码路径。 v3.1.1 | 2026-05-22T02:42:15.575Z | user 3.1.1 — 押韵错误字修正 - 从 -ang 错误字中移除「","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1101,"uniquenessScore":50,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T11:30:26.648Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T11:30:26.648Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-11T14:17:18.865Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}