用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/guzus/ai-research-arm --skill birdy命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
基于 SOC 职业分类
正在显示 SKILL.md
| name | birdy |
| description | X/Twitter CLI for reading, searching, posting, and engagement via cookies, with multi-account rotation. |
Fast X/Twitter CLI using GraphQL + cookie auth. One static Go binary — no Node runtime.
Replaced the Node
birdCLI (@steipete/bird), retired 2026-08-08. birdy began as a rotation proxy in front of bird and has served all 24 commands natively since v1.0.0. Command and flag names are unchanged, sobird Xisbirdy X. npm reports@steipete/birdas "no longer supported" — do not reinstall it. Note that birdy still falls back tobirdwhen its native path errors, so abird CLI not foundmessage means the native call failed (usually a rate limit), not that you need to install bird.
brew tap guzus/tap && brew trust guzus/tap && brew install birdy
# or: curl -fsSL https://raw.githubusercontent.com/guzus/birdy/main/install.sh | bash
# in CI: use .github/actions/install-birdy
birdy uses cookie-based auth, and can rotate several accounts to spread
rate-limit pressure.
Use --auth-token / --ct0 to pass cookies directly, or --cookie-source for browser cookies.
Run birdy check to see which source is active. For Arc/Brave, use --chrome-profile-dir <path>.
birdy account add main # store an account
birdy account list # list accounts
birdy account disable <name> # take out of rotation without removing
birdy status # current rotation status
birdy budget # per-account 429 history + cooldown state
birdy -a main read <id> # pin one account, skipping rotation
birdy -s quota-aware search "ai" # route around accounts marked "hot"
Rotation strategies (-s): round-robin (default), least-recently-used,
least-used, random.
birdy whoami # Show logged-in account
birdy check # Show credential sources
birdy query-ids --fresh # Refresh GraphQL query ID cache
birdy read <url-or-id> # Read a single tweet
birdy <url-or-id> # Shorthand for read
birdy thread <url-or-id> # Full conversation thread
birdy replies <url-or-id> # List replies to a tweet
birdy home # Home timeline (For You)
birdy home --following # Following timeline
birdy user-tweets @handle -n 20 # User's profile timeline
birdy mentions # Tweets mentioning you
birdy mentions --user @handle # Mentions of another user
birdy search "query" -n 10
birdy search "from:steipete" --all --max-pages 3
birdy news -n 10 # AI-curated from Explore tabs
birdy news --ai-only # Filter to AI-curated only
birdy news --sports # Sports tab
birdy news --with-tweets # Include related tweets
birdy trending # Alias for news
birdy lists # Your lists
birdy lists --member-of # Lists you're a member of
birdy list-timeline <id> -n 20 # Tweets from a list
birdy bookmarks -n 10
birdy bookmarks --folder-id <id>
birdy unbookmark <url-or-id>
birdy likes -n 10
birdy following -n 20
birdy followers -n 20
birdy following --user <id>
birdy about @handle
birdy follow @handle
birdy unfollow @handle
birdy tweet "hello world"
birdy reply <url-or-id> "nice thread!"
birdy tweet "check this out" --media image.png --alt "description"
Warning: Posting is more likely to be rate limited; if blocked, use the browser tool instead.
In automation, set BIRDY_READ_ONLY=1 so these can never fire.
birdy tweet "hi" --media img.png --alt "description"
birdy tweet "pics" --media a.jpg --media b.jpg # Up to 4 images
birdy tweet "video" --media clip.mp4 # Or 1 video
Commands supporting pagination: replies, thread, search, bookmarks, likes, list-timeline, following, followers, user-tweets
birdy bookmarks --all # Fetch all pages
birdy bookmarks --max-pages 3 # Limit pages
birdy bookmarks --cursor <cursor> # Resume from cursor
birdy replies <id> --all --delay 1000 # Delay between pages (ms)
--json # JSON output
--json-full # JSON with raw API response
--plain # No emoji, no color (script-friendly)
--no-emoji # Disable emoji
--no-color # Disable ANSI colors (or set NO_COLOR=1)
--quote-depth n # Max quoted tweet depth in JSON (default: 1)
--auth-token <token> # Set auth_token cookie
--ct0 <token> # Set ct0 cookie
--cookie-source <source> # Cookie source for browser cookies (repeatable)
--chrome-profile <name> # Chrome profile name
--chrome-profile-dir <path>
--firefox-profile <name>
--timeout <ms>
--cookie-timeout <ms>
multi-fetch runs a manifest of operations concurrently and writes each result
to <output-dir>/<id>.json — one process instead of N, which is how ARA's
Twitter lane fetches ~70 sources per run.
birdy multi-fetch --manifest manifest.json --output-dir /tmp/bird
{
"operations": [
{"id": "OpenAI", "args": ["user-tweets", "@OpenAI", "-n", "20", "--json", "--plain"]},
{"id": "search-ai", "args": ["search", "AI announcement", "-n", "50", "--json", "--plain"]}
],
"concurrency": 8
}
A failed operation still writes [], so downstream readers never crash on a
missing file.
~/.config/birdy/ holds accounts.json (credentials + per-account use and
429 counters), state.json (rotation position), and the query-id cache.
Environment variables: AUTH_TOKEN, CT0, BIRDY_READ_ONLY=1 (blocks every
write command — set it in any automated context), BIRDY_ACCOUNTS (JSON
account list, for CI where there is no config dir).
bird CLI not found, and --bird requires it: birdy's native call failed
and it tried to fall back to the retired Node CLI. The real cause is
upstream — usually a rate limit. Check birdy budget; do not install bird.birdy query-ids --fresh--cookie-source--chrome-profile-dir to point at the correct profile-v prints which account and which engine (native (go)) served the call