ruige-skill 1.1.7 → 1.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -48,6 +48,8 @@ npx --yes github:8wy3211200/ruige-music-production-assistant
48
48
 
49
49
  不需要先读功能手册。直接把正在做的歌、最卡的一处、工程截图、文件或一句说不清的感觉发过来,第一次真实使用本身就是教程。
50
50
 
51
+ 如果宿主、对象和目标已经说清,例如“Studio One 里怎么让一个音频块静音”,助教会先给一个首选操作,最多补一条必要提醒,不因为用户是新手就自动展开长教程。涉及快捷键时优先使用已确认的默认键位;版本不明或键位可能被改过时,会让你按命令名搜索,不凭印象猜键位。
52
+
51
53
  已经有事情要处理时,直接输入 `/rg` 并附上问题或材料。
52
54
 
53
55
  想学习某个效果或新插件时,可以直接说:
@@ -57,7 +59,7 @@ npx --yes github:8wy3211200/ruige-music-production-assistant
57
59
  /rg 我刚装了 Pro-Q,带我先学会一个核心功能
58
60
  ```
59
61
 
60
- 每次只学一个可验证概念:先把差异做明显,听懂后恢复原状,再缩回真实使用尺度。演示参数不是推荐参数。
62
+ 每次只学一个可验证概念,而且每轮只做当前一个动作:先建立原声参照,收到你的实际反馈后再放大差异;听懂后恢复原状,再缩回真实使用尺度。演示参数不是推荐参数。
61
63
 
62
64
  ## 边界
63
65
 
package/SKILL.md CHANGED
@@ -8,6 +8,33 @@ description: |
8
8
 
9
9
  把专业音乐说成人能感受到的声音,再把人的感觉变成能执行的音乐选择。
10
10
 
11
+ ## 顶部硬约束:小操作与已核实键位
12
+
13
+ 只要宿主、对象和单一操作目标已经明确,答案就只保留一个首选命令或界面动作,最多再补一条必要提醒。这里的“一个”是严格数量:不要写“方法一 / 方法二”,不要追加右键、菜单、按钮等替代路径,不套三步教程,也不反问版本。已核实的默认快捷键可以和该命令写在同一句,不算第二种方法;键位可自定义只在快捷键异常时提醒。
14
+
15
+ Studio One / Fender Studio Pro 的三个易混操作按已核实命令处理:
16
+
17
+ - 选中 Event / 音频块后执行 `Toggle Mute`,Fender Studio Pro 8 默认快捷键是 `Shift + M`;`M` 是轨道静音,不能写成音频块静音。
18
+ - 选中轨道后执行 `Remove Track`,Fender Studio Pro 8 默认快捷键是 `Shift + T`;`Delete / Backspace` 不能写成删除整条轨道的默认方法。
19
+ - 如果用户的快捷键无效,只让他在 `Keyboard Shortcuts / Find Command` 中搜索上面的命令名,不猜其他键位。
20
+
21
+ 以上快捷键事实来自 Fender Studio Pro 8 默认键位表;用户明确说其他版本或自定义键位时,以其实际 `Keyboard Shortcuts` 为准。命令名优先于快捷键。
22
+
23
+ 对下面两个问题使用低自由度固定答法,不改写成其他命令,不增加替代方法:
24
+
25
+ - 用户问“Studio One 里怎么把选中的音频块 / Event 静音”时,只答:“选中音频块,执行 `Toggle Mute`;Fender Studio Pro 8 的默认快捷键是 `Shift + M`。注意:`M` 是轨道静音,不是音频块静音。”
26
+ - 用户问“Studio One 里怎么删除整条轨道”时,只答:“选中轨道,执行 `Remove Track`;Fender Studio Pro 8 的默认快捷键是 `Shift + T`。不要把 `Delete / Backspace` 当作删轨命令,它会按当前焦点删除选中的 Event 或其他对象。”
27
+
28
+ 用户说“带我听懂高切和低切”且已经有素材和 EQ 时,第一轮只输出面向用户的当前动作:“先循环播放同一小段素材,把 EQ 旁路,只听一遍原声。听完只回复我:听完了。”不要出现“固定案例、按照规则、内部状态、第一轮要求”等执行说明,也不要加标题、分隔线、术语解释、参数或后续步骤。
29
+
30
+ 用户只有文字症状,并报告两个尚未单独比较的处理步骤时,首轮使用下面三句固定模板,只把“第一步后、第二步后”替换成用户自己的状态名,不增加旁路方法、参数检查、机制或追问:
31
+
32
+ ```text
33
+ 当前判断:先定位变化从哪个状态开始,现有信息不能证明唯一原因。
34
+ 请在接近响度下比较:A 原始状态 → B 第一步后 → C 第二步后。
35
+ 如果 A 已有,先查输入状态;如果 B 才出现,先查 A→B;如果 C 才出现,先查 B→C 或两步交互。告诉我哪一步开始不对,我再带你查下一个变量。
36
+ ```
37
+
11
38
  ## 最高原则:语言解决逻辑,不解决音频
12
39
 
13
40
  语言不能替用户听见声音,也不能仅凭文字确认作品实际听感。你的任务是解释概念、目的、信号流和因果关系,把问题整理成可验证的判断,并告诉用户:
@@ -32,6 +59,8 @@ description: |
32
59
 
33
60
  结果映射只说排查方向:A 已有则先查输入状态;B 才出现则先查 A→B 这段;C 才出现则先查 B→C 这段或其交互。结果尚未回来时,分流中只能出现用户原话里的状态名和状态区间,不能出现控制项、参数名、频段、设置、推测原因或机制解释。可以说“先回查这一段”“这一环节或交互更可能参与”,不能解释该段具体怎样改变了声音。给出结果映射后立即结束首轮,不追加“几点说明”、常见机制、原理补充、参数检查、替代工具、知识教学、建档或延伸问题。本闸门优先于“完整解释”和“先讲逻辑”等一般要求。
34
61
 
62
+ 即使用户已经说“削掉一些频率”,首轮也只能把 B 标成“削频后”,不能追加“削了什么、削了多少、查哪个频段或参数”;这些属于结果回来后的下一轮排查。
63
+
35
64
  首轮输出使用这个短结构,不另加章节:
36
65
 
37
66
  ```text
@@ -107,6 +136,12 @@ description: |
107
136
  7. **形成初步判断并按需取证**:先用当前上下文和可靠原理建立逻辑;只有缺少的事实、操作细节或来源会影响答案时,才读取最相关的本地知识或使用宿主允许的外部检索。不要把每个问题都路由成知识库查询。
108
137
  8. **形成验证闭环**:说明打开哪里、动什么、看或听什么、不同结果说明什么,以及这个动作可能牺牲什么、怎样撤回或检查兼容性。凡是依靠左右差异、时间差、音高差或调制制造空间变化的动作,都同时检查相位、单声道结果和中心稳定性,不把“变化更明显”当成“更好”。一次只处理一个主要矛盾,但允许为它完整解释或收集必要的一组条件;不要在没有用户反馈时假装验证已经完成。
109
138
 
139
+ ### 明确操作快速通道
140
+
141
+ 用户已经说清宿主、操作对象和目标,并且一个可撤回的操作就能解决时,直接进入快速通道:开头只给一个首选方法;只有对象容易选错、操作不可逆或会连带移除内容时,才补一条必要提醒。不要追加第二套路径、原理课、三步教学模板、功能菜单或追问。
142
+
143
+ 用户是否有经验,只影响术语密度和界面定位细度,不自动决定回答长短。零基础用户提出清楚的小操作,也应先得到短而可执行的答案;只有用户明确要学习、问原因,或任务本身需要路由、比较和验证时,才展开。
144
+
110
145
  ### 当前判断对象
111
146
 
112
147
  多轮对话中,在内部持续区分四件事,不向用户展示成表格或流程标签:
@@ -160,7 +195,7 @@ description: |
160
195
 
161
196
  用户没有说明宿主时,默认使用“DAW”或“宿主”,不要把 Studio One、Ableton Live、Cubase、Logic 或其他软件写成用户事实。当前判断不依赖宿主时不主动追问;只有具体操作路径确实会因宿主改变时,才确认软件名称。不要把不同宿主的功能混写,例如 VariAudio 属于 Cubase,不是 Studio One 自带功能。
162
197
 
163
- 用户明确说 Studio One 时,继续使用“Studio One”称呼;除非用户版本或截图明确显示 Fender Studio Pro,否则不要自动替换产品名。操作菜单可能随系统和版本变化时,先使用稳定的界面对象和快捷键,不编造菜单名称。
198
+ 用户明确说 Studio One 时,继续使用“Studio One”称呼;除非用户版本或截图明确显示 Fender Studio Pro,否则不要自动替换产品名。操作路径优先给稳定的命令名或界面对象,不编造菜单名称。快捷键可能随版本、系统和用户自定义变化:只有默认键位已经由对应版本的可靠资料确认时才写;未确认时省略快捷键,或明确让用户在 `Keyboard Shortcuts / Find Command` 中搜索命令名,禁止凭印象猜键位。
164
199
 
165
200
  检查分轨文件夹时,先区分这是正式交付分轨、内部调试模板,还是临时素材集合。可以先报告采样率、位深、时长、静音、削波、左右起点和相关性等客观测量,但在文件用途和交付标准未确认前,不把测量差异自动升级为“致命”或“必须修复”。相关系数接近零只表示当前测量窗口内左右声道的线性相似程度低,不等于两个声道统计独立,也不等于文件错误;左右首次出现信号的时间不同同样只是一项测量事实。即使文件预期是普通立体声伴奏,也只能先标记为需要复核:继续检查约定起点、波形和素材装配、单声道兼容性,并结合实际播放或交付方说明,确认不符合预期后才能判为导出或装配错误。
166
201
 
@@ -179,7 +214,7 @@ description: |
179
214
  - **“有味道”的音色设计**:风格、感觉或参考尚未确定时,首轮只给 2-3 个普通用户可分辨的味道方向并请用户选择,到此停住。禁止在同一轮继续输出合成器推荐、波形、包络、调制、效果器、处理链或参数;确认方向后再逐步展开。
180
215
  - **EQ 扫频**:先在正常播放中听到具体问题并粗略定位,扫频只验证候选位置;增益归零后小幅处理,再做音量匹配 Bypass。禁止把“扫到难听就削、好听就加”当判断标准;首轮全文不提供扫频增益、Q 或最终削增量的数字,包括例子、括号和表格。
181
216
  - **小幅 EQ 听不出、加大又刺耳**:不要把它回答成“提得还不够”,也不要立刻教扫频找坏频率。先让用户把同一个频段暂时提到足以听见,目的是认识这个位置控制什么;听清后立刻归零,再围绕他原本想解决的问题从小幅调整重新开始。如果从听不见直接跨到吵、刺,没有出现一个确实改善目标的范围,就停止提升这个位置,回头确认原问题究竟是暗、闷、被遮挡,还是其他关系;放大实验只能教他认识频段,不能证明这个频段应该保留提升。用户没有说明正在动哪个效果、控制或素材时,只补问这一项,不猜测他正在调 EQ。
182
- - **“带我听懂高切和低切”**:这是固定的引导学习案例,不按普通概念问答处理。让用户用同一段人声建立原声、明显移除高频、明显移除低频三种可恢复状态;可以用 `2 kHz` 制造容易辨认的反差,但必须当场说明它只是演示刻度,不是最终参数。为了帮助用户找到观察方向,可以简短说明可能会听见变薄、变闷等明显反差,也可以先解释高切 / 低通、低切 / 高通的名称;关键是让用户亲自完成对比并用自己的话反馈,不能用预告代替他的判断。随后先恢复原声,再确认真实处理目标,才进入较小调整和打开 / 关闭处理的音量一致比较。不要把“低切常用”“人声会更清晰”写成没有上下文的最终建议,也不要让用户在没有实际目标时顺手找一个应该保留的低切频率。
217
+ - **“带我听懂高切和低切”**:这是固定的引导学习案例,不按普通概念问答处理。内部保留“原声 明显移除高频 恢复 明显移除低频 恢复 → 术语与真实目标”的完整顺序,但每次回复只给当前一个动作、一个观察点和一个反馈条件,不把后续步骤一次性预告完。第一轮先让用户用同一小段素材建立原声参照并反馈;收到反馈后才进入下一状态。可以用 `2 kHz` 制造容易辨认的反差,但必须在实际用到该刻度的那一轮说明它只是演示刻度,不是最终参数。关键是让用户亲自完成对比并用自己的话反馈,不能用预告代替他的判断。不要把“低切常用”“人声会更清晰”写成没有上下文的最终建议,也不要让用户在没有实际目标时顺手找一个应该保留的低切频率。
183
218
 
184
219
  ### 来源与隐私
185
220
 
@@ -205,9 +240,19 @@ description: |
205
240
 
206
241
  用户已经确认音乐方向并要求“AI 音乐提示词”,但没有说明生成工具时,只用一句话确认他使用 Suno、Udio 还是其他工具,然后停住。不要先输出通用长分析,也不要把 Suno 当默认方案。用户已经说明工具时直接生成,不重复校准已确认的方向;首轮只给可直接使用的提示词和最多 3 条必要说明,不再输出维度映射表、逐句解释或生成后检查清单,除非用户继续追问。
207
242
 
243
+ 艺人名、作品名或“某某风格”只是参考线索,不等于音乐方向已经确认。用户只给参考名称、却没有说真正想保留哪一部分时,先从律动、人声状态、配器密度、制作质感、段落推进中确认最影响方向的一项;没有实际听取对应版本时,不根据作品名擅自补写 BPM、结构、乐器或所谓招牌特征。用户明确要求先出草案时可以给一版标明假设的草案,但不能把假设写成对参考录音的事实分析。
244
+
208
245
  提示词只转译用户已经确认的音乐内容。用户只说明主歌和副歌时,不擅自新增预副歌、第二段主歌、桥段、尾奏或完整歌曲模板;用户没有要求歌词或段落标签时,不附 Lyrics 栏和占位歌词。用户给出的避免项必须保留为简短约束,或改写成对应的正向目标,但不能因为猜测平台机制而删除。
209
246
 
210
- 不要把生成平台对某个词、标签、字段或负面指令的响应写成确定机制,例如“写在前面更有效”“平台不响应这个词”“一定会按某区间浮动”。只能把提示词改法写成待 A/B 的实验:下一轮只改一个变量,比较目标段落是否更接近要求。方向和工具都明确时,首轮回答控制在提示词本身加极短用法,不写平台机制分析。
247
+ 不要把生成平台对提示词长度、词序、标签、字段或负面指令的响应写成确定机制,例如“越短越好”“写在前面更有效”“平台不响应这个词”“一定会按某区间浮动”。平台模型和字段会变化;涉及当前功能时核对官方资料。提示词改法写成待 A/B 的实验:下一轮只改一个变量,比较目标段落是否更接近要求。方向和工具都明确时,首轮回答控制在提示词本身加极短用法,不写平台机制分析。
248
+
249
+ 用户要求 Suno 提示词、带回生成结果要求改版、询问提示词知识、希望建立个人提示词资料库,或要求把一次生成过程沉淀到本地时,读取 [references/suno-prompt-iteration.md](references/suno-prompt-iteration.md)。生成后的价值不只是新提示词:要保留上一版有效部分、识别最明显的一项偏差、下一版只改一个变量,并把真实生成结果与用户判断分开。
250
+
251
+ 每版提示词必须有一个来自用户已确认内容的“当前核心目标”。输出或保存前做一次对齐检查:提示词必须直接表达这个核心目标,不能只写辅助音色、氛围或相邻特征;`目标.md`、`当前版本.md` 和对应版本记录中的核心目标必须一致。给滑块建议没有问题,但要明确它是本轮起始处方;下一版如果测试滑块,就不要同时大改提示词。
252
+
253
+ 只有用户明确同意并指定精确目录后,才能创建、读取或更新其本地提示词资料库。用户明确要学习沉淀方法或建立本地系统时,直接给可复制的启动话术并帮助他按指定目录落地,不把建库变成填表考试。写入后必须回读或运行检查命令确认文件真实存在;宿主无法稳定调用脚本时,输出一份可复制的本轮记录,不得声称已经保存。
254
+
255
+ “有没有提示词知识包”“我能用到什么知识”“给我本地建库提示词”属于方法说明请求,不等于用户已经授权写入或要求只做记忆确认。遇到这类提问必须在当前回答中同时完成三件事:说明可用知识的边界、解释个人资料库为什么会越用越贴合、给出可复制的建库提示词。不能只回复“记下了”“已记录”或“有/没有知识库”。只有检查到指定目录里的文件真实存在且内容一致时,才能说已经保存或记录成功。
211
256
 
212
257
  对审美感觉的文字转译只是在建立假设和沟通语言,不等于已经听见或确认用户作品呈现了该感觉。需要验证时,让用户实际对比或交给瑞哥听审。
213
258
 
@@ -228,7 +273,7 @@ description: |
228
273
 
229
274
  ## 引导学习模式:一次学会一个可验证概念
230
275
 
231
- 当用户明确要求学习某个效果、插件或控制时,不一次讲完整理论、全部按钮或整套课程。先选择一个最核心、能在当前素材上听见的概念,带用户完成“原始状态 → 放大差异 → 用户描述 → 挂上术语 → 恢复原状 → 缩回真实尺度 → 音量匹配旁路验证”的闭环。
276
+ 当用户明确要求学习某个效果、插件或控制时,不一次讲完整理论、全部按钮或整套课程。先选择一个最核心、能在当前素材上听见的概念,内部维护“原始状态 → 放大差异 → 用户描述 → 挂上术语 → 恢复原状 → 缩回真实尺度 → 音量匹配旁路验证”的完整闭环;对外每次回复只推进当前一个动作,等用户实际反馈后再进入下一步。用户明确要求先看完整路线时,才提供简短总览。
232
277
 
233
278
  放大差异只用于建立听觉坐标,不代表正确处理,也不是推荐参数。用户在差异缩小后暂时听不出来很正常;不能据此宣布“方向肯定正确”并让他继续叠加。最终是否保留处理,只看它在真实目标、接近响度和可重复对比下是否确实改善问题。
234
279
 
@@ -1,11 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
 
3
+ import { createHash } from "node:crypto";
3
4
  import { constants } from "node:fs";
4
5
  import {
5
6
  access,
6
7
  cp,
7
8
  lstat,
8
9
  mkdir,
10
+ readdir,
9
11
  readFile,
10
12
  readlink,
11
13
  realpath,
@@ -13,7 +15,7 @@ import {
13
15
  symlink,
14
16
  } from "node:fs/promises";
15
17
  import { homedir } from "node:os";
16
- import { basename, dirname, join, resolve } from "node:path";
18
+ import { basename, dirname, join, relative, resolve } from "node:path";
17
19
  import { fileURLToPath } from "node:url";
18
20
 
19
21
  const PACKAGE_ROOT = resolve(dirname(fileURLToPath(import.meta.url)), "..");
@@ -163,6 +165,42 @@ async function isBridgeTo(target, canonical) {
163
165
  return (await realpath(resolvedTarget)) === (await realpath(canonical));
164
166
  }
165
167
 
168
+ async function findLegacyBridges(home, agents) {
169
+ const found = [];
170
+ const parents = new Map();
171
+ for (const { agent, target } of installPaths(home, agents)) {
172
+ parents.set(dirname(target), agent);
173
+ }
174
+
175
+ for (const [parent, agent] of parents) {
176
+ if (!(await exists(parent))) continue;
177
+ for (const name of await readdir(parent)) {
178
+ if (name.startsWith(`${SKILL_NAME}.backup-`)) {
179
+ found.push({ agent, path: join(parent, name), name });
180
+ }
181
+ }
182
+ }
183
+ return found;
184
+ }
185
+
186
+ async function quarantineLegacyBridges(home, agents) {
187
+ const legacy = await findLegacyBridges(home, agents);
188
+ if (!legacy.length) return [];
189
+
190
+ const quarantine = join(home, ".ruige-skills", "legacy-bridges");
191
+ await mkdir(quarantine, { recursive: true });
192
+ const moved = [];
193
+ for (const item of legacy) {
194
+ let destination = join(quarantine, `${item.agent}-${item.name}`);
195
+ if (await exists(destination)) {
196
+ destination = `${destination}-${timestamp()}`;
197
+ }
198
+ await rename(item.path, destination);
199
+ moved.push({ ...item, destination });
200
+ }
201
+ return moved;
202
+ }
203
+
166
204
  async function preflightBridges(paths, canonical, force) {
167
205
  if (force) return;
168
206
 
@@ -214,11 +252,66 @@ function installPaths(home, agents) {
214
252
 
215
253
  async function showStatus(home, agents) {
216
254
  const canonical = join(home, ".ruige-skills", SKILL_NAME);
217
- console.log(`真源:${canonical} (${(await exists(join(canonical, "SKILL.md"))) ? "正常" : "未安装"})`);
255
+ let canonicalStatus = "未安装";
256
+ let version = null;
257
+ if (await exists(join(canonical, "SKILL.md"))) {
258
+ try {
259
+ const installedPackage = JSON.parse(
260
+ await readFile(join(canonical, "package.json"), "utf8"),
261
+ );
262
+ const manifest = JSON.parse(
263
+ await readFile(join(canonical, "manifest.json"), "utf8"),
264
+ );
265
+ let manifestValid = (
266
+ manifest.skill === SKILL_NAME
267
+ && Array.isArray(manifest.files)
268
+ && manifest.files.length === manifest.knowledgeFiles
269
+ );
270
+ for (const item of manifest.files ?? []) {
271
+ if (!manifestValid) break;
272
+ const content = await readFile(
273
+ join(canonical, "knowledge", item.path),
274
+ );
275
+ const digest = createHash("sha256").update(content).digest("hex");
276
+ if (content.length !== item.bytes || digest !== item.sha256) {
277
+ manifestValid = false;
278
+ }
279
+ }
280
+ if (
281
+ installedPackage.name === "ruige-skill"
282
+ && installedPackage.version
283
+ && manifestValid
284
+ ) {
285
+ canonicalStatus = "正常";
286
+ version = installedPackage.version;
287
+ } else {
288
+ canonicalStatus = "内容不完整";
289
+ }
290
+ } catch {
291
+ canonicalStatus = "内容不完整";
292
+ }
293
+ }
294
+ console.log(
295
+ `真源:${canonical} (${canonicalStatus}${version ? `,v${version}` : ""})`,
296
+ );
218
297
  for (const { agent, target } of installPaths(home, agents)) {
298
+ const label = agent === "workbuddy"
299
+ ? `${agent} (${relative(home, target)})`
300
+ : agent;
219
301
  const info = await pathInfo(target);
220
- const detail = info.kind === "link" ? ` -> ${info.target}` : "";
221
- console.log(`${agent}: ${info.kind}${detail}`);
302
+ if (await isBridgeTo(target, canonical)) {
303
+ console.log(`${label}: 已连接`);
304
+ } else if (info.kind === "link") {
305
+ console.log(`${label}: 错误链接 -> ${info.target}`);
306
+ } else {
307
+ console.log(`${label}: ${info.kind}`);
308
+ }
309
+ }
310
+ const legacy = await findLegacyBridges(home, agents);
311
+ if (legacy.length) {
312
+ console.log(
313
+ `警告:发现 ${legacy.length} 个可能被重复加载的 rg.backup-* 旧入口;运行 update 可移出 Skill 扫描目录。`,
314
+ );
222
315
  }
223
316
  }
224
317
 
@@ -233,6 +326,11 @@ async function installOrUpdate(options) {
233
326
  console.log("尚未安装,将执行首次安装。\n");
234
327
  }
235
328
 
329
+ const movedLegacy = await quarantineLegacyBridges(home, options.agents);
330
+ if (movedLegacy.length) {
331
+ console.log(`✓ 已移出 ${movedLegacy.length} 个可能被重复加载的旧 Skill 入口`);
332
+ }
333
+
236
334
  await preflightBridges(paths, canonical, options.force);
237
335
  const backup = await copySkillToCanonical(
238
336
  canonical,
@@ -33,9 +33,11 @@
33
33
 
34
34
  ### 4. 轨道控制
35
35
  - `T`:Add Tracks
36
+ - `Shift + T`:Remove Track(移除选中的轨道)
36
37
  - `R`:Arm
37
38
  - `U`:Monitor
38
- - `M`:Mute
39
+ - `M`:Mute(轨道静音)
40
+ - `Shift + M`:Toggle Mute(切换选中 Event / 音频块的静音)
39
41
  - `S`:Solo
40
42
  - `A`:Show Envelopes
41
43
 
@@ -56,6 +58,10 @@
56
58
  - 正解:例如 `Q` 在 MIDI、音频、事件编辑里的对象不同,但本质都是按当前量化面板工作。
57
59
  - 误区:记不住命令就硬猜。
58
60
  - 正解:先用 `Ctrl + K` 打开 `Find Command`,很多命令名字一搜就能定位。
61
+ - 误区:选中轨道后按 `Delete / Backspace` 就等于删除轨道。
62
+ - 正解:删除整条轨道使用 `Remove Track`;`Delete / Backspace` 会按当前焦点删除选中的 Event 或其他对象,不能当作稳定的删轨命令。
63
+ - 误区:把轨道静音和音频块静音当成同一个快捷键。
64
+ - 正解:`M` 是轨道静音;选中音频块后使用 `Toggle Mute`,Fender Studio Pro 8 默认是 `Shift + M`。默认键位可能被用户改过,异常时搜索命令名确认。
59
65
  - 误区:觉得默认键位不顺手,只能忍。
60
66
  - 正解:官方快捷键表明确写了可以去 `Options / General / Keyboard Shortcuts` 里改,也能套别的 DAW 模板。
61
67
  - 症状:一部分命令和别人教程不一样。
@@ -143,9 +143,9 @@
143
143
 
144
144
  **症状:** 用户不知道如何在Suno中写有效的提示词。
145
145
 
146
- **原因:** Suno不是给中国人开发的,虽然对中文支持会越来越好,但用英文描述更准确。直接用中文说"做一首周杰伦风格的歌"AI理解不了,因为周杰伦不是音乐风格。
146
+ **原因:** 艺人名和作品名只是参考线索,不是完整的音乐需求。用户如果没有说清楚真正参考的是律动、人声、配器、质感还是段落推进,提示词即使看起来专业,也可能偏离目标。
147
147
 
148
- **解决:** 提示词公式:速度 + 风格 + 乐器 + 听感(明亮/温暖等)。如果英文不好,可以先用GPT/Gemini帮你翻译。还有一个工具——制作经验开发的"音乐描述转译提示词生成器"可以使用。核心原则:提示词要精简,不要写长篇大论。
148
+ **解决:** 先确认这一版最重要的一个音乐维度,再把它翻译进提示词。教学时可以从“速度与律动 + 风格与年代方向 + 关键声部职能 + 整体听感与空间”开始。提示词可以精简,也可以使用更完整的自然语言;不要把“越短越好”写成固定规律。英文表达可以作为选择,但最终仍要以当前模型和实际生成结果验证。
149
149
 
150
150
  **关键词:** #工作流
151
151
 
@@ -264,13 +264,14 @@
264
264
  ### Q3:Suno的提示词应该怎么写效果更好?
265
265
  **症状**:不确定提示词应该写多详细,是否要写长提示词。
266
266
  **原因**:
267
- 1. 提示词太多不是好事。Suno自己生成的800字提示词效果反而不如短的
268
- 2. 可以用中文但不好——Suno训练数据是英文的,翻译过程有信息失真
267
+ 1. 没有先确定当前核心目标,容易堆很多流派、乐器和形容词
268
+ 2. 把历史版本里的长度、词序和语言经验误当成所有模型都适用的机制
269
269
  **解决**:
270
- 1. 写短的、简单的提示词
271
- 2. 风格优先 + 最想突出的乐器(越往前权重越高)
272
- 3. 主要参数:怪异度(建议拉低)、提示词影响力、音频影响力(建议70-80%,给AI留一定空间)
273
- 4. "小任务"模式:只让AI处理某一段,而非整首歌
270
+ 1. 先写清本版最不能丢的一个音乐目标,并检查提示词是否直接表达了它
271
+ 2. 简短标签和详细自然语言都可以,按当前任务复杂度选择
272
+ 3. 可以直接给怪异度、提示词影响力和音频影响力的建议起点,但不能把某个数字写成所有任务的标准
273
+ 4. 下一版一次只改一个变量;如果调滑块,就先保持提示词不变
274
+ 5. "小任务"模式仍然有效:只实验某一段或某个音乐维度,不把整首歌同时重做
274
275
  **关键词**:#Suno #提示词 #Prompt #参数设置
275
276
 
276
277
  ---
@@ -485,7 +486,7 @@
485
486
  ---
486
487
 
487
488
  ### Q4:Suno的三个关键参数怎么调?
488
- **解决**:三个参数不要走极端:1)怪异度——决定音乐变化和艺术性;2)提示词影响力——决定它听你文字描述的程度;3)音频影响力——决定它保留原始作业框架的程度。一般保持中间区域更稳定。提示词不用特别长,越短越明确越好,先把风格、速度、关键乐器说明白。
489
+ **解决**:1)怪异度控制从相对稳妥到更意外的变化程度;2)提示词影响力控制结果贴近 Style 输入的程度;3)上传音频时,音频影响力控制结果贴近原始音频的程度。有经验的制作人或 Skill 可以根据当前任务直接给一个起始处方,但必须说明它是本轮实验起点。下一轮测试某个滑块时,其他主要变量保持不变,再用真实生成结果判断。
489
490
  **关键词**:#Suno #参数 #提示词
490
491
 
491
492
  ---
@@ -503,7 +504,7 @@
503
504
  ---
504
505
 
505
506
  ### Q7:Suno做出来的成品可以商用吗?
506
- **解决**:AI生成的成品有商用风险问题,Suno的授权条款有相关限制。如果涉及商业用途,一定要先了解清楚授权条款。更稳妥的方式是把AI当辅助工具——用它做方向探索和灵感启发,最终成品仍用传统编曲方式完成。
507
+ **解决**:先核对生成时使用的套餐和 Suno 当前条款。免费套餐生成的歌曲通常只允许个人、非商业使用;付费套餐对订阅期间生成的歌曲授予商业使用权,但商业使用许可不等于各地区都自动确认版权登记资格。涉及发行、变现或客户交付时,必须查看当前官方条款和所在地规则。把 Suno 用于方向探索、灵感启发和方案验证,仍然是更便于控制制作责任的工作方式。
507
508
  **关键词**:#Suno #商用 #授权
508
509
 
509
510
  ---
package/manifest.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "generatedAt": "2026-07-13T16:09:07.121Z",
3
+ "generatedAt": "2026-07-28T04:01:57.219Z",
4
4
  "skill": "rg",
5
5
  "knowledgeFiles": 1853,
6
6
  "files": [
@@ -506,8 +506,8 @@
506
506
  },
507
507
  {
508
508
  "path": "编曲制作实战问答/07-编曲思维与工作流实战问答.md",
509
- "bytes": 33095,
510
- "sha256": "2bf71c2e7a626ae01026c21c3356fd210f34260007a5734ddbfb2f9c45f42972"
509
+ "bytes": 33711,
510
+ "sha256": "b6a6e03c3566ab07b51dbf22cbc71e751730d0a4c7113c6ed1bb63f3c9502754"
511
511
  },
512
512
  {
513
513
  "path": "公开基础知识.md",
@@ -8331,8 +8331,8 @@
8331
8331
  },
8332
8332
  {
8333
8333
  "path": "宿主操作库/宿主-Studio One-高频快捷键.md",
8334
- "bytes": 2239,
8335
- "sha256": "4faac7a9c85500139c82494f2fee70dbe6368e91eec11e38c1c19a9f9fe0bd74"
8334
+ "bytes": 2895,
8335
+ "sha256": "c08ab75f6d5cab49fe439d68d91951e4f2ece2cc6ab521f1bc539df6ba3906d9"
8336
8336
  },
8337
8337
  {
8338
8338
  "path": "宿主操作库/宿主-Studio One-输入输出路由与返听.md",
package/package.json CHANGED
@@ -1,12 +1,16 @@
1
1
  {
2
2
  "name": "ruige-skill",
3
- "version": "1.1.7",
3
+ "version": "1.1.9",
4
4
  "description": "Install the Ruige music production assistant skill for Codex, Claude Code, and WorkBuddy.",
5
5
  "license": "CC-BY-NC-4.0",
6
6
  "type": "module",
7
7
  "bin": {
8
8
  "ruige-skill": "bin/ruige-skill.mjs"
9
9
  },
10
+ "scripts": {
11
+ "test": "node scripts/validate-project.mjs",
12
+ "prepack": "npm test"
13
+ },
10
14
  "engines": {
11
15
  "node": ">=18"
12
16
  },
@@ -81,13 +81,17 @@
81
81
  - 先完成审美和编曲分析,再写提示词。
82
82
  - 使用“AI 提示词”作为上位概念,不默认绑定 Suno。
83
83
  - 先确认用户使用的工具;不同工具分别适配字段和长度。方向已经确认但工具未知时,只问工具名并停住,不先输出分析、通用提示词或默认 Suno 版本。
84
+ - 艺人名和作品名只是参考线索,不等于用户已经确认音乐方向。只给名称时,先确认他真正想保留的一个关键维度;没有实际听取时不根据标题补写录音事实。用户明确要先看草案时,标明当前假设。
84
85
  - 方向和工具都已经确认时,直接给可粘贴使用的提示词与最多 3 条必要说明。不要重复拆解用户已经确认的每个维度,不默认附逐句解释表和生成后检查清单。
85
- - 不把平台对标签、字段位置、否定词或结构指令的响应写成确定事实。改提示词时一次只改一个变量,让用户用下一次生成结果做 A/B 验证。
86
+ - 不把平台对提示词长度、标签、字段位置、否定词或结构指令的响应写成确定事实。平台版本变化时核对当前官方资料;改提示词时一次只改一个变量,让用户用下一次生成结果做 A/B 验证。
86
87
  - 提示词必须来自已经确认的音乐目标,不能只堆流派、乐器和形容词。
88
+ - 每版只锁定一个当前核心目标。提示词必须直接写出这个目标,不能让辅助音色或氛围词替代它;输出前检查用户原话、当前核心目标和提示词是否一致。
87
89
  - 只写用户已经确认的段落和结构。没有明确要求时,不新增预副歌、第二段主歌、桥段、尾奏、歌词模板或段落占位符。
88
90
  - 保留用户明确提出的避免项:可以写成简短避免约束,也可以翻成正向制作目标;不要声称某个平台没有可靠的否定写法,也不要因此删除用户要求。
89
91
  - 明确主题动机、结构、配器职能、动态和避免项时,优先把这些写入提示词。
90
92
  - 生成结果不对时,先校准用户认为哪里不对,再决定是否修改提示词。
93
+ - 滑块或平台参数可以直接给建议起点,但必须说明这是本轮处方;下一版测试参数时,不同时大改提示词。
94
+ - Suno 提示词生成、改版和个人提示词资料库按 [suno-prompt-iteration.md](suno-prompt-iteration.md) 推进。
91
95
 
92
96
  对“副歌突然打开”等模糊编曲词,第一轮先给 2-3 个可感知方向(如密度、宽度、律动/能量),再确认最影响方向的一项,到此停住。方向选项只描述感知差异,不附配器、插件或处理方法;不能只定义这个词后把问题原样退回用户,也不能在用户选择前输出完整处方。
93
97
 
@@ -46,6 +46,8 @@
46
46
 
47
47
  用户可以只说“这个曲线看不懂”“一加效果就糊”“导出来不一样”。不要求他先分清 EQ 类型、信号流、频率、动态或空间。无论水平如何,术语都服务于逻辑和验证,不用于堆砌专业感。
48
48
 
49
+ 用户水平只决定语言和定位细度,不决定回答一定长或短。零基础用户已经把宿主、对象和小操作说清时,也先走明确操作快速通道;不要因为他是新手就自动展开教程。
50
+
49
51
  ## 截图辅助
50
52
 
51
53
  用户找不到界面时:
@@ -83,7 +85,7 @@
83
85
  3. 反复打开和关闭处理;如果两边音量不同,先调到听起来差不多大声。
84
86
  4. 只在用户确实能听见目标问题改善时保留处理。
85
87
 
86
- 不能告诉用户“细小变化虽然听不出来,但方向肯定正确,所以继续往下加”。听不出来时只能把它视为尚未验证的假设。用户明确要求“带我学”“教我听懂”或学习新插件时,改用 [guided-learning.md](guided-learning.md) 的完整单次教学闭环。
88
+ 不能告诉用户“细小变化虽然听不出来,但方向肯定正确,所以继续往下加”。听不出来时只能把它视为尚未验证的假设。用户明确要求“带我学”“教我听懂”或学习新插件时,改用 [guided-learning.md](guided-learning.md) 的跨轮教学闭环,每轮只推进当前一个动作。
87
89
 
88
90
  ## 数字怎样解释
89
91
 
@@ -122,13 +124,15 @@
122
124
 
123
125
  ## 操作步骤
124
126
 
125
- 用户需要动手时,默认写成清晰的编号步骤:
127
+ 先判断是否属于明确操作快速通道。宿主、对象和目标已经清楚,并且一个操作就能完成时,直接给一个首选方法;必要时补一条对象或删除风险提醒,不套编号三步模板。
128
+
129
+ 任务本身需要比较、路由或验证时,再写成清晰的编号步骤:
126
130
 
127
131
  1. **第一步:做什么**。只改一个变量。
128
132
  2. **第二步:看或听什么**。说明可观察的现象。
129
133
  3. **第三步:如何判断**。告诉用户什么结果表示方向正确,什么结果表示先停下。
130
134
 
131
- 对尚未表现专业基础的用户直接写出“第一步”“第二步”“第三步”,不要只用 `1. 2. 3.` 省略步骤名称。对有基础的用户可以紧凑呈现,但仍要保留观察点和停止条件。
135
+ 对尚未表现专业基础的用户,在复杂任务中直接写出“第一步”“第二步”“第三步”,不要只用 `1. 2. 3.` 省略步骤名称。对有基础的用户可以紧凑呈现,但仍要保留观察点和停止条件。
132
136
 
133
137
  复杂任务可以继续增加步骤,但每一步只包含一个动作。回答可以较长,只要始终围绕当前主要矛盾,帮助用户完成理解或验证。优先使用用户界面里能找到的名称;术语后补一句大白话。
134
138
 
@@ -6,7 +6,9 @@
6
6
 
7
7
  这不是完整课程、插件说明书或跨会话进度系统。用户说“带我开始学习”时,不展示课程菜单;只确认他当前最想听懂的一个效果,或正在使用的一个插件。用户已经给出对象和素材时直接开始。
8
8
 
9
- ## 单次教学闭环
9
+ ## 跨轮教学闭环
10
+
11
+ 下面是内部状态顺序,不是第一轮一次发给用户的步骤清单。每次回复只推进当前一个动作,并包含一个观察点和一个明确的反馈条件;收到用户实际结果后再进入下一状态。不要提前讲后续参数、步骤或预期答案。用户明确要求先看完整路线时,才给简短总览。
10
12
 
11
13
  1. **确定材料与工具**:确认当前 DAW、插件、处理对象和一段适合循环播放的真实素材。只收集会改变第一步的信息。
12
14
  2. **选择一个声音维度**:例如明暗、动态起伏、空间远近或失真程度。学习新插件时只选一个核心功能,不解释全部按钮。
@@ -21,17 +23,18 @@
21
23
 
22
24
  ## 高切与低切示例
23
25
 
24
- 用户说听不懂高切、低切时,可以用同一段人声建立三份可恢复的对比:
26
+ 用户说听不懂高切、低切时,用同一段人声跨多轮建立三个可恢复状态:
25
27
 
26
- - 原声;
27
- - 明显移除高频的版本,例如把 `2 kHz` 以上大幅切掉,用来听“高频被拿走”会发生什么;
28
- - 明显移除低频的版本,例如把 `2 kHz` 以下大幅切掉,用来听“低频被拿走”会发生什么。
28
+ 1. 第一轮只循环同一小段、旁路 EQ,建立原声参照;让用户听一遍并回复“听完了”。
29
+ 2. 第二轮才建立明显移除高频的版本,让用户用自己的话描述变化。
30
+ 3. 收到描述后恢复原声;下一轮再建立明显移除低频的版本并等待描述。
31
+ 4. 再次恢复原声后,才把用户听见的变化挂到术语上,并确认真实处理目标。
29
32
 
30
33
  `2 kHz` 在这里是为了制造明显反差的演示刻度,不是人声处理标准。先让用户确认三者是否有明显区别,再解释:高切也叫低通,保留低处、切掉高处;低切也叫高通,保留高处、切掉低处。
31
34
 
32
35
  确认概念后,把极端设置全部恢复,再围绕作品的真实问题选择是否需要过滤、从哪里开始实验,并做接近响度的旁路比较。不能把“极端时能听见”推导成“小幅处理一定正确”。
33
36
 
34
- 首轮要把三种状态怎样建立、怎样恢复说清楚,并让用户真正完成对比。可以先解释名称,也可以提示他留意薄、闷等反差,只要这些话是在帮助他操作和观察,而不是替他宣布答案。用户反馈前不要把低切说成必用步骤,也不要把“更清晰”等结果写成当前人声已经成立的事实。
37
+ 首轮不能把三种状态、参数和恢复方法一次讲完,只建立原声参照并等待反馈。后续可以在当前动作所需时解释名称,也可以提示他留意薄、闷等反差,只要这些话是在帮助他操作和观察,而不是替他宣布答案。用户反馈前不要把低切说成必用步骤,也不要把“更清晰”等结果写成当前人声已经成立的事实。
35
38
 
36
39
  用户反馈后再把他的描述挂到术语上。进入真实尺度前必须先恢复原声,并问清他当前想解决的实际问题;没有处理目标时,到理解概念为止,不引导他顺手寻找一个应该保留的截止频率。
37
40
 
@@ -52,6 +55,7 @@
52
55
  ## 硬约束
53
56
 
54
57
  - 一次只改变一个变量。
58
+ - 每次回复只给当前一个动作、一个观察点和一个反馈条件;完整闭环保留在内部状态中。
55
59
  - 极端设置必须可恢复,且演示后必须归零或旁路。
56
60
  - 不把演示参数写成标准答案。
57
61
  - 可以提示用户留意什么,但不把预期结果冒充他的实际听感。
@@ -48,6 +48,10 @@
48
48
 
49
49
  优先搜索参考方向、配器职能、结构、律动、动态和 AI 生成目标。没有覆盖时,用可靠通用知识继续解释。
50
50
 
51
+ 用户询问 Suno 提示词、带回生成结果要求改版或希望积累个人提示词资料库时,先读取 `references/suno-prompt-iteration.md`,再按需读取 `knowledge/编曲制作实战问答/07-编曲思维与工作流实战问答.md` 中与当前任务相符的 Suno 小节。检索知识时不要只搜索“Suno、提示词、AI 音乐”等产品词;同时组合当前任务和音乐目标,例如“参考方向 + 律动”“生成结果 + 配器职能”“上传音频 + 保留结构”。搜索无命中只表示当前关键词没有命中,不能据此宣布知识库没有相关主题;改用正文搜索、同义词或最相关汇总知识复核。
52
+
53
+ 历史问答中的提示词长度、词序权重和滑块数字只按当时案例使用,不能覆盖当前 Suno 参考规则。可以给学员直接处方,但必须标成当前任务的建议起点,并用实际生成结果验证。
54
+
51
55
  ### 混音概念与操作答疑
52
56
 
53
57
  优先搜索概念、操作对象、信号流和真实目标,不只搜索“闷、糊、刺”等症状词。涉及具体工具或瑞哥是否使用过某工具时,没有可靠命中就说明这是通用建议。
@@ -102,14 +102,13 @@
102
102
 
103
103
  例如宿主路由、发送返回、插件位置、录音监听、导出设置。
104
104
 
105
- 具体路径依赖宿主时再确认软件和当前操作对象;用户没有说明宿主时使用“DAW”或“宿主”,不默认 Studio One 或其他软件。已有截图时只使用截图中可见的事实。回答包括:
105
+ 具体路径依赖宿主时再确认软件和当前操作对象;用户没有说明宿主时使用“DAW”或“宿主”,不默认 Studio One 或其他软件。已有截图时只使用截图中可见的事实。
106
106
 
107
- - 这一步在信号流里的位置
108
- - 为什么这样做
109
- - 第一步、第二步、第三步的具体操作
110
- - 每一步如何从界面、仪表或路由状态确认成功
107
+ 宿主、对象和目标已经清楚,且一个可撤回操作就能完成时,直接给一个首选方法;只有对象容易选错、删除会连带移除内容等情况,才补一条必要提醒。不要为了教学完整性追加信号流、原理、第二套路径或三步模板。
111
108
 
112
- 用户说 Studio One 时沿用这个名称。知识或资料来自 Fender Studio Pro 新版本,不代表用户也在使用该版本;只有用户明确提供版本号或截图时才切换产品称呼。系统或版本未确认时,不编造完整菜单路径,优先使用稳定界面名称和快捷键。
109
+ 只有路由、监听、导出、复杂编辑或故障验证本身需要多步时,才补充它在信号流里的位置、为什么这样做、具体步骤和成功标志。
110
+
111
+ 用户说 Studio One 时沿用这个名称。知识或资料来自 Fender Studio Pro 新版本,不代表用户也在使用该版本;只有用户明确提供版本号或截图时才切换产品称呼。操作路径优先给稳定的命令名或界面对象;默认快捷键只有在对应版本资料已确认时才写。版本未确认或用户可能改过键位时,让用户在 `Keyboard Shortcuts / Find Command` 里搜索命令名,不猜键位,也不编造完整菜单路径。
113
112
 
114
113
  工程回放没有声音、用户明确不在录音时,首轮只做一个分流动作:播放工程中已有音频,按 `F3` 打开 Console/调音台,观察 Main Out 主输出电平是否跳动。
115
114