mcpField
R
reddit-post-engine

reddit-post-engine

github.com/varnan-techマーケティング・グロース68743 回インストール2 週間前に更新
リポジトリ

reddit-post-engine について

reddit-post-engineは、subredditのルールや文化に合わせて投稿を作成するスキルです。プロジェクトやツールなどを紹介する人向けで、明示的な確認後にComposio経由で投稿することもできます。

主な機能

  1. 01subredditのルールと最近の人気投稿を取得
  2. 02subredditの文体に合わせて草稿を調整
  3. 03本文から宣伝リンクを除外
  4. 04任意の最初のコメントを作成
  5. 05ルール違反やスパムのリスクを確認
  6. 06Composio経由での任意投稿

活用シーン

  1. 01特定のsubreddit向けにプロジェクト投稿を準備
  2. 02紹介前に自己宣伝が許可されるか確認
  3. 03コミュニティに役立つ投稿とコメントを作成

MCP 対応

Composio Reddit MCPに接続している場合、明示的な確認後にRedditへの投稿と返信コメントを作成できます。未接続の場合は手動投稿用の草稿を作成します。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/varnan-tech/opendirectory --skill reddit-post-engine

インストール後、Claude Code で/reddit-post-engineを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

.env.example
README.md
evals/
evals.json
references/
subreddit-playbook.md

詳細

Reddit投稿エンジン

サブレディットの文化に合ったReddit投稿を作成します。必要に応じて、Composio経由で投稿できます。


重要なルール: サブレディットのルールを確認せずに投稿してはいけません。本文に製品リンクを含めないでください。適切な場合に限り、最初のコメントに記載してください。90/10ルールに従い、製品に触れなくても投稿自体に価値があるようにしてください。

スパム対策ルール: 主に宣伝を目的とする投稿は削除され、アカウントが停止される可能性があります。まずコミュニティに貢献することが目的です。製品について触れる場合は最初のコメントに記載し、サブレディットが自己宣伝を許可している場合に限ってください。


ステップ1:セットアップの確認

echo "GEMINI_API_KEY: ${GEMINI_API_KEY:+set}"
# Check if Composio Reddit MCP is connected
claude mcp list 2>/dev/null | grep -i reddit || echo "Composio Reddit MCP: not connected"

GEMINI_API_KEY が設定されていない場合: 停止します。ユーザーに次のように伝えてください:「GEMINI_API_KEY が必要です。aistudio.google.com で取得してください。.env ファイルに追加してください。」

Composio Reddit MCP が接続されていない場合: 続行します。このスキルでは投稿を作成しますが、投稿の手順はスキップします。ユーザーに次のように伝えてください:「Composio Reddit MCP が接続されていません。手動で投稿できるよう、投稿の下書きを作成します。直接投稿を有効にするには、README.md のセットアップ手順をご覧ください。」


ステップ2:コンテキストの収集

以下が必要です。

  • 対象のサブレディット(例:r/devops、r/startups、r/SideProject)
  • 共有するもの(プロジェクト、記事、質問、ディスカッション、ツール)
  • それが何をするものかを一文で説明したもの
  • そのサブレディットのコミュニティにとって関連性がある理由
  • テキスト投稿かリンク投稿か

不足している情報がある場合は、1回のメッセージで質問してください。

「Reddit投稿を作成するため、以下を教えてください。

  1. どのサブレディットですか?(例:r/devops、r/startups)
  2. 何を共有しますか?(プロジェクト、記事、ツール、質問)
  3. それは何をするものですか?(技術的な内容を一文で)
  4. このサブレディットにとって、具体的にどのような関連性がありますか?」

ステップ3:サブレディットのルールと文化を取得する

サブレディットのルールを取得します。

curl -s \
  -H "User-Agent: varnan-skills/1.0" \
  "https://www.reddit.com/r/{SUBREDDIT}/about/rules.json" \
  | python3 -c "
import sys, json
d = json.load(sys.stdin)
rules = d.get('rules', [])
for r in rules:
    print(f'Rule: {r.get(\"short_name\", \"\")}')
    print(f'Detail: {r.get(\"description\", \"\")[:200]}')
    print()
"

最近の人気投稿を取得し、トーンやスタイルを把握します。

curl -s \
  -H "User-Agent: varnan-skills/1.0" \
  "https://www.reddit.com/r/{SUBREDDIT}/top.json?t=week&limit=10" \
  | python3 -c "
import sys, json
d = json.load(sys.stdin)
for p in d['data']['children'][:10]:
    pd = p['data']
    print(f'Score: {pd[\"score\"]} | Title: {pd[\"title\"][:100]}')
"

人気投稿の傾向を確認します。

  • タイトルは質問ですか、それとも主張ですか?
  • 技術を前面に出していますか、それとも成果を前面に出していますか?
  • 個人的な語り口(「自分が作った……」)ですか、それとも客観的な語り口(「……のためのツール」)ですか?
  • このサブレディットで最も反応を得ている形式は何ですか?

投稿ルールについて、サブレディットのサイドバーを確認します。

curl -s \
  -H "User-Agent: varnan-skills/1.0" \
  "https://www.reddit.com/r/{SUBREDDIT}/about.json" \
  | python3 -c "
import sys, json
d = json.load(sys.stdin)
data = d.get('data', {})
print('Public description:', data.get('public_description', '')[:300])
print('Subscribers:', data.get('subscribers', 0))
"

サブレディットの種類を特定します。

種類例投稿スタイル
技術実務者向けr/devops, r/sysadmin, r/ExperiencedDevs技術的な具体性を重視し、無駄を省く。「Xを実行してYを学んだ」
スタートアップ/開発者向けr/startups, r/SideProject, r/indiehackers個人的なストーリー、指標、学んだこと
一般的なテクノロジーr/programming, r/technologyニュース性、議論のきっかけ、賛否を呼ぶ意見
キャリアr/cscareerquestions, r/ITCareerQuestions質問形式、具体的な状況、経験を尋ねる
ニッチなツールr/vim, r/rust, r/golang技術的に深い内容、コード例、ベンチマーク

取得したルールと人気投稿を参考に、該当するスタイルを判断します。


ステップ4:Geminiで投稿を作成する

投稿内容を一時ファイルに書き込み、Geminiを呼び出します。

cat > /tmp/reddit-post-request.json << 'ENDJSON'
{
  "system_instruction": {
    "parts": [{
      "text": "You are a developer who is active in the {SUBREDDIT} community. Write a Reddit post that fits this subreddit's culture. Rules: (1) Write in first person if it is a project or experience post. (2) Do NOT include any product links in the body: links go in the first comment only. (3) The post must add genuine value to the community independent of any product being shared. (4) Match the tone of top posts in this subreddit: {SUBREDDIT_TONE_NOTES}. (5) Title max 300 characters. (6) Body 150-400 words for text posts. (7) No marketing language: no 'game-changing', 'powerful', 'robust', 'seamless', 'innovative'. (8) If the post is about a tool the user built, use the 'I made...' or 'I built...' opener: it performs best on Reddit. (9) Output: title on first line, blank line, then body. No labels, no commentary. Do not use em dashes."
    }]
  },
  "contents": [{
    "parts": [{
      "text": "POST_DETAILS_HERE"
    }]
  }],
  "generationConfig": {
    "temperature": 0.7,
    "maxOutputTokens": 1024
  }
}
ENDJSON

curl -s -X POST \
  "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -d @/tmp/reddit-post-request.json \
  | python3 -c "import sys,json; d=json.load(sys.stdin); print(d['candidates'][0]['content']['parts'][0]['text'])"

POST_DETAILS_HERE を以下の内容に置き換えてください。

  • サブレディット名と種類
  • 観察した人気投稿の傾向
  • 共有する内容と、それが関連する理由
  • 主な技術的詳細
  • 開発者の率直な動機

ステップ5:最初のコメントを作成する

ユーザーが製品リンクや追加のコンテキストを共有したい場合は、投稿が公開された直後に投稿する最初のコメントを作成します。

最初のコメントには、次の2つの目的があります。

  1. リンクを記載する(本文にリンクを含めず、宣伝色を抑えられます)
  2. 本文に含めると宣伝色が強くなりすぎるコンテキストを補足する

最初のコメントのルール:

  • 投稿が公開された直後に、自分の投稿への最初の返信として投稿します
  • 100語以内にします
  • 形式の例:「試してみたい方はこちらのリンクをご覧ください:[URL]。投稿で触れた[具体的な技術的内容]についての質問にもお答えします。」
  • サブレディットがコメントでの自己宣伝を許可している場合に限り、最初のコメントを追加します
  • サブレディットに「自己宣伝禁止」のルールがある場合は、リンクを一切記載しません

ステップ 6:セルフ QA

提示する前に下書きを確認します。

構成:

  • タイトルが 300 文字を超えていない
  • 投稿本文にリンクが含まれていない
  • 投稿が一人称で始まっている(プロジェクト/経験に関する投稿の場合)
  • 具体的な技術的詳細または具体的な数値を少なくとも 1 つ含んでいる
  • 投稿のトーンが、このサブレディットの上位投稿(ステップ 3 で記録)に合っている
  • ステップ 3 で確認したサブレディットのルールに違反していない

Claude っぽい表現の検出:以下の語彙カテゴリを確認し、該当する表現をすべて削除します。

カテゴリ削除する語句
冗長な強調語incredibly、absolutely、certainly、definitely、essentially、fundamentally、literally、particularly、quite、rather、really、significantly、simply、truly、ultimately、very
AI 特有の曖昧表現I should note、it's worth noting、it's important to note、as mentioned、as I noted
誇張表現game-changing、revolutionary、powerful、robust、seamless、innovative、best-in-class、cutting-edge、groundbreaking、remarkable
前置き表現In conclusion、in summary、to summarize、overall、first and foremost、last but not least
不要な接続語Furthermore、moreover、additionally、however(文頭の場合)、thus、hence、thereby
AI らしい表現This ensures that、This allows for、This helps to、This enables、delve、utilize、leverage、foster

該当する表現があれば、具体的な名詞、動詞、または数値に置き換えます。「Very fast」は「12ms で実行されます」に、「Powerful tool」は実際の機能に置き換えます。

即時削除につながる表現の確認:以下のパターンは Reddit のスパムフィルターやモデレーターによる削除の対象になります。

  • 広告と受け取られる文(「[Product] を今すぐお試しください」「今すぐ登録」「無料で始める」など)
  • 自分が開発者ではないことをほのめかす表現(「すばらしいツールを見つけました」「すごい製品を見つけました」など)
  • コミュニティでの活動実績を築いていないサブレディットでの、ユーザーを自分のものとして表現する一人称所有格(「私たちのユーザー」「私たちの顧客」)
  • 「X を作りました。こちらから使えます」に続けて、直ちにリンクを置く表現(宣伝的な構成)
  • 根拠のない最上級表現(「~する最善の方法」「唯一のツール」など)
  • 投稿本文内の外部リンク(リンクは最初のコメントにのみ掲載)

即時削除につながる表現があれば、語句を入れ替えるだけでなく、文全体を書き直します。


ステップ 7:敵対的レビュー

最終稿を提示する前に、3 つのペルソナによるレビューを実施します。各ペルソナは投稿を読み、問題点を 1 つだけ見つけ、該当する箇所を正確に引用します。

ペルソナ 1:懐疑的な実務者 この人物は r/{SUBREDDIT} に何年も参加しており、投稿を装った製品の宣伝を何百件も見てきました。以下の点を確認します。

  • 明確な売り込みではなくても、宣伝に感じられる文はありませんか?
  • 投稿はコミュニティの課題を本当に理解していることを示していますか? それとも製品の話ばかりですか?
  • 実務者があきれるような主張はありませんか?

問題視する具体的な一文と、その理由を示してください。

ペルソナ 2:モデレーター この人物はステップ 3 で取得したルールを適用します。以下の点を確認します。

  • 投稿はルールに形式上も準拠していますか?
  • 自己宣伝とコミュニティへの貢献の比率は許容範囲ですか?
  • この投稿とまったく同じ構成が過去に削除されたことはありませんか?

違反の恐れがある具体的なルールを 1 つ示すか、問題がないことを確認してください。

ペルソナ 3:対象読者 この人物はサブレディットのユーザー層に当てはまる、開発者ではないコミュニティメンバーです。以下の点を確認します。

  • 製品を使う予定がなくても、この投稿に賛成票を入れますか?
  • 最初のコメントのリンクを開かなくても応用できる学びはありますか?
  • 冒頭の一文を読んで、続きを読む気になりますか?

読むのをやめる箇所を 1 つ示すか、最後まで読めることを確認してください。

3 人のペルソナによる報告の後、必要な修正を反映します。問題が見つからなければ、「敵対的レビュー:問題なし」と記載します。


ステップ 8:Composio 経由で投稿する(任意)

Composio Reddit MCP が接続されていて、ユーザーが投稿を希望することを確認した場合:

Use the reddit-composio MCP tool REDDIT_CREATE_REDDIT_POST with:
- subreddit: {SUBREDDIT_WITHOUT_r/}
- title: {TITLE}
- kind: "self"
- text: {BODY}

投稿する前に、ユーザーに確認します: 「r/{SUBREDDIT} に投稿する準備ができました。投稿タイトル:'{TITLE}'。このまま投稿してよろしいですか?」

明示的な確認を得てから進めてください。

投稿後:

  1. レスポンスに記載された投稿 URL を控えます
  2. 最初のコメントを作成していた場合は、返された投稿 ID を使って、同じ MCP からすぐに投稿します

投稿に失敗した場合(403、429、その他のエラー): 手動投稿用に下書きを提示します。ユーザーに「直接投稿に失敗しました([error code])。手動投稿用の投稿はこちらです。タイトルと本文をコピーして reddit.com/r/{SUBREDDIT}/submit に貼り付けてください。」と伝えます。


ステップ 9:出力を提示する

## Reddit Post: r/{SUBREDDIT}

### Title
{title}

### Body
{body}

### First Comment (post immediately after)
{first comment, if applicable}

---

### Submission Notes
- Post type: {self/link}
- Best time to post: {peak hours for this subreddit: weekday mornings US time for most tech subreddits}
- After posting: Reply to every comment in the first hour: early engagement signals quality to the algorithm
- Karma note: {If account is new, note that some subreddits require minimum karma before posting}

Composio 経由ですでに投稿されている場合は、出力ブロックを次の内容に置き換えます:

Post submitted: {reddit_post_url}

コメント