twitter-cli について
twitter-cliは、Twitter/Xの閲覧や投稿を行うコマンドラインツールです。個人や自動化ワークフロー向けで、ブラウザーCookie認証や構造化出力、簡潔な結果表示に対応しています。
主な機能
- 01フィード、投稿、プロフィール、ブックマークの閲覧
- 02投稿、返信、引用、いいね、フォロー
- 03ブラウザーCookieまたは環境変数で認証
- 04テーブル、YAML、JSON、簡潔な出力
活用シーン
- 01フィードや検索結果を簡潔な形式で確認
- 02画像付き投稿の公開や投稿への返信
- 03JSONとjqによる検索結果の絞り込み
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ public-clis/ twitter-cli --skill twitter-cliインストール後、Claude Code で/twitter-cliを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
SCHEMA.mdAGENTS.mdconfig.yamlLICENSE.gitignoreREADME.mdpyproject.toml.github/ISSUE_TEMPLATE/feature_request.ymlbug_report.yml.github/workflows/ci.ymlpublish.ymltests/conftest.pytest_auth.pytest_cache.pytest_cli.pytest_client.pytest_filter.pytest_config.pytest_output.pytest_config_normalization.pytest_parser_fixtures.pytest_smoke.pytest_search.pytest_serialization.pytests/fixtures/followers_page.jsonhome_timeline.jsonsearch_timeline.jsonlist_timeline.jsontweet_detail.jsontwitter_cli/__init__.py詳細
twitter-cli — Twitter/X CLI ツール
バイナリ: twitter
認証情報: ブラウザーの Cookie(自動抽出)または環境変数
セットアップ
# Install (requires Python 3.8+)
uv tool install twitter-cli
# Or: pipx install twitter-cli
# Upgrade to latest (recommended to avoid API errors)
uv tool upgrade twitter-cli
# Or: pipx upgrade twitter-cli
認証
エージェントへの重要事項:twitter-cli のコマンドを実行する前に、必ず認証情報があるか確認してください。認証情報がない場合は、必ずユーザーに認証手順を案内してください。認証情報が設定済みだと決めつけないでください。
重要:書き込み操作(ツイートの投稿、返信、引用)には、完全なブラウザー Cookie が必要です。環境変数で auth_token と ct0 のみを指定すると、226 エラー(「自動化された動作のようです」)が発生する場合があります。最良の結果を得るには、ブラウザー Cookie の抽出を使用してください。
ステップ 0:すでに認証済みか確認する
twitter status --yaml >/dev/null && echo "AUTH_OK" || echo "AUTH_NEEDED"
AUTH_OK の場合は、コマンドリファレンスに進みます。
AUTH_NEEDED の場合は、ユーザーに次の手順を案内します。
ステップ 1:ユーザーに認証を案内する
方法 A:ブラウザー Cookie の抽出(推奨)
ユーザーが次のいずれかのブラウザーで x.com にログインしていることを確認します:Arc、Chrome、Edge、Firefox、Brave。twitter-cli は Cookie を自動抽出します。
すべての Chrome プロファイルが自動的にスキャンされます。プロファイルを指定するには、TWITTER_CHROME_PROFILE="Profile 2" twitter feed を実行します。
特定のブラウザーを優先するには、TWITTER_BROWSER=chrome twitter feed を実行します(対応ブラウザー:arc、chrome、edge、firefox、brave)。
twitter whoami
方法 B:環境変数
export TWITTER_AUTH_TOKEN="<auth_token from browser>"
export TWITTER_CT0="<ct0 from browser>"
twitter whoami
方法 C:完全な Cookie 文字列(クラウド/リモートエージェント向け)
ユーザーに次のように伝えます。
Twitter のログイン認証情報が必要です。次の手順で取得してください。
- Chrome/Edge/Firefox で https://x.com を開きます(ログイン済みであることを確認してください)
F12を押して開発者ツールを開き、Network タブを選択します- ページを更新し、任意の
x.comリクエストをクリックします- Request Headers の Cookie: の行を見つけ、右クリックして値をコピーします
- Cookie 文字列全体を私に送信してください
⚠️ Cookie にはログイン情報が含まれています。他の人と共有しないでください。
次に、環境変数を抽出して設定します。
FULL_COOKIE="<user's cookie string>"
export TWITTER_AUTH_TOKEN=$(echo "$FULL_COOKIE" | grep -oE 'auth_token=[a-f0-9]+' | cut -d= -f2)
export TWITTER_CT0=$(echo "$FULL_COOKIE" | grep -oE 'ct0=[a-f0-9]+' | cut -d= -f2)
twitter whoami
ステップ 2:よくある認証の問題に対処する
| 症状 | エージェントの対応 |
|---|---|
No Twitter cookies found | ブラウザーで x.com にログインするか、環境変数を設定するようユーザーに案内します |
| 読み取りはできるが、書き込みで 226 が返る | 完全な Cookie がありません。環境変数ではなく、ブラウザー Cookie の抽出を使用します |
Cookie expired (401/403) | x.com に再ログインして再試行するようユーザーに依頼します |
| ユーザーがパスワードを変更した | 古い Cookie はすべて無効になっています。再抽出します |
出力形式
デフォルト:リッチテーブル(人間が読みやすい形式)
twitter feed # Pretty table output
YAML/JSON:構造化出力
TTY ではない標準出力は、デフォルトで自動的に YAML になります。OUTPUT=yaml|json|rich|auto を指定すると変更できます。
twitter feed --yaml
twitter feed --json | jq '.[0].text'
機械可読形式の出力はすべて、SCHEMA.md に記載されているエンベロープを使用します。
ツイートとユーザーのペイロードは .data の下に配置されます。
全文:--full-text フラグ(リッチテーブルのみ)
ユーザーがターミナルのテーブルで投稿本文全体を表示したい場合は、--full-text を使用します。
このオプションは、feed、bookmarks、search、user-posts、likes、list などのリッチテーブル形式の一覧表示と、tweet の返信テーブルに適用されます。
--json、--yaml、-c のコンパクト出力には影響しません。
twitter feed --full-text
twitter search "AI agent" --full-text
twitter user-posts elonmusk --max 20 --full-text
twitter tweet 1234567890 --full-text
コンパクト:-c フラグ(LLM 向けの最小限のトークン)
twitter -c feed --max 10 # Minimal fields, great for LLM context
twitter -c search "AI" --max 20 # ~80% fewer tokens than --json
コンパクト形式のフィールド(ツイートごと): id、author(@ハンドル)、text(140 文字で切り詰め)、likes、rts、time(短縮形式)
コマンドリファレンス
読み取り操作
twitter status # Quick auth check
twitter status --yaml # Structured auth status
twitter whoami # Current authenticated user
twitter whoami --yaml # YAML output
twitter whoami --json # JSON output
twitter user elonmusk # User profile
twitter user elonmusk --json # JSON output
twitter feed # Home timeline (For You)
twitter feed -t following # Following timeline
twitter feed --max 50 # Limit count
twitter feed --full-text # Show full post body in table
twitter feed --filter # Enable ranking filter
twitter feed --yaml > tweets.yaml # Export as YAML
twitter feed --input tweets.json # Read from local JSON file
twitter bookmarks # Bookmarked tweets
twitter bookmarks --full-text # Full text in bookmarks table
twitter bookmarks --max 30 --yaml
twitter search "keyword" # Search tweets
twitter search "AI agent" -t Latest --max 50
twitter search "AI agent" --full-text # Full text in search results
twitter search "topic" -o results.json # Save to file
twitter tweet 1234567890 # Tweet detail + replies
twitter tweet 1234567890 --full-text # Full text in reply table
twitter tweet https://x.com/user/status/12345 # Accepts URL
twitter show 2 # Open tweet #2 from last feed/search list
twitter show 2 --full-text # Full text in reply table
twitter show 2 --json # Structured output
twitter list 1539453138322673664 # List timeline
twitter list 1539453138322673664 --cursor "<next-cursor>"
twitter list 1539453138322673664 --full-text
twitter user-posts elonmusk --max 20 # User's tweets
twitter user-posts elonmusk --full-text
twitter likes elonmusk --max 30 # User's likes (own only, see note)
twitter likes elonmusk --full-text
twitter followers elonmusk --max 50 # Followers
twitter following elonmusk --max 50 # Following
書き込み操作
twitter post "Hello from twitter-cli!" # Post tweet
twitter post "Hello!" --image photo.jpg # Post with image
twitter post "Gallery" -i a.png -i b.jpg # Up to 4 images
twitter reply 1234567890 "Great tweet!" # Reply (standalone)
twitter reply 1234567890 "Nice!" -i pic.png # Reply with image
twitter post "reply text" --reply-to 1234567890 # Reply (via post)
twitter quote 1234567890 "Interesting take" # Quote-tweet
twitter quote 1234567890 "Look" -i chart.png # Quote with image
twitter delete 1234567890 # Delete tweet
twitter like 1234567890 # Like
twitter unlike 1234567890 # Unlike
twitter retweet 1234567890 # Retweet
twitter unretweet 1234567890 # Unretweet
twitter bookmark 1234567890 # Bookmark
twitter unbookmark 1234567890 # Unbookmark
twitter follow elonmusk # Follow user
twitter unfollow elonmusk # Unfollow user
画像アップロードに関する注意事項:
- 対応形式:JPEG、PNG、GIF、WebP
- ファイルサイズの上限:画像 1 枚あたり 5 MB
- 1 件のツイートにつき画像は最大 4 枚
--image/-iを使用します(複数回指定できます)
エージェントのワークフロー
投稿して確認する
twitter post "My tweet text" 2>/dev/null
# Output includes tweet URL: 🔗 https://x.com/i/status/<id>
画像付きで投稿する
# Single image
twitter post "Check this out!" --image /path/to/photo.jpg
# Multiple images
twitter post "Photo gallery" -i img1.png -i img2.jpg -i img3.webp
ユーザーの最新ツイートに返信する
TWEET_ID=$(twitter user-posts targetuser --max 1 --json | jq -r '.data[0].id')
twitter reply "$TWEET_ID" "Nice post!"
スレッドを作成する
# Post first tweet, capture output for tweet ID
twitter post "Thread 1/3: First point"
# Note the tweet ID from output, then:
twitter reply <first_tweet_id> "2/3: Second point"
twitter reply <second_tweet_id> "3/3: Final point"
コメントを添えて引用ツイートする
TWEET_ID=$(twitter search "interesting topic" --max 1 --json | jq -r '.data[0].id')
twitter quote "$TWEET_ID" "This is a great insight!"
検索結果すべてに「いいね」する
twitter search "interesting topic" --max 5 --json | jq -r '.data[].id' | while read id; do
twitter like "$id"
done
ユーザー情報を取得してからフォローする
twitter user targethandle --json | jq '.data | {username, followers, bio}'
twitter follow targethandle
ユーザーの人気ツイートを探す
twitter user-posts elonmusk --max 20 --json | jq '.data | sort_by(.metrics.likes) | reverse | .[:3] | .[] | {id, text: .text[:80], likes: .metrics.likes}'
フォロー関係を確認する
MY_NAME=$(twitter whoami --json | jq -r '.data.user.username')
twitter followers "$MY_NAME" --max 200 --json | jq -r '.data[].username' | grep -q "targetuser" && echo "Yes" || echo "No"
毎日の閲覧ワークフロー
# Compact mode for token-efficient LLM context
twitter -c feed -t following --max 30
twitter -c bookmarks --max 20
# Rich table with complete post bodies
twitter feed -t following --max 20 --full-text
twitter search "AI agent" --max 20 --full-text
# Full JSON for analysis
twitter feed -t following --max 30 -o following.json
twitter bookmarks --max 20 -o bookmarks.json
jq フィルタリングを使って検索する
# Tweets with > 100 likes
twitter search "AI safety" --max 20 --json | jq '[.data[] | select(.metrics.likes > 100)]'
# Extract just text and author
twitter search "rust lang" --max 10 --json | jq '.data[] | {author: .author.screenName, text: .text[:100]}'
# Most engaged tweets
twitter search "topic" --max 20 --json | jq '.data | sort_by(.metrics.likes) | reverse | .[:5] | .[].id'
ランキングフィルター
フィルタリングはオプトインです。--filter を指定して有効にします。
twitter feed --filter
twitter bookmarks --filter
エラーリファレンス
| エラー | 原因 | 対処方法 |
|---|---|---|
No Twitter cookies found | 認証されていません | ブラウザーで x.com にログインするか、環境変数を設定します |
| HTTP 226 | 自動検出 | ブラウザーの Cookie 抽出を使用します(環境変数は使用しません) |
| HTTP 401/403 | Cookie の有効期限が切れています | x.com に再ログインして、再試行します |
| HTTP 404 | QueryId のローテーション | 再試行します(自動フォールバック機能が組み込まれています) |
| HTTP 429 | レート制限中です | 15 分以上待ってから、再試行します |
| Error 187 | ツイートが重複しています | テキストの内容を変更します |
| Error 186 | ツイートが長すぎます | 280 文字以内に収めます |
制限事項
- 画像のみ — 動画/GIF アニメーションのアップロードはまだサポートされていません(画像のアップロードでは JPEG/PNG/GIF/WebP をサポートしています)
- DM なし — ダイレクトメッセージには対応していません
- 通知なし — 通知を読み取ることはできません
- アンケートなし — アンケートを作成することはできません
- 単一アカウント — 一度に使用できる認証情報は 1 セットのみです
- いいねは非公開 — Twitter/X では 2024 年 6 月以降、すべてのいいねが非公開になっています。
twitter likesは自分のアカウントでのみ機能します
安全に関する注意事項
- 書き込み操作には、レート制限を回避するためのランダムな遅延(1.5〜4 秒)が組み込まれています。
- TLS フィンガープリントと User-Agent は、使用中の Chrome のバージョンに自動的に合わせられます。
- チャットログで Cookie の値をそのまま共有するよう、ユーザーに求めないでください。
- 手動でシークレットをコピー&ペーストするより、ローカルブラウザーから Cookie を抽出する方法を推奨します。
- エージェントは Cookie の値をシークレットとして扱う必要があります(不必要に標準出力へ出力しないでください)。