[ COPY & CONTENT · OPERATOR UTILITY ]
/pb-script
Turn a video idea into a YouTube script for @faris-bio.
ACME Agency, <id> and you@example.com mark values that are per-agency — your install fills them with YOUR clients and accounts. If a section references a helper script you don't have yet, it ships with that workflow's install./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 againstideas/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
- Reads
faris-bio/brand/voice.md,positioning.md,pillars.mdfor context - 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 - Scaffolds the video folder via
node faris-bio/scripts/init_video.mjs <slug> - Generates the five output sections (see below)
- Presents everything to Faris with driver's-seat checkpoints
- After Faris picks, writes consolidated
script.mdto 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:
# 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:
- Zero em-dashes (—) anywhere in the output
- Zero matches against
voice.mdbanned phrases list - Every hook opens with a number, claim, or contrarian take
- At least one napkin-math moment in the outline
- At least one "I tested X, this one works" moment
- At least one "don't waste time on X" moment
- At least one open loop in a card transition
- CTA is a single specific ask, not a triple stack
- All tool/method names are specific (name the tool, not "various tools")
- 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 difffaris-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.mdfaris-bio/brand/pillars.mdfaris-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.mdfaris-bio/channels/youtube/videos/<YYYY-MM-DD-slug>/brief.md(updated)faris-bio/channels/youtube/videos/<YYYY-MM-DD-slug>/metadata.md(updated)