本文へ移動
cccskills
無料GitHub で公開

categorizing-bsky-accounts

Analyze and categorize Bluesky accounts by topic using keyword extraction. Use when users mention Bluesky account analysis, following/follower lists, topic discovery, account curation, or network analysis.

インストール方法を見る

含まれるファイル(4)

  • SKILL.md6.9 KB
  • CHANGELOG.md838 B
  • README.md236 B
  • scripts/bluesky_analyzer.py13.0 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

Categorizing Bluesky Accounts

Fetch Bluesky account data and extract keywords for Claude to categorize by topic. The script compresses account context (bio + posts) into bio + keywords, then Claude performs intelligent categorization.

Prerequisites

Requires: extracting-keywords skill (provides YAKE venv + domain stopwords)

The analyzer delegates keyword extraction to the extracting-keywords skill, which provides:

  • Optimized YAKE installation with minimal dependencies
  • Domain-specific stopwords: English (574), AI/ML (1357), Life Sciences (1293)
  • Support for 34 languages

Core Workflow

When users request Bluesky account analysis:

  1. Ensure keyword extraction is set up - Invoke the extracting-keywords skill using the Skill tool to ensure YAKE venv exists (skip if already invoked in this session)

  2. Determine input mode based on user's request:

    • Following list → use --following handle
    • Followers → use --followers handle
    • List of handles → use --handles "h1,h2,h3"
    • File provided → use --file accounts.txt
  3. Configure parameters:

    • --accounts N - Number to analyze (default: 100, max: 100)
    • --posts N - Posts per account (default: 20, max: 100)
    • --stopwords [en|ai|ls] - Choose domain-specific stopwords:
      • en: English (general purpose)
      • ai: AI/ML domain (recommended for tech accounts)
      • ls: Life Sciences (for biomedical/research accounts)
    • --exclude "pattern1,pattern2" - Skip spam/bot accounts
  4. Run script - Outputs simple text format to stdout:

    @handle1.bsky.social (Display Name)
    Bio text here
    Keywords: keyword1, keyword2, keyword3
    
    @handle2.bsky.social (Another Name)
    Bio text here
    Keywords: keyword4, keyword5, keyword6
    
  5. Categorize accounts - Claude analyzes bio + keywords to categorize by topic

Quick Start

Analyze following list with AI/ML stopwords:

python scripts/bluesky_analyzer.py --following austegard.com --stopwords ai

Analyze followers:

python scripts/bluesky_analyzer.py --followers austegard.com

Analyze specific handles:

python scripts/bluesky_analyzer.py --handles "user1.bsky.social,user2.bsky.social,user3.bsky.social"

From file:

python scripts/bluesky_analyzer.py --file accounts.txt --stopwords ai

Filter out bot accounts:

python scripts/bluesky_analyzer.py --following handle --exclude "bot,spam,promo" --stopwords ai

Parameters

Input Modes (choose one)

--handles "h1,h2,h3" Comma-separated list of Bluesky handles

--following HANDLE Analyze accounts followed by HANDLE

--followers HANDLE Analyze accounts following HANDLE

--file PATH Read handles from file (one per line)

Analysis Options

--accounts N Number of accounts to analyze (1-100, default: 100)

--posts N Posts to fetch per account (1-100, default: 20)

--stopwords [en|ai|ls] Stopwords to use for keyword extraction (default: en)

  • en: English stopwords (574 terms) - general purpose
  • ai: AI/ML domain stopwords (1357 terms) - tech-focused accounts
  • ls: Life Sciences stopwords (1293 terms) - biomedical/research accounts

--exclude "word1,word2" Skip accounts with these keywords in bio/posts

Output Format

The script outputs simple text format for Claude to process:

@alice.bsky.social (Alice Smith)
AI researcher working on LLM alignment and safety
Keywords: alignment, safety research, interpretability, llm evaluation

@bob.bsky.social (Bob Johnson)
Full-stack developer building web applications
Keywords: react, typescript, node.js, api design, postgresql

@carol.bsky.social (Carol Williams)
Biotech researcher studying CRISPR applications
Keywords: crispr, gene editing, therapeutics, clinical trials

Claude then categorizes accounts based on bio + keywords without hardcoded rules.

Common Workflows

Audit Your Following List

python scripts/bluesky_analyzer.py --following your-handle.bsky.social --stopwords ai

Claude will categorize accounts by topic and identify patterns in who you follow.

Find Experts in a Topic

python scripts/bluesky_analyzer.py --following alice.bsky.social --stopwords ai

Ask Claude: "Which of these accounts are ML researchers?" or "Who focuses on climate tech?"

Analyze a Curated List

cat > accounts.txt << 'EOF'
expert1.bsky.social
expert2.bsky.social
expert3.bsky.social
EOF

python scripts/bluesky_analyzer.py --file accounts.txt --stopwords ls

Filter Out Bot Accounts

python scripts/bluesky_analyzer.py --following handle --exclude "bot,spam,promo,follow back" --stopwords ai

Technical Details

Keyword Extraction

Delegates to extracting-keywords skill using YAKE venv:

  • Stopwords options (--stopwords):
    • en: English (574 terms) - general purpose
    • ai: AI/ML domain (1357 terms) - filters technical noise, ML boilerplate
    • ls: Life Sciences (1293 terms) - filters research methodology, clinical terms
  • N-grams: 1-3 words
  • Deduplication: 0.9 threshold
  • Top keywords: 10 per account
  • Performance: ~5% overhead with domain stopwords vs English

API Rate Limits

Bluesky API limits:

  • 3000 requests per 5 minutes
  • 5000 requests per hour

The analyzer respects these limits with built-in delays.

Categorization Algorithm

Script's role:

  1. Fetch account data (bio + posts)
  2. Extract keywords to compress context
  3. Output bio + keywords in simple format

Claude's role:

  1. Read bio + keywords for each account
  2. Intelligently categorize by topic (no hardcoded rules)
  3. Group accounts, identify patterns, answer user questions

This agentic pattern is more flexible than hardcoded keyword matching.

Troubleshooting

"No accounts to analyze"

  • Verify handle format (include domain: handle.bsky.social)
  • Check if account exists and has public following/followers

"Insufficient content for keyword extraction"

  • Account has few posts (<5)
  • Posts are very short
  • Try increasing --posts parameter

Rate limit errors

  • Reduce --accounts parameter
  • Add delays between batches
  • Check Bluesky API status

Import errors

  • Verify extracting-keywords skill is available
  • Check YAKE venv exists: /home/claude/yake-venv/bin/python -c "import yake"
  • Verify Python 3.8+: python3 --version

Integration with Other Skills

Built-in integration:

  • extracting-keywords: Automatically delegates keyword extraction to this skill's optimized YAKE venv with domain-specific stopwords

Categorizing Output

Group accounts by topic from their bio + keywords, using judgment rather than a fixed taxonomy — the categories and counts follow from what's actually in the data, not a template.

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

GitHub repository access in containerized environments using REST API and credential detection. Use when git clone fails, or when accessing private repos/writing files via API.

日本語の概要は準備中です。原文の説明を表示しています。

oaustegard/claude-skills1512026年10月12日 更新

Decide which model, effort level, and cascade shape each subagent gets, and how to keep improvement loops safe (evaluator-as-selector, stop on regression). Routes on measured cost-per-completed-task rather than per-token price, because a tier's token count varies more by task shape than price varies across tiers. Covers per-model effort semantics, the concision lever, cascade preconditions, context handoff, and watching a subagent fan-out live. Use when choosing a subagent's model or effort, when choosing how to escalate a failed attempt, or when asked which model or effort a task should get. Grounded in a 2026-07 calibration, a 2026-08 coding-cost study, a 2026-09 seeded-bug repair battery, a 2026-10 Haiku 5.5 ladder priced per spawn, and a 2026-10 retry-versus-escalation ladder on 295 SWE-bench Verified tasks; Managed Agents API specifics are operational, not calibrated.

日本語の概要は準備中です。原文の説明を表示しています。

oaustegard/claude-skills1512026年10月12日 更新

Securely manages API credentials for multiple providers (Anthropic Claude, Google Gemini, GitHub). Use when skills need to access stored API keys for external service invocations.

日本語の概要は準備中です。原文の説明を表示しています。

oaustegard/claude-skills1512026年10月12日 更新

Guidance for asking clarifying questions when user requests are ambiguous, have multiple valid approaches, or require critical decisions. Use when implementation choices exist that could significantly affect outcomes.

日本語の概要は準備中です。原文の説明を表示しています。

oaustegard/claude-skills1512026年10月12日 更新

Pre-change blast-radius report for a symbol or file. Walks tree-sitting references, augments with a plain-text scan over non-parsed files (configs, plain docs), and clusters affected sites by feature (`_FEATURES.md`) or top-level package. Use when about to refactor, rename, or delete something in a repo you don't own — "what breaks if I change `validateUser`", "who calls this", "is this safe to remove", "where is this used", "blast radius", "impact analysis". This is the CONVERGENT pre-change risk skill — for "what is this repo?" use exploring-codebases; for "where is X?" use searching-codebases.

日本語の概要は準備中です。原文の説明を表示しています。

oaustegard/claude-skills1512026年10月12日 更新

Read Bluesky/ATProto without depending on Bluesky's AppView — interactions on a user's posts, thread replies, any repo's records, network-wide backlinks across every lexicon, an account's handle and PDS history, which collections are active network-wide, and layer-by-layer outage diagnosis. Use when bsky.app or the AppView is down or slow, when a Bluesky read returns timeouts or 5xx, when asked who liked/replied/quoted/reposted something, when pulling live Bluesky context cheaply, when reading records straight from a PDS, when asked who references a record or account anywhere on the network, whether an account has changed handle or migrated servers, or which lexicons and non-Bluesky apps are active on atproto. Complements browsing-bluesky, which routes everything through the AppView and fails when it does.

日本語の概要は準備中です。原文の説明を表示しています。

oaustegard/claude-skills1512026年10月12日 更新

oaustegard のスキルをすべて見る

このスキルの問題を報告する