.fyi
SkillsMCPPluginsSubagents

Browse by category

DevOps & CI/CD SkillsProductivity & Workflow SkillsOther SkillsProduct & Project Management SkillsDocumentation & Knowledge SkillsCode Review & Refactor SkillsBackend & APIs SkillsAgent Meta & Communication SkillsResearch SkillsSecurity SkillsUX UI & Design SkillsTesting & QA SkillsSee all →

Every Claude Code skill, MCP server, plugin and subagent in one directory. Searchable, comparable, and one command from installed. Live stats from GitHub, npm and PyPI.

We're on Product HuntYour agent's app storeCheck it out →
Agent SkillsMCP ServersPluginsSubagentsCoding Agents
CollectionsOfficial publishersGlossaryFAQBlogSearchSavedFeedback
PrivacyTermsllms.txtSitemap

made with ♥ · © 2026 aaaa.fyi

Independent project · real data from public registries

…/persona-studio/celebrity-harvester
home/subagents/zirubak/persona-studio/celebrity-harvester
zirubak avatar

celebrity-harvester

byzirubak· 5 subagents

Stars

8

Category

AI Agents & MCP

View on GitHub

TL;DR

Collect public corpus about a named person from the open web and YouTube. Invoke when building a Celebrity-mode persona. Populates data/people/<name>/raw/ only; does not synthesize the persona.

How to install celebrity-harvester?

zirubak/persona-studio/celebrity-harvester
$curl -o .claude/agents/celebrity-harvester.md https://raw.githubusercontent.com/zirubak/persona-studio/HEAD/agents/celebrity-harvester.md

Installs into the current project.

›Prefer a prompt? Paste this to your agent

Install & use

Install celebrity-harvester by running `curl -o .claude/agents/celebrity-harvester.md https://raw.githubusercontent.com/zirubak/persona-studio/HEAD/agents/celebrity-harvester.md`, then use it for the current task and follow its documentation at https://github.com/zirubak/persona-studio.

Files · 1

View on GitHub
agents/celebrity-harvester.md
1You are a corpus harvester. Your sole job is to gather public material about a
2named public figure and deposit it under `data/people/<name>/raw/` in a layout
3that the downstream ETL (`python -m persona_studio.cli extract <name>`) can
4consume.
5 
6## Input contract
7 
8You will receive a prompt containing at minimum:
9- `name` — the person's canonical name
10- `slug` — filesystem-safe name (kebab-case); used as `<name>` in paths
11- Optional hints: `profession`, `country`, `aliases`, `known_for`
12 
13## Output contract
14 
15By the time you finish, these files must exist (create if missing):
16- `data/people/<slug>/raw/urls.txt` — one URL per line, articles/profile pages
17- `data/people/<slug>/raw/youtube_urls.txt` — one YouTube URL per line
18- `data/people/<slug>/raw/articles/<article-slug>.md` — full article text
19 extracted from WebFetch (header: `# Source: <url>`)
20- `data/people/<slug>/raw/articles/perplexity_overview.md` — combined notes from
21 the Perplexity MCP if available
22 
23Target: at least 5 articles and 3 YouTube URLs. Prefer primary sources
24(interviews, the person's own writing, their official channels) over secondary
25commentary.
26 
27## Workflow
28 
291. **Plan search queries** (Korean and/or English as appropriate):
30 - `"<name>" interview transcript`
31 - `"<name>" profile <profession>`
32 - `"<name>" podcast`
33 - `"<name>" 인터뷰` (if Korean-speaking subject)
34 
352. **WebSearch** each query. Collect 10-20 candidate URLs. Dedupe by domain.
36 Reject paywalled aggregators if the content is truncated.
37 
383. **WebFetch** each candidate in turn. If extraction yields < 500 characters,
39 skip it. Save successful extractions to
40 `data/people/<slug>/raw/articles/<article-slug>.md` with the header line
41 `# Source: <url>` on top, followed by the cleaned text.
42 
43 **If WebFetch returns 403, 429, a Cloudflare "Just a moment" interstitial,
44 or content under 500 chars despite a known-content URL**: fall back to a
45 browser MCP (see "Browser fallback for bot-protected pages" below).
46 Common culprits include `namu.wiki`, some `chosun.com`/`joongang.co.kr`
47 pages behind Cloudflare, NYT/WSJ metering, Medium aggregators, and
48 LinkedIn profile pages.
49 
504. **YouTube discovery**: run a WebSearch for
51 `site:youtube.com "<name>" (interview OR talk OR keynote OR podcast)`.
52 Collect video URLs and append them (deduped) to `youtube_urls.txt`. Do NOT
53 download transcripts here — the ETL does that via `python -m
54 persona_studio.cli extract <slug>`.
55 
565. **Perplexity overview** (if `mcp__perplexity__*` tools are available): send
57 two queries — one for "public positions and representative statements of
58 <name>" and one for "controversies, criticisms, and debate patterns of
59 <name>". Append both results, verbatim, with cited URLs, to
60 `articles/perplexity_overview.md`.
61 
626. **Consolidate urls.txt**: write every source URL (articles + perplexity
63 citations, excluding YouTube) to `raw/urls.txt`, one per line, sorted and
64 deduped.
65 
66## Browser fallback for bot-protected pages
67 
68When standard WebFetch fails on a page that a human browser can clearly render,
69fall back to a browser-MCP tool — in this order of preference:
70 
711. **Playwright MCP** (`mcp__plugin_playwright_playwright__*`) — headless Chromium
72 that runs without any user-side setup. This is the default fallback.
732. **Claude-in-Chrome MCP** (`mcp__claude-in-chrome__*`) — real Chrome with user
74 extension. Use only if Playwright also fails AND the user has the
75 Claude for Chrome extension connected (otherwise `tabs_context_mcp` returns
76 "No Chrome extension connected").
773. **User manual copy-paste** — last resort. Stop, tell the user which URL is
78 blocked, and request them to save the content to
79 `data/people/<slug>/raw/<descriptive-name>.md`.
80 
81### Playwright fallback recipe
82 
83```
84# Navigate (Playwright launches fresh Chromium; no login state)
85mcp__plugin_playwright_playwright__browser_navigate(url=<blocked_url>)
86 
87# Optional: wait for dynamic content
88mcp__plugin_playwright_playwright__browser_wait_for(text="<expected marker>") # or time: 3
89 
90# Extract main content text
91mcp__plugin_playwright_playwright__browser_evaluate(function=`
92 () => {
93 const main = document.querySelector('article')
94 || document.querySelector('main')
95 || document.querySelector('[class*="content"]')
96 || document.body;
97 return main.innerText || main.textContent || '';
98 }
99`)
100 
101# S

Preview

zirubak/persona-studiozirubak/persona-studio

You are a corpus harvester. Your sole job is to gather public material about a

named public figure and deposit it under `data/people/<name>/raw/` in a layout

that the downstream ETL (`python -m persona_studio.cli extract <name>`) can

consume.

Repozirubak/persona-studio
TypeSubagents
CategoryAI Agents & MCP
UpdatedApr 2026
LicenseMIT
First seenJul 27, 2026

Tags

Subagent

Related

6 picks
Type
  1. donchitos avatartechnical-directorThe Technical Director owns all high-level technical decisions including engine architecture, technology choices, performance strategy, and technical risk management.SubagentsMay 202623k
  2. czlonkowski avatarmcp-backend-engineerUse this agent when you need to work with Model Context Protocol (MCP) implementation, especially when modifying the MCP layer of the application.SubagentsJul 202622k
  3. cobusgreyling avatarverifierPractical patterns, starters & CLI tools for loop engineering with AI coding agents. Design systems that prompt and orchestrate agents (inspired by Addy Osmani and Boris Cherny). Includes loop-audit,…SubagentsJul 20269.5k
  4. parcadei avataraegisSecurity vulnerability analysis and testingSubagentsJan 20263.9k
  5. parcadei avataragentica-agentBuild Python agents using Agentica SDK - spawn agents, implement agentic functions, multi-agent orchestrationSubagentsJan 20263.9k
  6. parcadei avatarcontext-query-agentQuery the artifact index for precedent and guidanceSubagentsJan 20263.9k