Agent Skills: Social Intelligence

Twitter/X social intelligence monitoring for the Claude Code ecosystem. Scans feeds from Anthropic/Claude Code team members, extracts actionable insights, tracks state, and produces reports. Uses claude-in-chrome MCP for browser automation.

UncategorizedID: melodic-software/claude-code-plugins/social-intelligence

Install this agent skill to your local

pnpm dlx add-skill https://github.com/melodic-software/claude-code-plugins/tree/HEAD/plugins/claude-ecosystem/skills/social-intelligence

Skill Files

Browse the full folder contents for social-intelligence.

Download Skill

Loading file tree…

plugins/claude-ecosystem/skills/social-intelligence/SKILL.md

Skill Metadata

Name
social-intelligence
Description
Twitter/X social intelligence monitoring for the Claude Code ecosystem. Scans feeds from Anthropic/Claude Code team members, extracts actionable insights, tracks state, and produces reports. Uses claude-in-chrome MCP for browser automation.

Social Intelligence

Monitor Twitter/X feeds from Anthropic and Claude Code team members to catch new features, updates, and insights before official documentation is updated.

Subcommands

Parse the user's argument to determine the subcommand:

| Argument Pattern | Subcommand | |-----------------|------------| | scan, scan --accounts critical, scan --depth deep | Scan Feeds | | report, report --since 2026-02-01, report --save | Generate Report | | apply | Apply Insights | | refresh-accounts | Refresh Accounts | | discover-accounts | Discover Accounts | | status | Show Status | | migrate | Data Maintenance | | compact | Data Maintenance | | (no argument) | Default to scan --accounts critical --depth shallow |

Prerequisites

Before any operation, ensure the data directory is initialized:

CLAUDE_PROJECT_DIR="${CLAUDE_PROJECT_DIR:-$(pwd)}" python "plugins/claude-ecosystem/skills/social-intelligence/scripts/state_manager.py" init

Scan Feeds

Arguments

| Flag | Default | Options | |------|---------|---------| | --accounts | critical | critical, high, all | | --depth | shallow | shallow, deep |

Workflow

Step 1: Load Configuration

Read these config files:

  • plugins/claude-ecosystem/skills/social-intelligence/config/accounts.json -- Monitored accounts
  • plugins/claude-ecosystem/skills/social-intelligence/config/scan-config.json -- Scan parameters, keywords, area mappings

If accounts.json has an empty accounts array, prompt the user:

No accounts configured. Run /claude-ecosystem:social-intelligence refresh-accounts first to populate the account list from your X following list.

Step 2: Filter Accounts by Priority

Based on --accounts flag:

  • critical: Only accounts with priority == "critical"
  • high: Accounts with priority in ["critical", "high"]
  • all: All accounts

Step 2.5: Check Account Freshness

For each filtered account, check when it was last scanned:

CLAUDE_PROJECT_DIR="${CLAUDE_PROJECT_DIR:-$(pwd)}" python "plugins/claude-ecosystem/skills/social-intelligence/scripts/state_manager.py" last-scanned "@handle"

If last_scanned is within the last 2 hours for shallow scans (or 30 minutes for deep scans), skip that account and note it in the summary. This prevents redundant scanning.

Step 3: Load claude-in-chrome MCP Tools

Before delegating to the scanner agent, load the required MCP tools:

Use ToolSearch to load:
- mcp__claude-in-chrome__tabs_context_mcp
- mcp__claude-in-chrome__tabs_create_mcp
- mcp__claude-in-chrome__navigate
- mcp__claude-in-chrome__get_page_text
- mcp__claude-in-chrome__javascript_tool
- mcp__claude-in-chrome__read_page

Step 4: Delegate to x-feed-scanner Agent

Spawn the claude-ecosystem:x-feed-scanner agent (subagent_type: general-purpose) with:

{
  "accounts": [filtered account list with profile URLs],
  "depth": "shallow|deep",
  "max_posts_per_account": 20,
  "max_scroll_attempts": 3,
  "navigation_delay_ms": 2500,
  "known_post_ids": [list from dedup-check-batch],
  "since_date": "ISO timestamp of oldest desired post"
}

Important: The agent must use the claude-in-chrome MCP tools to:

  1. Call tabs_context_mcp to check browser state
  2. Call tabs_create_mcp to open a dedicated scan tab
  3. For each account: navigate to profile, wait, get_page_text to extract content
  4. Use javascript_tool for scroll pagination and post ID extraction
  5. Return structured post data

Step 5: Batch Dedup Against Existing Posts

Collect all post IDs from the scanner output and check them in a single pass:

CLAUDE_PROJECT_DIR="${CLAUDE_PROJECT_DIR:-$(pwd)}" python "plugins/claude-ecosystem/skills/social-intelligence/scripts/state_manager.py" dedup-check-batch post_id_1 post_id_2 post_id_3

The response includes new_ids (not yet stored) and existing_ids (already in index). Filter to new posts only.

Step 6: Delegate to intelligence-analyst Agent

Spawn the claude-ecosystem:intelligence-analyst agent (subagent_type: general-purpose) with:

  • New posts (after dedup)
  • Scan config (keywords, scoring weights, area mappings)

The agent classifies posts, scores relevance, extracts insights, and maps to plugin areas.

Step 7: Persist State

Write results using state_manager.py append:

# Log the scan run
CLAUDE_PROJECT_DIR="${CLAUDE_PROJECT_DIR:-$(pwd)}" python "plugins/claude-ecosystem/skills/social-intelligence/scripts/state_manager.py" append scan-log.jsonl '{"scan_id":"scan-YYYYMMDD-HHMMSS","timestamp":"...","accounts_scanned":N,...}'

# Write each analyzed post
CLAUDE_PROJECT_DIR="${CLAUDE_PROJECT_DIR:-$(pwd)}" python "plugins/claude-ecosystem/skills/social-intelligence/scripts/state_manager.py" append posts-index.jsonl '{"post_id":"...","author_handle":"...","text":"...","relevance_score":0.92,...}'

# Write each insight
CLAUDE_PROJECT_DIR="${CLAUDE_PROJECT_DIR:-$(pwd)}" python "plugins/claude-ecosystem/skills/social-intelligence/scripts/state_manager.py" append insights-log.jsonl '{"insight_id":"insight-{seq}","summary":"...","status":"pending_review",...}'

Step 8: Update Last Scanned Timestamps

For each successfully scanned account, update the last_scanned timestamp:

CLAUDE_PROJECT_DIR="${CLAUDE_PROJECT_DIR:-$(pwd)}" python "plugins/claude-ecosystem/skills/social-intelligence/scripts/state_manager.py" last-scanned "@handle" "2026-02-15T14:30:00Z"

Step 9: Present Summary

Display a concise summary to the user:

## Scan Complete

**Accounts scanned:** 5 | **Posts found:** 47 | **New posts:** 8 | **Relevant:** 3

### Key Findings

1. [@borischerny] New hook event type announced (score: 0.92, feature_announcement)
   > "Just shipped support for a new SessionPause hook event..."
   [View on X](https://x.com/borischerny/status/1893456789012345678)

### Pending Insights (1)

- **insight-42**: New SessionPause hook event (confidence: 0.85)
  - Areas: hook-management, claude-code-observability
  - Action: Update hook documentation

Run `/claude-ecosystem:social-intelligence report` to see full details.

Generate Report

Arguments

| Flag | Default | Options | |------|---------|---------| | --since | (all time) | Any ISO date YYYY-MM-DD | | --status | all | pending, all, new, analyzed, actioned, dismissed | | --format | markdown | markdown, json | | --save | (off) | When present, saves report to .claude/social-intelligence/reports/ |

Workflow

Run the report generator:

CLAUDE_PROJECT_DIR="${CLAUDE_PROJECT_DIR:-$(pwd)}" python "plugins/claude-ecosystem/skills/social-intelligence/scripts/generate_report.py" --since "YYYY-MM-DD" --status "pending" --format markdown --save

Display the output directly to the user. If --save is used, confirm the saved file path.

Apply Insights

Read pending insights, execute suggested actions, and update insight status.

Workflow

Step 1: Read Pending Insights

CLAUDE_PROJECT_DIR="${CLAUDE_PROJECT_DIR:-$(pwd)}" python "plugins/claude-ecosystem/skills/social-intelligence/scripts/state_manager.py" read insights-log.jsonl --status pending_review

Step 2: Present to User

Display pending insights with their suggested actions and ask user to select which to apply.

Step 3: Execute Selected Actions

For each approved insight:

  1. Execute the action_suggested (e.g., update documentation, create issue, modify skill)
  2. Log the action to actions-log.jsonl:
CLAUDE_PROJECT_DIR="${CLAUDE_PROJECT_DIR:-$(pwd)}" python "plugins/claude-ecosystem/skills/social-intelligence/scripts/state_manager.py" append actions-log.jsonl '{"action_id":"action-{seq}","insight_id":"...","action_type":"...","description":"...","status":"completed","timestamp":"..."}'

Step 4: Update Insight Status

CLAUDE_PROJECT_DIR="${CLAUDE_PROJECT_DIR:-$(pwd)}" python "plugins/claude-ecosystem/skills/social-intelligence/scripts/state_manager.py" update insights-log.jsonl insight_id "insight-42" '{"status":"actioned"}'

Refresh Accounts

Navigate to the user's X following list and extract account handles to populate accounts.json.

Workflow

Step 1: Load MCP Tools

Load claude-in-chrome tools via ToolSearch (same as scan step 3).

Step 2: Navigate to Following List

Read the following_list_url from accounts.json, then:

  1. tabs_create_mcp -- Open a new tab
  2. navigate to the following list URL
  3. get_page_text -- Extract the page content
  4. javascript_tool -- Scroll to load more accounts if needed

Step 3: Extract Handles

From the page text, extract X handles (patterns like @username).

Step 4: Classify Accounts

For each extracted handle, attempt to classify priority:

  • Search for "anthropic" or "claude" in their bio/description text
  • Known Claude Code team members -> critical
  • Anthropic employees -> high
  • AI/ML community -> medium
  • Others -> low

Note: Priority classification may need manual refinement. Present the list to the user for review before saving.

Step 5: Update accounts.json

After user confirmation, update plugins/claude-ecosystem/skills/social-intelligence/config/accounts.json:

  • Add new accounts
  • Preserve existing priority overrides
  • Update last_refreshed timestamp

Discover Accounts

Search X for new Anthropic/Claude Code-related accounts not yet in the monitored list. Uses X search to find people actively tweeting about Claude Code.

Workflow

Step 1: Load MCP Tools

Load claude-in-chrome tools via ToolSearch (same as scan step 3).

Step 2: Read Discovery Config

Read discover_searches from accounts.json for pre-configured search queries:

[
  {"query": "\"claude code\" from:verified", "description": "Find verified accounts tweeting about Claude Code"},
  {"query": "\"anthropic\" \"claude\" engineer OR developer", "description": "Find Anthropic engineers discussing Claude"},
  {"query": "\"claude code\" shipped OR launched OR released", "description": "Find accounts announcing Claude Code features"},
  {"query": "\"@anthropicai\" claude code tip OR trick OR feature", "description": "Find accounts sharing Claude Code tips that mention Anthropic"}
]

Step 3: Execute Searches

For each search query:

  1. tabs_create_mcp -- Open a new tab (reuse for subsequent searches)
  2. navigate to https://x.com/search?q={encoded_query}&f=user for people search, then also &f=live for recent tweets
  3. get_page_text -- Extract search results
  4. Wait navigation_delay_ms between navigations

Step 4: Extract Candidate Accounts

From search results, extract:

  • Account handles (@username)
  • Display names
  • Bio text snippets (for priority classification)

Filter out accounts already in accounts.json.

Step 5: Classify Candidates

Auto-classify priority based on bio/content signals:

| Signal | Priority | |--------|----------| | Bio contains "claude code" AND ("anthropic" OR "@anthropic") | critical | | Bio contains "anthropic" AND (engineer OR developer OR research) | high | | Bio contains "anthropic" (any role) | high | | Tweets frequently about Claude Code (3+ results) | medium | | Single mention or retweet | low |

Step 6: Present Candidates for Review

Display discovered accounts to the user:

## Discovered Accounts

Found 7 new accounts not yet monitored:

### Suggested Critical
- **@newengineer** - "Building Claude Code at Anthropic"

### Suggested High
- **@anthropicdev** - "Software engineer at Anthropic"

### Suggested Medium
- **@aidevtips** - Tweets about Claude Code frequently

### Suggested Low
- **@techblogger** - One tweet about Claude Code

Add all suggested? Or select specific accounts to add?

Step 7: Update accounts.json

After user confirmation, add selected accounts to accounts.json with "source": "discovered" tag.

Custom Search

Users can also pass a custom search query:

/claude-ecosystem:social-intelligence discover-accounts "agent SDK anthropic"

This runs a single X search with the provided query and follows the same extract/classify/review flow.

Show Status

Display scan history and data statistics.

Workflow

CLAUDE_PROJECT_DIR="${CLAUDE_PROJECT_DIR:-$(pwd)}" python "plugins/claude-ecosystem/skills/social-intelligence/scripts/state_manager.py" stats

Parse the JSON output and display:

## Social Intelligence Status

**Data directory:** .claude/social-intelligence/data/
**Current sequence:** 42

| File | Entries | Size | Newest | Oldest |
|------|---------|------|--------|--------|
| scan-log.jsonl | 5 | 2.1 KB | 2026-02-15T14:30:00Z | 2026-02-10T09:00:00Z |
| posts-index.jsonl | 127 | 45.3 KB | 2026-02-15T14:30:05Z | 2026-02-10T09:01:00Z |
| insights-log.jsonl | 8 | 3.2 KB | 2026-02-15T14:31:00Z | 2026-02-10T09:15:00Z |
| actions-log.jsonl | 2 | 0.8 KB | 2026-02-14T16:00:00Z | 2026-02-11T10:30:00Z |

**Orphaned batch files:** 0
**Orphaned lock files:** 0

Data Maintenance

Migrate

Normalize all existing JSONL data to v2 schema and deduplicate:

CLAUDE_PROJECT_DIR="${CLAUDE_PROJECT_DIR:-$(pwd)}" python "plugins/claude-ecosystem/skills/social-intelligence/scripts/state_manager.py" migrate

This command:

  • Renames deprecated fields (content_text -> text, relevance_category -> category, etc.)
  • Constructs missing url fields from author_handle + post_id
  • Normalizes post_id to {handle}-{numeric_id} format
  • Deduplicates posts by numeric ID (keeps last occurrence)
  • Deduplicates insights by insight_id
  • Removes orphaned batch and lock files

Compact

Remove duplicates from a specific file:

CLAUDE_PROJECT_DIR="${CLAUDE_PROJECT_DIR:-$(pwd)}" python "plugins/claude-ecosystem/skills/social-intelligence/scripts/state_manager.py" compact posts-index.jsonl
CLAUDE_PROJECT_DIR="${CLAUDE_PROJECT_DIR:-$(pwd)}" python "plugins/claude-ecosystem/skills/social-intelligence/scripts/state_manager.py" compact insights-log.jsonl

Environment Variables

| Variable | Default | Purpose | |----------|---------|---------| | CLAUDE_X_SCAN_DEV_ROOT | (unset) | Dev mode: override data directory | | CLAUDE_X_SCAN_DEPTH | shallow | Default scan depth | | CLAUDE_X_SCAN_THRESHOLD | 0.4 | Relevance score threshold |

When CLAUDE_X_SCAN_DEV_ROOT is set, all data writes go to {DEV_ROOT}/.claude/social-intelligence/data/ instead of the project directory.

Data Files

All state is stored in {project}/.claude/social-intelligence/data/ (gitignored):

| File | Purpose | Dedup Key | |------|---------|-----------| | .seq | Monotonic sequence counter | N/A | | scan-log.jsonl | Scan activity log | scan_id | | posts-index.jsonl | Processed posts | post_id (numeric suffix) | | insights-log.jsonl | Extracted intelligence | insight_id | | actions-log.jsonl | Actions taken | action_id |

Reports are saved to {project}/.claude/social-intelligence/reports/ when --save is used.

Encapsulation

This skill follows the anti-duplication principle:

  • Stores ONLY tweet text, metadata, insights, and action proposals
  • When an insight references Claude Code documentation, queries docs-management at runtime
  • No Claude Code documentation content is duplicated in state files

Future: Scheduling

Research needed: Scheduling can be added later. Potential approaches:

  1. Windows Task Scheduler + headless claude -p with this skill as prompt
  2. SessionStart hook with time-since-last-scan check
  3. Cron job (Unix) or Task Scheduler (Windows) invoking Claude CLI

Key constraint: claude-in-chrome requires Chrome to be running with the extension active. Research via MCP (perplexity) for best practices on scheduling Claude Code tasks.