[ COPY & CONTENT · OPERATOR UTILITY ]
/pb-ideate
Generate 9 ranked YouTube video ideas for Faris's personal brand (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-ideate — Personal Brand Idea Generator
Triggers
/pb-ideate— generates ideas from the last 30 days ofagency-oscommits/pb-ideate --since "14 days ago"— narrower window/pb-ideate --pillar 1,4— bias output toward specific pillars (after picks)
What this skill does
- Pulls meaningful commits from
c:/Users/faris/agency-osgit log (filters merges, fixups, doc-only) - Scores commits by lines changed + presence in
.claude/skills/,.claude/agents/,*/scripts/*.mjs, etc. - Clusters commits by domain (meta, google_ads, ai_video, agents, bridge, etc.)
- Reads
faris-bio/brand/pillars.md,positioning.md,voice.mdfor context - Generates 9 ranked video ideas in the structured format below
- Asks the user which ideas to keep (driver's-seat checkpoint)
- Appends only the user's picks to the
Faris Bio — Content PipelineGoogle Sheet with Status = Inbox - Logs the full set (picked + discarded) to
faris-bio/research/notes/ideate-runs/<timestamp>.md
What this skill does NOT do
- Does not auto-promote ideas past Inbox
- Does not write thumbnails, scripts, or briefs (those are separate skills)
- Does not run on a cron — manual invocation only
- Does not post to Slack on its own (the user can ACME Agencyw the sheet directly)
Procedure
Step 1 — Verify pipeline is initialized
Check that faris-bio/config.json exists and contains sheet_id. If not, run:
node faris-bio/scripts/setup_pipeline.mjs
This creates the Drive folder, sheet, tab, headers, and dropdowns. Idempotent — safe to re-run.
Step 2 — Pull commits + brand context
node faris-bio/scripts/ideate_prepare.mjs --since "30 days ago"
The script prints a structured JSON block containing:
window— the time window usedclusters— commits grouped by domain, with score, files, line countspillars_md,positioning_md,voice_md— full brand context
Step 3 — Generate 9 ranked ideas
Using the JSON output + brand docs, generate exactly 9 ideas following Chase's ideation pattern (from faris-bio/research/notes/<id>.md):
<id>
For each of the 9 ideas, present:
## Idea N — <working title>
- **angle:** <one-line, what makes this video different from the obvious version>
- **desire:** <one-line, the desire/pain this hits in the viewer>
- **pillar:** 1-5 (from brand/pillars.md)
- **format:** long-form / short / linkedin / carousel / live-build
- **channel:** YT / Shorts / LI / IG (one or more)
- **source commits:** <short hashes>
- **effort:** low / med / high
- **competitive gap:** <one-line, what other AI-marketing YouTubers are not doing here>
- **why now:** <one-line, why this angle is fresh given Faris's actual recent work>
After all 9, add a ranking section that orders them by your judgment of strategic value — weighting:
- Moat content (pillars 1, 4 from
pillars.md) heavier than traffic content - Ideas that pull from multiple commits (proves the depth) heavier than single-commit ideas
- Ideas that have a clear "before agency-os / after agency-os" narrative
End with: "Which of these 9 should go to the Inbox in the Content Pipeline? Reply with the numbers, e.g. '1, 3, 7' — or 'all' / 'none'."
Step 4 — Wait for the user to pick
Do NOT auto-write to the sheet. The user is in the driver's seat.
Step 5 — Commit the picks
For each picked idea, build a JSON object:
{
"id": "2026-04-<short-slug>",
"title": "<working title>",
"angle": "<from output>",
"pillar": "<1-5>",
"format": "<from output>",
"channel": "<YT/Shorts/LI/IG, comma-separated if multi>",
"source": "git:<hash1>,git:<hash2>",
"desire": "<from output>",
"effort": "<low/med/high>",
"notes": "<optional — anything the user said when picking>"
}
ID format: YYYY-MM-<short-slug> (year-month + 3-5 word kebab slug).
Write the array to a temp JSON file, then:
node faris-bio/scripts/ideate_commit.mjs <temp.json>
The script appends the picks to the sheet with Status = Inbox and prints the sheet URL.
Step 6 — Save the run log
Write all 9 ideas (picked + discarded) to:
faris-bio/research/notes/ideate-runs/<YYYY-MM-DD-HHmm>.md
Format: same as the <id> above + a "Picks" section listing which ones the user kept. This is the audit trail — useful when ACME Agencywing what we discarded later.
Reusable infrastructure
faris-bio/scripts/lib/git_log.mjs—pullCommits(),clusterCommits()faris-bio/scripts/lib/pipeline_sheet.mjs—ensurePipelineSheet(),appendIdeas(),listIdeas()ACME Agency/scripts/lib/google_sheets.mjs— underlying Sheets API (auth + helpers)ACME Agency/scripts/lib/google_slides.mjs—getAccessToken()for OAuth
Voice rules (apply to the generated ideas)
From faris-bio/brand/voice.md:
- No em-dashes
- No "let's dive in", "unlock", "next-level", "in this video", "without further ado"
- Hooks open with a number, claim, or contrarian take
- Lean on real client stories from Paradox / PKV / IA Outreach / ACME Agency — that's the moat
Strategic frame (from research notes)
Faris's fountainhead is agency-os itself. He is the source. Every idea should pull from a real artifact he shipped — not an abstract "here's how AI could help an agency" angle.
If a generated idea doesn't trace back to a specific commit, drop it.