with one click
with one click
[HINT] Download the complete skill directory including SKILL.md and all related files
| name | x-post-writer |
| description | Xの投稿文を自動生成するスキル。アカウント情報・競合投稿・保存テンプレートを活用し、投稿の型をテンプレとして蓄積していく。 |
Xアカウントの投稿文を半自動生成するフルフロー。 アカウントごとのトンマナを守りながら、競合の投稿パターンや過去の自分の型(テンプレ)を活用して高品質な投稿を素早く作る。
[アカウント選択]
→ Phase 1: アカウント情報を読み込む
→ Phase 2: 作成モードを選ぶ(テンプレ / 競合参考 / ゼロから新規)
→ Phase 3: 競合投稿 or テンプレを読み込む
→ Phase 4: テーマ・追加情報・意見をユーザーに聞く
→ Phase 5: 投稿文を複数案生成
→ Phase 6: テンプレとして保存するか確認 → 保存
.agent/skills/x-post-writer/
├── SKILL.md ← このファイル
├── accounts/ ← アカウント情報ファイル群(ユーザーが管理)
│ └── [account_name].md
└── templates/ ← 保存済みの投稿型テンプレート(初回保存時になければ作成)
└── [template_name].md
inputs/x-posts/
└── competitors/ ← 競合アカウントの投稿(ユーザーが格納)
└── [account_name]/
└── posts.md ← 投稿をテキストで貼り付けたファイル
# アカウント名
ハンドル: @xxx
## コンセプト・目的
(何を発信するアカウントか)
## ターゲット
(誰に届けたいか)
## トンマナ・口調
(例: フレンドリー・体験談ベース・断定口調 など)
## 投稿の型・よく使う構成
(例: 問題提起→共感→解決策→CTA など)
## よく使うハッシュタグ
#xxx #yyy
## NG・禁止事項
(使わない言葉・避けるテーマ)
## 過去の人気投稿例
(いくつか貼り付ける)
fetch_bookmarks.py を使う場合、ファイル冒頭付近に自動取得ブロックが入ることがある。
そこには X User ID / プロフィール文 / 固定投稿メモなどの事実情報だけを入れ、
人が編集するトンマナ・世界観セクションは上書きしない前提で扱う。
スキル起動時に以下を確認し、どこから始めるか判断する。
同階層の templates/ ディレクトリを確認する。ディレクトリ自体がなければ「テンプレート未保存」として扱う。
.agent/skills/x-post-writer/accounts/ フォルダ内の .md ファイルを一覧表示する。
📂 登録済みアカウント:
1. personal_brand.md → @xxx(副業・フリーランス発信)
2. company_sns.md → @yyy(BtoB SaaS)
どのアカウント用に投稿を作りますか?番号で選んでください。
(新しいアカウントを追加したい場合は「新規」と入力)
accounts/ フォルダにアカウント情報ファイルが見つかりませんでした。
以下のパスにファイルを作成してください:
$TEAM_INFO_ROOT/.agent/skills/x-post-writer/accounts/[アカウント名].md
フォーマットはこのスキルの「アカウント情報ファイルの書き方」を参照してください。
選択されたファイルを Read ツールで読み込み、以下を把握する:
アカウント情報を読み込んだ後、作成モードを選んでもらう。
📝 [アカウント名] の投稿を作成します。
どの方法で作りますか?
A. 保存済みテンプレートを使って作る
B. 競合アカウントの投稿を参考に新しく作る
C. ゼロから新規で作る
A/B/C で答えてください。
📝 [アカウント名] の投稿を作成します。
どの方法で作りますか?
A. 競合アカウントの投稿を参考に新しく作る
B. ゼロから新規で作る
A/B で答えてください。
保存済みテンプレートがある場合は、同階層の templates/ 内のテンプレート一覧を提示する。
📋 保存済みテンプレート:
1. 問題提起_共感型.md → 悩みに刺さるフック + 体験談構成
2. リスト解説型.md → ○個の方法 + 箇条書き + まとめCTA
3. 逆説フック型.md → 「〜は間違い」系の反論系構成
どのテンプレートを使いますか?
選択されたテンプレートファイルを Read ツールで読み込む。
inputs/x-posts/competitors/ 内のフォルダ一覧を提示する。
📂 競合アカウントの投稿データ:
1. influencer_a/posts.md
2. company_b/posts.md
3. creator_c/posts.md
参考にする投稿を選んでください(複数選択可、「全部」も可)。
選択されたファイルを Read ツールで読み込み、投稿の特徴・パターンを把握する。
インプット読み込みをスキップして Phase 4 へ進む。
以下を順番にユーザーに聞く(まとめて一度に聞いてもOK)。
今回の投稿について教えてください。
1. 📌 テーマ・伝えたいこと
(例: 朝活の効果、副業で失敗した経験、新しいツールの紹介 など)
2. 💡 追加したい情報・データ・エピソード
(具体的な数字、体験談、事例など。なければ「なし」でOK)
3. 🗣️ 自分の意見・スタンス
(そのテーマについてどう思うか、読者にどう感じてほしいか)
4. 🎯 投稿の目的(任意)
(いいね獲得 / フォロワー増加 / プロフ流入 / 商品認知 など)
3案を並べて提示する。
━━━━━━━━━━━━━━━━━━━━━━━━
🅐 案1 ─ [この投稿のコンセプト(10字程度)]
━━━━━━━━━━━━━━━━━━━━━━━━
[投稿文]
━━━━━━━━━━━━━━━━━━━━━━━━
🅑 案2 ─ [この投稿のコンセプト]
━━━━━━━━━━━━━━━━━━━━━━━━
[投稿文]
━━━━━━━━━━━━━━━━━━━━━━━━
🅒 案3 ─ [この投稿のコンセプト]
━━━━━━━━━━━━━━━━━━━━━━━━
[投稿文]
生成後に確認する:
気に入ったものはありますか?
修正・組み合わせ・追加の希望があれば教えてください。
投稿が決まったら確認する。
今回の投稿の「型(構成・フック・書き方)」をテンプレとして保存しますか?
保存しておくと次回から使い回せます。
→ 「はい」または「いいえ」で答えてください。
構文を深く読み取って言語化する
以下の観点で分析・言語化する:
■ フック(1行目)の型
- どんな言葉で掴むか(問いかけ/断言/逆説/数字/共感/驚き)
■ 本文の構成
- 何を→どんな順番で→どう展開するか
- 段落の分け方・改行のリズム
■ 感情の流れ
- 読者がどんな感情をたどるか(不安→共感→希望 など)
■ CTA(最後のひとこと)の型
- 行動喚起か/問いかけか/宣言か
■ 言語的特徴
- 句読点・体言止め・リスト使用・絵文字の使い方
テンプレート名をユーザーに聞く
このテンプレートの名前を決めてください。
(例: 「共感フック_体験談展開」「逆説開幕_解決リスト型」など)
ファイルに保存する
スキル直下の templates/[template_name].md に保存する。templates/ がなければ先に作成する。
フォーマット:
# [テンプレート名]
作成日: YYYY-MM-DD
使用アカウント: [アカウント名]
元になった投稿の実績: (いいね数・インプレ数など、あれば記入)
---
## 概要
(どんな場面・テーマに向いているか)
## フックの型
(フックのパターンと言語化)
## 本文の構成
(構成の骨格)
## 感情の流れ
(読者の感情変化)
## CTAの型
(最後のひとことのパターン)
## 言語的特徴
(文体・リズム・記号の使い方)
---
## 骨格テンプレート(穴埋め形式)
[フックのひな型([テーマ]や[数字]などを[ ]で示す)]
[本文のひな型]
[CTAのひな型]
---
## 実例(このテンプレートで作った投稿)
[保存時の投稿文をそのまま貼り付ける]
スキル終了。
保存済みテンプレートを使う際は:
X(Twitter)の図解投稿画像は 必ずアスペクト比 3:4(推奨 960×1280px) で作成すること。
縦型 3:4 / 960×1280px を必ず含めるinfographic-rules.md がないアカウントでも、このアスペクト比はデフォルト適用するOPENAI_API_KEY、gpt-image-* の直接呼び出し、画像生成用スクリプト作成は提案・実行しない。Phase 1〜6 に加えて、以下のDB連携フローも使える。
| スクリプト | 役割 |
|---|---|
scripts/fetch_bookmarks.py | XブックマークをAPIで取得。初回のみ accounts/*.md を自動初期化し、bookmarks_latest.json に保存 |
scripts/draft_manager.py | 下書きをNeon DBに保存・一覧・表示・削除 |
scripts/x_metrics_collector.py | 直近3日分のメイン投稿メトリクス(いいね・インプレ等)を時系列でNeon DBに保存 |
scripts/daily_analysis.py | 過去3日分のメイン投稿メトリクスを時系列分析し、Discord通知とaccounts/*.md自動更新を行う |
scripts/scheduled_draft_pipeline.py | Codex優先 / Claude fallback で新規ブックマークだけを自動下書き化し、画像プロンプトも保存 |
scripts/manage_launch_agents.py | 上記定時ジョブと毎時メトリクス収集の LaunchAgent を render / install / uninstall する |
scripts/preview_server.py | ローカルAPIサーバー(port 8765)。下書き一覧・Discord通知を提供 |
scripts/start_preview.sh | ngrokトンネル起動 → プレビューサーバー起動 → ブラウザを開く |
1. ブックマーク取得(ユーザーが実行)
python3 "$TEAM_INFO_ROOT/.agent/skills/x-post-writer/scripts/fetch_bookmarks.py" --account GUTARA --count 5
自動取得ブロックだけ再同期したい場合:
python3 "$TEAM_INFO_ROOT/.agent/skills/x-post-writer/scripts/fetch_bookmarks.py" --account GUTARA --count 5 --refresh-account-file
初回のみ:
- X API からプロフィール文 / 表示名 / X User ID / 固定投稿を取得
- 対応する `accounts/*.md` を自動作成または自動取得セクションだけ更新
- ブックマーク取得には OAuth 2.0 user token も必要
(`X_BOOKMARKS_ACCESS_TOKEN_GUTARAAIKATUYOU` / `X_OAUTH2_ACCESS_TOKEN_GUTARAAIKATUYOU` /
`X_BEARER_TOKEN` の順で参照)
2. エージェント(Claude Code / Codex)が bookmarks_latest.json を読み込む
→ 各ブックマークの内容・著者を把握する
→ `account_profile.account_file_path` があれば、そのファイルを優先して読む
3. アカウント情報を読み込む(accounts/xxx.md)
→ トンマナ・禁止事項を確認する
4. 各ブックマークに対してX投稿の下書きを生成する
→ 原文の「型・視点・テーマ」を借りて自分のトンマナで書き直す
→ 元投稿の冒頭フックはそのまま使わず、最低5種類の心理トリガーへ展開してから最強の1案を採用する
→ 非エンジニア・副業初心者を最優先ターゲットにし、ツール名を知らない人でも理解できるように「何をする道具か」とメタファーを添える
→ ChatGPT以外のツールを扱うツリーでは、必要に応じて「そもそもそのツールは何か」を必ず説明する
→ 長文(有料課金ユーザー向け・25,000文字以内)対応
→ ツリー投稿は「---」で区切って生成
5. ユーザーに確認を取る
6. draft_manager.py で保存(ユーザーが実行)
python3 "$TEAM_INFO_ROOT/.agent/skills/x-post-writer/scripts/draft_manager.py" save \
--account GUTARA --text "投稿文" --memo "from @author"
ツリーの場合(---区切りのファイルを渡す):
python3 "$TEAM_INFO_ROOT/.agent/skills/x-post-writer/scripts/draft_manager.py" save \
--account GUTARA --file "[テキストファイルパス]" --memo "ツリー"
1. プレビューサーバー起動(ユーザーが実行)
bash "$TEAM_INFO_ROOT/.agent/skills/x-post-writer/scripts/start_preview.sh"
2. ブラウザが開く → 下書き一覧から選んで内容確認
固定URL: https://zinciferous-preludiously-draven.ngrok-free.dev
3. 「投稿する」ボタンをクリック
→ X Web Intentで投稿画面が開く(内容入力済み)
→ Discordに通知(プレビューURL + 投稿内容)
4. Xで投稿を確定
# 直近3日間のメイン投稿のインプレッション・いいね等をNeon DBに保存
# ツリー投稿は1投稿目だけを追跡し、続き投稿の数値は追跡しない
python3 "$TEAM_INFO_ROOT/.agent/skills/x-post-writer/scripts/x_metrics_collector.py"
# LaunchAgent plist を render
python3 "$TEAM_INFO_ROOT/.agent/skills/x-post-writer/scripts/manage_launch_agents.py" render
# install / uninstall / status
python3 "$TEAM_INFO_ROOT/.agent/skills/x-post-writer/scripts/manage_launch_agents.py" install
python3 "$TEAM_INFO_ROOT/.agent/skills/x-post-writer/scripts/manage_launch_agents.py" uninstall
python3 "$TEAM_INFO_ROOT/.agent/skills/x-post-writer/scripts/manage_launch_agents.py" status
00:00 / 07:00 / 12:0005分08:00scheduled_draft_pipeline.py は処理済みブックマークを state 管理し、重複下書きを避ける| 変数名 | 用途 |
|---|---|
NEON_DATABASE_URL | Neon PostgreSQL接続URL |
X_API_KEY | X APIキー(fetch_bookmarks.py は X_CONSUMER_KEY でも可) |
X_API_SECRET | X APIシークレット(fetch_bookmarks.py は X_CONSUMER_SECRET でも可) |
X_ACCESS_TOKEN_GUTARAAIKATUYOU | gutaraAikatuyouアカウントのアクセストークン |
X_ACCESS_TOKEN_SECRET_GUTARAAIKATUYOU | gutaraAikatuyouアカウントのアクセストークンシークレット |
X_BOOKMARKS_ACCESS_TOKEN_GUTARAAIKATUYOU | ブックマーク取得用 OAuth 2.0 user token(なければ X_OAUTH2_ACCESS_TOKEN_GUTARAAIKATUYOU → X_BEARER_TOKEN を順に参照) |
DISCORD_WEBHOOK_X_DRAFT | Discord Webhook URL(投稿通知先) |
/prompts:x
→ .agent/skills/x-post-writer/SKILL.md を読み込み、このフローに従って動作する。