pm-claude-skills 61.1.0 β 61.2.2
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 +5 -5
- package/bin/cli.mjs +22 -0
- package/bin/test.mjs +110 -0
- package/exports/README.md +1 -1
- package/exports/aider/README.md +2 -1
- package/exports/aider/pm-creator/youtube-script/youtube-script.md +74 -0
- package/exports/aider/pm-writers/notes-humanizer/notes-humanizer.md +27 -12
- package/exports/chatgpt/README.md +2 -1
- package/exports/chatgpt/pm-creator/youtube-script/SYSTEM_PROMPT.md +74 -0
- package/exports/chatgpt/pm-writers/notes-humanizer/SYSTEM_PROMPT.md +27 -12
- package/exports/cline/README.md +2 -1
- package/exports/cline/pm-creator/youtube-script/youtube-script.md +74 -0
- package/exports/cline/pm-writers/notes-humanizer/notes-humanizer.md +27 -12
- package/exports/continue/README.md +2 -1
- package/exports/continue/pm-creator/youtube-script/youtube-script.md +79 -0
- package/exports/continue/pm-writers/notes-humanizer/notes-humanizer.md +28 -13
- package/exports/cursor/README.md +2 -1
- package/exports/cursor/pm-creator/youtube-script/youtube-script.mdc +80 -0
- package/exports/cursor/pm-writers/notes-humanizer/notes-humanizer.mdc +28 -13
- package/exports/gemini/README.md +2 -1
- package/exports/gemini/pm-creator/youtube-script/GEM_INSTRUCTIONS.md +78 -0
- package/exports/gemini/pm-writers/notes-humanizer/GEM_INSTRUCTIONS.md +28 -13
- package/exports/kilocode/README.md +2 -1
- package/exports/kilocode/pm-creator/youtube-script/youtube-script.md +74 -0
- package/exports/kilocode/pm-writers/notes-humanizer/notes-humanizer.md +27 -12
- package/exports/obsidian/README.md +2 -1
- package/exports/obsidian/pm-creator/youtube-script/youtube-script.md +89 -0
- package/exports/obsidian/pm-writers/notes-humanizer/notes-humanizer.md +28 -13
- package/exports/openclaw/README.md +2 -1
- package/exports/openclaw/notes-humanizer/SKILL.md +28 -13
- package/exports/openclaw/youtube-script/SKILL.md +84 -0
- package/exports/roo/README.md +2 -1
- package/exports/roo/pm-creator/youtube-script/youtube-script.md +74 -0
- package/exports/roo/pm-writers/notes-humanizer/notes-humanizer.md +27 -12
- package/exports/windsurf/README.md +2 -1
- package/exports/windsurf/pm-creator/youtube-script/youtube-script.md +79 -0
- package/exports/windsurf/pm-writers/notes-humanizer/notes-humanizer.md +28 -13
- package/exports/zed/README.md +2 -1
- package/exports/zed/pm-creator/youtube-script/youtube-script.md +74 -0
- package/exports/zed/pm-writers/notes-humanizer/notes-humanizer.md +27 -12
- package/output-styles/README.md +1 -0
- package/output-styles/plain-honest-prose.md +18 -0
- package/package.json +2 -2
- package/skills/notes-humanizer/SKILL.md +28 -13
- package/skills/youtube-script/SKILL.md +79 -0
- package/web/benchmark.html +1 -1
- package/web/cheatsheet.html +4 -4
- package/web/city.html +1 -1
- package/web/galaxy.html +1 -1
- package/web/galaxy3d.html +2 -2
- package/web/guide.html +5 -5
- package/web/handbook.html +3 -3
- package/web/holo.html +2 -2
- package/web/index.html +3 -3
- package/web/learn.html +1 -1
- package/web/remix.html +1 -1
- package/web/semantic.html +2 -2
- package/web/skills.json +1 -1
- package/web/voice.html +1 -1
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# π§ PM Skills β
|
|
1
|
+
# π§ PM Skills β 751 Professional Agent Skills for Claude, ChatGPT, Gemini, Cursor, Codex & Hermes
|
|
2
2
|
|
|
3
3
|
[](#-quick-start)
|
|
4
4
|
[](https://github.com/mohitagw15856/pm-claude-skills/stargazers)
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
[](LICENSE)
|
|
13
13
|
[](https://github.com/sponsors/mohitagw15856)
|
|
14
14
|
|
|
15
|
-
**A library of
|
|
15
|
+
**A library of 751 skills β each one a plain `SKILL.md` file that teaches your AI assistant to do one professional task properly.** Decode a lease before you sign it. Write a PRD your team can execute. Simulate the promotion committee before the real one meets. Check the weather with zero API keys. Generic AI gives you filler; these give you the structure a senior professional actually uses.
|
|
16
16
|
|
|
17
17
|
Works natively in **Claude Code** and **Hermes Agent**, with ready-to-paste exports for **ChatGPT, Gemini, Cursor, Codex** and 8 more tools. *(PM stands for Professional, not just Product Management.)*
|
|
18
18
|
|
|
@@ -30,7 +30,7 @@ No `npm install` needed β `npx pm-claude-skills β¦` always runs the latest. `
|
|
|
30
30
|
|
|
31
31
|
## π The skills
|
|
32
32
|
|
|
33
|
-
Every skill follows the same discipline: what it produces, the inputs it needs, a real framework (severity scales, decision rules β not vibes), a concrete output template, quality checks, and anti-patterns. All
|
|
33
|
+
Every skill follows the same discipline: what it produces, the inputs it needs, a real framework (severity scales, decision rules β not vibes), a concrete output template, quality checks, and anti-patterns. All 751 pass the [SkillSpec](SKILLSPEC.md) L3 gate and a security audit in CI.
|
|
34
34
|
|
|
35
35
|
### For everyone β life's paperwork and decisions
|
|
36
36
|
|
|
@@ -155,7 +155,7 @@ The whole library on one poster β start path, standout features, and install o
|
|
|
155
155
|
|
|
156
156
|
## π Latest
|
|
157
157
|
|
|
158
|
-
**v61.
|
|
158
|
+
**v61.2.2 β long-form video:** **[youtube-script](skills/youtube-script/SKILL.md)** β a full YouTube script (explainer/tutorial/video essay) engineered for watch-time: title + thumbnail concepts, a timed cold open, retention beats with B-roll cues, and chapter timestamps. Sibling to [short-form-script](skills/short-form-script/SKILL.md); for other languages, [professional-translator](skills/professional-translator/SKILL.md). *Earlier β v61.2, the builder's toolkit:* prove quality against real references, red-team robustness, test skills before a PR, run them offline, and sign what they produce. *v61.1, the demand side:* **[find](https://mohitagw15856.github.io/pm-claude-skills/find.html)** (taskβskill router) with an honest per-skill **measured / no-claim** badge, per-skill versioning, and **[SkillSpec as an adoptable standard](conformance/REGISTRY.md)** (earnable `--badge` + public registry). Full history: **[CHANGELOG](CHANGELOG.md)** Β· [releases](https://github.com/mohitagw15856/pm-claude-skills/releases)
|
|
159
159
|
|
|
160
160
|
## π€ Contributing
|
|
161
161
|
|
|
@@ -171,4 +171,4 @@ MIT β use them, fork them, ship them at work. Skills are judgment, and judgmen
|
|
|
171
171
|
|
|
172
172
|
---
|
|
173
173
|
|
|
174
|
-
*Built by [Mohit](https://github.com/mohitagw15856) with Claude.
|
|
174
|
+
*Built by [Mohit](https://github.com/mohitagw15856) with Claude. 751 skills Β· 90 bundles Β· 31 professions Β· every commit gated. The long version of this README β every feature, wave, and frontier bet β lives in the **[Showcase](docs/SHOWCASE.md)**.*
|
package/bin/cli.mjs
CHANGED
|
@@ -197,6 +197,7 @@ function add(opts) {
|
|
|
197
197
|
else copyFileSync(f, dest);
|
|
198
198
|
count++;
|
|
199
199
|
}
|
|
200
|
+
if (opts.private) console.log(' note: --private overlay applies to native agents (claude/hermes/codex/openclaw); for rule-file agents, use `serve --private` or export your private skills first.');
|
|
200
201
|
} else {
|
|
201
202
|
for (const name of readdirSync(skillsDir)) {
|
|
202
203
|
const src = join(skillsDir, name);
|
|
@@ -204,6 +205,21 @@ function add(opts) {
|
|
|
204
205
|
placeDir(src, join(target, name), opts);
|
|
205
206
|
count++;
|
|
206
207
|
}
|
|
208
|
+
// Private overlay: a company's own skills merged on top of the public library
|
|
209
|
+
// WITHOUT forking. Same-named private skills override the public one; the
|
|
210
|
+
// rest are additive. (Mirrors `serve --private`; see docs/private-overlay.md.)
|
|
211
|
+
if (opts.private) {
|
|
212
|
+
const priv = resolve(opts.private);
|
|
213
|
+
if (!existsSync(priv)) { console.error(`Error: --private dir not found: ${priv}`); process.exit(1); }
|
|
214
|
+
let pc = 0;
|
|
215
|
+
for (const name of readdirSync(priv)) {
|
|
216
|
+
const src = join(priv, name);
|
|
217
|
+
if (!statSync(src).isDirectory() || !existsSync(join(src, 'SKILL.md'))) continue;
|
|
218
|
+
placeDir(src, join(target, name), opts); // same name β overrides the public skill
|
|
219
|
+
pc++; count++;
|
|
220
|
+
}
|
|
221
|
+
console.log(` ${opts.dryRun ? 'would overlay' : 'overlaid'} ${pc} private skill(s) from ${priv}`);
|
|
222
|
+
}
|
|
207
223
|
// Claude Code also gets subagents, slash commands, and output-styles.
|
|
208
224
|
if (agent === 'claude') {
|
|
209
225
|
// Extras are siblings of `skills/` (β¦/.claude/{skills,agents,commands}),
|
|
@@ -387,6 +403,7 @@ Examples:
|
|
|
387
403
|
npx pm-claude-skills search launch --json # machine-readable (Raycast/Alfred/scripts)
|
|
388
404
|
|
|
389
405
|
npx pm-claude-skills run prd-template --text "a referral program for B2B users" # run a skill (needs ANTHROPIC_API_KEY)
|
|
406
|
+
npx pm-claude-skills test prd-template --runs 3 # author's test bench: score a skill vs its eval case + variance
|
|
390
407
|
cat notes.txt | npx pm-claude-skills run meeting-notes --out summary.md # pipe input, write the artifact
|
|
391
408
|
cat notes.txt | npx pm-claude-skills chain run-discovery --deck # notes β 4 artifacts + a real .pptx
|
|
392
409
|
npx pm-claude-skills install acme/their-skills --dry-run # audit a third-party skill repo
|
|
@@ -404,6 +421,11 @@ else if (cmd === 'search') search(opts);
|
|
|
404
421
|
else if (cmd === 'find') find(opts);
|
|
405
422
|
else if (cmd === 'changelog') changelog(opts);
|
|
406
423
|
else if (cmd === 'add') add(opts);
|
|
424
|
+
else if (cmd === 'test') {
|
|
425
|
+
const { run } = await import('./test.mjs');
|
|
426
|
+
try { process.exit(await run(process.argv.slice(3))); }
|
|
427
|
+
catch (e) { console.error(`Error: ${e.message}`); process.exit(1); }
|
|
428
|
+
}
|
|
407
429
|
else if (cmd === 'migrate') {
|
|
408
430
|
const { run } = await import('./migrate.mjs');
|
|
409
431
|
try { process.exit(await run(process.argv.slice(3))); }
|
package/bin/test.mjs
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
// `pm-claude-skills test <skill>` β the author's test bench.
|
|
2
|
+
// Run a skill against its eval case (evals/cases.json) with the library's judge
|
|
3
|
+
// and see the score, the rubric breakdown, and variance across repeated runs β
|
|
4
|
+
// locally, before you open a PR. Lowers the barrier to contributing a skill that
|
|
5
|
+
// actually holds up.
|
|
6
|
+
//
|
|
7
|
+
// npx pm-claude-skills test executive-update # 1 run, scored
|
|
8
|
+
// npx pm-claude-skills test executive-update --runs 3 # variance across runs
|
|
9
|
+
// npx pm-claude-skills test executive-update --input "your own test input"
|
|
10
|
+
// npx pm-claude-skills test executive-update --dry-run # no API; show the case
|
|
11
|
+
// Needs ANTHROPIC_API_KEY (unless --dry-run).
|
|
12
|
+
import { readFileSync, existsSync } from 'node:fs';
|
|
13
|
+
import { join, dirname } from 'node:path';
|
|
14
|
+
import { fileURLToPath } from 'node:url';
|
|
15
|
+
import { complete } from './lib/anthropic.mjs';
|
|
16
|
+
|
|
17
|
+
const ROOT = dirname(dirname(fileURLToPath(import.meta.url)));
|
|
18
|
+
|
|
19
|
+
const RUBRIC = [
|
|
20
|
+
['structure', 'Would a senior professional recognise the artifact\'s shape? Right sections, right order.'],
|
|
21
|
+
['completeness', 'Are the load-bearing sections present and specific (not placeholder)?'],
|
|
22
|
+
['usefulness', 'Could the reader act on it without a rewrite?'],
|
|
23
|
+
['grounding', 'Does it use the input\'s facts, label assumptions, and avoid fabrication?'],
|
|
24
|
+
];
|
|
25
|
+
|
|
26
|
+
function parseArgs(argv) {
|
|
27
|
+
const o = { _: [] };
|
|
28
|
+
for (let i = 0; i < argv.length; i++) {
|
|
29
|
+
const a = argv[i];
|
|
30
|
+
if (a === '--dry-run') o.dryRun = true;
|
|
31
|
+
else if (a === '--json') o.json = true;
|
|
32
|
+
else if (a === '--runs') o.runs = Number(argv[++i]);
|
|
33
|
+
else if (a === '--input') o.input = argv[++i];
|
|
34
|
+
else if (a === '--model') o.model = argv[++i];
|
|
35
|
+
else if (!a.startsWith('--')) o._.push(a);
|
|
36
|
+
}
|
|
37
|
+
return o;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function loadSkill(name) {
|
|
41
|
+
const sj = join(ROOT, 'web', 'skills.json');
|
|
42
|
+
if (existsSync(sj)) {
|
|
43
|
+
const s = (JSON.parse(readFileSync(sj, 'utf8')).skills || []).find((x) => x.name === name);
|
|
44
|
+
if (s) return { title: s.title, body: s.body || s.instructions || s.description };
|
|
45
|
+
}
|
|
46
|
+
const p = join(ROOT, 'skills', name, 'SKILL.md');
|
|
47
|
+
if (existsSync(p)) { const raw = readFileSync(p, 'utf8'); return { title: name, body: raw.replace(/^---[\s\S]*?---\n/, '') }; }
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function evalInput(name) {
|
|
52
|
+
const p = join(ROOT, 'evals', 'cases.json');
|
|
53
|
+
if (!existsSync(p)) return null;
|
|
54
|
+
const cases = JSON.parse(readFileSync(p, 'utf8')).cases || [];
|
|
55
|
+
const c = cases.find((x) => x.skill === name);
|
|
56
|
+
return c ? c.input : null;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const judgePrompt = (title, input, output) => `You are grading the output of a professional skill ("${title}") on a 1-5 rubric.
|
|
60
|
+
|
|
61
|
+
RUBRIC:
|
|
62
|
+
${RUBRIC.map(([k, d], i) => `${i + 1}. ${k} β ${d}`).join('\n')}
|
|
63
|
+
|
|
64
|
+
THE INPUT THE SKILL WAS GIVEN:
|
|
65
|
+
"""${input}"""
|
|
66
|
+
|
|
67
|
+
THE SKILL'S OUTPUT:
|
|
68
|
+
"""${String(output).slice(0, 8000)}"""
|
|
69
|
+
|
|
70
|
+
Score each dimension 1-5. Return STRICT JSON only:
|
|
71
|
+
{"structure": n, "completeness": n, "usefulness": n, "grounding": n, "overall": <mean, one decimal>, "fix": "the single highest-impact improvement, one sentence"}`;
|
|
72
|
+
|
|
73
|
+
export async function run(argv) {
|
|
74
|
+
const o = parseArgs(argv);
|
|
75
|
+
const name = o._[0];
|
|
76
|
+
if (!name) { console.error('Usage: pm-claude-skills test <skill> [--runs N] [--input "..."] [--dry-run]'); return 1; }
|
|
77
|
+
const skill = loadSkill(name);
|
|
78
|
+
if (!skill) { console.error(`No skill named "${name}". Try: pm-claude-skills search ${name}`); return 1; }
|
|
79
|
+
const input = o.input || evalInput(name);
|
|
80
|
+
if (!input) { console.error(`No eval case for "${name}" in evals/cases.json β pass --input "..." to test it.`); return 1; }
|
|
81
|
+
|
|
82
|
+
if (o.dryRun) {
|
|
83
|
+
console.log(`Skill: ${skill.title} (${name})`);
|
|
84
|
+
console.log(`Input: ${String(input).slice(0, 200)}${input.length > 200 ? 'β¦' : ''}`);
|
|
85
|
+
console.log(`Rubric: ${RUBRIC.map((r) => r[0]).join(', ')}`);
|
|
86
|
+
console.log(`Would run ${o.runs || 1}Γ and judge (needs ANTHROPIC_API_KEY).`);
|
|
87
|
+
return 0;
|
|
88
|
+
}
|
|
89
|
+
const key = process.env.ANTHROPIC_API_KEY;
|
|
90
|
+
if (!key) { console.error('Set ANTHROPIC_API_KEY (or use --dry-run).'); return 1; }
|
|
91
|
+
|
|
92
|
+
const runs = Math.max(1, o.runs || 1);
|
|
93
|
+
const scores = [];
|
|
94
|
+
for (let i = 0; i < runs; i++) {
|
|
95
|
+
const output = await complete({ apiKey: key, model: o.model, system: skill.body, messages: [{ role: 'user', content: input }], maxTokens: 2000 });
|
|
96
|
+
const raw = await complete({ apiKey: key, model: 'claude-sonnet-4-6', system: 'You are a strict, fair evaluator. Output only the requested JSON.', messages: [{ role: 'user', content: judgePrompt(skill.title, input, output) }], maxTokens: 400 });
|
|
97
|
+
let v; try { v = JSON.parse(String(raw).match(/\{[\s\S]*\}/)[0]); } catch { v = null; }
|
|
98
|
+
if (v) { scores.push(v); if (!o.json) console.log(`run ${i + 1}: ${v.overall}/5 (S${v.structure} C${v.completeness} U${v.usefulness} G${v.grounding}) β ${v.fix}`); }
|
|
99
|
+
}
|
|
100
|
+
if (!scores.length) { console.error('Judge returned no parseable scores.'); return 1; }
|
|
101
|
+
const mean = scores.reduce((a, s) => a + Number(s.overall), 0) / scores.length;
|
|
102
|
+
const overalls = scores.map((s) => Number(s.overall));
|
|
103
|
+
const spread = Math.max(...overalls) - Math.min(...overalls);
|
|
104
|
+
const verdict = mean >= 4 ? 'PASS' : mean >= 3 ? 'WEAK' : 'FAIL';
|
|
105
|
+
|
|
106
|
+
if (o.json) { console.log(JSON.stringify({ skill: name, runs: scores, mean: Number(mean.toFixed(2)), spread, verdict }, null, 2)); return mean >= 3 ? 0 : 1; }
|
|
107
|
+
console.log(`\n${verdict} β mean ${mean.toFixed(2)}/5${runs > 1 ? ` Β· spread ${spread.toFixed(1)} across ${runs} runs${spread >= 1 ? ' (high variance β β tighten the skill)' : ''}` : ''}`);
|
|
108
|
+
console.log(mean >= 4 ? 'Ship it.' : 'Below the L3 bar (4.0). Address the "fix" note above and re-test.');
|
|
109
|
+
return mean >= 3 ? 0 : 1;
|
|
110
|
+
}
|
package/exports/README.md
CHANGED
|
@@ -8,7 +8,7 @@ by hand; edit the source skill and run:
|
|
|
8
8
|
node scripts/build-exports.mjs
|
|
9
9
|
```
|
|
10
10
|
|
|
11
|
-
Currently exporting **
|
|
11
|
+
Currently exporting **751 skills** to:
|
|
12
12
|
|
|
13
13
|
- **ChatGPT β Custom GPT instructions** β `exports/chatgpt/`
|
|
14
14
|
- **Google Gemini β Gem instructions** β `exports/gemini/`
|
package/exports/aider/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
> Auto-generated from `skills/*/SKILL.md` by `scripts/build-exports.mjs`.
|
|
4
4
|
> **Do not edit these files by hand** β edit the source skill and regenerate.
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
751 skills exported. Copy a `.md rule` into the tool to use it.
|
|
7
7
|
|
|
8
8
|
| Skill | Bundle | Path |
|
|
9
9
|
|---|---|---|
|
|
@@ -756,4 +756,5 @@
|
|
|
756
756
|
| World Clock | `pm-live` | `pm-live/world-clock/world-clock.md` |
|
|
757
757
|
| Writing Great Skills | `pm-engineering` | `pm-engineering/writing-great-skills/writing-great-skills.md` |
|
|
758
758
|
| Writing Plans | `pm-method` | `pm-method/writing-plans/writing-plans.md` |
|
|
759
|
+
| YouTube Script | `pm-creator` | `pm-creator/youtube-script/youtube-script.md` |
|
|
759
760
|
| YouTube Script Writer | `pm-writers` | `pm-writers/youtube-script-writer/youtube-script-writer.md` |
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# YouTube Script Skill
|
|
2
|
+
|
|
3
|
+
Long-form video is won twice: first the **packaging** earns the click, then the **script** keeps the promise the packaging made. A YouTube video does not fail in the middle β it fails at predictable cliffs (the first 30 seconds, the ~2-minute mark, the midpoint). This skill writes a script engineered to survive those cliffs: a cold open that pays off fast, value delivered early and escalated, and an open loop pulling the viewer across every segment.
|
|
4
|
+
|
|
5
|
+
## Working from a brief
|
|
6
|
+
|
|
7
|
+
Given a topic, a blog post, a talk transcript, or a rough outline, **write the full script anyway** β infer the single promise and the audience. Target the requested runtime (default ~8β12 min β 1,200β1,800 spoken words; ~130β150 words/min). Never pad to hit a length; a tight 7 minutes beats a bloated 12. If the topic is genuinely short, say so and recommend [[short-form-script]] instead.
|
|
8
|
+
|
|
9
|
+
## Required Inputs
|
|
10
|
+
|
|
11
|
+
Ask for (if not already provided, else infer and label the assumption):
|
|
12
|
+
- **Topic / the idea** (or a source: blog post, transcript, docs) and the **one promise** the video delivers
|
|
13
|
+
- **Audience** and their level (complete beginner β practitioner)
|
|
14
|
+
- **Target runtime** (~5 / ~10 / ~20 min) and **format** (explainer, tutorial, video essay, review, talking-head/vlog)
|
|
15
|
+
- **Creator voice** (or pull from a [[creator-brand-kit]]) and the **primary CTA** (subscribe, a lead magnet, a product, the next video)
|
|
16
|
+
|
|
17
|
+
## Output Format
|
|
18
|
+
|
|
19
|
+
### The promise
|
|
20
|
+
One sentence: what the viewer can do or understand by the end. Every segment serves this; anything that doesn't, cut.
|
|
21
|
+
|
|
22
|
+
### Packaging (title + thumbnail)
|
|
23
|
+
- **3β5 title options** β curiosity gap or clear payoff, front-load the keyword, β€ ~60 chars.
|
|
24
|
+
- **2 thumbnail concepts** β the visual + β€ 3β4 words of thumbnail text. The title and thumbnail must not say the same thing (they should combine).
|
|
25
|
+
|
|
26
|
+
### Cold open (0:00β0:30)
|
|
27
|
+
Written word-for-word β it's the most important 30 seconds:
|
|
28
|
+
- **Hook** β the tension, result, or claim that stops the click from bouncing. No "Hey guys, welcome back."
|
|
29
|
+
- **The promise** β what they'll get and *why it's worth their next 10 minutes*.
|
|
30
|
+
- **The stay reason** β an open loop or stake ("by the end you'llβ¦ but first the mistake almost everyone makes").
|
|
31
|
+
|
|
32
|
+
### Script (segmented)
|
|
33
|
+
|
|
34
|
+
For each segment (usually 3β6):
|
|
35
|
+
|
|
36
|
+
| Segment | Spoken (VO / on-cam) | Visual / B-roll / graphics | Retention device |
|
|
37
|
+
|---|---|---|---|
|
|
38
|
+
| # β segment title | the actual words, conversational | screen-record, cutaway, chart, location change | open loop / callback / pattern interrupt / re-hook |
|
|
39
|
+
|
|
40
|
+
- **Deliver value early** β front-load the best insight before the ~2-min cliff; don't save everything for the end.
|
|
41
|
+
- **Escalate** β each segment raises stakes or specificity, and ends by opening the next ("that fixes X β but it creates a new problemβ¦").
|
|
42
|
+
- **Re-hook at the cliffs** β a pattern interrupt (b-roll, graphic, tone shift) near 0:30, ~2:00, and the midpoint.
|
|
43
|
+
|
|
44
|
+
### CTAs
|
|
45
|
+
- **Soft, integrated** β one early ask placed *after* the first real value lands (not before it).
|
|
46
|
+
- **Primary CTA** β at the payoff, when goodwill peaks.
|
|
47
|
+
|
|
48
|
+
### Outro & end-screen
|
|
49
|
+
- A one-line payoff recap (deliver on the promise, explicitly).
|
|
50
|
+
- End-screen: the **one** next video to watch (relevant, not random) + subscribe.
|
|
51
|
+
|
|
52
|
+
### Description + chapters
|
|
53
|
+
A 2β3 sentence description with the keyword, the primary link/CTA, and **chapter timestamps** (`0:00 Intro`, β¦) matching the segments.
|
|
54
|
+
|
|
55
|
+
End with **βΆ Automate:** a one-line note that [ContentGoldMine](https://github.com/mohitagw15856/ContentGoldMine) can generate this script (and a short-form cutdown) from a source URL.
|
|
56
|
+
|
|
57
|
+
## Quality Checks
|
|
58
|
+
|
|
59
|
+
- [ ] The cold open pays off within ~30s and opens a loop; no throat-clearing intro
|
|
60
|
+
- [ ] The best value lands before the ~2-minute drop-off, not saved for the end
|
|
61
|
+
- [ ] Every segment ends by opening the next (a visible chain of open loops)
|
|
62
|
+
- [ ] A pattern interrupt / re-hook sits at each cliff (~0:30, ~2:00, midpoint)
|
|
63
|
+
- [ ] Title and thumbnail combine (don't repeat) and match the promise the script keeps
|
|
64
|
+
- [ ] One primary CTA at the goodwill peak; the early ask follows real value
|
|
65
|
+
- [ ] Chapter timestamps match the segments; spoken word count fits the runtime
|
|
66
|
+
|
|
67
|
+
## Anti-Patterns
|
|
68
|
+
|
|
69
|
+
- A slow intro before the hook ("Hey guys, welcome back to the channel, so todayβ¦")
|
|
70
|
+
- Saving all the value for the end so the first two minutes are setup
|
|
71
|
+
- A wall of narration with no B-roll, graphics, or visual cues β it's a *video* script, not an essay
|
|
72
|
+
- Clickbait packaging the script never pays off (kills trust and session time)
|
|
73
|
+
- Asking to subscribe before delivering any value
|
|
74
|
+
- Short-form pacing stretched thin, or long-form crammed β if it's 15β60s vertical, use [[short-form-script]]
|
|
@@ -59,8 +59,8 @@ CHANGES MADE
|
|
|
59
59
|
β "X and Y. Z is different β [expanded thought]"
|
|
60
60
|
Why: all three items had identical rhythm; broke the pattern
|
|
61
61
|
|
|
62
|
-
4.
|
|
63
|
-
Why:
|
|
62
|
+
4. Split a 30-word sentence where the point turned: "β¦and it failed. That's the problem."
|
|
63
|
+
Why: the meaning lands on a short beat here β the brevity is earned, not inserted for variance
|
|
64
64
|
|
|
65
65
|
5. Added sentence starting with "But"
|
|
66
66
|
Why: human writers do this; AI avoids it as a statistical default
|
|
@@ -84,6 +84,16 @@ The full rewritten text, ready to copy and paste β no annotations, no formatti
|
|
|
84
84
|
|
|
85
85
|
## Instructions for Claude
|
|
86
86
|
|
|
87
|
+
### Phase 0: Calibrate to genre (do this first)
|
|
88
|
+
|
|
89
|
+
Before touching anything, decide what kind of text this is β the genre sets how far Phase 2 goes:
|
|
90
|
+
|
|
91
|
+
- **Neutral / informational** (documentation, reference, summaries, status reports, official notices, most business comms): run **Phase 1 only**. Strip the tells and stop. Do **not** inject opinion, asides, or personality β a clean doc is the goal, not a voice. Injected "humanity" here reads as unprofessional.
|
|
92
|
+
- **Personal / persuasive / social** (opinion pieces, blog posts, founder notes, LinkedIn, marketing, personal emails): run **Phase 1 + Phase 2**. Here earned voice is the point.
|
|
93
|
+
- **Unsure or mixed:** default to the lighter touch (Phase 1, plus only the Phase 2 moves the content genuinely earns), and say which genre you assumed.
|
|
94
|
+
|
|
95
|
+
The single rule underneath: **calibrate voice to the job of the text.** Never dismantle useful structure (a scannable doc, a real list) just to look less templated.
|
|
96
|
+
|
|
87
97
|
### Phase 1: Audit
|
|
88
98
|
|
|
89
99
|
Read the full text before making any changes. Identify and count every instance of these patterns:
|
|
@@ -108,19 +118,19 @@ Read the full text before making any changes. Identify and count every instance
|
|
|
108
118
|
|
|
109
119
|
Do not remove every em dash β only the ones used as parenthetical substitutes. Do not remove all hedging β only empty hedging that adds no information.
|
|
110
120
|
|
|
111
|
-
### Phase 2: Inject
|
|
121
|
+
### Phase 2: Inject (personal / persuasive genres only β see Phase 0)
|
|
112
122
|
|
|
113
|
-
|
|
123
|
+
Only for text where earned voice is the point. These are **options the content earns, not a checklist to complete** β apply the ones the material genuinely supports and **skip any that would be forced**. A move inserted to hit a quota is itself an AI tell. Never fake humanity: no invented typos, no forced slang, no staged messiness, and no chopping or padding sentences just to manufacture rhythm variance.
|
|
114
124
|
|
|
115
|
-
1. **
|
|
125
|
+
1. **A genuine opinion or take** *(if the author clearly holds one).* State the belief the text already implies, without hedging. Don't manufacture an opinion the author never expressed.
|
|
116
126
|
|
|
117
|
-
2. **
|
|
127
|
+
2. **A specific detail or example** *(only if a real one exists).* Ground the most abstract claim in something concrete the author actually knows. **Never invent a number, quote, date, name, or fact to sound specific** β that's fake specificity, a worse tell than vagueness. If no real detail is available, ask the author for one or keep the honest abstraction; do not fabricate.
|
|
118
128
|
|
|
119
|
-
3. **
|
|
129
|
+
3. **An aside that steps out of the formal argument** *(where it fits the register).* The signal most synthetic text lacks β but only in genres that welcome it, and only when it connects to a real point. Forced or cutesy asides are worse than none.
|
|
120
130
|
|
|
121
|
-
4. **
|
|
131
|
+
4. **Let a sentence be short where the point lands on a short beat.** Follow the meaning, not a word count. Never shorten a sentence just to add "variance."
|
|
122
132
|
|
|
123
|
-
5. **
|
|
133
|
+
5. **Start a sentence with "And" or "But" only where the rhythm truly earns it.** If no place does, don't add one β a random "But" is a tell, not a fix.
|
|
124
134
|
|
|
125
135
|
### Phase 3: Report
|
|
126
136
|
|
|
@@ -136,20 +146,25 @@ Present the output in the four-section structure defined above. The change log m
|
|
|
136
146
|
|
|
137
147
|
## Quality Checks
|
|
138
148
|
|
|
149
|
+
- [ ] Genre was assessed first (Phase 0); neutral/informational text got Phase 1 only, with no injected opinion, aside, or personality
|
|
139
150
|
- [ ] Audit was completed before rewriting (patterns counted, not just detected)
|
|
140
151
|
- [ ] Every removed pattern is listed in the change log with a specific reason
|
|
141
152
|
- [ ] Em dashes were assessed individually β only parenthetical-substitute uses were removed
|
|
142
153
|
- [ ] Rule-of-three lists: the rhythm was actually checked, not just the fact that there were three items
|
|
143
|
-
- [ ]
|
|
144
|
-
- [ ]
|
|
154
|
+
- [ ] No fact, number, quote, date, or name was invented to add specificity
|
|
155
|
+
- [ ] Any Phase 2 moves applied were earned by the content β none inserted to hit a quota (short sentence / "And"/"But" opener / aside added only where the material genuinely called for it, or not at all)
|
|
145
156
|
- [ ] The specific detail or example added connects to an actual claim in the text, not floated in generically
|
|
146
|
-
- [ ] The aside breaks the fourth wall slightly without being forced or cutesy
|
|
157
|
+
- [ ] The aside (if any) breaks the fourth wall slightly without being forced or cutesy
|
|
147
158
|
- [ ] The change log lists specific instances, not categories
|
|
148
159
|
- [ ] The clean output section has no annotations or formatting artifacts β ready to paste
|
|
149
160
|
- [ ] If the original was already clean, that was stated explicitly rather than changes invented
|
|
150
161
|
|
|
151
162
|
## Anti-Patterns
|
|
152
163
|
|
|
164
|
+
- [ ] Do not fake humanity: no invented typos, no forced slang, no staged messiness, and no programmatic sentence-length variation added to hit a target β faked signals are themselves AI tells
|
|
165
|
+
- [ ] Do not inject voice into neutral genres β documentation, summaries, reports, and official comms get the tells stripped and nothing added; personality there reads as unprofessional
|
|
166
|
+
- [ ] Do not invent specificity β never add a number, quote, date, name, or fact that isn't real to make prose sound concrete; ask for the detail or keep the honest abstraction
|
|
167
|
+
- [ ] Do not dismantle useful structure (a scannable layout, a genuine list) just to look less templated
|
|
153
168
|
- [ ] Do not remove all em dashes β only the ones functioning as parenthetical substitutes should be removed; genuine dramatic pauses are valid
|
|
154
169
|
- [ ] Do not invent problems to justify changes when the original is already clean β report what was found honestly, even if the answer is "this text is mostly fine"
|
|
155
170
|
- [ ] Do not add the aside or opinion generically β the injected human signals must connect to an actual claim or argument in the text, not float in as decoration
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
> Auto-generated from `skills/*/SKILL.md` by `scripts/build-exports.mjs`.
|
|
4
4
|
> **Do not edit these files by hand** β edit the source skill and regenerate.
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
751 skills exported. Copy a `SYSTEM_PROMPT.md` into the tool to use it.
|
|
7
7
|
|
|
8
8
|
| Skill | Bundle | Path |
|
|
9
9
|
|---|---|---|
|
|
@@ -756,4 +756,5 @@
|
|
|
756
756
|
| World Clock | `pm-live` | `pm-live/world-clock/SYSTEM_PROMPT.md` |
|
|
757
757
|
| Writing Great Skills | `pm-engineering` | `pm-engineering/writing-great-skills/SYSTEM_PROMPT.md` |
|
|
758
758
|
| Writing Plans | `pm-method` | `pm-method/writing-plans/SYSTEM_PROMPT.md` |
|
|
759
|
+
| YouTube Script | `pm-creator` | `pm-creator/youtube-script/SYSTEM_PROMPT.md` |
|
|
759
760
|
| YouTube Script Writer | `pm-writers` | `pm-writers/youtube-script-writer/SYSTEM_PROMPT.md` |
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# YouTube Script Skill
|
|
2
|
+
|
|
3
|
+
Long-form video is won twice: first the **packaging** earns the click, then the **script** keeps the promise the packaging made. A YouTube video does not fail in the middle β it fails at predictable cliffs (the first 30 seconds, the ~2-minute mark, the midpoint). This skill writes a script engineered to survive those cliffs: a cold open that pays off fast, value delivered early and escalated, and an open loop pulling the viewer across every segment.
|
|
4
|
+
|
|
5
|
+
## Working from a brief
|
|
6
|
+
|
|
7
|
+
Given a topic, a blog post, a talk transcript, or a rough outline, **write the full script anyway** β infer the single promise and the audience. Target the requested runtime (default ~8β12 min β 1,200β1,800 spoken words; ~130β150 words/min). Never pad to hit a length; a tight 7 minutes beats a bloated 12. If the topic is genuinely short, say so and recommend [[short-form-script]] instead.
|
|
8
|
+
|
|
9
|
+
## Required Inputs
|
|
10
|
+
|
|
11
|
+
Ask for (if not already provided, else infer and label the assumption):
|
|
12
|
+
- **Topic / the idea** (or a source: blog post, transcript, docs) and the **one promise** the video delivers
|
|
13
|
+
- **Audience** and their level (complete beginner β practitioner)
|
|
14
|
+
- **Target runtime** (~5 / ~10 / ~20 min) and **format** (explainer, tutorial, video essay, review, talking-head/vlog)
|
|
15
|
+
- **Creator voice** (or pull from a [[creator-brand-kit]]) and the **primary CTA** (subscribe, a lead magnet, a product, the next video)
|
|
16
|
+
|
|
17
|
+
## Output Format
|
|
18
|
+
|
|
19
|
+
### The promise
|
|
20
|
+
One sentence: what the viewer can do or understand by the end. Every segment serves this; anything that doesn't, cut.
|
|
21
|
+
|
|
22
|
+
### Packaging (title + thumbnail)
|
|
23
|
+
- **3β5 title options** β curiosity gap or clear payoff, front-load the keyword, β€ ~60 chars.
|
|
24
|
+
- **2 thumbnail concepts** β the visual + β€ 3β4 words of thumbnail text. The title and thumbnail must not say the same thing (they should combine).
|
|
25
|
+
|
|
26
|
+
### Cold open (0:00β0:30)
|
|
27
|
+
Written word-for-word β it's the most important 30 seconds:
|
|
28
|
+
- **Hook** β the tension, result, or claim that stops the click from bouncing. No "Hey guys, welcome back."
|
|
29
|
+
- **The promise** β what they'll get and *why it's worth their next 10 minutes*.
|
|
30
|
+
- **The stay reason** β an open loop or stake ("by the end you'llβ¦ but first the mistake almost everyone makes").
|
|
31
|
+
|
|
32
|
+
### Script (segmented)
|
|
33
|
+
|
|
34
|
+
For each segment (usually 3β6):
|
|
35
|
+
|
|
36
|
+
| Segment | Spoken (VO / on-cam) | Visual / B-roll / graphics | Retention device |
|
|
37
|
+
|---|---|---|---|
|
|
38
|
+
| # β segment title | the actual words, conversational | screen-record, cutaway, chart, location change | open loop / callback / pattern interrupt / re-hook |
|
|
39
|
+
|
|
40
|
+
- **Deliver value early** β front-load the best insight before the ~2-min cliff; don't save everything for the end.
|
|
41
|
+
- **Escalate** β each segment raises stakes or specificity, and ends by opening the next ("that fixes X β but it creates a new problemβ¦").
|
|
42
|
+
- **Re-hook at the cliffs** β a pattern interrupt (b-roll, graphic, tone shift) near 0:30, ~2:00, and the midpoint.
|
|
43
|
+
|
|
44
|
+
### CTAs
|
|
45
|
+
- **Soft, integrated** β one early ask placed *after* the first real value lands (not before it).
|
|
46
|
+
- **Primary CTA** β at the payoff, when goodwill peaks.
|
|
47
|
+
|
|
48
|
+
### Outro & end-screen
|
|
49
|
+
- A one-line payoff recap (deliver on the promise, explicitly).
|
|
50
|
+
- End-screen: the **one** next video to watch (relevant, not random) + subscribe.
|
|
51
|
+
|
|
52
|
+
### Description + chapters
|
|
53
|
+
A 2β3 sentence description with the keyword, the primary link/CTA, and **chapter timestamps** (`0:00 Intro`, β¦) matching the segments.
|
|
54
|
+
|
|
55
|
+
End with **βΆ Automate:** a one-line note that [ContentGoldMine](https://github.com/mohitagw15856/ContentGoldMine) can generate this script (and a short-form cutdown) from a source URL.
|
|
56
|
+
|
|
57
|
+
## Quality Checks
|
|
58
|
+
|
|
59
|
+
- [ ] The cold open pays off within ~30s and opens a loop; no throat-clearing intro
|
|
60
|
+
- [ ] The best value lands before the ~2-minute drop-off, not saved for the end
|
|
61
|
+
- [ ] Every segment ends by opening the next (a visible chain of open loops)
|
|
62
|
+
- [ ] A pattern interrupt / re-hook sits at each cliff (~0:30, ~2:00, midpoint)
|
|
63
|
+
- [ ] Title and thumbnail combine (don't repeat) and match the promise the script keeps
|
|
64
|
+
- [ ] One primary CTA at the goodwill peak; the early ask follows real value
|
|
65
|
+
- [ ] Chapter timestamps match the segments; spoken word count fits the runtime
|
|
66
|
+
|
|
67
|
+
## Anti-Patterns
|
|
68
|
+
|
|
69
|
+
- A slow intro before the hook ("Hey guys, welcome back to the channel, so todayβ¦")
|
|
70
|
+
- Saving all the value for the end so the first two minutes are setup
|
|
71
|
+
- A wall of narration with no B-roll, graphics, or visual cues β it's a *video* script, not an essay
|
|
72
|
+
- Clickbait packaging the script never pays off (kills trust and session time)
|
|
73
|
+
- Asking to subscribe before delivering any value
|
|
74
|
+
- Short-form pacing stretched thin, or long-form crammed β if it's 15β60s vertical, use [[short-form-script]]
|
|
@@ -59,8 +59,8 @@ CHANGES MADE
|
|
|
59
59
|
β "X and Y. Z is different β [expanded thought]"
|
|
60
60
|
Why: all three items had identical rhythm; broke the pattern
|
|
61
61
|
|
|
62
|
-
4.
|
|
63
|
-
Why:
|
|
62
|
+
4. Split a 30-word sentence where the point turned: "β¦and it failed. That's the problem."
|
|
63
|
+
Why: the meaning lands on a short beat here β the brevity is earned, not inserted for variance
|
|
64
64
|
|
|
65
65
|
5. Added sentence starting with "But"
|
|
66
66
|
Why: human writers do this; AI avoids it as a statistical default
|
|
@@ -84,6 +84,16 @@ The full rewritten text, ready to copy and paste β no annotations, no formatti
|
|
|
84
84
|
|
|
85
85
|
## Instructions for Claude
|
|
86
86
|
|
|
87
|
+
### Phase 0: Calibrate to genre (do this first)
|
|
88
|
+
|
|
89
|
+
Before touching anything, decide what kind of text this is β the genre sets how far Phase 2 goes:
|
|
90
|
+
|
|
91
|
+
- **Neutral / informational** (documentation, reference, summaries, status reports, official notices, most business comms): run **Phase 1 only**. Strip the tells and stop. Do **not** inject opinion, asides, or personality β a clean doc is the goal, not a voice. Injected "humanity" here reads as unprofessional.
|
|
92
|
+
- **Personal / persuasive / social** (opinion pieces, blog posts, founder notes, LinkedIn, marketing, personal emails): run **Phase 1 + Phase 2**. Here earned voice is the point.
|
|
93
|
+
- **Unsure or mixed:** default to the lighter touch (Phase 1, plus only the Phase 2 moves the content genuinely earns), and say which genre you assumed.
|
|
94
|
+
|
|
95
|
+
The single rule underneath: **calibrate voice to the job of the text.** Never dismantle useful structure (a scannable doc, a real list) just to look less templated.
|
|
96
|
+
|
|
87
97
|
### Phase 1: Audit
|
|
88
98
|
|
|
89
99
|
Read the full text before making any changes. Identify and count every instance of these patterns:
|
|
@@ -108,19 +118,19 @@ Read the full text before making any changes. Identify and count every instance
|
|
|
108
118
|
|
|
109
119
|
Do not remove every em dash β only the ones used as parenthetical substitutes. Do not remove all hedging β only empty hedging that adds no information.
|
|
110
120
|
|
|
111
|
-
### Phase 2: Inject
|
|
121
|
+
### Phase 2: Inject (personal / persuasive genres only β see Phase 0)
|
|
112
122
|
|
|
113
|
-
|
|
123
|
+
Only for text where earned voice is the point. These are **options the content earns, not a checklist to complete** β apply the ones the material genuinely supports and **skip any that would be forced**. A move inserted to hit a quota is itself an AI tell. Never fake humanity: no invented typos, no forced slang, no staged messiness, and no chopping or padding sentences just to manufacture rhythm variance.
|
|
114
124
|
|
|
115
|
-
1. **
|
|
125
|
+
1. **A genuine opinion or take** *(if the author clearly holds one).* State the belief the text already implies, without hedging. Don't manufacture an opinion the author never expressed.
|
|
116
126
|
|
|
117
|
-
2. **
|
|
127
|
+
2. **A specific detail or example** *(only if a real one exists).* Ground the most abstract claim in something concrete the author actually knows. **Never invent a number, quote, date, name, or fact to sound specific** β that's fake specificity, a worse tell than vagueness. If no real detail is available, ask the author for one or keep the honest abstraction; do not fabricate.
|
|
118
128
|
|
|
119
|
-
3. **
|
|
129
|
+
3. **An aside that steps out of the formal argument** *(where it fits the register).* The signal most synthetic text lacks β but only in genres that welcome it, and only when it connects to a real point. Forced or cutesy asides are worse than none.
|
|
120
130
|
|
|
121
|
-
4. **
|
|
131
|
+
4. **Let a sentence be short where the point lands on a short beat.** Follow the meaning, not a word count. Never shorten a sentence just to add "variance."
|
|
122
132
|
|
|
123
|
-
5. **
|
|
133
|
+
5. **Start a sentence with "And" or "But" only where the rhythm truly earns it.** If no place does, don't add one β a random "But" is a tell, not a fix.
|
|
124
134
|
|
|
125
135
|
### Phase 3: Report
|
|
126
136
|
|
|
@@ -136,20 +146,25 @@ Present the output in the four-section structure defined above. The change log m
|
|
|
136
146
|
|
|
137
147
|
## Quality Checks
|
|
138
148
|
|
|
149
|
+
- [ ] Genre was assessed first (Phase 0); neutral/informational text got Phase 1 only, with no injected opinion, aside, or personality
|
|
139
150
|
- [ ] Audit was completed before rewriting (patterns counted, not just detected)
|
|
140
151
|
- [ ] Every removed pattern is listed in the change log with a specific reason
|
|
141
152
|
- [ ] Em dashes were assessed individually β only parenthetical-substitute uses were removed
|
|
142
153
|
- [ ] Rule-of-three lists: the rhythm was actually checked, not just the fact that there were three items
|
|
143
|
-
- [ ]
|
|
144
|
-
- [ ]
|
|
154
|
+
- [ ] No fact, number, quote, date, or name was invented to add specificity
|
|
155
|
+
- [ ] Any Phase 2 moves applied were earned by the content β none inserted to hit a quota (short sentence / "And"/"But" opener / aside added only where the material genuinely called for it, or not at all)
|
|
145
156
|
- [ ] The specific detail or example added connects to an actual claim in the text, not floated in generically
|
|
146
|
-
- [ ] The aside breaks the fourth wall slightly without being forced or cutesy
|
|
157
|
+
- [ ] The aside (if any) breaks the fourth wall slightly without being forced or cutesy
|
|
147
158
|
- [ ] The change log lists specific instances, not categories
|
|
148
159
|
- [ ] The clean output section has no annotations or formatting artifacts β ready to paste
|
|
149
160
|
- [ ] If the original was already clean, that was stated explicitly rather than changes invented
|
|
150
161
|
|
|
151
162
|
## Anti-Patterns
|
|
152
163
|
|
|
164
|
+
- [ ] Do not fake humanity: no invented typos, no forced slang, no staged messiness, and no programmatic sentence-length variation added to hit a target β faked signals are themselves AI tells
|
|
165
|
+
- [ ] Do not inject voice into neutral genres β documentation, summaries, reports, and official comms get the tells stripped and nothing added; personality there reads as unprofessional
|
|
166
|
+
- [ ] Do not invent specificity β never add a number, quote, date, name, or fact that isn't real to make prose sound concrete; ask for the detail or keep the honest abstraction
|
|
167
|
+
- [ ] Do not dismantle useful structure (a scannable layout, a genuine list) just to look less templated
|
|
153
168
|
- [ ] Do not remove all em dashes β only the ones functioning as parenthetical substitutes should be removed; genuine dramatic pauses are valid
|
|
154
169
|
- [ ] Do not invent problems to justify changes when the original is already clean β report what was found honestly, even if the answer is "this text is mostly fine"
|
|
155
170
|
- [ ] Do not add the aside or opinion generically β the injected human signals must connect to an actual claim or argument in the text, not float in as decoration
|
package/exports/cline/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
> Auto-generated from `skills/*/SKILL.md` by `scripts/build-exports.mjs`.
|
|
4
4
|
> **Do not edit these files by hand** β edit the source skill and regenerate.
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
751 skills exported. Copy a `.md rule` into the tool to use it.
|
|
7
7
|
|
|
8
8
|
| Skill | Bundle | Path |
|
|
9
9
|
|---|---|---|
|
|
@@ -756,4 +756,5 @@
|
|
|
756
756
|
| World Clock | `pm-live` | `pm-live/world-clock/world-clock.md` |
|
|
757
757
|
| Writing Great Skills | `pm-engineering` | `pm-engineering/writing-great-skills/writing-great-skills.md` |
|
|
758
758
|
| Writing Plans | `pm-method` | `pm-method/writing-plans/writing-plans.md` |
|
|
759
|
+
| YouTube Script | `pm-creator` | `pm-creator/youtube-script/youtube-script.md` |
|
|
759
760
|
| YouTube Script Writer | `pm-writers` | `pm-writers/youtube-script-writer/youtube-script-writer.md` |
|