name: mark-sns-posted description: 投稿済み SNS コンテンツを posts.json に記録しメディアファイルを削除する。Use when user says "投稿済みにする", "mark posted", "SNS投稿完了". テキスト/JSON はリモート R2 に保持. disable-model-invocation: true primary_agent: sns-metrics-sync co_agents: [instagram-strategist, x-strategist]
手動投稿後に sns-posts-store.cjs 経由で .claude/state/sns/posts.json に記録し、メディアファイルを削除する。
記録と同時に .claude/state/sns/post-log.md が自動再生成される(視覚確認用)。
SQLite / D1 は使わない。 SSOT は
posts.jsonのみ (完全DBレス doc12)。
引数
/mark-sns-posted <contentKey> [--content-type ranking|compare|correlation] [--platforms x,instagram,...] [--url <postUrl>]
contentKey(必須): ランキングキーまたは比較スラッグ(例:active-job-opening-ratio)--content-type(任意):ranking(デフォルト)、compare、correlation--platforms(任意): 投稿済みプラットフォームをカンマ区切りで指定。省略時はディレクトリ構成から自動判定--url(任意): 投稿 URL
手順
1. 対象ディレクトリの確認
contentType に応じたディレクトリを確認する:
- ranking:
.local/r2/sns/ranking/<contentKey>/ - compare:
.local/r2/sns/compare/<contentKey>/ - correlation:
.local/r2/sns/correlation/<contentKey>/
2. プラットフォームの特定
--platforms が指定されていればそれを使用。未指定の場合はディレクトリ構成から判定:
| ディレクトリ | platform 値 |
|---|---|
x/ |
x |
instagram/ |
instagram |
youtube/ |
youtube |
youtube-short/ |
youtube |
tiktok/ |
tiktok |
note/ |
note |
3. posts.json に記録
sns-posts-store.cjs の insert() または updateById() で記録する。
記録後 post-log.md が自動再生成されるので、内容を目視確認すること。
const store = require('.claude/scripts/lib/sns-posts-store.cjs');
const now = new Date().toISOString();
// 既存レコードがなければ新規 INSERT
store.insert({
platform: '<platform>', // 'x' | 'instagram' | 'youtube' | 'tiktok' | 'note'
domain: '<contentType>', // 'ranking' | 'compare' | 'correlation'
content_key: '<contentKey>',
caption: '<caption.txt の内容>', // あれば
post_url: '<postUrl>', // --url があれば
status: 'posted',
posted_at: now,
});
caption は各プラットフォームの caption.txt から読み込む:
.local/r2/sns/<contentType>/<contentKey>/<platform>/caption.txt
.local/r2/sns/<contentType>/<contentKey>/youtube-short/shorts.txt # YouTube Short
4. リモート R2 からメディアファイルのみ削除
テキスト・JSON は保持。削除対象: .mp4, .png, .jpg, .jpeg, .webp, .gif, .webm
npx tsx packages/r2-storage/src/scripts/delete-r2-prefix.ts sns/<contentType>/<contentKey>/ --dry-run
npx tsx packages/r2-storage/src/scripts/delete-r2-prefix.ts sns/<contentType>/<contentKey>/ --ext mp4,png,jpg,jpeg,webp,gif,webm
5. ローカルからメディアファイルのみ削除
find .local/r2/sns/<contentType>/<contentKey> -type f \
\( -name "*.mp4" -o -name "*.png" -o -name "*.jpg" -o -name "*.jpeg" \
-o -name "*.webp" -o -name "*.gif" -o -name "*.webm" \) -delete
find .local/r2/sns/<contentType>/<contentKey> -type d -empty -delete
6. post-log.md で視覚確認
記録後、.claude/state/sns/post-log.md の先頭行に今投稿した内容が追加されているか確認する。
head -20 .claude/state/sns/post-log.md
7. 結果報告
| 項目 | 内容 |
|---|---|
| posts.json 記録 | 追加したプラットフォーム・content_key・posted_at |
| post-log.md | 先頭行に反映されているか確認結果 |
| リモート R2 | 削除したメディアファイル数 |
| ローカル | 削除したメディアファイル数 |
複数 contentKey の一括処理
スペース区切りで複数指定された場合、各 contentKey に対して手順 1〜6 を順に実行する。
参照
- SSOT:
.claude/state/sns/posts.json - 視覚確認:
.claude/state/sns/post-log.md(自動生成) - ストア:
.claude/scripts/lib/sns-posts-store.cjs - R2 削除:
packages/r2-storage/src/scripts/delete-r2-prefix.ts