wjs-x-improving-content について
実験を通じてX投稿用プロンプトを改善するClaudeスキルです。インプレッションデータをプロンプトの版や内容の特徴と結び付け、成熟した投稿の中央値で版を評価し、内容分析を次の変更に役立てます。
主な機能
- 01Content CSVと投稿履歴の取り込み
- 02プロンプト版ごとのインプレッション分析
- 03切り口や長さ別の内容比較
- 04プロンプト版と仮説の登録
- 05評価結果とスコアボードの作成
活用シーン
- 01プロンプト版ごとの投稿実績の比較
- 02高いインプレッションに関連する内容特性の発見
- 03内容分析に基づくプロンプト変更の提案
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ jianshuo/ claude-skills --skill wjs-x-improving-contentインストール後、Claude Code で/wjs-x-improving-contentを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
inbox/.gitignorescripts/_common.pyanalyze-content.pyevaluate.pyingest-tweets.pyledger.pyscoreboard.pystate/.gitignoreSCOREBOARD.mdtweets.jsonlversions.jsonl詳細
wjs-x-improving-content
「よいポストを書く」ことをエンジニアリングとして捉えます。prompts/x/prompt.md を継続的に変更し、インプレッションデータを使って最もよいバージョンを見極め、「どのようなコンテンツ特性が高いインプレッションと関連するか」を掘り下げて次のバージョンに反映します。[[wjs-x-increasing-follower]] と対になるスキルです。あちらはプロフィールからフォローへの転換率を測り、こちらは プロンプトから各ポストのインプレッションを測ります。
Core Principle
インプレッションは主に元記事/トピックで決まり、プロンプトの影響は二次的です。 よい記事なら、どんなプロンプトでも大きく伸びる可能性があります。そのため、正直に二つの層に分けて見ます。
| 見るもの | シグナルの強さ | 使い方 |
|---|---|---|
| プロンプトのバージョン比較(どのバージョンのプロンプトのポストがインプレッションの中央値で高いか) | 弱い(記事に左右され、多くのサンプルが必要) | 方向性の参考にする。十分なサンプルが集まってから判定する |
| コンテンツ特性(angle A/B/C、長さ、フックなど、プロンプトが直接制御する要素) | 比較的強い(同じトピックで特性の違いを比べることで、プロンプトの工夫が明らかになる) | プロンプトに実際に反映する根拠 |
つまり、バージョン比較で方向性を見定め、コンテンツ特性で具体的な手がかりを得ます。 バージョンの判定を因果関係と見なさないでください。
判定には平均ではなく中央値を使います(インプレッションは極端なロングテール分布のため、1件のバズ投稿で平均が大きく歪みます)。各バージョンで成熟したポストが少なくとも5件集まってから、バージョン単位で判定します。成熟期間 = 投稿から3日経過(インプレッションがまだ増えている新しすぎるポストは含めません)。
ロールバックも第一級の機能です。プロンプトは git で管理されているため、ロールバックは git checkout <旧SHA> -- prompts/x/prompt.md で行います。
バージョン = prompt.md の git short-SHA
各ポストがどのバージョンのプロンプトを使ったかは、時間から推定します。ポストの公開時刻 T に対し、prompts/x/prompt.md の git 履歴から、時刻 T 以前の最後のコミットをそのポストに使ったバージョンとします。Action の変更は不要で、過去のポストにもさかのぼって適用できます。プロンプトファイルが存在する前のポストは prompt_sha=null(pre-prompt)です。
データの取得元
各ポストのインプレッションは X API が不安定なため、Content CSV エクスポートを使います。x.com/i/account_analytics → Content タブ → CSV をエクスポート(Post id / Impressions / Engagements などを含む)→ inbox/ に入れます。Post id は tweet_id で、ポスト履歴と照合できます。
When This Skill Fires
- 「X のプロンプトを変更」「どのプロンプトのバージョンが最適か」「どんなコンテンツのインプレッションが高いか」「X コンテンツの改善」
/wjs-x-improving-contentを実行
When NOT to use
- フォロワーを増やす/プロフィールを変更する → [[wjs-x-increasing-follower]]
- ポストを1件投稿するだけ →
/wjs-tweeting-from-articles - スキルを宣伝する →
/wjs-promoting-skills
Workflow
スクリプトは scripts/ に、状態は state/ にあります。まずスキルのディレクトリに cd します。
Step 1 — データを取り込む
python3 scripts/ingest-tweets.py /path/to/content.csv
Content CSV とポスト履歴(~/.claude/skills/wjs-tweeting-from-articles/state/history.jsonl、slug/angle を含む)を結合し、state/tweets.jsonl に保存します。日付から prompt_sha を推定し、char_len と mature(≥3日) を計算します。upsert 方式なので、より長い期間のエクスポートを使って再実行しても安全です。
Step 2 — コンテンツ特性を掘り下げる(中心的な手順。すぐに役立ちます)
python3 scripts/analyze-content.py # 成熟推
python3 scripts/analyze-content.py --all # 含未成熟(angle 样本更全)
angle/長さ/ソースごとにインプレッションの中央値とエンゲージメント率を分解し、最も高い/低いポストを一覧表示します。この層から、プロンプトをどの方向に変更すべきかがわかります。
Step 3 — 仮説を添えてプロンプト変更案を作る
Step 2 のシグナルをもとに、prompts/x/prompt.md に対して反証可能な変更を1つ行います(例:「短い文を重視する」「判断に迷う場合は名言 angle を優先する」)。変更後にコミットします。
cd ~/code/wechat-publish
# 编辑 prompts/x/prompt.md ...
git add prompts/x/prompt.md && git commit -m "x prompt: <一句话改了啥>"
NEW_SHA=$(git log -1 --format=%h -- prompts/x/prompt.md)
実験を番号付きで登録します。
python3 ~/.claude/skills/wjs-x-improving-content/scripts/ledger.py register "$NEW_SHA" \
--hypothesis "短句比长句 impression 高,prompt 收紧到 80 字以内"
以降、6時間ごとの Action が自動的に新しいバージョンでポストを生成します。どの変更が効果をもたらしたか区別できなくなるため、一度に変更するのは1か所だけにします。
Step 4 — 十分なサンプルが集まったら判定する
python3 scripts/evaluate.py # 各版本中位 impression + 相邻版本 Δ% 判决
Δ ≥ +10% → keep、Δ ≤ -10% → rollback、その間 → flat。サンプル不足(成熟したポストが5件未満)の場合は measuring と表示されます。
- keep:
ledger.py keep <SHA> --note "短文 +18%" - rollback(先に王建硕に確認します):
続けてgit -C ~/code/wechat-publish checkout <旧SHA> -- prompts/x/prompt.md git -C ~/code/wechat-publish commit -m "x prompt: rollback to <旧SHA>"ledger.py rollback <SHA> --note "短文では逆に下がった"
Step 5 — ダッシュボード
python3 scripts/scoreboard.py # 写并打印 state/SCOREBOARD.md
現状 + バージョンランキング + コンテンツ特性(angle)+ to-do を表示します。王建硕に共有する場合は、これを送ります。
データモデル(state/)
tweets.jsonl—— 1ポスト1行:{tweet_id, date, impressions, engagements, likes, replies, reposts, new_follows, char_len, text, slug, angle, source(bot|manual), prompt_sha, age_days, mature}versions.jsonl—— プロンプトのバージョンごとに1行:{id, prompt_sha, hypothesis, registered, status(active|kept|rolled_back), verdict, notes}SCOREBOARD.md—— 生成ファイル
デフォルトパラメーター(変更するにはフラグを渡すか _common.py を編集します)
- 成熟期間
MATURITY_DAYS=3 - バージョン判定に必要な最小サンプル数
MIN_TWEETS_PER_VERSION=5 - keep/rollback のしきい値
--threshold 0.10 - プロンプトのロールバックは必ず先に確認します
パスの前提(_common.py の先頭。別のマシンで使う場合はここを変更します)
- ポスト履歴:
~/.claude/skills/wjs-tweeting-from-articles/state/history.jsonl - プロンプトファイル:
~/code/wechat-publish/prompts/x/prompt.md