npx claudepluginhub melodic-software/claude-code-plugins --plugin claude-ecosystemWant just this skill?
Add to a custom plugin, then install with one command.
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.
This skill is limited to using the following tools:
config/accounts.jsonconfig/scan-config.jsonscripts/generate_report.pyscripts/state_manager.pySocial 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 accountsplugins/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-accountsfirst to populate the account list from your X following list.
Step 2: Filter Accounts by Priority
Based on --accounts flag:
critical: Only accounts withpriority == "critical"high: Accounts withpriorityin["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:
- Call
tabs_context_mcpto check browser state - Call
tabs_create_mcpto open a dedicated scan tab - For each account:
navigateto profile, wait,get_page_textto extract content - Use
javascript_toolfor scroll pagination and post ID extraction - 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:
- Execute the
action_suggested(e.g., update documentation, create issue, modify skill) - 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:
tabs_create_mcp-- Open a new tabnavigateto the following list URLget_page_text-- Extract the page contentjavascript_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_refreshedtimestamp
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:
tabs_create_mcp-- Open a new tab (reuse for subsequent searches)navigatetohttps://x.com/search?q={encoded_query}&f=userfor people search, then also&f=livefor recent tweetsget_page_text-- Extract search results- Wait
navigation_delay_msbetween 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
urlfields fromauthor_handle+post_id - Normalizes
post_idto{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-managementat runtime - No Claude Code documentation content is duplicated in state files
Future: Scheduling
Research needed: Scheduling can be added later. Potential approaches:
- Windows Task Scheduler + headless
claude -pwith this skill as prompt- SessionStart hook with time-since-last-scan check
- Cron job (Unix) or Task Scheduler (Windows) invoking Claude CLI
Key constraint:
claude-in-chromerequires Chrome to be running with the extension active. Research via MCP (perplexity) for best practices on scheduling Claude Code tasks.