wjs-promoting-skills について
`wjs-*` スキルを毎日1つ選び、X の投稿を生成して公開する一方、コミュニティ向けの草稿も作成するスキルです。ローテーション規則と投稿間隔、変更状況の確認により、同じ内容の繰り返しを避けます。
主な機能
- 01毎日1つの `wjs-*` スキルを選択
- 02X の投稿を生成して公開
- 03確認用のコミュニティ草稿を作成
- 04ローテーション規則に基づく選定
- 05投稿頻度を制限し重複を回避
- 06ドライランと手動テストに対応
活用シーン
- 01新規または更新したスキルの定期的な告知
- 02Reddit、HN、Discord 向け投稿の草稿作成
- 03公開前に当日の投稿内容を確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ jianshuo/ claude-skills --skill wjs-promoting-skillsインストール後、Claude Code で/wjs-promoting-skillsを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
com.jianshuo.wjs-promoting-skills.plist.templatedaily.shlist-skills.shmake-plan.shpick-next-skill.shresearch-marketplaces.shsetup.shuninstall.shoutbox/.gitignoreprompts/community-drafts.mddaily-post.mdmake-plan.mdresearch-marketplaces.mdstate/.gitignoreREADME.md詳細
wjs-promoting-skills
毎朝 4:00 に自動で実行されます。wjs-* skill を1つ選び、今日のプロモーションの切り口を作成して X に投稿し、コミュニティ向けの投稿案を作成します。X には実際に投稿し、コミュニティ向けの投稿は outbox/ に下書きとして保存して、人がレビューします。
Core Principle
頭脳は Claude、骨格は bash です。 この skill で必要な判断(今日はどれを推すか、どう書くか、どんな切り口にするか)はすべて、claude -p のヘッドレス呼び出しに任せます。bash の役割は、スケジュール実行、コンテキストの受け渡し、ログ記録、重複投稿の防止だけです。そのため、新しい skill や投稿先を追加したり、文体を変更したりするときにコードを変更する必要はなく、プロンプトのテンプレートを変更するだけで済みます。
実際に投稿するのは X だけです。 Reddit/HN/Discord には、「ユーザーのアカウントとして自動投稿する」ための信頼できる API がありません(OAuth とスパム対策審査が必要か、API 自体がありません)。そのため、この skill ではコミュニティ向けの投稿を outbox/<date>/ に下書きとして保存し、人がコピー&ペーストするのを待ちます。
冪等性と投稿頻度の制御。 X への投稿は1日あたり最大1件です。同じ skill は7日以内に再度推しません。前回のプロモーション以降 SKILL.md に変更がなく、過去7日間も変化がなければ、その日の投稿はスキップします。これにより、騒がしいボットになるのを防ぎます。
When This Skill Fires
- ユーザーが「これらの skills のプロモーションを手伝って」/「毎日自動でプロモーションを投稿するように設定して」/「他の人が skill をどう宣伝しているか調べて」と言ったとき
- ユーザーが
/wjs-promoting-skillsを明示的に呼び出したとき - ユーザーが「今日はどの skill を推す予定?」/「outbox には何がある?」と尋ねたとき
ユーザーが1回だけ投稿したい場合(cron は使わない場合)は、/publish-skill <name> を使ってください。こちらは1件ずつ手動で投稿する版です。この skill の価値は毎日自動で実行することです。
File Layout
~/.claude/skills/wjs-promoting-skills/
├── SKILL.md # 本文件
├── setup.sh # 一次性:装 launchd plist,启动 4 AM 定时
├── uninstall.sh # 一次性:卸 launchd plist
├── daily.sh # ★ 4 AM 入口:跑一遍完整流程
├── list-skills.sh # 列出当前所有 wjs-* skill
├── pick-next-skill.sh # 按轮换规则挑今日 skill
├── research-marketplaces.sh # 研究 openclaw / clawhub / SkillsMP 的爆款怎么写文案(每月跑一次)
├── make-plan.sh # 给一个 skill 生成 marketing plan(30 天 angle rotation)
├── com.jianshuo.wjs-promoting-skills.plist.template
├── prompts/
│ ├── research-marketplaces.md # 研究 prompt
│ ├── make-plan.md # marketing plan prompt
│ ├── daily-post.md # 今日 X 帖 prompt
│ └── community-drafts.md # Reddit / HN / Discord 草稿 prompt
├── state/ # 状态目录(.gitignored,不会被 publish hook 推到 GitHub)
│ ├── .gitignore
│ ├── README.md
│ ├── research.md # 最近一次 marketplace 研究的产物
│ ├── plans/<skill>.md # 每个 skill 的 30 天 angle rotation 计划
│ └── history.jsonl # 每次跑完追加一行:date / skill / tweet_id / status
└── outbox/ # 社区帖草稿(人工 review 后 copy-paste 出去)
└── YYYY-MM-DD/
├── x-posted.txt # 实际发出去的 X 帖文本(archive)
├── reddit-r-ClaudeAI.md
├── hn-show.md
├── discord-anthropic.md
└── wechat-followup.md # (可选)下次写公众号文章时的角度参考
Setup (one-time)
~/.claude/skills/wjs-promoting-skills/setup.sh
次の3つを実行します。
- 前提条件を確認します。
claudeCLI、xurl(xurl whoamiでユーザーが返ること)、jqを確認します research-marketplaces.shを一度実行して、初期状態のstate/research.mdを生成します(実際にオンライン調査を行うのはこのときだけで、次回からは毎月1回、自動で更新します)com.jianshuo.wjs-promoting-skills.plist.templateを実際の plist にレンダリングして~/Library/LaunchAgents/に配置し、launchctl bootstrapを実行します
セットアップ後は毎日 04:00 に自動で実行されるため、手動操作は不要です。
停止するには、~/.claude/skills/wjs-promoting-skills/uninstall.sh を実行します。
Daily Flow (4 AM — what daily.sh does)
04:00 →
Step 1: list-skills.sh → 当前所有 wjs-* skill 的清单 + 各自上次推广时间
Step 2: pick-next-skill.sh → 按规则挑出今天的 skill(见 §Rotation Rules)
Step 3: 检查跳过条件 → 7 天内推过 / SKILL.md 没动 / outbox 已有今日 → 直接 exit 0
Step 4: make-plan.sh <skill> → 如果该 skill 没有 plan 或 plan 老于 30 天,重新生成
Step 5: claude -p 跑 daily-post.md
└── 输入: SKILL.md + plan + research.md + history.jsonl 最近 30 天
└── 输出: 一条 ≤ 280 char 的 X 文本(包含 repo URL)
Step 6: xurl -X POST -d '{"text": "..."}' /2/tweets ← 真发
Step 7: claude -p 跑 community-drafts.md
└── 输出: outbox/<date>/reddit-r-ClaudeAI.md / hn-show.md / discord-anthropic.md
Step 8: 追加一行到 history.jsonl,并把发出去的 X 帖归档到 outbox/<date>/x-posted.txt
毎週日曜日は、daily の実行後にさらに次の処理を行います。
research-marketplaces.shを実行してstate/research.mdを更新します(その週に marketplaces で人気を集めた投稿の書き方に変化があったか確認します)
毎月1日は、daily の実行後にさらに次の処理を行います。
- plan が30日以上前のすべての skill に対して
make-plan.shを再実行します(切り口をローテーションします)
Rotation Rules (pick-next-skill.sh)
優先度の高い順に並べます。
- まだ一度も推していない skill —— 新しい skill を早く知ってもらえるよう、優先して推します
- 直近7日間に推していない skill —— その中から、SKILL.md が最近変更されたものを選びます(ユーザーが最近更新したことを示します)
- その他 —— すべての skill の中から、「前回のプロモーションから最も時間が経っているもの」を選びます
すべての skill を直近7日間に推している場合は、その日の実行をスキップします(ノイズになるのを防ぎます)。 すべての skill を一度も推していない場合は、アルファベット順で最初のものを選びます。
X Post Format (daily-post.md output)
制約:
- 280文字以内(X では URL が23文字として数えられるため、25文字分を確保します)
- 1行目:skill 名と、価値を伝える一文
- 中ほど:具体的な機能を2~3個、または今回の更新で変わった点
- 下から2行目に repo URL を単独で記載します(X がプレビューカードを自動表示します)
- ハッシュタグは最大1つ(
#ClaudeCodeまたは#ClaudeSkills) - 禁止事項:マーケティング口調、ロケットの絵文字、
AI-powered、game-changer、大げさな表現 - 必須事項:ユーザーの文体に合わせます(wjs-* skill の README.md を参考にします。実用的で具体的、誇張しない)
切り口のローテーション(同じ skill を複数回推す場合、切り口を重複させません):
- 切り口 A:解決する具体的な問題(「75分の4Kマルチカメラ映像、60GBの再エンコード同期でディスク容量が2倍になる」といった細部)
- 切り口 B:直感に反する設計上の判断(「再エンコードより sidecar」など)
- 切り口 C:ワークフローの連携(他の skill と一緒に実行すると、どのような効果が得られるか)
- 切り口 D:直近の更新で変わった点(前回のプロモーション以降 SKILL.md が変更されていれば、差分から新しい内容を中心に紹介します)
make-plan.sh は、この4種類の切り口を30日間のローテーションに並べ、それぞれに使えるフック文をあらかじめ用意します。
Community Drafts (community-drafts.md output)
実際には投稿しません。outbox/<date>/ に保存し、人がレビューしたあとにコピー&ペーストします。
reddit-r-ClaudeAI.md:長文形式です。冒頭にフックとなる一文を置き、本文では利用場面、コードスニペット、リンクを説明し、最後に自由回答形式の質問をします(Reddit では広告よりも議論が好まれます)。セルフ投稿のみとし、リンクだけの投稿は絶対にしませんhn-show.md:Show HN 形式です。タイトルはShow HN: <skill> – <one line value>、本文は600文字未満とし、オープンソースライセンスと repo URL を記載します。HN で物を売らないでくださいdiscord-anthropic.md:短い投稿です。2~3文とリンクで構成し、#show-and-tell チャンネルに適していますwechat-followup.md(任意):その skill について詳しく説明する公式アカウントの記事が適している場合は、200字の概要といくつかの切り口を用意します。次回ユーザーが記事を書くときに、そのまま使えます
ユーザーが忙しくてその日にレビューできなくても、投稿を再送することはありません。投稿は outbox に残り、翌日には別の skill 向けの新しい投稿案が生成されます。
Manual Override
テストやデバッグ用に、どのステップも単独で実行できます。
# 看看明天会推谁
~/.claude/skills/wjs-promoting-skills/pick-next-skill.sh
# 给某个 skill 强制生成 plan
~/.claude/skills/wjs-promoting-skills/make-plan.sh wjs-transcribing-audio
# 把今天的整个 flow 跑一遍但不发 X(dry-run)
DRY_RUN=1 ~/.claude/skills/wjs-promoting-skills/daily.sh
# 强制推某个 skill(绕过 rotation)
SKILL=wjs-segmenting-video ~/.claude/skills/wjs-promoting-skills/daily.sh
# 刷新 marketplace 研究
~/.claude/skills/wjs-promoting-skills/research-marketplaces.sh
# 看最近 7 天推过什么
tail -7 ~/.claude/skills/wjs-promoting-skills/state/history.jsonl | jq .
Prerequisites
claudeCLI が$PATHにあり、claude -p "hello"が実行できること(ヘッドレスモード)xurlがインストールされており、xurl whoamiがjianshuoを返すことjqがインストールされていること(brew install jq)- 公開リポジトリ:各
wjs-*skill に GitHub repo があり、git config --get remote.origin.urlで URL を取得できること。このリポジトリ~/code/claude-skillsはすでに条件を満たしています - macOS(スケジュールには
launchdを使用します。Linux では systemd timer が相当しますが、この skill では実装されていません)
Anti-Patterns (絶対にしないこと)
| しないこと | 理由 |
|---|---|
| 1日に X へ複数回投稿する | 7000人のフォロワーにタイムラインを埋め尽くす必要はありません。1日1件とし、量より質を重視します |
| Reddit/HN に自動投稿する | スパム対策審査が非常に厳しく、自動投稿はアカウント停止のリスクがあります。下書きのみです |
| テンプレートを使う(絵文字+大げさな表現) | ユーザーの文体は「実用的で具体的、誇張しない」です。テンプレート調はブランドを損ないます |
| 同じ skill を7日以内に繰り返し推す | 切り口が違っていても、頻度が適切でなければフォロワーにフォローを解除されます |
| 「投稿するために投稿する」—— SKILL.md が7日間更新されていないのに投稿する | 新しい内容がなければ投稿しません。ノイズより沈黙のほうがよいです |
claude の呼び出し時に --bare を指定しない | 必要なのは決定性のある出力です。hooks、自動 memory、CLAUDE.md に干渉されたくありません |
| state/ を GitHub に push する | history.jsonl には X への投稿に関するメタデータ(tweet_id など)が含まれており、公開するものではありません |
このスキルではないこと
- 「AI にアカウントの運用を任せる」ものではありません — すべての投稿は、あなたが作成した SKILL.md に基づいており、AI は切り口を変えて要点をまとめるだけです
- 「クロスプラットフォームのクロスポスター」ではありません — 実際に投稿するのは X のみで、ほかのプラットフォームでは下書きのみを作成します
- 「完全自律型」ではありません — いつでも uninstall.sh で停止できます。また、
DRY_RUN=1を指定すれば、次回の投稿内容を確認できます - 「
/publish-skillの代替」ではありません — こちらは単発の手動版で、このスキルは毎日の自動版です。両方を併用できます
完了条件
-
setup.shが正常に実行され、launchctl list | grep wjs-promoting-skillsで確認できる -
state/research.mdが存在し、サイズが 1KB を超えている(調査が実行されたことを示します) -
DRY_RUN=1 daily.shが X に投稿せず、最後まで実行できる -
outbox/<today>/に Markdown の下書きが 4 件ある - 実際に投稿した日に、
history.jsonlに新しい記録が 1 行追加されている
自動公開:このスキルは
~/.claude/skills-publish-hook.shによって github.com/jianshuo/claude-skills に自動で同期されます(編集のたびに自動で commit と push が実行されます)。state/とoutbox/は、このディレクトリの.gitignoreとサブディレクトリの.gitignoreによって除外されるため、SKILL.md と一緒に push されることはありません。