关于 meeting-brief-generator
meeting-brief-generator 为销售或业务拓展会面研究公司并生成一页会前简报。它以 Tavily 搜索结果为依据,通过 Gemini 汇总,也可选择保存到 Notion。
主要功能
- 01通过 Tavily 研究公司
- 02搜索新闻、产品、技术等信息
- 03使用 Gemini 汇总会前简报
- 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 综合生成一页会前简报。也可以选择保存到 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)
- 会议日期
可选(缺少时不应阻止后续流程):
- 联系人姓名和职务
- 会议类型(需求沟通、演示、跟进、季度业务回顾)
- 用户希望讨论的具体主题或目标
如果用户提供了公司 URL 或域名,请用它来提高 Tavily 查询的精准度(例如,使用 site:example.com,或在搜索词中加入域名)。
步骤 3:使用 Tavily 调研
按顺序运行以下搜索。每项搜索对应简报的一个部分。保存每项搜索的热门结果(标题、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
}'
如果提供了联系人姓名,再运行两项搜索:
搜索 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 dash
- 没有使用禁用词
- 简报少于 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。