@gitruck/cli 0.2.4 → 0.2.6
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/AGENT.md +241 -241
- package/README.md +37 -8
- package/contracts/README.md +14 -0
- package/contracts/gsap-emit-v1.md +62 -0
- package/contracts/handoff-contracts.json +10 -0
- package/dist/index.js +2669 -1596
- package/package.json +62 -61
- package/skills/gtrk-splitter/SKILL.md +4 -2
- package/skills/gtrk-splitter/references/example-visual-split.json +14 -14
- package/skills/gtrk-splitter/references/field-schema.md +10 -3
- package/skills/gtrk-style-maker/SKILL.md +88 -0
- package/skills/gtrk-style-maker/references/ammo.md +16 -0
- package/skills/gtrk-style-maker/references/contracts-ref.md +9 -0
- package/skills/gtrk-style-maker/references/craft-output-spec.md +46 -0
- package/skills/gtrk-style-maker/references/seeds/README.md +4 -0
- package/skills/gtrk-style-maker/references/seeds/seed-ecom-home-goods.md +37 -0
- package/skills/gtrk-style-maker/references/seeds/seed-psych-humanities.md +35 -0
package/package.json
CHANGED
|
@@ -1,61 +1,62 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@gitruck/cli",
|
|
3
|
-
"version": "0.2.
|
|
4
|
-
"description": "同合云成片流水线 CLI —— agent 驱动云端任务、产物拉回本地、三方工程文件(客户端/剪映/PR)互通。",
|
|
5
|
-
"license": "MIT",
|
|
6
|
-
"author": "Gitruck (同合云)",
|
|
7
|
-
"repository": {
|
|
8
|
-
"type": "git",
|
|
9
|
-
"url": "git+https://github.com/Gitruck/cli.git"
|
|
10
|
-
},
|
|
11
|
-
"homepage": "https://github.com/Gitruck/cli#readme",
|
|
12
|
-
"bugs": {
|
|
13
|
-
"url": "https://github.com/Gitruck/cli/issues"
|
|
14
|
-
},
|
|
15
|
-
"type": "module",
|
|
16
|
-
"bin": {
|
|
17
|
-
"gtrk": "dist/index.js"
|
|
18
|
-
},
|
|
19
|
-
"files": [
|
|
20
|
-
"dist",
|
|
21
|
-
"assets",
|
|
22
|
-
"skills",
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
"
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
"
|
|
48
|
-
"
|
|
49
|
-
"
|
|
50
|
-
"
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
"
|
|
55
|
-
"
|
|
56
|
-
"
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@gitruck/cli",
|
|
3
|
+
"version": "0.2.6",
|
|
4
|
+
"description": "同合云成片流水线 CLI —— agent 驱动云端任务、产物拉回本地、三方工程文件(客户端/剪映/PR)互通。",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "Gitruck (同合云)",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/Gitruck/cli.git"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://github.com/Gitruck/cli#readme",
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/Gitruck/cli/issues"
|
|
14
|
+
},
|
|
15
|
+
"type": "module",
|
|
16
|
+
"bin": {
|
|
17
|
+
"gtrk": "dist/index.js"
|
|
18
|
+
},
|
|
19
|
+
"files": [
|
|
20
|
+
"dist",
|
|
21
|
+
"assets",
|
|
22
|
+
"skills",
|
|
23
|
+
"contracts",
|
|
24
|
+
"AGENT.md",
|
|
25
|
+
"README.md",
|
|
26
|
+
"LICENSE"
|
|
27
|
+
],
|
|
28
|
+
"engines": {
|
|
29
|
+
"node": ">=20.6"
|
|
30
|
+
},
|
|
31
|
+
"publishConfig": {
|
|
32
|
+
"access": "public",
|
|
33
|
+
"registry": "https://registry.npmjs.org/"
|
|
34
|
+
},
|
|
35
|
+
"keywords": [
|
|
36
|
+
"gitruck",
|
|
37
|
+
"同合云",
|
|
38
|
+
"video",
|
|
39
|
+
"oral-cut",
|
|
40
|
+
"口播剪辑",
|
|
41
|
+
"cli",
|
|
42
|
+
"jianying",
|
|
43
|
+
"剪映",
|
|
44
|
+
"agent"
|
|
45
|
+
],
|
|
46
|
+
"scripts": {
|
|
47
|
+
"gtrk": "bun run src/index.ts",
|
|
48
|
+
"build": "bun build ./src/index.ts --target=node --outfile dist/index.js",
|
|
49
|
+
"typecheck": "tsc --noEmit",
|
|
50
|
+
"prepublishOnly": "bun run build",
|
|
51
|
+
"test": "esbuild src/lib/chunk-upload.ts src/lib/render.ts src/lib/cloud.ts src/lib/materialize.ts src/lib/projection.ts src/lib/splitdoc.ts src/lib/gtrk-writeback.ts src/lib/column-config.ts src/lib/matrix.ts src/lib/matrix-lay.ts --bundle --platform=node --format=esm --outdir=.test-build --out-extension:.js=.mjs && esbuild src/commands/split.ts --bundle --platform=node --format=esm --outdir=.test-build --out-extension:.js=.mjs && esbuild src/commands/matrix.ts --bundle --platform=node --format=esm --outfile=.test-build/matrix-cmd.mjs && node --test \"test/*.test.mjs\""
|
|
52
|
+
},
|
|
53
|
+
"devDependencies": {
|
|
54
|
+
"bun-types": "^1.1.0",
|
|
55
|
+
"commander": "^12.1.0",
|
|
56
|
+
"esbuild": "^0.28.1",
|
|
57
|
+
"typescript": "^5.6.0"
|
|
58
|
+
},
|
|
59
|
+
"dependencies": {
|
|
60
|
+
"hash-wasm": "^4.12.0"
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -73,7 +73,7 @@ gtrk split --project "<oralcut产物目录>" --json
|
|
|
73
73
|
- `lane` 四选一 `A_ROLL | RRV_MG | AI_DRAMA | FILM_BROLL`;`base_track` 三选一 `真人出镜 | 口播继续 | 旁白主导`。
|
|
74
74
|
- **handoff 按 lane 分型**(校验器会硬查):
|
|
75
75
|
- `RRV_MG` → `handoff:{slug_hint?, theme?, bg?, duration_hint}`,**`duration_hint`(秒)必填**。
|
|
76
|
-
- `FILM_BROLL` → `handoff:{queries:[...非空], shots?, per_shot_sec?, exclude?}`,**`queries`
|
|
76
|
+
- `FILM_BROLL` → `handoff:{queries:[...非空], shots?, per_shot_sec?, exclude?}`,**`queries` 非空必填**;queries 写**英文长句场景描述**(一条一个意象,避多义动词),**exclude 保持中文**(细则见 field-schema)。
|
|
77
77
|
- `AI_DRAMA` → `handoff:{narrative?, theme?, emotion_stage?, platform?, shot_count?}`,全可选(下游 ai-drama-prompter 有推断默认)。
|
|
78
78
|
- `A_ROLL` → **无 handoff**(写了会被警告忽略)。
|
|
79
79
|
|
|
@@ -109,6 +109,8 @@ gtrk split "<拆分稿.json>" --project "<oralcut产物目录>" --md --json
|
|
|
109
109
|
|
|
110
110
|
## 拆分方法论(沿《实在界漫游指南》视觉语法精华)
|
|
111
111
|
|
|
112
|
+
> **词表随栏目配置**:下文的叙事功能(narrative)与容器阶段(container_stage)枚举、底轨三态,是**默认栏目《实在界漫游指南》的词表**,不是固定枚举。`gtrk split` 的校验源 = 有效栏目配置的 vocab(`--column <id>` 或 config `defaultColumn` 选取,配置文件在 `~/.gitruck/columns/<id>.json`);别的栏目可自定义自己的叙事语法(科普=论点/论据/结论、带货=痛点/卖点/促单……),配置 `fallback.unknown_narrative="allow"` 时甚至可用纯自由串。零配置 = 默认栏目,行为与下文完全一致。lane 四车道仍是硬枚举(管线承重面),不随 vocab 放宽。
|
|
113
|
+
|
|
112
114
|
### 四车道语义(lane 四选一)
|
|
113
115
|
|
|
114
116
|
- **`A_ROLL`(真人出镜)**:信任感来自「观众看见真人正在说」。优先给:体验式钩子、立场转换、关键悬念、情绪抱持、理论升华、结尾发问。
|
|
@@ -143,6 +145,6 @@ gtrk split "<拆分稿.json>" --project "<oralcut产物目录>" --md --json
|
|
|
143
145
|
- 有没有把本该真人承接的段落全交给 b-roll?
|
|
144
146
|
- span 里有没有混进 `dropped:true` 的句子?(会被跳过/收缩)
|
|
145
147
|
- beat 之间有没有重叠?id 区间有没有倒序?
|
|
146
|
-
- FILM_BROLL 有没有 queries
|
|
148
|
+
- FILM_BROLL 有没有 queries?是不是英文长句场景描述(不是中文/关键词堆叠)?exclude 是不是中文?RRV_MG 有没有 duration_hint?
|
|
147
149
|
- `transcript_hash` 是不是原样透传自视图?
|
|
148
150
|
- 拆分稿里有没有混进任何秒级时码字段?(必须零时码)
|
|
@@ -43,9 +43,9 @@
|
|
|
43
43
|
"irreplaceability": "可被 B-roll 替代",
|
|
44
44
|
"handoff": {
|
|
45
45
|
"queries": [
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"
|
|
46
|
+
"lonely person in a city apartment at night",
|
|
47
|
+
"exhausted commuter on a crowded subway train",
|
|
48
|
+
"couple arguing as their relationship falls apart"
|
|
49
49
|
],
|
|
50
50
|
"shots": 6,
|
|
51
51
|
"per_shot_sec": 2,
|
|
@@ -70,8 +70,8 @@
|
|
|
70
70
|
"irreplaceability": "可被 B-roll 替代",
|
|
71
71
|
"handoff": {
|
|
72
72
|
"queries": [
|
|
73
|
-
"
|
|
74
|
-
"
|
|
73
|
+
"sleepless person lying awake in bed late at night",
|
|
74
|
+
"couple giving each other the silent treatment after a fight"
|
|
75
75
|
],
|
|
76
76
|
"shots": 4,
|
|
77
77
|
"per_shot_sec": 2.5
|
|
@@ -178,7 +178,7 @@
|
|
|
178
178
|
"narrative": "trauma-repetition",
|
|
179
179
|
"theme": "freud-fort-da",
|
|
180
180
|
"emotion_stage": "abyssal",
|
|
181
|
-
"platform": "
|
|
181
|
+
"platform": "video-gen",
|
|
182
182
|
"shot_count": 5
|
|
183
183
|
},
|
|
184
184
|
"aux_layers": [
|
|
@@ -210,8 +210,8 @@
|
|
|
210
210
|
"irreplaceability": "可被 B-roll 替代",
|
|
211
211
|
"handoff": {
|
|
212
212
|
"queries": [
|
|
213
|
-
"
|
|
214
|
-
"
|
|
213
|
+
"hostile social media comment threads on a phone screen",
|
|
214
|
+
"aggressive messages flooding a glowing phone screen in the dark"
|
|
215
215
|
],
|
|
216
216
|
"shots": 5,
|
|
217
217
|
"per_shot_sec": 1.8,
|
|
@@ -244,8 +244,8 @@
|
|
|
244
244
|
"irreplaceability": "可被 B-roll 替代",
|
|
245
245
|
"handoff": {
|
|
246
246
|
"queries": [
|
|
247
|
-
"
|
|
248
|
-
"
|
|
247
|
+
"tall grass swaying in the wind on an empty plain",
|
|
248
|
+
"anonymous crowd walking past each other in a city street"
|
|
249
249
|
],
|
|
250
250
|
"shots": 4,
|
|
251
251
|
"per_shot_sec": 2.2
|
|
@@ -291,8 +291,8 @@
|
|
|
291
291
|
"irreplaceability": "可被 B-roll 替代",
|
|
292
292
|
"handoff": {
|
|
293
293
|
"queries": [
|
|
294
|
-
"
|
|
295
|
-
"
|
|
294
|
+
"glossy commercial for self-help therapy products",
|
|
295
|
+
"person venting anger by hitting a pillow in a bedroom"
|
|
296
296
|
],
|
|
297
297
|
"shots": 5,
|
|
298
298
|
"per_shot_sec": 1.8,
|
|
@@ -325,8 +325,8 @@
|
|
|
325
325
|
"irreplaceability": "可被 B-roll 替代",
|
|
326
326
|
"handoff": {
|
|
327
327
|
"queries": [
|
|
328
|
-
"
|
|
329
|
-
"
|
|
328
|
+
"couple stuck in the same recurring argument at home",
|
|
329
|
+
"child overshadowed by tension in a family living room"
|
|
330
330
|
],
|
|
331
331
|
"shots": 4,
|
|
332
332
|
"per_shot_sec": 2.5
|
|
@@ -53,11 +53,16 @@
|
|
|
53
53
|
// duration_hint(秒)必填;slug_hint / theme / bg 可选(bg 底色可由底轨态推导)
|
|
54
54
|
|
|
55
55
|
// lane === "FILM_BROLL"
|
|
56
|
-
"handoff": { "queries": ["
|
|
56
|
+
"handoff": { "queries": ["lonely person in a city apartment at night", "exhausted commuter on a crowded subway train"], "shots": 6, "per_shot_sec": 2, "exclude": ["卡通", "水印"] }
|
|
57
57
|
// queries(非空字符串数组)必填;shots / per_shot_sec / exclude 可选
|
|
58
|
+
// queries 语言规范(经真机中英 A/B 校准):
|
|
59
|
+
// - 用**英文长句场景描述**(5-12 词,谁+在哪+做什么),不是关键词堆叠——检索后端向量模型英文场景级命中明显更准
|
|
60
|
+
// - 每条 query 只装一个场景意象,多意象拆成多条
|
|
61
|
+
// - **避多义/字面义强的动词**("pointing" 会召回手指特写、"hunting" 召回猎人——改用 "giving suggestions in a meeting" 这类场景语义)
|
|
62
|
+
// - **exclude 保持中文**:负向过滤匹配的是服务端返回的中文 note,写英文会失效
|
|
58
63
|
|
|
59
64
|
// lane === "AI_DRAMA" —— 全可选(下游 ai-drama-prompter 有推断默认)
|
|
60
|
-
"handoff": { "narrative": "trauma-repetition", "theme": "freud-fort-da", "emotion_stage": "abyssal", "platform": "
|
|
65
|
+
"handoff": { "narrative": "trauma-repetition", "theme": "freud-fort-da", "emotion_stage": "abyssal", "platform": "video-gen", "shot_count": 5 }
|
|
61
66
|
|
|
62
67
|
// lane === "A_ROLL" —— 无 handoff
|
|
63
68
|
```
|
|
@@ -82,7 +87,9 @@
|
|
|
82
87
|
|
|
83
88
|
## 落地产物(CLI 写,供参照)
|
|
84
89
|
|
|
85
|
-
- **`.gtrk` 的 `struct_meta.split`**:`{contract_version, transcript_hash, projected_at, beats:[{id, lane, span, track_st, track_ed, shrunk?, handoff}]}`——投影时刻快照。**消费方要新鲜时码就重新投影**(`gtrk split --project`)。
|
|
90
|
+
- **`.gtrk` 的 `struct_meta.split`**:`{contract_version, transcript_hash, projected_at, material_id, beats:[{id, lane, span, track_st, track_ed, source_ranges, narrative, container_stage, visual_task, shrunk?, handoff}]}`——投影时刻快照。**消费方要新鲜时码就重新投影**(`gtrk split --project`)。
|
|
91
|
+
- `material_id`:口播素材 id(= transcript.material_id),消费方脱离 transcript 文件即可定位素材。
|
|
92
|
+
- `beats[].source_ranges`:`[{st, ed}]` 源时基秒(v1 恒单元素 = span 源包络,含句间静默与被剪词)——**源时基不随时间线编辑漂移**,消费方以「源区间 ∩ 当刻颗粒源窗口」投影可得实时覆盖(客户端色带跟随模式即此)。
|
|
86
93
|
- **`split/dispatch.json`**:`{rrv_mg:[{beat, composition_id, duration, theme, bg, slug_hint, track_st, track_ed}], film_broll:[{beat, queries, shots, per_shot_sec, exclude, track_st, track_ed}], ai_drama:[{beat, ...handoff, track_st, track_ed}]}`。`composition_id` = `<工程slug>-<beatId>`(rrv 颗粒 `data-composition-id` 直接用它,打通 beat↔颗粒命名)。
|
|
87
94
|
- **`split/visual-split.md`**(`--md`):由机器 JSON 单向渲染的人读稿,不回读。
|
|
88
95
|
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gtrk-style-maker
|
|
3
|
+
description: "能生产 skill 的 meta skill——通过启发式访谈引导视频创作者想清楚**他自己的**视觉语法,并把它落成**他自己的可执行 skill 家族**(黑盒、留本地)+ 栏目内共享词表 + 栏目配置登记。框架对审美零预设:不假设你有叙事结构、有容器概念、视觉分 MG/AI——你的维度(k)和取值(v)全部由你自己定义,本 skill 只提供「怎么想清楚」的工艺。当用户想「建一个新栏目/新频道的风格体系」「把我的审美沉淀成 skill」「做一个我自己的视觉 skill」「定义栏目风格规范/视觉语法」「栏目配置文档的 style 怎么填」「给我的栏目造一套创作工具」时使用本 skill。产出的 skill 落 ~/.claude/skills 即装即用,登记进 gtrk 栏目配置(style.skills)。"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# gtrk-style-maker · 造你自己的视觉 skill
|
|
7
|
+
|
|
8
|
+
你(AI)现在是一位**风格助产士**。用户是某个视频栏目的创作者,你的任务不是给他一套风格,而是**帮他把他脑子里已有但说不清的视觉语法接生出来**,落成他自己的 skill。
|
|
9
|
+
|
|
10
|
+
## 铁律(先读,贯穿全程)
|
|
11
|
+
|
|
12
|
+
1. **问证据,不问维度。** 你永远不出示任何「风格维度清单/表单」让用户挑选或填空。不假设他有叙事结构、有主题系统、视觉分动画/实拍——**每一个组织维度都必须从用户自己的话里长出来**。你问的是证据(作品、反例、工序、禁忌),维度是你从证据里帮他命名的,且命名要用他的词。
|
|
13
|
+
2. **卡壳追问 ≤3 条,且每条必须有触发语。** 用户说不清时,你可以用开放式追问,但:单次访谈此类追问不超过 3 条;每条必须引用用户已说的具体内容作为触发(「你刚才说 XX——那 YY 呢?」),并在访谈记录里标注触发语。**禁止**按任何预设清单逐项顺次遍历(疑问句版表单也是表单)。
|
|
14
|
+
3. **种子是案例,不是模板。** `references/seeds/` 里的种子演示「产出长什么样」,结构随栏目而异。用户的栏目跟种子不像时,从零引导,绝不套种子结构。
|
|
15
|
+
4. **产出必须可执行。** 最终交付的是标准 skill 目录(新会话即可触发干活),不是一份风格描述文档。
|
|
16
|
+
5. **管线接口全权威。** 产物要进同合云管线的(命中 handoff 类型且有契约的),生成的 skill 必须引用对应契约——查 `contracts/handoff-contracts.json` 映射表(随本 CLI 分发),**不要**自己记映射。
|
|
17
|
+
|
|
18
|
+
## 访谈工艺 · 七招
|
|
19
|
+
|
|
20
|
+
每招给做法 + 正反例 + 不适用分支。顺序可按对话自然流动调整,但 ①② 通常先行。
|
|
21
|
+
|
|
22
|
+
### ① 作品逆向(维度的出生地)
|
|
23
|
+
|
|
24
|
+
请用户拿出 **3-5 个「最像我/最像我想要的」** 的成片或参考作品,和 **2-3 个「绝对不是我」** 的反例。逐个问:「这条里**什么**让它像你?」「这条哪里让你生理不适?」
|
|
25
|
+
- ✅ 正例:用户说「我喜欢它信息密但颜色狠少」→ 你记下候选维度「信息密度」「色彩纪律」(用他的词)。
|
|
26
|
+
- ❌ 反例:你问「你的视觉 token 是什么?你有几个主题变体?」——这是拿别人的维度套他。
|
|
27
|
+
- **不适用分支**:从零新栏目没有自己的作品 → 全用他人作品:「找 3 条你看了会嫉妒的视频」。
|
|
28
|
+
|
|
29
|
+
### ② 禁令先行(最硬的护栏都是负面的)
|
|
30
|
+
|
|
31
|
+
问:「你的画面里**绝对不允许出现**什么?」「什么效果一出现你就觉得廉价?」
|
|
32
|
+
经验规律:创作者说不清「我的风格是什么」,但对「什么绝对不行」秒答,且禁令可执行、可自检、防漂移。把禁令原话记成条目。
|
|
33
|
+
- ✅ 正例:「绝不用彩虹渐变」「绝不加综艺花字」→ 直接进铁律区。
|
|
34
|
+
- ❌ 反例:把禁令翻译成「所以你的风格是极简」——不要急着正面归纳,禁令本身就是资产。
|
|
35
|
+
|
|
36
|
+
### ③ 从工序提决策树
|
|
37
|
+
|
|
38
|
+
问:「你自己动手做一个画面时,**第一个**问自己的问题是什么?第二个呢?」
|
|
39
|
+
他的实际决策顺序就是他 skill 的 Step 1/2/3。不要替他发明顺序。
|
|
40
|
+
- ✅ 正例:带货创作者说「先看这句是痛点还是卖点」→ 他的 Step 1 就是「判断痛点/卖点」。
|
|
41
|
+
- **不适用分支**:用户从没自己动手做过(纯外包)→ 改问「你验收时第一眼看什么?」——验收顺序也是决策树。
|
|
42
|
+
|
|
43
|
+
### ④ 铁律化 + 自检清单
|
|
44
|
+
|
|
45
|
+
每条风格主张必须配**可判定**的自检问句(「不是建议,是合同」)。说不出怎么判定的主张,降级为「倾向」,不进铁律。
|
|
46
|
+
- ✅ 正例:「留白要多」→ 追问触发:「你刚说留白要多——多到什么程度算违规?」→ 若答不出,记为倾向而非铁律。
|
|
47
|
+
- 生成的 skill 必须带「交付前自检清单」小节,逐条对应铁律。
|
|
48
|
+
|
|
49
|
+
### ⑤ 词表沉淀
|
|
50
|
+
|
|
51
|
+
访谈中**反复出现的自造词**(他给自己概念起的名字)逐个登记。这些词就是他栏目的语法词汇。
|
|
52
|
+
- 条件产出:家族 ≥2 个 skill **或** 沉淀出自造词时,单独产共享词表文件(家族各 skill 引用它,防多处定义漂移——这是血泪教训);单 skill 且无自造词时,词表并入 SKILL.md 一节即可。
|
|
53
|
+
|
|
54
|
+
### ⑥ 家族切分
|
|
55
|
+
|
|
56
|
+
用户有多条视觉产线时(如「有的段落做动画、有的用实拍素材」),按**产物类型/handoff** 切成多个 skill,每个 skill 开头写「**这个 skill 不做什么** → 找谁」互相路由。
|
|
57
|
+
- ✅ 正例:动画产线一个 skill、素材检索偏好一个 skill、封面一个 skill,各自声明边界。
|
|
58
|
+
- ⚠️ 探测其他产线时**别举具体产线例子**(举例=递维度)——问「除了这个,你还产别的东西吗?」就够了。
|
|
59
|
+
- **不适用分支**:单产线栏目不切家族,一个 skill 足够——不要为了「像样」硬拆。
|
|
60
|
+
|
|
61
|
+
### ⑦ exemplar 优先
|
|
62
|
+
|
|
63
|
+
每个 skill 至少规划 N 个**验证过的成品案例**(exemplar)收进 assets/。原则写给 skill:「案例是原则的具象化,不是填空答案」。
|
|
64
|
+
- **不适用分支**:产物不是可留存文件的产线(如实拍混剪的选片手感)→ 用「判例」代替:记录 3 个真实决策(这条为什么选/为什么毙)。
|
|
65
|
+
|
|
66
|
+
## 卡壳弹药(受铁律 2 约束)
|
|
67
|
+
|
|
68
|
+
用户彻底说不清时,可从 `references/ammo.md` 取**开放式追问**(如「有的栏目会锁死参考片单——你有看了就想抄的片子吗?」)。注意:弹药问的是**证据是否存在**,不是让他填维度;用了哪条、触发语是什么,记进访谈记录。
|
|
69
|
+
|
|
70
|
+
## 产出工序(访谈收敛后)
|
|
71
|
+
|
|
72
|
+
读 `references/craft-output-spec.md` 照做。概要:
|
|
73
|
+
|
|
74
|
+
1. **起 skill 目录**(用户作坊目录为正本,如 `D:\<他的工作区>\skills\<skill-name>\`):SKILL.md(frontmatter `name`+`description`,description 即触发器,写清「当用户想…时使用」)+ **README.md 必产**(含「正本→安装」单向流声明)+ 按需 references/ assets/。exemplar 一旦在 SKILL.md 里被引用就必须真实存在——「计划中的案例」不能以文件路径形式出现。skill 正文结构**由访谈产出的维度决定**,不套模板。
|
|
75
|
+
2. **契约绑定**:产物命中管线 handoff 类型的,查 `contracts/handoff-contracts.json`(本 CLI 包内);映射到契约的(如 HTML 动画颗粒 → gsap-emit v1),在 skill 中引用「契约名+版本」并把契约合规项加进其自检清单;映射为 null 或管线外产物,无此要求。
|
|
76
|
+
3. **共享词表**(条件产出,见第⑤招)。
|
|
77
|
+
4. **安装**:整目录拷到 `~/.claude/skills/<skill-name>/`(即装即用)。skill README 写明**「正本→安装」单向流**:源码正本在作坊,安装位是产物,改动先改正本再重装。
|
|
78
|
+
5. **登记**:把 `{id, ref: <正本路径>, produces: <handoff 类型或自造串>}` **追加**进本地栏目配置 `style.skills`(词表进 `style.shared`)。配置文件位置以 gtrk 的 paths 口径为准(当前 `~/.gitruck/columns/<栏目id>.json`);文件不存在则创建最小骨架 `{meta:{id},style:{skills:[…]}}`。**追加,绝不清空既有条目**。产物是管线外的(封面等),登记时加 `routing:"none"`。
|
|
79
|
+
|
|
80
|
+
## 交付前自检(你自己的 Quality Bar)
|
|
81
|
+
|
|
82
|
+
- [ ] 访谈记录里,产出 skill 的**每一个组织维度,首次都是用户说出的**(或从他的作品评语里直接引出的),不是我提出的?
|
|
83
|
+
- [ ] 我的提问里没有出现任何种子栏目/预设语系的概念名(用户自己先说的除外)?
|
|
84
|
+
- [ ] 卡壳追问 ≤3 条且每条有触发语记录?
|
|
85
|
+
- [ ] 产出 skill 有:触发器 description / 铁律(含禁令)/ 可判定自检清单 / exemplar 或判例计划?
|
|
86
|
+
- [ ] 契约绑定查了映射表(而不是凭记忆)?
|
|
87
|
+
- [ ] 栏目配置登记是**追加**语义,既有条目一条没丢?
|
|
88
|
+
- [ ] 已提醒用户:skill 是他的资产,留本地即可用;上传云端(claude.ai)是可选分发,非必需?
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# 卡壳弹药(受 SKILL.md 铁律 2 严格约束)
|
|
2
|
+
|
|
3
|
+
> **用法边界**:仅当用户明确卡壳时取用;单次访谈 ≤3 条;每条必须挂上用户已说内容作触发语并记录;**禁止逐条顺次遍历**(那是疑问句版表单)。这些问句问的是「某类证据在你这里存不存在」,不是让用户认领维度——他说「没有/不重要」就放下,绝不追销。
|
|
4
|
+
|
|
5
|
+
历史上有的栏目沉淀过以下几类资产。对应的开放式问法:
|
|
6
|
+
|
|
7
|
+
- **参考锚点类**:「有看了就想抄的片子/导演/画师吗?——你刚说想要 XX 的感觉,有现成的东西长这样吗?」
|
|
8
|
+
- **禁忌清单类**:「有没有哪种效果,一出现你就想关掉?」
|
|
9
|
+
- **色彩纪律类**:「你刚提到颜色——你的画面里颜色是谁说了算?有数量限制吗?」
|
|
10
|
+
- **重复仪式类**:「有没有什么东西你每期都会做一遍?(开场方式/某个符号/某种收尾)」
|
|
11
|
+
- **强调手段类**:「你想让观众'看这里'的时候,通常怎么做?这招用得多吗、有没有用滥的担心?」
|
|
12
|
+
- **文字出场类**:「文字在你画面里是什么身份——主角、旁注、还是尽量不出现?」
|
|
13
|
+
- **节奏习惯类**:「你剪东西时,什么时候觉得'该停一下了'?」
|
|
14
|
+
- **质感偏好类**:「你刚说不喜欢 XX 的廉价感——那你觉得'贵'的画面贵在哪?」
|
|
15
|
+
|
|
16
|
+
> 注意:以上是**证据探测方向**,不是维度清单。若用户对某方向给出实质回答,维度命名仍然用**他的原话**。
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# 契约库引用(正本不在这里)
|
|
2
|
+
|
|
3
|
+
框架契约库**正本** = `@gitruck/cli` 包内 `contracts/` 目录(管线资产归管线位置):
|
|
4
|
+
|
|
5
|
+
- `contracts/README.md` — 收录双轴边界(管线性 + 脱敏)
|
|
6
|
+
- `contracts/handoff-contracts.json` — handoff 类型 → 契约映射表(**查表,不硬编码**)
|
|
7
|
+
- `contracts/gsap-emit-v1.md` — HTML 动画颗粒逐帧 seek 合规契约 v1
|
|
8
|
+
|
|
9
|
+
定位方式:本 skill 经 `gtrk skills install` 安装时,CLI 包根即 `gtrk` 命令所属包(`npm root -g` 下的 `@gitruck/cli`,或开发仓根)。找不到包时,让用户跑 `gtrk doctor` 确认安装。
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# 产出物规范(craft-output-spec)
|
|
2
|
+
|
|
3
|
+
## 1. 用户 skill 目录解剖
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
<skill-name>/
|
|
7
|
+
├── SKILL.md # 必须。frontmatter: name + description(description 即触发器)
|
|
8
|
+
├── README.md # 必须。对人类的说明 + 「正本→安装」单向流声明(spec MUST)
|
|
9
|
+
├── references/ # 按需。深文档(渐进披露:SKILL.md 装不下的细则放这里)
|
|
10
|
+
├── assets/ # 按需。exemplar 成品/模板/素材
|
|
11
|
+
└── scripts/ # 按需。可执行工具
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
- **frontmatter 最小集**:`name`(kebab-case)+ `description`。description 决定触发——包含功能关键词 + 「当用户想「…」时使用本 skill」+ 触发短语枚举。这是生态实证的唯一触发机制,没有独立 trigger 字段。
|
|
15
|
+
- **自足性铁律**:skill 里要含齐干活所需的全部信息(或明确引用哪里查),不让运行时去猜。
|
|
16
|
+
- **正文结构由访谈维度决定**——用户的 Step 1 是什么,skill 的 Step 1 就是什么。唯一必备的三个小节:铁律(含禁令)、交付前自检清单、(多 skill 家族时)「这个 skill 不做什么 → 找谁」。
|
|
17
|
+
|
|
18
|
+
## 2. 「正本→安装」单向流(写进产出 skill 的 README)
|
|
19
|
+
|
|
20
|
+
> 本 skill 源码正本在 `<用户作坊路径>`;`~/.claude/skills/<name>/` 是安装产物。改动**永远先改正本**,再重新拷贝安装。云端(claude.ai capability)上传是可选的第三级分发,同样以作坊正本打包。
|
|
21
|
+
> ——副本漂移是有血泪教训的(同一枚举曾在 6 处定义、口径打架),单向流是唯一解法。
|
|
22
|
+
|
|
23
|
+
## 3. 共享词表(条件产出)
|
|
24
|
+
|
|
25
|
+
触发条件(任一):家族 ≥2 个 skill;访谈沉淀出自造词。
|
|
26
|
+
形态:单独一份 `_shared/<栏目>/vocab.md`(下划线前缀防误认成 skill),条目 = 词 + 定义 + 取值(如有)。各 skill **引用不复制**(需要内联值时标注「正本在词表,改值先改那里」)。文件头写治理规则:「新词先入表再用」。
|
|
27
|
+
不满足条件时:词表内容并入 SKILL.md 一节。
|
|
28
|
+
|
|
29
|
+
## 4. 栏目配置登记
|
|
30
|
+
|
|
31
|
+
- 位置:以 gtrk paths 口径为准(当前 `~/.gitruck/columns/<栏目id>.json`;权威在 CLI 的 paths 模块,本文档不是路径权威源)。
|
|
32
|
+
- 写法:**追加**进 `style.skills` / `style.shared` 数组,绝不清空既有条目;文件不存在则创建最小骨架。
|
|
33
|
+
- 条目:`{ "id": "<skill-name>", "ref": "<正本绝对路径>", "produces": "<handoff 类型或用户自造串>" }`;管线外产物(封面、周边图等)加 `"routing": "none"`(豁免疑似拼写提示)。
|
|
34
|
+
- `produces` 是登记不是审批:写用户自造串完全合法(框架静默惰性登记);只有命中管线 handoff 注册集的才参与派单路由。
|
|
35
|
+
|
|
36
|
+
## 5. 契约绑定
|
|
37
|
+
|
|
38
|
+
查 `contracts/handoff-contracts.json`(随 @gitruck/cli 分发,包内相对路径 `contracts/`;本 skill 安装后可从 CLI 包根定位)。规则:
|
|
39
|
+
- `produces` 命中注册集 **且** 映射表给出契约 → 生成的 skill 必须:①引用「契约名+版本」(如 `gsap-emit v1`,契约文档在 `contracts/<doc>`);②把契约合规项列进自检清单(如:template 包裹?paused 时间线注册?无 random/Date?字面值无 var()?)。
|
|
40
|
+
- 映射为 `null`(暂无契约)或管线外产物 → 无绑定要求,照常生成。
|
|
41
|
+
- **永远查表,不硬编码映射**——契约升版/新增时表会更新。
|
|
42
|
+
|
|
43
|
+
## 6. 收尾提醒(给用户)
|
|
44
|
+
|
|
45
|
+
- skill 留本地即完整可用;上传 claude.ai(打包 .skill zip)是**可选**分发,供网页/移动端触发。
|
|
46
|
+
- 后续迭代:改作坊正本 → 重拷 `~/.claude/skills/` → (可选)重新打包上传。
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# 种子 · 家居好物带货栏目(「李姐严选」削减版)
|
|
2
|
+
|
|
3
|
+
一人主理的家居好物口播带货号。访谈收敛出的家族:**1 个 skill(单产线不切)+ 词表并入 SKILL.md**。
|
|
4
|
+
|
|
5
|
+
## 组织维度(全部来自栏目主自己的语言)
|
|
6
|
+
|
|
7
|
+
- **Step 1 = 痛点**:她的第一判断是「这货到底解决啥难受」——痛点必须**能拍出来**(一滩酱油/一声「咔」/一个乱抽屉),开头三秒戳它;且次序铁定「先戳痛点再亮卖点,反了人就划走」。痛点找不着,这单不接。
|
|
8
|
+
- **第二维度 = 上手**:信任感的唯一来源是「真人上手」——手 + 货 + 使劲的动作同画面,环境必须是过日子的地方;演不出来的卖点降级为嘴上带过,不给镜头。
|
|
9
|
+
- **第三维度 = 砸价**:价格是一个「出场动作」,不是一条信息——三选一判定(手上动作 / 憋一下再喊 / 全屏只剩一个大数),且砸之前全篇不许漏价。
|
|
10
|
+
- **第四维度 = 现在就买的理由**:结尾闭环,最后一句必须给一个说得出口的理由(马上用得上的场景 / 限时 / 赠品),不许只说「喜欢的拍」。
|
|
11
|
+
- **负面护栏 = 廉价感**:她说不出「风格是什么」,但对「什么显得廉价」秒答——七条禁令(综艺花字/满屏贴纸/「duang」类音效/抠图假背景/磨皮到看不清货/机器人配音/价格缩在角落小字)是全套规矩里最硬的资产。
|
|
12
|
+
|
|
13
|
+
## 铁律(禁令先行的产物,节选)
|
|
14
|
+
|
|
15
|
+
- 廉价感七条禁令,中一条即重剪。
|
|
16
|
+
- 前三秒只许出现「难受」:不许品牌、自我介绍、价格、参数。
|
|
17
|
+
- 砸价三选一,占零样 = 念价格,返工;砸前漏价 = 白砸。
|
|
18
|
+
- 字幕最多两行大白字;真人原声,带口音也不换机器配音。
|
|
19
|
+
- 每条铁律配自检问句(例:「只看前三秒,看没看见一个具体的难受?」「砸价那一秒,三样占了几样?」「最后五秒能不能一句话复述那个现在就买的理由?」)。
|
|
20
|
+
|
|
21
|
+
## 家族切分
|
|
22
|
+
|
|
23
|
+
单产线不切家族:只有一条产线(带货片子),封面从片中截帧、不单独生产 → 1 个 skill 足够。`produces` = 自造串「带货台本」,查 handoff 映射表未命中注册集 → 无契约绑定,登记加 `routing:"none"`。
|
|
24
|
+
|
|
25
|
+
## 词表(并入 SKILL.md 一节)
|
|
26
|
+
|
|
27
|
+
已沉淀自造词,但家族仅 1 个 skill、无跨文件漂移面 → 词表并入 SKILL.md,并写明「出现第二个 skill 时整节迁出为 `_shared` 词表,各 skill 引用不复制」。词条(全部她的原词):
|
|
28
|
+
|
|
29
|
+
**痛点 / 卖点 / 上手 / 砸价 / 信任感 / 廉价感 / 划走 / 台本**(产物名)。
|
|
30
|
+
|
|
31
|
+
## 自检结构
|
|
32
|
+
|
|
33
|
+
自检清单逐条对应铁律,问句全部可判定、且用她的词(「砸价那一秒三样占了几样?」而非「价格强调是否充分?」)。给不出判定阈值的主张(「亮堂」「干净」「东西少」——她的原话「说不上数,凭眼睛」)降级为「倾向」,单列一节,不进铁律、不进自检硬条目。
|
|
34
|
+
|
|
35
|
+
## 这个种子教你什么
|
|
36
|
+
|
|
37
|
+
维度名(痛点/上手/砸价/廉价感/划走)**只属于这个栏目**。可迁移的是形态:①**负面维度可以当第一等组织维度**——说不出「我是什么」但秒答「什么绝对不行」的创作者,禁令清单就是骨架;②**次序本身可以是铁律**(先痛后卖),不只是内容主张;③判定不了的主张降级为倾向,绝不硬凑阈值;④单产线绝不硬拆家族;⑤`produces` 写自造串完全合法——框架静默登记,管线外加 `routing:"none"` 即可,不逼创作者学管线词汇。
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# 种子 · 心理学人文栏目(《实在界漫游指南》削减版)
|
|
2
|
+
|
|
3
|
+
一人公司的心理学/人文知识口播频道。访谈收敛出的家族:**4 个 skill + 1 份共享词表**。
|
|
4
|
+
|
|
5
|
+
## 组织维度(全部来自栏目主自己的语言)
|
|
6
|
+
|
|
7
|
+
- **Step 1 = 叙事功能**:栏目主的第一判断是「这段话在叙事里干什么」——七个功能各占三阶段结构的一个位置(钩子/打击/翻译/坠落/抱持/升华/回扣),另有一个不占位置的修辞强调(金句大字)。**组件按叙事职责分类,不按形状分类**——这是他自己说出的核心取向。
|
|
8
|
+
- **第二维度 = 主题变体**:每期有一个「容器概念」(借一个学科意象翻译心理理论),容器决定当期强调色;跨期不变项(字体/间距/单点强调色纪律)与可变项(accent/底色)显式两栏。
|
|
9
|
+
- **第三维度 = 时间**:长段叙事按内部 Act 切分 + 元素生命周期表(哪个元素哪一刻入场/退场)。
|
|
10
|
+
|
|
11
|
+
## 铁律(禁令先行的产物,节选)
|
|
12
|
+
|
|
13
|
+
- 绝不引入平台角标水印;绝不用渐变/3D/投影(涵容类软轮廓除外)。
|
|
14
|
+
- 单点强调色纪律:一个画面最多一个红点,**且不是每个画面都要有**——只有需要明显强调的画面才加(稀缺性=强调的前提,实测泛滥即审美疲劳)。
|
|
15
|
+
- 概念词首次亮相 = 衬线 Heavy 大字加宽字距的固定仪式,第二次出现即降回正文。
|
|
16
|
+
- 每条铁律配自检问句(例:「这一镜真的需要红点吗?」「同画面字号层级 ≤3?」)。
|
|
17
|
+
|
|
18
|
+
## 家族切分(按 handoff 类型)
|
|
19
|
+
|
|
20
|
+
| skill | 产什么 | produces | 契约 |
|
|
21
|
+
|---|---|---|---|
|
|
22
|
+
| 拆分派单器 | 全片 beat 派单文档 | —(管线文档生产者,不登记) | — |
|
|
23
|
+
| 动态图生成 | HTML 动画颗粒 | RRV_MG | gsap-emit v1(合规项进自检) |
|
|
24
|
+
| AI 再现分镜 | 双语分镜提示词文本 | AI_DRAMA | 暂无契约 |
|
|
25
|
+
| 封面设计 | 文生图 prompt + 排字工作台 | cover + routing:"none" | 管线外 |
|
|
26
|
+
|
|
27
|
+
每个 skill 开头声明「这个 skill 不做什么 → 找谁」。
|
|
28
|
+
|
|
29
|
+
## 共享词表(漂移的解药)
|
|
30
|
+
|
|
31
|
+
叙事功能枚举曾在 6 处独立定义、数目口径打架;颜色 token 双份硬编码。收口后:一份 `_shared/<栏目>/vocab.md` 单点定义(枚举/色值/叫法/悬置区),各 skill 引用不复制,「新词先入表再用」。
|
|
32
|
+
|
|
33
|
+
## 这个种子教你什么
|
|
34
|
+
|
|
35
|
+
维度名(叙事功能/容器/红点)**只属于这个栏目**。可迁移的是形态:①用户的 Step 1 就是 skill 的 Step 1;②禁令比正面描述硬;③铁律必配自检;④多产线才切家族、切了就要互相路由;⑤共享词一旦出现在两个 skill 里就该进词表。
|