Back to Skills

bird

verified

X/Twitter CLI for reading, searching, and posting via cookies or Sweetistics.

View on GitHub

Repository

clawdbot/clawdbot
17.3kstars

skills/bird/SKILL.md

Last Verified

January 18, 2026

Install Skill

Select agents to install to:

Scope:
npx add-skill https://github.com/clawdbot/clawdbot/blob/0c93b9b7bbc66986e19d4ac925e7d8a73c11084d/skills/bird/SKILL.md -a claude-code --skill bird

Installation paths:

Claude
.claude/skills/bird/
Powered by add-skill CLI

Instructions

# bird

## Reading vs Writing - Different Tools

**For READING tweets** (works great):
- Use the `bird` CLI - it's fast and reliable
- `bird read <url-or-id>` - grab a specific tweet
- `bird search "query" -n 5` - search tweets
- `bird mentions` - check notifications

**For WRITING tweets** (here's where it gets spicy):
- **Don't use the CLI for posting** - Twitter flags it as automated and you'll get rate limited or soft-banned fast
- **Use the browser tool instead** - mimics real human behavior

## Quick Reference (Reading Only)

```bash
bird whoami           # Check auth status
bird read <url-or-id> # Read a specific tweet
bird thread <url-or-id> # Read full thread
bird search "query" -n 5 # Search tweets
bird mentions         # Check notifications
```

## The React Input Problem

Twitter's compose box is a React controlled input. You can't just set `.value` like a normal input - React ignores it. The workaround:

**Simulate a paste event:**
```javascript
// 1. Focus the editor
var editor = document.querySelector('[data-testid="tweetTextarea_0"]');
editor.focus();

// 2. Create a fake paste event (this triggers React's state update)
var dataTransfer = new DataTransfer();
dataTransfer.setData('text/plain', 'your tweet text here');
var pasteEvent = new ClipboardEvent('paste', {
  clipboardData: dataTransfer,
  bubbles: true,
  cancelable: true
});
editor.dispatchEvent(pasteEvent);

// 3. Click the post button
document.querySelector('[data-testid="tweetButtonInline"]').click();
```

## Browser Setup Notes

- Use a dedicated browser profile (e.g. "clawd") so you're logged in persistently
- The cookie config lives at `~/.config/bird/config.json5` for the CLI
- If CDP fails, kill Chrome completely (`pkill -9 "Google Chrome"`) and restart with `browser action=start`

## Rate Limiting & Detection

- Space out your posts - don't rapid-fire
- Vary your timing slightly (don't post at exactly :00 every hour)
- If you get flagged, the account might need a CAPTCHA solve manual

Validation Details

Front Matter
Required Fields
Valid Name Format
Valid Description
Has Sections
Allowed Tools
Instruction Length:
2308 chars