tuzi-danger-x-to-markdown について
X の投稿、スレッド、記事を Markdown に変換するスキルです。ソーシャルコンテンツを整理・保存する用途向けで、変換前に同意を求め、メディアのダウンロードや出力先を設定できます。
主な機能
- 01投稿とスレッドの Markdown 変換
- 02X Articles 全文の抽出
- 03画像と動画のダウンロード設定
- 04JSON 出力とパス指定
- 05EXTEND.md での設定保存
活用シーン
- 01投稿者情報付きでスレッドを保存
- 02X Articles を後から読むために抽出
- 03投稿メディアをローカル保存してリンクを変更
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ tuziapi/ tuzi-skills --skill tuzi-danger-x-to-markdownインストール後、Claude Code で/tuzi-danger-x-to-markdownを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/config/first-time-setup.mdscripts/constants.tscookie-file.tscookies.tsgraphql.tshttp.tsmain.tsmarkdown.tsmedia-localizer.tspaths.tsreferenced-tweets.tsthread-markdown.tsthread.tstweet-article.tstweet-to-markdown.tstypes.ts詳細
X から Markdown へ
X のコンテンツを Markdown に変換します。
- ツイート/スレッド → YAML フロントマター付き Markdown
- X Articles → 全コンテンツを抽出
スクリプトディレクトリ
スクリプトは scripts/ サブディレクトリにあります。
パスの解決:
SKILL_DIR= この SKILL.md のディレクトリ- スクリプトのパス =
${SKILL_DIR}/scripts/main.ts
同意要件
変換を行う前に必ず、同意を確認して取得してください。
同意のフロー
ステップ 1:同意ファイルを確認します
# macOS
cat ~/Library/Application\ Support/tuzi-skills/x-to-markdown/consent.json
# Linux
cat ~/.local/share/tuzi-skills/x-to-markdown/consent.json
ステップ 2:accepted: true かつ disclaimerVersion: "1.0" の場合 → 警告を表示して続行します:
Warning: Using reverse-engineered X API. Accepted on: <acceptedAt>
ステップ 3:ファイルがない場合、またはバージョンが一致しない場合 → 免責事項を表示します:
DISCLAIMER
This tool uses a reverse-engineered X API, NOT official.
Risks:
- May break if X changes API
- No guarantees or support
- Possible account restrictions
- Use at your own risk
Accept terms and continue?
AskUserQuestion を使用し、選択肢として「はい、同意します」 | 「いいえ、同意しません」を提示してください。
ステップ 4:同意された場合 → 同意ファイルを作成します:
{
"version": 1,
"accepted": true,
"acceptedAt": "<ISO timestamp>",
"disclaimerVersion": "1.0"
}
ステップ 5:同意されなかった場合 → 「User declined. Exiting.」と出力して終了します。
設定(EXTEND.md)
Bash を使用して EXTEND.md の有無を確認します(優先順位順):
# Check project-level first
test -f .tuzi-skills/tuzi-danger-x-to-markdown/EXTEND.md && echo "project"
# Then user-level (cross-platform: $HOME works on macOS/Linux/WSL)
test -f "$HOME/.tuzi-skills/tuzi-danger-x-to-markdown/EXTEND.md" && echo "user"
┌────────────────────────────────────────────────────────────┬───────────────────┐ │ パス │ 場所 │ ├────────────────────────────────────────────────────────────┼───────────────────┤ │ .tuzi-skills/tuzi-danger-x-to-markdown/EXTEND.md │ プロジェクトディレクトリ │ ├────────────────────────────────────────────────────────────┼───────────────────┤ │ $HOME/.tuzi-skills/tuzi-danger-x-to-markdown/EXTEND.md │ ユーザーホーム │ └────────────────────────────────────────────────────────────┴───────────────────┘
┌───────────┬───────────────────────────────────────────────────────────────────────────┐ │ 結果 │ 操作 │ ├───────────┼───────────────────────────────────────────────────────────────────────────┤ │ 見つかった │ 読み込み、解析し、設定を適用します │ ├───────────┼───────────────────────────────────────────────────────────────────────────┤ │ 見つからない │ 必ず 初回セットアップを実行します(下記参照)— デフォルトを黙って作成しないでください │ └───────────┴───────────────────────────────────────────────────────────────────────────┘
EXTEND.md で設定可能な項目:メディアをデフォルトでダウンロード | デフォルトの出力ディレクトリ
初回セットアップ(必須)
重要:EXTEND.md が見つからない場合、EXTEND.md を作成する前に、必ず AskUserQuestion を使用してユーザーの設定を確認してください。確認せずにデフォルト設定で EXTEND.md を作成することは絶対にしないでください。これは必須の操作です。セットアップが完了するまで、変換を進めないでください。
1 回の呼び出しですべての質問を含めて AskUserQuestion を使用してください。
質問 1 — ヘッダー:「メディア」、質問:「ツイート内の画像や動画をどのように扱いますか?」
- 「毎回確認(推奨)」— Markdown の保存後に、メディアをダウンロードするか確認します
- 「常にダウンロード」— メディアをローカルの imgs/ および videos/ ディレクトリに常にダウンロードします
- 「ダウンロードしない」— Markdown 内の元のリモート URL をそのまま使用します
質問 2 — ヘッダー:「出力」、質問:「デフォルトの出力ディレクトリはどこですか?」
- 「x-to-markdown(推奨)」— ./x-to-markdown/{username}/{tweet-id}.md に保存します
- (ユーザーは「その他」を選択して、任意のパスを入力できます)
質問 3 — ヘッダー:「保存」、質問:「設定をどこに保存しますか?」
- 「ユーザー(推奨)」— ~/.tuzi-skills/(すべてのプロジェクトで使用)
- 「プロジェクト」— .tuzi-skills/(このプロジェクトのみ)
ユーザーの回答後、選択された場所に EXTEND.md を作成し、「設定を [path] に保存しました」と確認してから続行します。
詳細は references/config/first-time-setup.md を参照してください。
サポートされるキー
| キー | デフォルト | 値 | 説明 |
|---|---|---|---|
download_media | ask | ask / 1 / 0 | ask = 毎回確認、1 = 常にダウンロード、0 = ダウンロードしない |
default_output_dir | 空 | パスまたは空 | デフォルトの出力ディレクトリ(空 = ./x-to-markdown/) |
値の優先順位:
- CLI 引数(
--download-media、-o) - EXTEND.md
- スキルのデフォルト
使用方法
npx -y bun ${SKILL_DIR}/scripts/main.ts <url>
npx -y bun ${SKILL_DIR}/scripts/main.ts <url> -o output.md
npx -y bun ${SKILL_DIR}/scripts/main.ts <url> --download-media
npx -y bun ${SKILL_DIR}/scripts/main.ts <url> --json
オプション
| オプション | 説明 |
|---|---|
<url> | ツイートまたは記事の URL |
-o <path> | 出力先 |
--json | JSON 出力 |
--download-media | 画像/動画のアセットをローカルの imgs/ と videos/ にダウンロードし、Markdown のリンクをローカルの相対パスに書き換えます |
--login | Cookie のみを更新します |
対応 URL
https://x.com/<user>/status/<id>https://twitter.com/<user>/status/<id>https://x.com/i/article/<id>
出力
---
url: "https://x.com/user/status/123"
author: "Name (@user)"
tweetCount: 3
coverImage: "https://pbs.twimg.com/media/example.jpg"
---
Content...
ファイル構造:x-to-markdown/{username}/{tweet-id}/{content-slug}.md
--download-media が有効な場合:
- 画像は Markdown ファイルと同じ場所にある
imgs/に保存されます - 動画は Markdown ファイルと同じ場所にある
videos/に保存されます - Markdown のメディアリンクはローカルの相対パスに書き換えられます
メディアのダウンロードワークフロー
EXTEND.md の download_media 設定に基づきます。
| 設定 | 動作 |
|---|---|
1(常に) | --download-media フラグを付けてスクリプトを実行します |
0(しない) | --download-media フラグなしでスクリプトを実行します |
ask(デフォルト) | 以下の毎回確認するフローに従います |
毎回確認するフロー
--download-mediaなしでスクリプトを実行 → Markdown を保存します- 保存した Markdown でリモートメディア URL(画像/動画リンク内の
https://)を確認します - リモートメディアが見つからない場合 → 完了です。確認は不要です
- リモートメディアが見つかった場合 →
AskUserQuestionを使用します:- ヘッダー:「Media」、質問:「画像/動画 N 件をローカルファイルにダウンロードしますか?」
- 「Yes」— ローカルディレクトリにダウンロードします
- 「No」— リモート URL のままにします
- ユーザーが確認した場合 →
--download-mediaを付けてスクリプトを再度実行します(Markdown をローカルパスに書き換えて上書きします)
認証
- 環境変数(推奨):
X_AUTH_TOKEN、X_CT0 - Chrome ログイン(フォールバック):Chrome を自動で開き、Cookie をローカルにキャッシュします
拡張機能のサポート
EXTEND.md でカスタム設定を利用できます。パスと対応オプションについては、設定セクションを参照してください。