mcpField
T
twitter-cli

twitter-cli

github.com/public-clisその他3.0k594 回インストール25 週間前に更新
リポジトリ

twitter-cli について

twitter-cliは、Twitter/Xの閲覧や投稿を行うコマンドラインツールです。個人や自動化ワークフロー向けで、ブラウザーCookie認証や構造化出力、簡潔な結果表示に対応しています。

主な機能

  1. 01フィード、投稿、プロフィール、ブックマークの閲覧
  2. 02投稿、返信、引用、いいね、フォロー
  3. 03ブラウザーCookieまたは環境変数で認証
  4. 04テーブル、YAML、JSON、簡潔な出力

活用シーン

  1. 01フィードや検索結果を簡潔な形式で確認
  2. 02画像付き投稿の公開や投稿への返信
  3. 03JSONとjqによる検索結果の絞り込み

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/public-clis/twitter-cli --skill twitter-cli

インストール後、Claude Code で/twitter-cliを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

SCHEMA.md
AGENTS.md
config.yaml
LICENSE
.gitignore
README.md
pyproject.toml
.github/ISSUE_TEMPLATE/
feature_request.yml
bug_report.yml
.github/workflows/
ci.yml
publish.yml
tests/
conftest.py
test_auth.py
test_cache.py
test_cli.py
test_client.py
test_filter.py
test_config.py
test_output.py
test_config_normalization.py
test_parser_fixtures.py
test_smoke.py
test_search.py
test_serialization.py
tests/fixtures/
followers_page.json
home_timeline.json
search_timeline.json
list_timeline.json
tweet_detail.json
twitter_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 のログイン認証情報が必要です。次の手順で取得してください。

  1. Chrome/Edge/Firefox で https://x.com を開きます(ログイン済みであることを確認してください)
  2. F12 を押して開発者ツールを開き、Network タブを選択します
  3. ページを更新し、任意の x.com リクエストをクリックします
  4. Request Headers の Cookie: の行を見つけ、右クリックして値をコピーします
  5. 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/403Cookie の有効期限が切れていますx.com に再ログインして、再試行します
HTTP 404QueryId のローテーション再試行します(自動フォールバック機能が組み込まれています)
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 の値をシークレットとして扱う必要があります(不必要に標準出力へ出力しないでください)。

コメント