@rune-kit/rune 2.22.2 → 2.24.0
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 +33 -6
- package/compiler/__tests__/adapter-model-mapping.test.js +6 -6
- package/compiler/__tests__/adapters.test.js +88 -30
- package/compiler/__tests__/pack-split.test.js +5 -2
- package/compiler/__tests__/pipeline.test.js +6 -6
- package/compiler/__tests__/scripts-bundling.test.js +29 -19
- package/compiler/__tests__/transformer.test.js +4 -4
- package/compiler/adapters/antigravity.js +1 -5
- package/compiler/adapters/codex.js +39 -10
- package/compiler/adapters/copilot.js +26 -29
- package/compiler/adapters/cursor.js +23 -15
- package/compiler/adapters/gemini.js +25 -48
- package/compiler/adapters/qoder.js +14 -14
- package/compiler/adapters/qwen.js +16 -22
- package/compiler/adapters/windsurf.js +29 -7
- package/compiler/emitter.js +5 -4
- package/compiler/parser.js +11 -2
- package/extensions/ai-ml/skills/llm-architect.md +3 -3
- package/package.json +1 -1
- package/skills/adversary/references/oracle-mode.md +3 -2
- package/skills/ba/SKILL.md +6 -1
- package/skills/cook/SKILL.md +19 -1
- package/skills/marketing/SKILL.md +26 -1
- package/skills/mcp-builder/SKILL.md +2 -2
- package/skills/plan/SKILL.md +13 -2
- package/skills/review/SKILL.md +20 -2
- package/skills/session-bridge/SKILL.md +2 -2
- package/skills/video-creator/SKILL.md +74 -2
|
@@ -42,8 +42,9 @@ Emit `oracle.dispatched` carrying `{sessionId, triggerSignal, sourceSkill, targe
|
|
|
42
42
|
|
|
43
43
|
| Target model | Protocol |
|
|
44
44
|
|--------------|----------|
|
|
45
|
-
| sonnet-class (gpt-5, gemini-3-flash, claude-sonnet) | Synchronous — block until reply or 60s timeout |
|
|
46
|
-
| opus-class (gpt-5-
|
|
45
|
+
| sonnet-class (gpt-5.6-terra, gemini-3-flash, claude-sonnet-5) | Synchronous — block until reply or 60s timeout |
|
|
46
|
+
| opus-class (gpt-5.6-sol, gemini-3-pro, claude-opus-4-8) | Async — primary agent continues; poll `.rune/oracle-pending/<sessionId>.json` between phases |
|
|
47
|
+
| frontier-class (claude-fable-5, API-only) | Async, heaviest second opinion for the hardest red-team / architecture calls. **API-only** — not available on a subscription runtime, so reach it via an API key or a non-Anthropic CLI, never via the primary Claude Code session's model. Thinking is always on (control depth with `effort`, do not send a `thinking` param) and it can return a `refusal` stop reason — treat a refusal as "no oracle reply", fall back to opus-class. |
|
|
47
48
|
|
|
48
49
|
### 5. Validate response
|
|
49
50
|
|
package/skills/ba/SKILL.md
CHANGED
|
@@ -3,7 +3,7 @@ name: ba
|
|
|
3
3
|
description: "Business Analyst agent. Use when starting a new feature requiring requirements elicitation BEFORE plan or cook. Asks probing questions, identifies hidden requirements, maps stakeholders, defines scope boundaries, and produces a structured Requirements Document that plan and cook consume."
|
|
4
4
|
metadata:
|
|
5
5
|
author: runedev
|
|
6
|
-
version: "1.2.
|
|
6
|
+
version: "1.2.1"
|
|
7
7
|
layer: L2
|
|
8
8
|
model: opus
|
|
9
9
|
group: creation
|
|
@@ -19,6 +19,11 @@ Business Analyst agent — the ROOT FIX for "Claude works a lot but produces not
|
|
|
19
19
|
|
|
20
20
|
> Wrong requirements shipped correctly is the most expensive bug. BA's job is to prevent it — measure clarity (Step 2.5), measure completeness (Step 3.5), and measure cross-dimension consistency (Step 3.6) before handoff.
|
|
21
21
|
|
|
22
|
+
> **Goal-first (advisory, 2026).** The Requirements Document is the goal spec current
|
|
23
|
+
> models want up front. Where the platform has a native goal/outcome command — Claude
|
|
24
|
+
> Code `/goal`, Managed Agents Outcomes (rubric) — seed it from this document's scope
|
|
25
|
+
> boundaries + acceptance criteria so the whole run stays anchored to the agreed WHAT.
|
|
26
|
+
|
|
22
27
|
<HARD-GATE>
|
|
23
28
|
BA produces WHAT, not HOW. Never write code. Never plan implementation.
|
|
24
29
|
Output is a Requirements Document → hand off to rune:plan for implementation planning.
|
package/skills/cook/SKILL.md
CHANGED
|
@@ -5,7 +5,7 @@ context: fork
|
|
|
5
5
|
agent: general-purpose
|
|
6
6
|
metadata:
|
|
7
7
|
author: runedev
|
|
8
|
-
version: "2.
|
|
8
|
+
version: "2.7.0"
|
|
9
9
|
layer: L1
|
|
10
10
|
model: sonnet
|
|
11
11
|
group: orchestrator
|
|
@@ -379,6 +379,24 @@ If the coder model needs info from other phases, it's in the Cross-Phase Context
|
|
|
379
379
|
|
|
380
380
|
**REQUIRED SUB-SKILL**: Use `rune:fix`
|
|
381
381
|
|
|
382
|
+
### Reuse Ladder (climb before you write)
|
|
383
|
+
|
|
384
|
+
Before writing the code for each task, climb this ladder and stop at the first rung that holds. Advisory, not a gate — it shapes *what* you write, never blocks the phase. Runs AFTER you understand the change (scout done, plan approved), never as a substitute for tracing the real flow.
|
|
385
|
+
|
|
386
|
+
1. **Needs to exist at all?** Speculative need → skip it, say so in one line (YAGNI).
|
|
387
|
+
2. **Already in this codebase?** A helper, util, type, or pattern that already lives here → reuse it. Re-implementing what sits a few files over is the most common slop — `Grep` before you write.
|
|
388
|
+
3. **Stdlib does it?** Use it.
|
|
389
|
+
4. **Native platform feature covers it?** DB constraint over app code, CSS over JS, `<input type="date">` over a picker lib.
|
|
390
|
+
5. **Already-installed dependency solves it?** Use it. Never add a new dep for what a few lines cover.
|
|
391
|
+
6. **One line?** Make it one line.
|
|
392
|
+
7. **Only then** — the minimum code that makes the test pass.
|
|
393
|
+
|
|
394
|
+
Two rungs work → take the higher one and move on. Mark a deliberate shortcut with a `// yagni:` comment naming its ceiling + upgrade path (`// yagni: global lock — per-account locks if throughput matters`) so the De-Sloppify Pass and later readers see intent, not ignorance.
|
|
395
|
+
|
|
396
|
+
**Bug-fix corollary** — the lazy fix IS the root-cause fix: `Grep` every caller of the function you're about to touch, then fix the shared function once. One guard where all callers route through is a smaller diff than one guard per caller — and patching only the path the ticket names leaves every sibling caller still broken.
|
|
397
|
+
|
|
398
|
+
**Never lazy about**: understanding the problem, input validation at trust boundaries, error handling that prevents data loss, security, accessibility, anything explicitly requested. The ladder shortens the solution, never the reading — a small diff you don't understand is a confident wrong fix, not laziness.
|
|
399
|
+
|
|
382
400
|
1. Mark Phase 4 as `in_progress`
|
|
383
401
|
2. **Phase-file execution** — if working from a master plan + phase file:
|
|
384
402
|
- Execute tasks from `## Tasks` section wave-by-wave
|
|
@@ -3,7 +3,7 @@ name: marketing
|
|
|
3
3
|
description: "Create marketing assets and execute launch strategy. Use when crafting landing copy, social banners, SEO meta, blog posts, or video scripts — coordinates with launch (deploy + announce) and the @rune-pro/growth pack (research / content / CRO)."
|
|
4
4
|
metadata:
|
|
5
5
|
author: runedev
|
|
6
|
-
version: "0.
|
|
6
|
+
version: "0.7.0"
|
|
7
7
|
layer: L2
|
|
8
8
|
model: sonnet
|
|
9
9
|
group: delivery
|
|
@@ -183,6 +183,28 @@ Produce ready-to-post content:
|
|
|
183
183
|
|
|
184
184
|
**Product Hunt tagline** (under 60 characters)
|
|
185
185
|
|
|
186
|
+
### Step 4.5 — Caption Doctrine (captions that start conversations)
|
|
187
|
+
|
|
188
|
+
A social caption's job is NOT to summarize the post/video — it's to HOOK a scroller and
|
|
189
|
+
start a conversation. A caption that re-tells the content is dead weight ("headline, not
|
|
190
|
+
transcript"). Apply this to every caption attached to the Step 4 posts and to any video/
|
|
191
|
+
image ship.
|
|
192
|
+
|
|
193
|
+
**Format (4 short pieces, whole caption well under ~500 chars):**
|
|
194
|
+
1. **Hook line** (~100 chars max — mobile feeds truncate around ~125 chars and most readers never tap "See more"): tension / curiosity / bold claim, in DIFFERENT words than the content's own hook.
|
|
195
|
+
2. **Optional context line** (~90 chars): ONE extra stake / number / twist the content doesn't spell out. Not a plot summary.
|
|
196
|
+
3. **One genuine open-ended question**: real opinion, many valid answers ("How much do you usually bump budget each time?"). This is the comment engine.
|
|
197
|
+
4. **Soft CTA to the first comment**: "link in the first comment 👇".
|
|
198
|
+
|
|
199
|
+
**Platform reality checklist (2025):**
|
|
200
|
+
- **Link goes in the FIRST COMMENT, never the caption body.** Top-performing FB content is overwhelmingly linkless and platforms downrank in-body links (widely reported).
|
|
201
|
+
- **No engagement bait.** Meta demotes explicit begging ("comment YES if…", "tag a friend", react/share requests). Genuine opinion questions are exempt and encouraged.
|
|
202
|
+
- **0-1 hashtag, never a wall** — Meta flags an "inordinate amount of hashtags" as spam.
|
|
203
|
+
- **Max 3 emoji** (emotional ones) or none. No em-dash. No superlatives ("best ever", "game-changer", "revolutionary").
|
|
204
|
+
- **NEVER transcript the content.** If the caption reads like the voiceover or the post body, rewrite it.
|
|
205
|
+
|
|
206
|
+
**Long-form intro posts** (a detailed FB/LinkedIn intro, distinct from a short caption): every paragraph ≤ 2 lines with a blank line between, keep technical terms in their usual form, include one honest caveat, humble tone — no oversell, no hashtag wall, link still in the first comment.
|
|
207
|
+
|
|
186
208
|
### Step 5 — SEO metadata
|
|
187
209
|
|
|
188
210
|
Produce for the landing page:
|
|
@@ -318,6 +340,9 @@ Known failure modes for this skill. Check these before declaring done.
|
|
|
318
340
|
| Counter-playbook without detection mechanism | HIGH | Every scenario needs a monitoring method — "watch for price drops" is useless without specifying WHERE to watch and HOW to automate |
|
|
319
341
|
| Counter-playbook with unrealistic response windows | MEDIUM | If response window is 24h but pre-built assets don't exist, the playbook will fail — either extend window or create assets NOW |
|
|
320
342
|
| Generating counter-playbook for blue ocean products | LOW | Skip Step 3.5 if no direct competitors — counter-strategies need someone to counter |
|
|
343
|
+
| Caption that transcripts/summarizes the content | MEDIUM | Step 4.5: caption is a HOOK, not a recap — if it reads like the post body, rewrite. Add a genuine question to drive comments |
|
|
344
|
+
| Link placed in caption body instead of first comment | MEDIUM | Step 4.5: platforms downrank in-body links — link goes in the first comment; caption body stays linkless |
|
|
345
|
+
| Engagement-bait or hashtag wall in captions | MEDIUM | Step 4.5: Meta demotes "comment YES / tag a friend" and hashtag walls — use 0-1 hashtag and a real opinion question |
|
|
321
346
|
|
|
322
347
|
## Done When
|
|
323
348
|
|
|
@@ -370,8 +370,8 @@ When building MCP servers that call AI providers, support **dual-model configura
|
|
|
370
370
|
```typescript
|
|
371
371
|
// config.ts
|
|
372
372
|
const config = {
|
|
373
|
-
primaryModel: process.env.PRIMARY_MODEL || 'claude-sonnet-
|
|
374
|
-
backgroundModel: process.env.BACKGROUND_MODEL || 'claude-haiku-4-5
|
|
373
|
+
primaryModel: process.env.PRIMARY_MODEL || 'claude-sonnet-5',
|
|
374
|
+
backgroundModel: process.env.BACKGROUND_MODEL || 'claude-haiku-4-5',
|
|
375
375
|
};
|
|
376
376
|
```
|
|
377
377
|
|
package/skills/plan/SKILL.md
CHANGED
|
@@ -3,7 +3,7 @@ name: plan
|
|
|
3
3
|
description: "Create structured implementation plans from requirements. Produces master plan + phase files for enterprise-scale project management. Master plan = overview (<80 lines). Phase files = execution detail (<200 lines each). Each session handles 1 phase. Uses opus for deep reasoning."
|
|
4
4
|
metadata:
|
|
5
5
|
author: runedev
|
|
6
|
-
version: "1.7.
|
|
6
|
+
version: "1.7.1"
|
|
7
7
|
layer: L2
|
|
8
8
|
model: opus
|
|
9
9
|
group: creation
|
|
@@ -22,6 +22,17 @@ Strategic planning engine for the Rune ecosystem. Produces a **master plan + pha
|
|
|
22
22
|
|
|
23
23
|
This is enterprise-grade project management: BA produces WHAT → Plan produces HOW (structured into phases) → ANY coder executes each phase with full context.
|
|
24
24
|
|
|
25
|
+
> **Goal-first — leverage native goal/outcome commands (advisory, 2026).** Current
|
|
26
|
+
> agent models (Opus 4.8, Sonnet 5, and the API-only Fable) perform best when handed
|
|
27
|
+
> the full goal + constraints up front, then left to execute at high effort. Some
|
|
28
|
+
> platforms now expose this natively: Claude Code `/goal` sets a run's north-star;
|
|
29
|
+
> Managed Agents **Outcomes** (`user.define_outcome` + rubric) grade-and-iterate to a
|
|
30
|
+
> target. The master plan IS that goal contract in durable form — when a native
|
|
31
|
+
> goal/outcome command is present, seed it from the master plan's Overview +
|
|
32
|
+
> acceptance criteria instead of re-stating the goal loosely. Advisory only: the
|
|
33
|
+
> master plan + phase files stay the source of truth on every platform (goal/Outcome
|
|
34
|
+
> are single-session; the plan survives across sessions and platforms).
|
|
35
|
+
|
|
25
36
|
<HARD-GATE>
|
|
26
37
|
NEVER produce a single monolithic plan file for non-trivial tasks.
|
|
27
38
|
Non-trivial = 3+ phases OR 5+ files OR estimated > 100 LOC total change.
|
|
@@ -402,7 +413,7 @@ Append to plan output when invoked standalone. Suppress when called as sub-skill
|
|
|
402
413
|
```yaml
|
|
403
414
|
chain_metadata:
|
|
404
415
|
skill: "rune:plan"
|
|
405
|
-
version: "1.7.
|
|
416
|
+
version: "1.7.1"
|
|
406
417
|
status: "[DONE | DONE_WITH_CONCERNS | NEEDS_CONTEXT | BLOCKED]"
|
|
407
418
|
domain: "[area planned]"
|
|
408
419
|
files_changed:
|
package/skills/review/SKILL.md
CHANGED
|
@@ -3,7 +3,7 @@ name: review
|
|
|
3
3
|
description: "Code quality review — patterns, security, performance, correctness. Finds bugs, suggests improvements, triggers fix for issues found. Escalates to opus for security-critical code."
|
|
4
4
|
metadata:
|
|
5
5
|
author: runedev
|
|
6
|
-
version: "1.
|
|
6
|
+
version: "1.3.0"
|
|
7
7
|
layer: L2
|
|
8
8
|
model: sonnet
|
|
9
9
|
group: development
|
|
@@ -296,6 +296,24 @@ Proceed to Step 6 only after Stage 1 passes. Code quality findings (bugs, patter
|
|
|
296
296
|
|
|
297
297
|
The review report MUST show both stages: spec compliance verdict first, then code quality findings.
|
|
298
298
|
|
|
299
|
+
### Step 5.7: Subtractive Pass (over-engineering lens)
|
|
300
|
+
|
|
301
|
+
Stage 1 catches SPEC-CREEP (unrequested *features*). This pass goes further: it hunts complexity worth **deleting** even inside requested scope, and reports it as a one-line-per-finding cut list with a net-lines total. Run it on any diff that adds a class, wrapper, config option, or dependency. Skip for pure config/docs/style diffs.
|
|
302
|
+
|
|
303
|
+
Tag each finding, one line: `<file>:L<line>: <tag> <what>. <replacement>.`
|
|
304
|
+
|
|
305
|
+
| Tag | Cuts | Replacement |
|
|
306
|
+
|-----|------|-------------|
|
|
307
|
+
| `delete:` | Dead code, unused flexibility, speculative feature | Nothing |
|
|
308
|
+
| `stdlib:` | Hand-rolled thing the standard library ships | Name the function |
|
|
309
|
+
| `native:` | Dependency or code doing what the platform already does | Name the feature |
|
|
310
|
+
| `yagni:` | Abstraction with one implementation, config nobody sets, layer with one caller | Inline it until a 2nd caller exists |
|
|
311
|
+
| `shrink:` | Same logic, fewer lines | Show the shorter form |
|
|
312
|
+
|
|
313
|
+
End with the only metric that matters: `net: -<N> lines, -<M> deps possible.` Nothing to cut → `Lean already.` and move on.
|
|
314
|
+
|
|
315
|
+
**Ranking discipline**: these are LOW/MEDIUM findings (complexity, not correctness) — a subtractive suggestion NEVER outranks a real bug. A single smoke test or assert-based self-check is the ponytail minimum, not bloat — never flag it for deletion. This pass lists cuts; it does not apply them (route to `rune:fix`).
|
|
316
|
+
|
|
299
317
|
### Step 6: Report
|
|
300
318
|
|
|
301
319
|
Produce a structured severity-ranked report.
|
|
@@ -621,7 +639,7 @@ Append to Code Review Report when invoked standalone. Suppress when called as su
|
|
|
621
639
|
```yaml
|
|
622
640
|
chain_metadata:
|
|
623
641
|
skill: "rune:review"
|
|
624
|
-
version: "1.
|
|
642
|
+
version: "1.3.0"
|
|
625
643
|
status: "[DONE | DONE_WITH_CONCERNS]"
|
|
626
644
|
domain: "[area reviewed]"
|
|
627
645
|
files_changed: [] # review doesn't change files
|
|
@@ -553,7 +553,7 @@ When `oracle.dispatched` arrives, payload contains:
|
|
|
553
553
|
- `sessionId` — caller-provided unique id
|
|
554
554
|
- `triggerSignal` — `agent.stuck` or manual
|
|
555
555
|
- `sourceSkill` — `debug` | `fix` | manual
|
|
556
|
-
- `targetModel` — concrete model name (e.g. `gpt-5-
|
|
556
|
+
- `targetModel` — concrete model name (e.g. `gpt-5.6-sol`, `gemini-3-pro`, `claude-opus-4-8`; API-only frontier: `claude-fable-5`)
|
|
557
557
|
- `bundleHash` — sha256 of the bundled context (idempotency key)
|
|
558
558
|
|
|
559
559
|
### Step D2 — Idempotency check
|
|
@@ -570,7 +570,7 @@ Create `.rune/oracle-pending/<sessionId>.json`:
|
|
|
570
570
|
"dispatchedAt": "2026-04-27T12:34:56Z",
|
|
571
571
|
"triggerSignal": "agent.stuck",
|
|
572
572
|
"sourceSkill": "debug",
|
|
573
|
-
"targetModel": "claude-opus-4-
|
|
573
|
+
"targetModel": "claude-opus-4-8",
|
|
574
574
|
"bundleHash": "sha256:9f3a...",
|
|
575
575
|
"status": "pending",
|
|
576
576
|
"timeoutAt": "2026-04-27T12:44:56Z",
|
|
@@ -3,7 +3,7 @@ name: video-creator
|
|
|
3
3
|
description: "Video content planning. Writes narration scripts, storyboards, shot lists, and asset checklists. Saves plan to marketing/video-plan.md."
|
|
4
4
|
metadata:
|
|
5
5
|
author: runedev
|
|
6
|
-
version: "0.
|
|
6
|
+
version: "0.3.0"
|
|
7
7
|
layer: L3
|
|
8
8
|
model: sonnet
|
|
9
9
|
group: media
|
|
@@ -44,7 +44,9 @@ Derive constraints from platform:
|
|
|
44
44
|
|
|
45
45
|
### Step 2: Script
|
|
46
46
|
|
|
47
|
-
Write a narration script with timing marks
|
|
47
|
+
Write a narration script with timing marks. **Before writing a single line, apply the
|
|
48
|
+
Narration Craft principles below** — a script the viewer HEARS lives or dies on the
|
|
49
|
+
opening and the flow, not the shot list.
|
|
48
50
|
|
|
49
51
|
Structure:
|
|
50
52
|
- **Hook** (0–5s): opening line that grabs attention — state the problem or the payoff
|
|
@@ -161,6 +163,71 @@ Then output a summary to the calling skill:
|
|
|
161
163
|
3. Edit using the storyboard as reference
|
|
162
164
|
```
|
|
163
165
|
|
|
166
|
+
## Narration Craft (decides whether a script hooks or bores)
|
|
167
|
+
|
|
168
|
+
A demo script is HEARD by a person, not read off a slide. These principles separate an
|
|
169
|
+
engaging script from generic voiceover — apply them in Step 2, before writing any line.
|
|
170
|
+
|
|
171
|
+
**The 9 principles:**
|
|
172
|
+
1. **Pain-first opening.** Open on the viewer's biggest pain or a stat already in flight ("Nếu bạn hay phải…", "This repo has 9k stars and…"). NEVER a flat catalogue opener ("Today we'll look at…", "This is a tool that…") — it names no problem and gives zero reason not to scroll.
|
|
173
|
+
2. **Contrast structures.** "not just X but Y", "not X, it's Y", "like X but with Y". Contrast pulls attention.
|
|
174
|
+
3. **2nd-person address.** "you'll see right away", "if you build on an M-series Mac…". Bring the viewer in.
|
|
175
|
+
4. **Demonstrative immediacy.** "right here", "this", "on the timeline now". Concrete and present.
|
|
176
|
+
5. **Specific real names, keep the jargon.** Name actual files, commands, competitors ("Final Cut", "Cursor", "ffmpeg"). Generic terms ("an AI tool", "the framework") are banned. Don't force-translate jargon into awkward words.
|
|
177
|
+
6. **Quantified social proof — ONCE.** "over 9k stars". Never dump stars + forks + issues back-to-back as separate fragments.
|
|
178
|
+
7. **Short clauses, comma-flowed.** "You can trim, replace, or regenerate it." One breath, not bullet fragments.
|
|
179
|
+
8. **Caveat-as-feature.** State one honest limit or a "who should NOT use this". This is the most trust-building line in the video — a retention feature, not filler.
|
|
180
|
+
9. **Use-case landing.** Close on a SPECIFIC viewer scenario, not "go check it out".
|
|
181
|
+
|
|
182
|
+
**Named + numbered "weapons".** Give each differentiator a title and a number ("Weapon 01/02"). Mine the 2-3 NON-OBVIOUS specifics (a regex, a guard, an algorithm, a fallback) — one precise surprising mechanism beats a generic capability list.
|
|
183
|
+
|
|
184
|
+
**Connectors between scenes.** Each scene after the first opens with a linguistic connector referring back ("The core of it is…", "Specifically…", "But note…") so the whole video plays as ONE monologue, not N telegraphic captions read in a row. Read the full script aloud in sequence — if it sounds like disconnected soundbites, rewrite.
|
|
185
|
+
|
|
186
|
+
**Auto-fail patterns — reject the script if any appear:**
|
|
187
|
+
- ❌ Hook/Problem/Solution/CTA fill-in-the-blank treated as isolated fragments
|
|
188
|
+
- ❌ Sidebar stats (stars/forks/issues) as separate one-line scenes
|
|
189
|
+
- ❌ Every sentence restarts as a stand-alone bullet ("X runs one pipeline. Y writes. Z narrates.")
|
|
190
|
+
- ❌ Generic capability claims ("full-featured", "very powerful", "popular in the community")
|
|
191
|
+
- ❌ Describing the README/repo instead of the product
|
|
192
|
+
- ❌ Closing with "go check it out" / "thanks for watching"
|
|
193
|
+
|
|
194
|
+
## Voiceover: TTS-Safe Narration (when narration is machine-spoken)
|
|
195
|
+
|
|
196
|
+
When narration will be synthesized by a TTS engine (AI voiceover, not a human reading),
|
|
197
|
+
the spoken `narration` and the on-screen text are SEPARATE channels — one is heard, one
|
|
198
|
+
is read. Optimize each independently; never feed a raw slug, number, or symbol into TTS
|
|
199
|
+
and hope the voice guesses right. (The Vietnamese examples below illustrate the pattern;
|
|
200
|
+
apply the same phonetic + numbers-as-words substitution for whatever language the target
|
|
201
|
+
TTS engine speaks.)
|
|
202
|
+
|
|
203
|
+
**Numbers → spoken words** (many neural TTS engines can misread bare digits — VN examples):
|
|
204
|
+
|
|
205
|
+
| Form | TTS misreads | Write as |
|
|
206
|
+
|---|---|---|
|
|
207
|
+
| Version decimal | `GPT 5.5` → "năm rưỡi" | `GPT năm chấm năm` |
|
|
208
|
+
| Stat decimal | `82.7%` | `tám mươi hai phẩy bảy phần trăm` |
|
|
209
|
+
| Spec | `200MP` | `hai trăm megapixel` |
|
|
210
|
+
| Price | `$5` / `21 triệu` | `năm đô` / `hai mươi mốt triệu đồng` |
|
|
211
|
+
| Multiplier / percent | `2x` / `30%` | `gấp đôi` / `ba mươi phần trăm` |
|
|
212
|
+
|
|
213
|
+
**English/brand names → phonetic in narration, exact spelling on screen:**
|
|
214
|
+
|
|
215
|
+
| Term | narration (heard) | display (read) |
|
|
216
|
+
|---|---|---|
|
|
217
|
+
| README | `ruýt my` | `README` |
|
|
218
|
+
| ffmpeg | `ép ép em peg` | `ffmpeg` |
|
|
219
|
+
| GitHub / repo | `git hâb` / `rề pô` | `GitHub` / `repo` |
|
|
220
|
+
| API / GPT | `ây pi ai` / `gí pi tí` | `API` / `GPT` |
|
|
221
|
+
|
|
222
|
+
**Strip from spoken narration:** emoji, URLs (say "github chấm com gạch…"), symbols (`→ & % $ # / @`), slash-commands (say "the plugin install command"), file extensions mid-sentence (say "the YAML file"), camelCase identifiers, ellipsis `…` and em-dash `—` (TTS misreads them — split into two short sentences). End every sentence with `.` or `?` for a natural pause.
|
|
223
|
+
|
|
224
|
+
**Keep the jargon, natural spoken register.** Write the way a knowledgeable friend SAYS it — but keep the standard technical term ("commit", "endpoint", "prompt" stay in their usual form; a hard translation sounds wrong and loses meaning). Only translate when the local word is the one people actually use.
|
|
225
|
+
|
|
226
|
+
**Production notes for a spoken video (if it will actually be produced, not just planned):**
|
|
227
|
+
- **One voice, one provider across all scenes** — a voice/provider change mid-video is jarring.
|
|
228
|
+
- **Measure TTS duration FIRST**, then size each scene's visuals to the real audio length — estimating duration then rendering causes A/V drift.
|
|
229
|
+
- **Karaoke captions are the #1 pro-signal** for short-form (TikTok/Reels/Shorts): a bottom-center caption filling word-by-word in sync with the voice, keyword-accented. Muted-autoplay comprehension plus the single strongest "professional" cue — reserve a bottom caption band for it.
|
|
230
|
+
|
|
164
231
|
## Note
|
|
165
232
|
|
|
166
233
|
This skill creates PLANS for video production. Actual recording and editing must be done by a human or a dedicated screen recording tool.
|
|
@@ -185,10 +252,15 @@ Known failure modes for this skill. Check these before declaring done.
|
|
|
185
252
|
| Missing CTA section in script | MEDIUM | CTA (last 10s) is required in every script — no exceptions regardless of duration |
|
|
186
253
|
| Not saving to file (only verbal output) | HIGH | Constraint 3 + Step 6: Write to output_path is mandatory — verbal only = no persistence |
|
|
187
254
|
| Promising an actual deliverable video file | MEDIUM | Note explicitly: this skill creates a PLAN — actual recording is done by a human |
|
|
255
|
+
| Flat catalogue opener ("Today we'll look at…") instead of a pain-first hook | HIGH | Narration Craft #1: open on the viewer's biggest pain — an opener that names no problem loses the scroll in 2 seconds |
|
|
256
|
+
| Raw slugs/numbers/symbols left in narration for TTS ("README", "82.7%", "5.5") | HIGH | Voiceover section: rewrite spoken narration phonetically + numbers-as-words; keep exact spelling only on the display channel |
|
|
257
|
+
| Script reads as N disconnected soundbites | MEDIUM | Narration Craft connectors: each scene after the first opens referring back — read the whole script aloud before declaring done |
|
|
188
258
|
|
|
189
259
|
## Done When
|
|
190
260
|
|
|
191
261
|
- Platform constraints identified and applied to duration/format
|
|
262
|
+
- Narration Craft applied — pain-first opening, cross-scene connectors, ≥1 caveat-as-feature, no auto-fail patterns
|
|
263
|
+
- If narration is TTS-spoken: numbers-as-words + phonetic brand names in the spoken channel, exact spelling on display
|
|
192
264
|
- Script written with timing marks (hook, setup, demo/body, CTA)
|
|
193
265
|
- Storyboard created scene-by-scene with transitions
|
|
194
266
|
- Shot list categorized by type (screen recording, terminal, code, diagram)
|