meeting-brief-generator について
meeting-brief-generatorは、営業や事業開発の会議に向けて企業を調査し、1ページの事前ブリーフを作成します。Tavilyの検索結果をGeminiでまとめ、任意でNotionに保存できます。
主な機能
- 01Tavilyによる企業調査
- 02ニュースや製品、技術などの検索
- 03Geminiによるブリーフ作成
- 04出典の提示と情報不足の明記
- 05任意のNotion保存
活用シーン
- 01企業との会議の準備
- 02営業電話前に最近の企業ニュースを確認
- 03担当者との会議向けに出典付きブリーフを作成
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ varnan-tech/ opendirectory --skill meeting-brief-generatorインストール後、Claude Code で/meeting-brief-generatorを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
.env.exampleREADME.mdevals/evals.jsonreferences/brief-format.mdoutput-template.md詳細
ミーティング概要の作成
会社名と任意の連絡先を入力します。Tavily を使って会社を調査し、Gemini で1ページの事前ミーティング概要をまとめます。必要に応じて Notion に保存できます。
重要なルール: 詳細を捏造しないでください。概要に記載する事実、数値、主張はすべて、Tavily の検索結果に基づいている必要があります。検索データがないセクションには「公開情報が限られています。」と記載してください。資金調達額、従業員数、製品の詳細を決して捏造しないでください。
ステップ 1:セットアップの確認
必須の環境変数を確認します。
echo "TAVILY_API_KEY: ${TAVILY_API_KEY:+set}"
echo "GEMINI_API_KEY: ${GEMINI_API_KEY:+set}"
echo "NOTION_TOKEN: ${NOTION_TOKEN:-not set}"
echo "NOTION_DATABASE_ID: ${NOTION_DATABASE_ID:-not set}"
TAVILY_API_KEY が設定されていない場合: 停止します。ユーザーに次のように伝えてください:「TAVILY_API_KEY が必要です。app.tavily.com で取得し、.env ファイルに追加してください。」
GEMINI_API_KEY が設定されていない場合: 停止します。ユーザーに次のように伝えてください:「GEMINI_API_KEY が必要です。aistudio.google.com で取得し、.env ファイルに追加してください。」
NOTION_TOKEN または NOTION_DATABASE_ID が設定されていない場合: 続行します。概要はテキストのみで出力します。Notion への保存はスキップします。
入力があることを確認します。 ユーザーは最低限、会社名を指定する必要があります。指定されていない場合は、「どの会社とのミーティングですか?」と尋ねてください。
ステップ 2:情報の収集
以下の情報を収集します。不足している情報だけを尋ねてください。
必須:
- 会社名(ドメインまたは URL が指定されている場合は、それでも可)
- ミーティングの日付
任意(不足していても進行を妨げない):
- 連絡先の氏名と役職
- ミーティングの種類(ディスカバリー、デモ、フォローアップ、QBR)
- ユーザーが取り上げたい具体的なトピックや目標
ユーザーが会社の URL またはドメインを指定した場合は、Tavily のクエリをより正確にするために使用してください(例:site:example.com、または検索語にドメインを含める)。
ステップ 3:Tavily で調査
以下の検索を順番に実行します。それぞれ概要の1つのセクションを対象とします。各検索の上位結果(タイトル、URL、コンテンツの抜粋、スコア)を保存してください。
スコアが 0.5 以上の結果を使用します。条件を満たす結果がない検索については、そのセクションに「公開情報が限られています。」と記載してください。
検索 1:会社概要
curl -s -X POST "https://api.tavily.com/search" \
-H "Content-Type: application/json" \
-d '{
"api_key": "'"$TAVILY_API_KEY"'",
"query": "\"COMPANY\" overview founded employees headquarters",
"search_depth": "advanced",
"max_results": 5,
"include_answer": true
}'
検索 2:最近のニュース(過去 30 日間)
curl -s -X POST "https://api.tavily.com/search" \
-H "Content-Type: application/json" \
-d '{
"api_key": "'"$TAVILY_API_KEY"'",
"query": "\"COMPANY\" news announcement",
"search_depth": "advanced",
"max_results": 5,
"include_answer": true,
"topic": "news",
"time_range": "month"
}'
検索 3:技術スタック
curl -s -X POST "https://api.tavily.com/search" \
-H "Content-Type: application/json" \
-d '{
"api_key": "'"$TAVILY_API_KEY"'",
"query": "\"COMPANY\" technology stack engineering infrastructure tools",
"search_depth": "advanced",
"max_results": 5,
"include_answer": true
}'
検索 4:製品と価格
curl -s -X POST "https://api.tavily.com/search" \
-H "Content-Type: application/json" \
-d '{
"api_key": "'"$TAVILY_API_KEY"'",
"query": "\"COMPANY\" product features pricing use case",
"search_depth": "advanced",
"max_results": 5,
"include_answer": true
}'
検索 5:競合他社
curl -s -X POST "https://api.tavily.com/search" \
-H "Content-Type: application/json" \
-d '{
"api_key": "'"$TAVILY_API_KEY"'",
"query": "\"COMPANY\" competitors alternatives vs",
"search_depth": "advanced",
"max_results": 5,
"include_answer": true
}'
検索 6:資金調達と成長
curl -s -X POST "https://api.tavily.com/search" \
-H "Content-Type: application/json" \
-d '{
"api_key": "'"$TAVILY_API_KEY"'",
"query": "\"COMPANY\" funding raised valuation growth",
"search_depth": "advanced",
"max_results": 5,
"include_answer": true
}'
連絡先の氏名が指定されている場合は、さらに2件検索します:
検索 7:連絡先のプロフィール
curl -s -X POST "https://api.tavily.com/search" \
-H "Content-Type: application/json" \
-d '{
"api_key": "'"$TAVILY_API_KEY"'",
"query": "\"CONTACT_NAME\" \"COMPANY\" role title",
"search_depth": "advanced",
"max_results": 5,
"include_answer": true
}'
検索 8:連絡先の経歴
curl -s -X POST "https://api.tavily.com/search" \
-H "Content-Type: application/json" \
-d '{
"api_key": "'"$TAVILY_API_KEY"'",
"query": "\"CONTACT_NAME\" background career LinkedIn",
"search_depth": "advanced",
"max_results": 5,
"include_answer": true
}'
ステップ 4:Gemini で情報をまとめる
references/brief-format.md を最後まで読みます。references/output-template.md を読み、そのテンプレートを使用します。
Gemini へのリクエストを一時ファイルに書き込みます。
cat > /tmp/meeting-brief-request.json << 'ENDJSON'
{
"system_instruction": {
"parts": [{
"text": "You are a GTM research analyst preparing a 1-page pre-call brief for a sales or business development meeting. Rules: Every claim must cite a source URL from the provided research. Use the format 'Because [finding from research], mention [point] to [goal]' for talking points. No invented data. If a section has no research data, write 'Limited public information found.' No em dashes. No banned words. Under 400 words total. The brief must be scannable in 3 minutes."
}]
},
"contents": [{
"parts": [{
"text": "RESEARCH_RESULTS_AND_INSTRUCTIONS_HERE"
}]
}],
"generationConfig": {
"temperature": 0.3,
"maxOutputTokens": 2500
}
}
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/meeting-brief-request.json \
| python3 -c "import sys,json; d=json.load(sys.stdin); print(d['candidates'][0]['content']['parts'][0]['text'])"
RESEARCH_RESULTS_AND_INSTRUCTIONS_HERE を以下の内容に置き換えます。
- Tavily の検索結果すべて(各結果のタイトル、URL、コンテンツの抜粋)
- output-template.md に記載された概要のテンプレート構成
- 会社名、連絡先の氏名(指定されている場合)、ミーティングの日付、ミーティングの種類(指定されている場合)
ステップ 5:品質の自己確認
提示する前に確認します。
- データを捏造していない。すべての事実に Tavily の検索結果のソース URL がある。
- トーキングポイントが「[調査結果]を踏まえ、[目標]のために[ポイント]に触れる」の形式になっている。
- どの行にも em ダッシュを使っていない。
- 禁止語を使っていない。
- 概要が 400 語未満である。
- 連絡先が指定されていない場合、「意思決定者」セクションに「未指定」と記載している。
- データがないセクションには推測ではなく「公開情報が限られています。」と記載している。
- 未解決の質問が一般的なものではなく、この会社に即した具体的な内容になっている。
違反があれば、提示する前に修正します。
ステップ 6:出力または Notion に保存
概要全体をコードブロックに入れて提示します。
NOTION_TOKEN と NOTION_DATABASE_ID の両方が設定されている場合は、「この概要を Notion に保存しますか?」と尋ねます。
確認を得たら:
cat > /tmp/notion-brief-payload.json << 'ENDJSON'
{
"parent": { "database_id": "NOTION_DATABASE_ID_HERE" },
"properties": {
"Name": {
"title": [{ "text": { "content": "Meeting Brief: COMPANY, DATE" } }]
},
"Date": {
"date": { "start": "YYYY-MM-DD" }
}
},
"children": [
{
"object": "block",
"type": "paragraph",
"paragraph": {
"rich_text": [{ "type": "text", "text": { "content": "BRIEF_CONTENT_HERE" } }]
}
}
]
}
ENDJSON
curl -s -X POST "https://api.notion.com/v1/pages" \
-H "Authorization: Bearer $NOTION_TOKEN" \
-H "Content-Type: application/json" \
-H "Notion-Version: 2022-06-28" \
-d @/tmp/notion-brief-payload.json
投稿後:「概要を Notion に保存しました。データベースを確認してください。」
Notion が設定されていない場合は、概要のみを提示します。Notion については言及しないでください。