Skills DirectorySkills Directory
SkillsLearnSecurityCategoriesDocsCommunityBlog
Sign InSubmit Skill
Skills Directory

Security-tested agent skills for Claude, coding agents, and AI workflows.

Directory

  • Browse Skills
  • All Skills A–Z
  • Claude Skills
  • Claude Code Skills
  • Agent Skills
  • Categories
  • Submit a Skill

Learn

  • Learn Hub
  • Install Claude Skills
  • Write SKILL.md
  • Skills vs MCP
  • Directories Compared

Security

  • Security
  • Methodology
  • Secure Claude Skills
  • Security Badges

Company

  • About
  • Community
  • Blog
  • API Docs
  • Advertise

2026 Skills Directory. All rights reserved.

Back to skills

Twitter Vet

ASecurity

Vet, score, or decide whether to add Twitter/X accounts to a curated list. Use when asked to vet a handle, score accounts, decide whether an account belongs on a list, or when twitter-digest/twitter-discover need shared account scoring.

12 stars
0 votes
0 copies
0 views
Added 9/20/2026
datagoshellbashgitapi

Works with

cursorapi

Security Analysis

A100/100

Scanned 9/20/2026

Install to Claude Code

$npx -y skills add benthamite/dotfiles --skill twitter-vet --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Twitter Vet?

Add the live security badge to your README — it updates automatically with every re-scan.

Security grade badge for Twitter Vet
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/benthamite-twitter-vet-dotfiles/badge)](https://www.skillsdirectory.com/skills/benthamite-twitter-vet-dotfiles)

More formats (shields.io, HTML) on the badges page.

Download Zip
Files
SKILL.md
---
name: twitter-vet
description: Vet, score, or decide whether to add Twitter/X accounts to a curated list. Use when asked to vet a handle, score accounts, decide whether an account belongs on a list, or when twitter-digest/twitter-discover need shared account scoring.
user-invocable: true
---

# Twitter account vetting

Shared procedure for evaluating whether a Twitter account belongs on a curated list. Referenced by `twitter-digest` and `twitter-discover`.

Use this skill when:
- A user asks to vet, score, rank, or decide whether a Twitter/X account belongs on a list.
- `twitter-digest` needs to evaluate RT-discovered accounts against an existing list rubric.
- `twitter-discover` needs shared scoring criteria for candidate accounts.

Do not use this skill for direct tweet/profile lookup or Twitter search; use `twitter` for that. Do not use it for open-ended account discovery; use `twitter-discover`, then apply this procedure only to candidate scoring. Do not mutate Twitter/X itself or use authenticated browser actions.

## Inputs and paths

Required inputs:
- Account handle(s) to evaluate.
- A list name and scoring rubric, usually the list file's `description` or `twitter-discover`'s `RELEVANCE_CRITERIA`.
- An optional `vet-threshold`; default threshold is 7.

If there is no rubric, ask for one or have the caller synthesize one before scoring. Do not invent a hidden rubric after fetching tweets.

All API access goes through the active `twitter` skill wrapper. Set `TWITTERAPI` before the first API call, then verify it exists with `test -x "$TWITTERAPI"`:

- Codex: `TWITTERAPI="/.codex/programmatic-skills/twitter/lib/twitterapi.sh"`
- Claude: `TWITTERAPI="/.claude/programmatic-skills/twitter/lib/twitterapi.sh"`

The shared vet registry source of truth is the Claude skill data path, even when invoked from Codex:

```
~/.claude/programmatic-skills/twitter-vet/vetted/<list-name>.md
```

This keeps Claude and Codex callers from splitting vetting history. Treat resolved API keys and credential environment variables as secrets: do not echo `TWITTERAPI_API_KEY*`, do not enable shell xtrace, and do not print curl commands that include API headers.

## Operating order

1. Resolve the list name, rubric, threshold, and caller context (`standalone`, `twitter-digest`, or `twitter-discover`).
2. Check the vet registry for the current list before evaluating any account.
3. Apply Procedure A using already-available metadata.
4. Apply Procedure B only to accounts that pass Procedure A and have not already been scored for this list.
5. Apply the auto-add rule only when an existing `twitter-digest` list is being updated.
6. Record results in the registry unless the caller has an explicit later persistence step, such as `twitter-discover`'s save phase.
7. Verify changed files and commit only when running standalone.

## Procedure A: Quick filter (no API calls)

Input: username, bio, follower count, available recent tweets (text + engagement).
Output: **PASS** (advance to full scoring) or **SKIP** (with one-line reason).

Rules:

1. Skip if followers < 500 (too small) or > 2M (likely media/celebrity, rarely original niche content).
2. Skip if bio is clearly irrelevant to the scoring rubric. Use judgment, not keyword matching.
3. Skip if all available tweets are low-effort RTs, self-promotion, or off-topic for the rubric.
4. Otherwise, PASS.

## Procedure B: Full scoring (1 API call per account)

Input: username, scoring rubric (the list's `description` or the discover skill's `RELEVANCE_CRITERIA`).

Steps:

1. Fetch ~20 tweets via `"$TWITTERAPI" tweets <username>`.
2. Confirm the API response belongs to the requested account and contains usable tweet data. If the response is empty or malformed, report that directly instead of inferring missing content.
3. Evaluate the tweet corpus against the rubric **and** the epistemic quality gate below. Assign a score 1-10:
   - **8-10**: Consistently produces content matching the rubric with good epistemics. Auto-add.
   - **6-7**: Some signal, some noise. Strong candidate but not overwhelming.
   - **4-5**: Occasional relevant content but mostly off-topic.
   - **1-3**: Not relevant.
4. Write a one-line rationale for the score.

### Epistemic quality gate

This is a universal criterion applied to **all** lists, independent of topical relevance. Accounts that fail this gate should be penalized by 2-3 points regardless of how well they match the rubric.

**Red flags** (penalize):
- Claims presented with more confidence than the evidence warrants
- Engagement-optimized framing: superlatives ("the BEST way"), false urgency ("you NEED to"), listicle bait ("5 things that will change how you...")
- No caveats, qualifications, or acknowledgment of limitations
- Cherry-picked examples presented as general truths
- Hype amplification without independent analysis

**Green flags** (reward):
- Confidence calibrated to evidence ("in my experience", "early results suggest", "this worked for X but YMMV")
- Explicit caveats and limitations ("this breaks down when...", "caveat: only tested on...")
- Willingness to say "I don't know" or "I was wrong"
- Distinguishing personal experience from general claims
- Engaging with counterarguments or tradeoffs rather than selling a single narrative

When in doubt, ask: "Is this person trying to inform me, or trying to impress me?" Accounts optimized for impressions over information should not pass regardless of topical fit.

## Auto-add rule

Apply this rule only when vetting for an existing `twitter-digest` list file. When invoked from `twitter-discover` before the user has chosen to save a digest list, return the score to the caller instead of editing any list file.

- Score >= 7: append `- @username` to the list file.
- Score 5-6: report as borderline in the digest output.
- Score <= 4: skip silently.

The threshold of 7 can be overridden via an optional `vet-threshold` field in the list's YAML frontmatter.

## Vet registry

All accounts ever scored against a specific list's rubric are recorded in a persistent registry at:

```
~/.claude/programmatic-skills/twitter-vet/vetted/<list-name>.md
```

**Before vetting any account**, check the registry for the current list. If the account appears in any section, skip it entirely and use the recorded outcome. Re-score only if the user explicitly asks to revisit a prior judgment.

**After each evaluation**, record the account in the appropriate section (create the file if it doesn't exist):

- Procedure A rejection → "Skipped (quick filter)"
- Procedure B score 1-3 → "Below threshold"
- Procedure B score 4-5 → "Tier 3"
- Procedure B score 6-7 → "Tier 2"
- Procedure B score 8-10 → "Tier 1"
- User manually says no → "Rejected (manual)"

Never record a scored account under "Skipped (quick filter)". That section is only for accounts rejected before a full scoring pass.

Format:

```markdown
# Vet registry: <list-name>

## Tier 1 (8-10)

- **@handle** (score, YYYY-MM-DD) — one-line rationale

## Tier 2 (6-7)

- **@handle** (score, YYYY-MM-DD) — one-line rationale

## Tier 3 (4-5)

- **@handle** (score, YYYY-MM-DD) — one-line rationale

## Below threshold (1-3)

- **@handle** (score, YYYY-MM-DD) — one-line rationale

## Rejected (manual)

- **@handle** (YYYY-MM-DD) — reason or original score

## Skipped (quick filter)

- **@handle** (YYYY-MM-DD) — one-line reason
```

## Committing changes

When running standalone, after vetting is complete, commit all changed markdown files (list files, vet registry) in one commit:

```bash
git -C ~/My\ Drive/dotfiles add claude/programmatic-skills/twitter-vet/vetted/ claude/programmatic-skills/twitter-digest/lists/ && git -C ~/My\ Drive/dotfiles commit -m "twitter-vet: update <list-name> registry"
```

Only stage paths that actually changed. When called from `twitter-digest` or `twitter-discover`, skip this; the caller's save/commit step owns persistence.

## Verification

Before reporting completion:

1. Re-read the registry entry and confirm each evaluated account appears exactly once in the correct section for its score or quick-filter outcome.
2. If auto-add applies, re-read the list file and confirm each score-above-threshold account appears exactly once as `- @username`; if auto-add does not apply, confirm the list file was not edited.
3. If an API call was used, state whether the response was successful, how many tweet samples were reviewed, and whether any cursor remained unused.
4. Run `git diff --check` after file edits and inspect `git status --short` before committing so unrelated changes are not staged.

## Cost

~$0.003 per account vetted (one `get_user_tweets` call). Quick filter is free.

Attribution

benthamitebenthamite
View sourceMore from benthamite →
SSkills DirectorySkills Directory

Your tool, in front of Claude Code builders.

3 founder slots · $299/mo · GSC-verified traffic · sponsors can never buy grades.

See placements

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments (0)

No comments yet. Be the first to comment!

SSkills DirectorySkills Directory

Your tool, in front of Claude Code builders.

3 founder slots · $299/mo · GSC-verified traffic · sponsors can never buy grades.

See placements

Related Skills

Rank Tracker

This skill helps you track, analyze, and report on keyword ranking positions over time. It monitors both traditional SERP rankings and AI/GEO visibility to provide comprehensive search performance insights.

1821 votes

Youtube Competitor Analyzer

Find and analyze YouTube competitor channels using YouTube Data API v3. Discover competitors through keyword search, category matching, content similarity, and related channel discovery. Compare metrics, content strategies, and market positioning. Use when users want to (1) Find competitors for their YouTube channel, (2) Analyze competitor performance metrics, (3) Compare their channel against competitors, (4) Identify content gaps and opportunities, (5) Benchmark against similar creators, (6...

31 votes

Twitter Algorithm Optimizer

Analyze and optimize tweets for maximum reach using Twitter's open-source algorithm insights. Rewrite and edit user tweets to improve engagement and visibility based on how the recommendation system ranks content.

742580 votes

Weather Fetcher

Instructions for fetching current weather temperature data for Karachi, Pakistan from wttr.in API

661090 votes

Weather

Get current weather and forecasts (no API key required).

476190 votes
View all in data →