# /pb-script

> Turn a video idea into a YouTube script for @faris-bio.


# /pb-script — Personal Brand YouTube Script Generator

## Triggers

- `/pb-script six-agent-stack` — generate a script for an idea by slug (looks up in the Content Pipeline sheet or matches against `ideas/backlog.md`)
- `/pb-script --idea "How I built 6 AI agents that run my 25-client agency"` — free-text brief, no Sheet lookup needed
- `/pb-script --commits 4142042,19b39bc` — pull commit context for specificity

## What this skill does

1. Reads `faris-bio/brand/voice.md`, `positioning.md`, `pillars.md` for context
2. If commits are referenced, runs `node faris-bio/scripts/read_commit_diff.mjs <hash>` per commit (capped at 300 lines each) to get real code context
3. Scaffolds the video folder via `node faris-bio/scripts/init_video.mjs <slug>`
4. Generates the five output sections (see below)
5. Presents everything to Faris with driver's-seat checkpoints
6. After Faris picks, writes consolidated `script.md` to the video folder

## What this skill does NOT do

- Does not generate thumbnails or visual assets (that's `/pb-package`)
- Does not publish anything
- Does not auto-write without user picks
- Does not generate verbatim body scripts (Faris freestyles the body from talking points, per his recording style)

## Output sections

### Section 1 — Hook block (5 variants)

Each variant has three components:

```
### Hook A
**Spoken (20-30s, word-for-word):**
> "Six AI agents now handle 70% of the work I used to do across 25 ad accounts. Here's exactly what each one does and what it refuses to do."

**Visual (what's on screen):**
> Quick montage: Slack message triggering Claude → analyst agent output → creative-director picking a generator → Instantly dashboard

**Text overlay (optional, mainly for Shorts):**
> "6 agents. 25 clients. 1 person."
```

**Voice enforcement on hooks:**
- Must open with a number, a claim, or a contrarian take (voice.md rule)
- Zero "In this video" or "So," openers
- Zero em-dashes
- Zero banned phrases from voice.md
- Must include at least one concrete number
- Should match the energy of the working title (contrarian title = contrarian hook)

### Section 2 — Full intro scripted (2-3 variants, 30-60s each)

Word-for-word script that follows the hook. This is where voice matters most. Faris will hand-rewrite this (Joey's method), so generate 2-3 variants with different structural approaches:

- **Variant A:** proof-first (show dashboard/result → then explain)
- **Variant B:** story-first ("Three weeks ago, I was manually ACME Agencywing 25 ad accounts every Monday morning...")
- **Variant C:** contrarian-first (name what everyone else does wrong → promise a better way)

Each variant should feel like the real voice samples in `voice.md`. Read them before writing. If a generated line wouldn't fit alongside "I'm not a beginner at this. I run an agency for 10 years. But I started a new agency just on the side without using any social proof, just to prove that it's not luck" — rewrite it.

### Section 3 — Outline (Boardmix-card-shaped)

Target length suggestion (8-12 min for the first videos). Then N sections, each structured as a Boardmix card Faris can put on his canvas:

```
### Card 3: The Diagnostician Agent (refuses to fix until it diagnoses)
**Talking points:**
- Show the diagnostician refusing to propose a code change
- Explain the GSD-inspired quality gate: hypothesis → test → only then propose
- Real example: Creatomate black-screen bug (commit 072cc90)
- "Most AI agent tutorials skip constraints. Constraints are the whole point."

**Visual aid:**
> Screen-share: `.claude/agents/diagnostician.md` open in editor, highlight the refusal rule

**Source material to show on screen:**
> `072cc90` commit diff — Creatomate fix
```

**Rules for cards:**
- 3-5 talking-point bullets per card, not a script (Faris freestyles from points)
- Each card suggests a visual aid (what to show on screen or draw on Boardmix)
- At least one card must contain a napkin-math moment (voice.md signature move)
- At least one card must contain an "I tested a lot of X, but this one..." moment
- At least one card should name something to skip ("Don't waste time on X")
- Include 1-2 open loops in transitions between cards ("The next agent is the one that surprised me the most")

### Section 4 — CTA block

One ask. Not three. Make it specific. Default to soft CTAs until Faris has an offer to sell.

Good: "Drop a comment with your biggest agency bottleneck and I'll tell you which agent to build first."
Bad: "Like, share, subscribe, and see you in the next video."

### Section 5 — Title variants (5 options)

Grounded in voice.md rules:
- Opens with a number, claim, or contrarian take
- No banned phrases
- Under 60 characters (YouTube truncates at ~60 on mobile)
- When Faris has past-performer data from YouTube Studio, the skill should reference what worked. For now: grounded in voice.md + the transcript analysis patterns.

Present as a ranked list with one-line reasoning per title.

## Driver's-seat checkpoints

After generating all 5 sections, ask:

> *"Here are your 5 hooks, 3 intros, the outline, CTA, and 5 titles. Pick:*
> *- Hook: which number? (or 'none, let me rewrite')*
> *- Intro: which variant? (A/B/C or 'I'll rewrite from scratch')*
> *- Outline: any cards to cut, add, or reorder?*
> *- Title: which number? (or 'let me AB test 2-3 on YouTube')*
> *- CTA: keep or change?"*

After picks, write the consolidated `script.md` to the video folder. Format:

```markdown
# Script — <title>

## Hook
<picked hook, word-for-word>

## Intro
<picked intro variant, word-for-word>

## Outline

### Card 1: ...
### Card 2: ...
...

## CTA
<picked CTA>

## Metadata
- **Title:** <picked title>
- **Alt titles for AB test:** <if Faris wants to test 2-3>
- **Target length:** Xm
- **Source commits:** <hashes>
- **Pillar:** <from idea>
```

Also update `brief.md` and `metadata.md` stubs in the same folder with the final picks.

## Voice enforcement checklist (run before presenting output)

Before showing any output to Faris, self-check:

1. Zero em-dashes (—) anywhere in the output
2. Zero matches against `voice.md` banned phrases list
3. Every hook opens with a number, claim, or contrarian take
4. At least one napkin-math moment in the outline
5. At least one "I tested X, this one works" moment
6. At least one "don't waste time on X" moment
7. At least one open loop in a card transition
8. CTA is a single specific ask, not a triple stack
9. All tool/method names are specific (name the tool, not "various tools")
10. Generated lines pass the calibration test: would this sentence fit alongside the real voice samples in `voice.md`?

## Helper scripts

- `faris-bio/scripts/read_commit_diff.mjs <hash>` — commit details + capped diff
- `faris-bio/scripts/init_video.mjs <slug>` — scaffolds the video folder

## Files read

- `faris-bio/brand/voice.md` (REQUIRED — always read before generating)
- `faris-bio/brand/positioning.md`
- `faris-bio/brand/pillars.md`
- `faris-bio/config.json` (for Sheet ID if looking up an idea by slug)

## Files written

- `faris-bio/channels/youtube/videos/<YYYY-MM-DD-slug>/script.md`
- `faris-bio/channels/youtube/videos/<YYYY-MM-DD-slug>/brief.md` (updated)
- `faris-bio/channels/youtube/videos/<YYYY-MM-DD-slug>/metadata.md` (updated)
