maestro/pieces/sns-research.yaml
oss-sync 02c7dfdd83
Some checks failed
CI / build-and-test (push) Has been cancelled
sync: update from private repo (7d64ee2)
2026-06-05 05:42:11 +00:00

149 lines
7.7 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

name: sns-research
description: |
X (Twitter)・Reddit・Hacker News などの SNS から意見・評判・議論を収集しレポートにまとめる。
選ぶべき場合: 「Redditで何と言われているか」「Xでの反応」など SNS の声を調べたいとき
選ぶべきでない場合: 一般的なWeb調査、ニュース記事の収集、ドキュメント処理
triggers:
keywords: ["Reddit", "reddit", "Twitter", "Hacker News", "HackerNews", "サブレディット", "subreddit"]
max_movements: 999
initial_movement: gather
movements:
- name: gather
edit: true
persona: researcher
instruction: |
## 調査計画
着手前に調査計画を立てる:
1. 調査対象と対象 SNS を決定する
2. 検索クエリ案を複数考える(日本語・英語の両方を検討)
3. verify からの差し戻しがある場合は、不足点を優先的に解消する
計画に従って SNS から情報を収集し、Write で output/raw/ にテキストファイルとして書き出す。
## SNS 別の収集方針
### X (Twitter)
- キーワードで広く拾う → XSearch
- 特定アカウントの発言を追う → XUserPosts
- 議論の流れ・リプライツリーまで欲しい → XPostDetail
- ログイン中アカウントのホームタイムライン(おすすめ / フォロー中)を見る → XTimeline
### Reddit
BrowseWeb で必ず **old.reddit.com** を使う(軽量でテキスト抽出しやすい)。
- 検索: `old.reddit.com/search?q=キーワード`
- スレッド: `old.reddit.com/r/{サブレディット}/comments/...`
### Hacker News
WebFetch で Algolia API を使う。
- 検索: `https://hn.algolia.com/api/v1/search?query=キーワード`
- 記事詳細: `https://hn.algolia.com/api/v1/items/{id}`
## ファイル命名規則
`output/raw/{platform}-{query-slug}.txt`
例: reddit-ollama-vs-vllm.txt, x-ollama-review.txt, hn-local-llm.txt
## SNS 調査の原則
モデルの内部知識だけで情報を書かないこと。必ず実際の SNS データを収集する。
検索ヒットがゼロだった場合も、その事実を raw ファイルに記録する(捏造しない)。
## 画像・スクリーンショットの収集
SNS 投稿には画像・グラフが含まれることが多い。重要なビジュアルは DownloadFile で
`output/images/{platform}-{slug}.png` に保存する。
## 終了 / 遷移方法
- **次の analyze へ**: `transition({next_step: "analyze"})`
- **追加収集のため同じ gather を続行**: `transition({next_step: "gather"})`
- **対象が曖昧で確認が必要**: `complete({status: "needs_user_input", missing_info: "...", why_no_default: "..."})`
- **技術的失敗で打ち切り**: `complete({status: "aborted", abort_reason: "..."})`
allowed_tools: [XSearch, XUserPosts, XPostDetail, XTimeline, XFetchCardMedia, BrowseWeb, WebFetch, WebSearch, Read, Write, Edit, Glob, Grep, DownloadFile, SearchKnowledge, ListNamespaces, ListDocuments, SearchNotes, ReadNote, 'mcp__*']
default_next: analyze
rules:
- condition: 追加収集が必要別のSNS、追加クエリ等
next: gather
- condition: 十分な情報を収集した
next: analyze
- name: analyze
edit: true
persona: analyst
instruction: |
output/raw/ の収集データを読み込み、分析してレポートを作成する。
手順:
1. Glob で output/raw/ 内のファイル一覧を確認
2. 各ファイルを Read で読み込む
3. 重要な意見・トレンド・共通見解を抽出
4. ポジティブ/ネガティブな意見を分類
5. output/report.md にレポートを書き出す
## レポートの構成
- トピック概要
- SNS 別の主な意見X / Reddit / HN それぞれ)
- 共通する見解・分岐する意見
- まとめ
## 画像の活用
output/images/ に画像がある場合は必ずレポートに埋め込む:
`![説明](./images/ファイル名.png)`
情報が不足している場合は gather に戻る(追加の検索クエリを明示すること)。
verify からの差し戻しがある場合は、指摘された不足点・期待する修正を優先的に解消すること。
allowed_tools: [Read, Write, Edit, Glob, Grep, WebSearch, WebFetch, DownloadFile, BatchReviewTextWithLLM, MergeReviewedResults, SearchKnowledge, ListNamespaces, ListDocuments, SearchNotes, ReadNote, 'mcp__*']
default_next: verify
rules:
- condition: output/report.md にレポートを書き出した
next: verify
- condition: 情報が不十分で追加収集が必要
next: gather
- name: verify
edit: false
persona: supervisor
instruction: |
output/ のレポートを確認する。
確認手順:
1. Glob で output/ 内のファイル一覧を確認する
2. output/report.md がなければ「不足がある」と判断し analyze に差し戻す
3. ファイルがあれば Read で内容を確認し、網羅性・正確性・分かりやすさをチェックする
4. 不足があれば、`transition({next_step: "analyze", summary: ...})` で差し戻す。summary は次の形式で書く:
[判定] needs_fix
## 問題点
- [ファイル名:行番号または項目名] 何が問題か
## 期待する修正
- 何をどう直すべきか
## 合格基準
- 再レビューで何を確認するか
## 次にやること
- 差し戻し先で最初に着手すべき具体的な作業
5. summary は抽象論で終えず、具体的な不足点・期待する修正内容を必ず含める
追加チェック(画像):
- output/images/ に画像があるのにレポートに `![` が一つもない場合、
画像埋め込み漏れとして analyze に差し戻す
## チェックシート確認
GetChecklist でチェックシートが存在する場合、全アイテムが完了done/failed/skippedしていることを確認する。
remaining が 0 でないまま完了してはならない。
## 合格時のユーザーへの返答complete ツール)
output/ の内容で合格と判断したら、`complete({status: "success", result: ...})` を呼ぶ。
result はそのままユーザーに表示される最終回答。output/report.md を Read で読み、その内容をベースに整形する。
- 「output/xxx.md を確認してください」のようなファイル参照ではなく、内容そのものを回答として返すこと
- 【厳守】「✅ 完了」「レポートを作成しました」「確認しました」等のステータス表示・メタ説明は一切書かない。1行目からいきなり本題の内容を書き始めること
- 調査結果・発見・結論を会話調で分かりやすく伝える
- 表・リスト・見出しなど Markdown 書式を活用して読みやすくする
## 終了方法のまとめ
- 合格: `complete({status: "success", result: "ユーザー向け最終回答"})`
- 修正必要: `transition({next_step: "analyze", summary: "差し戻し指摘"})` (上記形式で)
- 技術的失敗: `complete({status: "aborted", abort_reason: "..."})`
allowed_tools: [Read, Glob, Grep]
default_next: COMPLETE
rules:
- condition: output/ にファイルがない、または内容に不足がある
next: analyze