Best for
- Use when browsing x.
tomcounsell/ai/.claude/skills/x-com/SKILL.md
Use when browsing x.com (Twitter), reading the timeline, posting, replying, liking, or checking DMs. Triggered by requests to post on X, browse the X feed, comment on tweets, or read/reply to X DMs.
Decision brief
Drives the user's logged-in Chrome via BYOB. User handle: @ValorEngels.
Compatibility matrix
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/tomcounsell/ai --skill ".claude/skills/x-com"Inspect the Agent Skill "x-com" from https://github.com/tomcounsell/ai/blob/0a092490b991ac87d3c2acd8a72961f8c98c64e7/.claude/skills/x-com/SKILL.md at commit 0a092490b991ac87d3c2acd8a72961f8c98c64e7. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
1. browserread(url, reuseTab=true, screens=N) returns interactiveElements: [{idx, tag, role, name, bounds}, ...]. 2. Find your target by name. On X the post text is captured directly in the 's name attribute. This is a big advantage over LinkedIn (post bodies are readable from t…
Run all three tasks in order:
Each task's full procedure lives in a reference file. Load only what the current run needs:
Same BYOB setup as /linkedin (see that skill for the full preconditions). Verify with:
X driving real Chrome must be serialized against other real-Chrome sessions. Bridge-spawned sessions get the flag automatically via agent.byobskilltriggers (the registry includes X triggers). CLI-spawned sessions must pass --needs-real-chrome:
Permission review
No configured static risk pattern was detected
This is not proof of safety. Runtime behavior, indirect dependencies, and hidden external systems are outside the static scan.
Evidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 93/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 22 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
Drives the user's logged-in Chrome via BYOB. User handle: @ValorEngels.
Run all three tasks in order:
If arguments are given, interpret them and do only what's asked.
Nothing goes live — post, reply, or comment — without passing both gates in order: first Skill('de-slop') (fresh-context review of the draft file only — removes AI-writing tells, blocks hollow drafts), then Skill('authenticity-pass'); the full gate procedure is in references/posting.md.
Execute, don't pause. Render drafts inline and continue to publish in the same turn. Only stop on hard tool failure with no fallback, or a finding that contradicts the skill's premise (e.g. "no DMs need replies" → skip Task 1).
Each task's full procedure lives in a reference file. Load only what the current run needs:
| Load... | When... |
|---|---|
| references/dms.md | Task 1: reading the DM inbox, opening threads, drafting and sending replies, updating the knowledge base |
| references/posting.md | Task 2: what works/dies on this feed, voice rules, the receipt self-reply, subagent drafting, persona cold-read loop, authenticity gate, publish |
| references/timeline-engagement.md | Task 3: volume targets, For You curation, liking, following, reply screening and drafting loop — plus editing/deleting posts |
Same BYOB setup as /linkedin (see that skill for the full preconditions). Verify with:
cd ~/.byob && bun run doctor
Then sanity-check from inside the agent:
mcp__byob__browser_list_tabs # must return at least one tab
User must be logged into X in that Chrome session.
requires_real_chrome=True)X driving real Chrome must be serialized against other real-Chrome sessions. Bridge-spawned sessions get the flag automatically via agent.byob_skill_triggers (the registry includes X triggers). CLI-spawned sessions must pass --needs-real-chrome:
valor-session create --role eng --project-key valor --needs-real-chrome --message "check my X DMs"
browser_list_tabs → look for any tab whose URL contains "x.com" (or "twitter.com")
Pick the first match → that's your tabId. If no tab, browser_navigate(url="https://x.com/home").
X uses a stable accessibility tree. Element names like "Reply", "Like", "Liked", "Repost", "Reposted", "Post text", "Direct Messages" are reliable. Hashed CSS classes change frequently; do not rely on them. Use data-byob-idx via the selector: "byob:idx=N" workflow.
byob:idx workflowbrowser_read(url, reuseTab=true, screens=N) returns interactiveElements: [{idx, tag, role, name, bounds}, ...].name. On X the post text is captured directly in the <article>'s name attribute. This is a big advantage over LinkedIn (post bodies are readable from the IE list).browser_click(tabId, selector="byob:idx=<idx>").interactiveSessionTag changes and old indices invalidate.When multiple IEs map to the same logical control, prefer tag: "button".
data-testid selectors over byob:idx on X. The home timeline easily blows past 1000 IEs and byob:idx=N clicks fail with selector_not_found even right after a fresh read. The reliable handles are:
[data-testid="tweetTextarea_0"]. The compose / reply textbox (works on /home, /compose/post, and any post page reply box)[data-testid="tweetButtonInline"]. The submit button. Same testid for posts and replies (button text is "Post" on /home, "Reply" on a post page; testid doesn't change).[data-testid="like"]. The like button. Often reports element_not_visible because the action bar overlay covers the click point. Pass force: true.article[data-testid="tweet"]. Full tweet container; child a[href*="/status/"] is the permalink.<article> IEs include the full post text in name. Useful for cheap triage from the IE list before navigating into individual posts./handle/status/<id> URLs from the timeline HTML (grep -oE 'href="/[^/]+/status/[0-9]+"'), then browser_navigate to each. The post text shows up in the page title ("(N) Author on X: "...full text..." / X"). Fastest way to read the body.browser_press_key(key="Escape") before the next click. Otherwise subsequent selectors get blocked./home - data-testid="tweetTextarea_0" is live and editable right on the home timeline. Much easier than LinkedIn's broken portal modal.name fields (e.g. "977 Likes. Like", "977 Likes. Liked"). If you do fall back to byob:idx, match on the suffix (Like/Liked, Repost/Reposted).tabId across the session. Discover once at the start.format="jpeg" and quality=50-60.cd ~/.byob && bun run doctor to repair, then retry.Frequently asked questions
Drives the user's logged-in Chrome via BYOB. User handle: @ValorEngels.
The source record exposes this install command: npx skills add https://github.com/tomcounsell/ai --skill ".claude/skills/x-com". Inspect the command and pinned source before running it.
Alternatives
garrytan/gbrain
End-to-end discipline for turning any large data source (audio libraries, email takeouts, document corpora, chat exports, API dumps) into brain pages at scale. The lifecycle spine: SCHEMA → ACCESS → TRIAL → EVALUATE → IMPROVE → CODIFY → TEST → SKILLIFY → BULK → MONITOR. State is tracked in a durable JSON manifest (see MANIFEST-PATTERN.md) so any crash, session boundary, or subagent fan-out resumes from ground truth instead of memory.
alirezarezvani/claude-skills
App Store Optimization (ASO) toolkit for researching keywords, analyzing competitor rankings, generating metadata suggestions, and improving app visibility on Apple App Store and Google Play Store. Use when the user asks about ASO, app store rankings, app metadata, app titles and descriptions, app store listings, app visibility, or mobile app marketing on iOS or Android. Supports keyword research and scoring, competitor keyword analysis, metadata optimization, A/B test planning, launch checklist
wanshuiyin/Auto-claude-code-research-in-sleep
Use it for operations and research tasks; the detail page covers purpose, installation, and practical steps.
prowler-cloud/prowler
PostgreSQL indexing best practices for Prowler: index design, partial indexes, partitioned table indexing, EXPLAIN ANALYZE validation, concurrent operations, monitoring, and maintenance. Trigger: When creating or modifying PostgreSQL indexes, analyzing query performance with EXPLAIN, debugging slow queries, reviewing index usage statistics, reindexing, dropping indexes, or working with partitioned table indexes. Also trigger when discussing index strategies, partial indexes, or index maintenance