influencer
$
npx mdskill add vellum-ai/vellum-assistant/influencerUse browser automation for collection and `host_bash` helper scripts for deterministic parsing, scoring, and comparison. All browser operations are executed through the `assistant browser` CLI, invoked via `host_bash`.
SKILL.md
.github/skills/influencerView on GitHub ↗
---
name: influencer
description: Research influencers on Instagram, TikTok, and X/Twitter through your browser
compatibility: "Designed for Vellum personal assistants"
metadata:
emoji: "🔍"
vellum:
category: "browsing"
display-name: "Influencer Research"
includes: ["vellum-browser-use"]
---
Use browser automation for collection and `host_bash` helper scripts for deterministic parsing, scoring, and comparison. All browser operations are executed through the `assistant browser` CLI, invoked via `host_bash`.
## Required tools
- `host_bash` for `assistant browser` CLI commands and helper scripts in `scripts/`.
## Hard constraints
- Do not call `assistant browser chrome relay`.
- Do not use legacy relay-backed influencer scripts.
## Step graph (state machine)
### Step 1: Route intent
Use deterministic routing when intent is unclear:
```bash
bun {baseDir}/scripts/influencer-intent.ts --request "<latest user request>" --has-candidates <true|false> --has-shortlist <true|false>
```
Use returned `step` to route to `discover`, `enrich_profile`, or `compare_shortlist`.
### Step 2: Discover candidates (`discover`)
#### Instagram
1. Navigate to keyword search/post surfaces.
2. Snapshot + extract:
```bash
assistant browser --session influencer --json snapshot
assistant browser --session influencer --json extract --include-links
```
3. Parse candidates:
```bash
bun {baseDir}/scripts/influencer-parse-candidates.ts --platform instagram --input-json '<json payload with extracted text/links>'
```
#### TikTok
1. Navigate to user search page for query.
2. Use `assistant browser --session influencer scroll` + `assistant browser --session influencer wait-for` to load additional candidates.
3. Extract and parse:
```bash
bun {baseDir}/scripts/influencer-parse-candidates.ts --platform tiktok --input-json '<json payload with extracted text>'
```
#### X/Twitter
1. Navigate to people search view (`f=user`).
2. Snapshot + extract:
```bash
assistant browser --session influencer --json snapshot
assistant browser --session influencer --json extract --include-links
```
3. Parse:
```bash
bun {baseDir}/scripts/influencer-parse-candidates.ts --platform twitter --input-json '<json payload with extracted text/links>'
```
### Step 3: Enrich profiles (`enrich_profile`)
For each selected candidate profile:
1. Navigate to profile URL.
2. Snapshot + extract profile metadata (bio, follower counts, verification indicators).
3. Score with criteria:
```bash
bun {baseDir}/scripts/influencer-score.ts --query "<user query>" --min-followers <n> --max-followers <n> --verified-only <true|false> --input-json '<json payload with profiles>'
```
4. If themes are missing, enrich using:
```bash
bun {baseDir}/scripts/influencer-theme-extract.ts --bio "<bio>" --query "<user query>"
```
### Step 4: Build shortlist (`compare_shortlist`)
Generate deterministic comparison output:
```bash
bun {baseDir}/scripts/influencer-compare.ts --limit <n> --input-json '<json payload with profiles and criteria>'
```
Present results grouped by platform with:
- Username / display name
- Followers (normalized)
- Verification status
- Theme highlights
- Profile URL
## Retry and fallback policy
- Retry budget: 3 attempts for each state-changing browser step.
- After any navigation or click that changes DOM, run fresh `assistant browser --session influencer --json snapshot`.
- If blocked by sign-in wall or challenge after retries, ask user to complete that step and resume from latest successful state.
## Platform notes
- Instagram search often surfaces posts/reels before profiles; use author-handle pivot logic.
- TikTok search can require scroll cycles to load profile cards.
- X/Twitter should use people-search surfaces to avoid irrelevant mixed-content feeds.
## Example helper payload shape
```json
{
"phase": "discover",
"context": { "platform": "instagram" },
"extracted": {
"text": "...",
"links": ["https://www.instagram.com/example/"]
},
"userIntent": "find fitness creators"
}
```