Panel TR(合成フォーカスグループ)
何に役立つか: 実際のユーザーに触れる前に問題を洗い出す——理解されない提案、読まれない小さな文字、最初の3秒で誰も止まらないオープニング、特定の年齢層を遠ざける要素など。そうではないもの: 販売予測や市場調査。数値は合成回答の集計であり、決して「市場の何%」ではありません。
バージョン(EDITIONファイル):Lite = 10の視聴者カード、単一選択、すぐに使える簡易レポート。
Pro = 30の視聴者カード+24の購入者カード(10セグメント)、A/Bモード、セグメント表とグラフ、別レポートライター。
Pro専用の手順は以下に (Pro) と記載。Liteではスクリプトがそれらを丁寧に拒否します。
ファイル
SKILL.md このファイル
EDITION lite | pro
config.example.yaml コピー → config.yaml(パス、ブラウザ、ベースレート)。絶対パスは不要
requirements.txt PyYAML, Pillow, playwright(サイトモード用)
personas/viewers.yaml 視聴者カード(Lite 10、Pro 30)
personas/buyers.yaml 購入者カード(Proのみ、24)
sources/index.yaml + *.md カードが参照する公開情報の要約(TÜİK、DataReportal、...)
prompts/persona_batch.md グループサブエージェントへの指示(panel.py が plan を埋める)
prompts/aggregator.md (Pro) レポートライターへの指示(panel.py が report-prompt を埋める)
scripts/make_stimulus.py 動画/サイト/投稿 → 静止画、スクリーンショット、stimulus.md
scripts/panel.py doctor | validate | cite | init-run | plan [--dry-run] | report-prompt (Pro)
scripts/aggregate.py responses/*.json → 表、グラフ、正直チェック、簡易レポート
examples/demo-kafe-reel/ 架空のカフェのリールを使ったエンドツーエンドの実行例
以下、S = このスキルのフォルダ(通常 ~/.claude/skills/panel-tr)、PY = python3(推奨は S/.venv/bin/python)。実行フォルダは config.yaml 内の runs_dir に作成されます(デフォルトは ~/panel-tr-runs)。
手順
- 初回セットアップ時/問題発生時:
PY S/scripts/panel.py doctor(依存関係、ffmpeg、ブラウザ、バージョン)。 カードを変更した場合:PY S/scripts/panel.py validateがエラー0であること。PY S/scripts/panel.py cite V07はカードとそれが参照する情報源を並べて表示します。 - 実行フォルダ:
RUN=$(PY S/scripts/panel.py init-run --slug kafe-reels-v2)→RUN/inputs/テンプレートが作成されます。 - 入力を記述(
RUN/inputs/)、中立的なトルコ語で、あなた自身のレビューに基づいて:context.txt— ユーザーがこれをどこでどのように見るか(「Reelsのフィードで目にします。共有しているアカウントは@x。説明文はあり/なし」)。共有アカウントは、アプリ上で実際に表示される場合のみ記述。誰が作ったか、何を目的としているか、どのバージョンを好むかは決して書かないでください。onscreen.txt(動画)— 画面上のすべてのテキスト、時間範囲付き、画面上に表示されたままに。audio.txt(動画)— 聞こえるもの、事実として:生音かどのトラックか、何秒からか、会話/効果音の有無、映像と整合しているか。パネリストには「私たちの分析 — あなたはこれを聞いていません」という見出しで表示されます。caption.txt(投稿/リール)— 公開される予定の説明文(あれば)。
- 刺激(選択肢ごとに1つ;A/Bの場合は
stimulus_A、stimulus_B):
動画:0,0/0,5/…/2,5 秒の静止画、その後毎秒+最後のフレーム;PY S/scripts/make_stimulus.py video IN.mp4 RUN/stimulus --onscreen RUN/inputs/onscreen.txt --audio RUN/inputs/audio.txt [--caption RUN/inputs/caption.txt] [--transcript] PY S/scripts/make_stimulus.py site https://ornek.com RUN/stimulus # またはローカルの .html PY S/scripts/make_stimulus.py post a.jpg,b.jpg,c.jpg RUN/stimulus --caption RUN/inputs/caption.txtsheet_00_ilk3sn.jpgと各フレームの下にタイムスタンプが付いた2〜3番のシート;--transcriptは会話がある場合(faster-whisper / openai-whisper がインストールされていれば)テキストを追加。サイト:Playwright Firefox(デフォルト)または WebKit — デスクトップ 1440×900 とモバイル 390×844、最初の画面+全ページを2画面分のチャンクで、さらに見えるテキストも。Chrome / Chromium / Chrome for Testing は決して起動しません。 自分でページを開き、onscreen.txtがフレームと一致することを確認してください。 - パネルを計画:
サイズ:クイックチェック 10人(2×5);フルチェック(Pro)30視聴者(6×5)および/または24購入者(5×~5)。 視聴者選択はInstagramトルコの年齢分布に基づいて重み付け(config:PY S/scripts/panel.py plan --run RUN --panel viewer --n 10 --batches 2 --stimulus RUN/stimulus --context-file RUN/inputs/context.txt [--action "…"] [--seed 7] [--dry-run] PY S/scripts/panel.py plan --run RUN --panel viewer --n 30 --batches 6 … (Pro) PY S/scripts/panel.py plan --run RUN --panel buyer --n 24 --batches 5 --segments kafe_restoran,emlak,… … (Pro) PY S/scripts/panel.py plan … --stimulus-a RUN/stimulus_A --stimulus-b RUN/stimulus_B (Pro, A/B)viewer_age_weights、出典NapoleonCat)、各年齢層から少なくとも1人;約20%の「ターゲット外」ユーザー(--out-share);--local İzmirでその都市のユーザーを優先;--idsで手動選択。各パネルには少なくとも1人の懐疑的/ターゲット外ユーザーが含まれます。 A/B(Pro):選択肢は「選択肢1/2」と表示;奇数のグループは最初にA、偶数のグループは最初にBを表示;キーはplan.jsonのみに保存され、どのプロンプトにも含まれません。 デフォルトのアクション質問が合わない場合は--actionで変更(「このリールを見て、今週末に行きますか?」)。 - グループを実行 — 各グループごとに別々の新しいサブエージェント、すべて並列。 エージェントツールでは汎用エージェントを使用し、フォークは使用しないでください(フォークは私たちのコンテキストと期待を引き継ぎます)。プロンプト:
"Read
<RUN>/batches/batch_NN.mdand do exactly what it says. Write only the JSON file it names." 各サブエージェントは自分のプロンプトファイルと画像のみを見ます。その後、各RUN/responses/batch_NN.jsonファイルが存在することを確認;失敗したグループは同じプロンプトで一度再実行します。 - 集計:
PY S/scripts/aggregate.py RUN --title "…" [--real-people "…"]→RUN/data/panel_data.md、chart_aksiyon.png、chart_ilk3sn.png、all_answers.mdとチェック:スキーマ、根拠(表示されていないフレームへの言及=ユーザーが何かを捏造した)、カードエコー(ユーザーが自分のカードを繰り返した)、単一性(グループ内 vs グループ間の単語重複)。Lite ではここでRUN/PANEL_REPORT.md簡易レポートも作成します。 Pro ではさらに各ディメンションの表とセグメントグラフ(chart_aksiyon_<boyut>.png)およびA/Bの好みを作成します。 - (Pro) レポート:
PY S/scripts/panel.py report-prompt --run RUN --title "…" --real-people "…"→RUN/aggregator_prompt.md。新しいサブエージェントに渡す("Read … and do it") →RUN/PANEL_REPORT.md(クラスタリングされた反論、優先順位付き修正、セグメントコメント)。レポートをall_answers.mdと比較して読むこと(引用は実際のもの、数字は変更されていない必要があります)。 - ユーザーに伝える(トルコ語):数字を使った3〜5行の結果、最初の3つの修正点、正直ボックスの一文、そして実際の3〜5人のユーザーが必要な理由。パネルはユーザーやクライアントの好みを覆しません。
ルール
- まずエビデンス。 各カードの属性は
[ANAHTAR:Fnn](sources/ 内の事実行)または[varsayım]で終わります。panel.py validateはすべての参照をチェックします。現在、属性の約半数が[varsayım]です(性格や好みに関する公開測定データが存在しないため) — レポートはこの割合を表示します。自分の調査を追加するには、sources/以下に "Fnn ..." 行を含む .md ファイルを作成し、sources/index.yamlにキーを追加してください。 - カードにフィクションやマーケティング理論はありません。 カードはユーザーに関する事実(職業、都市、予算、習慣)を保持し、私たちの見解(「最初の2秒が重要」など)は含めません。そうしないと、パネルは私たち自身の信念を反映するだけになります。
- 意図的な多様性: 懐疑論者、価格敏感層、低テクノロジー層、農村部在住者、保守層、Facebook中心の高齢者、ターゲット外ユーザーはそのまま残します。彼らの「ノー」はターゲティング情報です。
- 表示されたものだけを評価。 ユーザーはフレーム、スクリーンショット、画像、そして私たちが書いたテキスト/音声の事実を見ます。動画は視聴しておらず、音声も聞いていません。各回答は≥2フレームに基づきます。評価できないものは
goremedigimフィールドに入ります。音声は常に「私たちの分析」であり、「聞いた」ではありません。 - ブラインドテスト: context/onscreen/audio ファイルには、作成者、「私たちのバージョン」、または期待される回答は含まれません。A/Bラベルはニュートラルで順序はバランスが取れています。
- 丁寧ではなく、キャリブレーション: プロンプトは実際のベースレートを持ちます(config.yaml
calibration;デフォルトは Click Analytic / Socialinsider のエンゲージメント率と Hunter のコールドメール返信率、出典sources/EB_*.md参照)。自分のアカウントの実際のレートを知っている場合はそれを記入してください。過半数が「DMを送る」と言うパネルは、成功ではなくレッドフラグです。 - 独立したコンテキスト: グループごとに1つのサブエージェント;グループ内では各ユーザーが順番に、前のユーザーの文を使用せずに記述されます。aggregate.py が単一性の警告を発した場合は、より小さいグループ(3)で再実行してください。
- 数字はスクリプトが数え、言葉はモデルが書く。 レポートライターは数字を捏造したり、再計算したりできません。
- 正直ボックスはすべてのレポートで必須: 合成 ≠ 市場データ;3〜5人の実際のユーザーで検証(最初の3秒で止まるか?一言で何を伝えているか?その後どうするか?)。
- 回答はトルコ語で、ユーザー自身の言葉で。引用ではトルコ語の İ/ı を保持。
- コスト:グループあたり約6〜8画像;10人の実行 ≈ 2並列サブエージェント;30人の実行 ≈ 6サブエージェント+1レポートライター。 ドラフトにはクイックチェック(10)、最終版にはフルパネル(Pro、24-30)。
- プライバシー:実行フォルダはローカル。クライアントの素材を他の場所にアップロードしません。共有する前に、クライアント名や個人データを含む入力をクレンジングしてください。
出力フォルダ
RUN/inputs/{context,onscreen,audio,caption}.txt
RUN/stimulus[_A|_B]/{stimulus.md,stimulus.json,sheet_*.jpg,frames/|shots/|post/}
RUN/plan.json RUN/batches/batch_NN.md RUN/responses/batch_NN.json
RUN/data/{panel_data.md,panel_data.json,all_answers.md,chart_*.png}
RUN/PANEL_REPORT.md (Lite: 簡易レポート;Pro: レポートライターのレポート、簡易レポートは data/quick_report.md)
RUN/aggregator_prompt.md (Pro)