Token导航 LogoToken导航

Agent Skill · 研究检索

meeting-prep(会议准备)

meeting-prep 用于查找、检索和筛选相关信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要根据关键词、任务场景或来源线索快速定位候选结果时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

meeting-prep 是研究检索类 Agent Skill,可用宿主为 Codex、Claude、Cursor、Gemini CLI,通过GitHub 仓库获取,权限为调用外部服务;许可证信息还不明确,第三方扫描有提醒项,按安装量在研究检索类的 73,675 个 Skill 里排第 65,896。

总安装 272周安装 11GitHub Stars 106下载 85核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
unknown

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:meeting-prep(会议准备)
来源仓库:https://github.com/mgonto/executive-assistant-skills
仓库路径:skills/meeting-prep
安装命令:
npx skills add https://github.com/mgonto/executive-assistant-skills --skill meeting-prep
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/mgonto/executive-assistant-skills --skill meeting-prep

这个 Skill 是做什么的

研究检索类 Skill 主要解决「找资料、核对事实、把来源整理清楚」的问题,通常会让助手先检索再总结。

meeting-prep 用于查找、检索和筛选相关信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要根据关键词、任务场景或来源线索快速定位候选结果时使用。适用于会议准备、资料收集和背景调研等研究检索类任务。通过关键词、任务场景或来源线索进行快速定位和结果筛选。

安装命令:npx skills add https://github.com/mgonto/executive-assistant-skills --skill meeting-prep 建议确认权限范围和维护状态,注意是否会触发联网或文件读写操作。

来源仓库内路径:skills/meeting-prep

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 Codex、Claude、Cursor、Gemini CLI;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 npx skills add https://github.com/mgonto/executive-assistant-skills --skill meet…;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    它需要调用外部服务,先在测试目录或测试账号里跑,确认没问题再放到正式项目。

常见问题

6 条

meeting-prep 怎么安装?

在终端执行 npx skills add https://github.com/mgonto/executive-assistant-skills --skill meeting-prep。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

meeting-prep 支持哪些 AI 工具?

公开资料标注支持 Codex、Claude、Cursor、Gemini CLI。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

meeting-prep 需要什么权限?

权限级别是调用外部服务。该 Skill 可能调用第三方服务、云服务或外部模型 API,使用前需要确认账号、额度、数据发送范围和服务条款。

meeting-prep 是免费的吗?

公开资料没有标注明确许可证,收费和商用限制都无法确认。正式使用前请到来源仓库核对授权说明。

meeting-prep 用的人多吗?

公开数据是累计安装 272 次,近一周安装 11 次,下载 85 次,GitHub 106 星。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

meeting-prep 安全吗?

第三方扫描有提醒项,说明存在需要人工确认的行为。安装前请打开源码看清它读了什么、联网到哪里。

值得选的地方和要先想清楚的地方

值得选的地方

  • 同时适配 4 种工具,换客户端不用重新找替代品。

先想清楚的地方

  • 许可证没有明确标注,能不能商用、能不能再分发都不确定。
  • 第三方扫描存在提醒项或未通过项,需要人工逐条确认。
  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 Codex,想直接扩展它能力的人。
  • 需要处理研究检索类任务、又不想每次都手写提示词的人。

不太适合

  • 需要明确授权才能用到公司项目里的场景。
  • 需要厂商级技术支持和 SLA 的生产系统。

研究检索类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
find-skills

寻找技能 · Codex、Claude

31,199,81316,486操作浏览器MIT有提醒
self-improving-agent

自我改进 Agent · OpenClaw

16,464,0023,396接触敏感数据MIT-0通过
soultrace

灵魂追踪 · Codex、Claude

7,588,94412需要联网未明确有提醒
self-improving

自我完善 · OpenClaw

6,829,2841,046需要联网MIT-0通过
microsoft-foundry

微软代工厂 · Codex、Claude

6,614,144764调用外部服务未明确有提醒
meeting-prep

会议准备 · 本页

272106调用外部服务未明确有提醒

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

Daily Meeting Prep

Config — read before starting

Read ../config/user.json (resolves to ~/executive-assistant-skills/config/user.json). Extract and use throughout:

  • name, full_name — user's name
  • primary_email, work_email — Gmail accounts to check
  • whatsapp — WhatsApp number for delivery
  • timezone — IANA timezone (e.g. America/Argentina/Buenos_Aires)
  • slack_username — Slack DM target
  • workspace — absolute path to OpenClaw workspace (e.g. /home/user/.openclaw/workspace)

Do not proceed until you have these values.

Debug Logging (MANDATORY)

Read ../config/DEBUG_LOGGING.md for the full convention. Use python3 {user.workspace}/scripts/skill_log.py meeting-prep <level> "<message>" ['<details>'] at every key step. Log BEFORE and AFTER every external call (gog, mcporter, Granola, web search). On any error, log the full command and stderr before continuing.

Scope

  • Timezone: {user.timezone}
  • Calendars: primary of {user.primary_email} AND {user.work_email}
  • Today's meetings only

Timezone note: Use explicit ART-bounded ISO8601 timestamps for calendar queries, NOT --date. Example: gog calendar list primary --account <email> --from "2026-03-03T00:00:00-03:00" --to "2026-03-04T00:00:00-03:00" --json. The --date flag uses UTC boundaries which misaligns with ART.

  • ALL meetings with attendees — both external and internal
  • Skip personal/solo events with no attendees (e.g. "Personal Trainer", "Golf", all-day reminders)

Meeting types

External meetings (attendees outside your email domains)

Full research brief (email context, Granola, LinkedIn, company research) — see below.

Internal meetings (all attendees from your email domains: hypergrowthpartners.com, growth.li)

Lighter brief — no LinkedIn/company research needed, but still include:

  • Attendee list
  • Granola context from previous instances of this recurring meeting
  • Recent email threads related to the meeting topic/agenda
  • Any open action items from last time
  • Format: same structure but skip LinkedIn/company sections

Recurring collaborative meetings (e.g. podcasts, content sessions with external co-hosts)

These are external meetings — give them full briefs. Don't skip recurring meetings just because they're familiar.

Error handling

  • If gog calendar fails for one account: continue with the other account, note "⚠️ [account] calendar unavailable" in output.
  • If Granola/Grain fails: continue without meeting history, note it per meeting.
  • If WhatsApp delivery fails: attempt Slack delivery. If both fail, save to state file and report error.

For each meeting

1. Event basics

Title, local time ({user.timezone}), attendees.

RSVP status (MANDATORY): For each attendee, check responseStatus from the calendar event:

  • accepted → no flag needed
  • needsAction → flag as "⚠️ hasn't responded"
  • declined → flag as "❌ declined"
  • tentative → flag as "❓ tentative"

If ANY non-organizer external attendee has NOT accepted (needsAction, tentative, or declined), add a visible line in the brief:

⚠️ *RSVP:* hasn't accepted yet

This is informational — it doesn't mean they won't join, but it's useful to know ahead of time, especially for first calls or important meetings.

2. Email context (90-day lookback, with historical fallback)

Search Gmail both accounts for exchanges with attendees. For EACH attendee, search using these strategies in order:

  1. Email address (primary — from calendar invite): from:<email> OR to:<email>
  2. Full name: "firstname lastname"
  3. First name + "intro": "intro firstname" (catches informal intro subjects)
  4. First name + company: "firstname companyname"

The attendee's email from the calendar invite is the most reliable identifier — always start there.

Intro discovery (after general email search): 5. Search for intro emails involving the attendee: subject:intro <email>, subject:intro <firstname>, subject:introduction <email> 6. Also check threads where a third party CC'd/introduced the attendee

Recent email context (after intro discovery): 7. Pull the most recent email threads with this attendee (by email address) to surface any recent updates, asks, or context leading into today's call

Historical fallback (if no results from 90-day search): 8. Run a broader search with NO date filter: from:<email> OR to:<email> — this catches long-standing relationships where the last email was months/years ago. If older threads exist, this is NOT a first call — note the relationship history.

  • First call vs follow-up? Base this on ALL email history found (including historical), not just 90-day window
  • If first call: MUST include "who introduced + when" (date) if found in email; if not found, explicitly say "No intro trail found in email"
  • If follow-up: extract updates since last call
  • If email contains a concrete commercial trigger (pricing, deliverables, scope, budget, urgency, timeline, decision-maker request), include it explicitly in the brief

3. Granola context

Search by ATTENDEE, not by meeting title. The same recurring meeting may have different titles week to week. Always search by the attendee's name or email to find all past meetings with them.

# Primary: search by attendee name
mcporter call granola.query_granola_meetings query="meetings with [attendee full name]"

# Fallback: search by company if attendee name yields no results
mcporter call granola.query_granola_meetings query="meetings with [company name]"

Cross-check with list_meetings: If the query results seem stale (oldest match is weeks old but you expect more recent), also run list_meetings for last_week or this_week and scan the participant lists for the attendee's email or name. This catches meetings where the title doesn't mention the attendee or company.

  • Recent (< 3 weeks): Provide a richer summary (not one-liner): decisions made, key tensions, explicit action items, owners, and unresolved questions
  • Older (3+ weeks): Broader context — relationship history, past decisions, recurring themes
  • No attendee match but company match exists: Use company-level context and label it clearly as company-level
  • No results / first meeting: Note that, provide email context instead
  • Preserve citation links [[N]](url)
  • Include a short explicit line: "Why this meeting now" based on prior action items or current email trigger
  • Exact name matching: When attributing Granola results to an attendee, verify BOTH first AND last name match exactly. Different people can share a first name — never assume a match based on first name alone.
  • Auth failure: If Granola returns an auth error, run mcporter auth granola --reset and retry once. If still failing, note "⚠️ Granola unavailable" and continue without it.
  • Empty summary: If Granola returns a meeting record but with no/empty summary, note "Previous meeting found but no summary available" — don't silently skip it.

4. LinkedIn research

  • Search: "[attendee name] [company] LinkedIn"
  • Extract: current role, background, recent posts/activity

5. Company research

  • Search: "[company] recent news"
  • Search: "[company] funding crunchbase" (if startup/VC relevant)
  • Extract: company stage, announcements, what they do

Research rules

Read {user.workspace}/style/MEETING_PREP_RULES.md for additional research steps.

Output format

Send via WhatsApp ({user.whatsapp}) AND Slack (DM to {user.slack_username}). One message per meeting, chronological order, is mandatory.

Also send to Chief of Staff: After sending all meeting briefs, upload the markdown brief file ({user.workspace}/state/meeting-prep-YYYY-MM-DD.md) to {user.chief_of_staff.name}'s Slack DM. Use the Slack API files.upload (or files.uploadV2):

curl -s -F file=@{user.workspace}/state/meeting-prep-YYYY-MM-DD.md \
  -F channels={user.chief_of_staff.slack_dm_channel} \
  -F title="Meeting Prep — <date>" \
  -F initial_comment="📋 *Meeting Prep — <day>*" \
  -H "Authorization: Bearer <bot_token>" \
  https://slack.com/api/files.upload

Never collapse into a single summary block. The user expects one standalone message per meeting. Send each meeting brief as a separate message to BOTH WhatsApp and Slack. If one channel fails, still deliver to the other.

Start with a short intro: "📋 *MEETING PREP —* — meetings (external, internal)"

Then one message per meeting in this format — use bold subsections and blank lines between each section for readability:

*<number>. <Name/Company> — <local time>*

*Who:* <Role>, <Company> (<location>). <What the company does, 1 sentence>. <Funding/stage if relevant>.

*Context:* <First call vs follow-up>. <If first call: who intro'd + when (date); if unavailable: "No intro trail found in email">.

*Email history:* <Key email context — include important commercial/decision triggers when present (pricing, scope, deliverables, urgency, budget, decision-maker request)>.

*Granola:* <Richer recap: key decisions, action items, owners, unresolved questions, and why a follow-up was needed. If no attendee notes, use company-level notes and label it. Or "No previous meetings found in Granola">.

*Why this meeting now:* <One sentence grounded in prior action items and/or current email trigger>.

*Focus areas:* <ONLY items derived from prior action items and current email trigger — not generic strategy prompts>.

*Links:* <LinkedIn, company site, Crunchbase>

Each section on its own paragraph (blank line before each bold label). Keep it concise but well-structured — readability over density.

If a meeting already happened, prefix with ✅ and keep brief. If there's a schedule conflict, flag with ⚠️.

Save full brief

Save the full detailed brief to {user.workspace}/state/meeting-prep-YYYY-MM-DD.md and also send it as a file attachment via WhatsApp.

⚠️ CRON CREATION (CRITICAL — DO NOT SKIP)

This section is NON-OPTIONAL. Cron creation MUST happen for every run with meetings. If you run out of context or time before completing this section, the entire run is a FAILURE.

Execution order: Create ALL crons IMMEDIATELY after saving the brief file — BEFORE the assertions step. Do not defer cron creation to "after everything else."

Log: python3 {user.workspace}/scripts/skill_log.py meeting-prep INFO "Starting cron creation for N meetings"

Pre-meeting reminders

After generating all briefs, create a one-shot cron job for EACH meeting that fires 5 minutes before start time. The cron job should:

  1. Read {user.workspace}/state/meeting-prep-YYYY-MM-DD.md
  2. Find the section for that specific meeting
  3. Resend the FULL formatted brief for that meeting (same format as the original WhatsApp message — bold subsection labels, blank lines, links, etc.)
  4. Prefix with "⏰ *5 min reminder*\n\n" then the full brief

Hard formatting contract (no exceptions):

  • The reminder body must be copied verbatim from {user.workspace}/state/meeting-prep-YYYY-MM-DD.md for that meeting block.
  • Do NOT rewrite, summarize, translate, normalize, or reformat any part of that block.
  • Keep language exactly as generated in the source brief.
  • Only allowed change is adding the ⏰ *5 min reminder* prefix.

Use openclaw cron add with --at set to 5 min before meeting time, --delete-after-run, --no-deliver, --channel whatsapp, and --to {user.whatsapp}. The --no-deliver flag prevents the announce mechanism from sending a separate message — the task sends WhatsApp directly.

Hard requirement: after creating jobs, run openclaw cron list and verify the expected number of pre-meeting- jobs for today. If count is lower than expected, immediately retry creation and report failure explicitly.

Log each created cron: python3 {user.workspace}/scripts/skill_log.py meeting-prep INFO "Created pre-meeting cron" '{"meeting": "<name>", "fires_at": "<time>"}'

Post-meeting action items + drafts

After generating all briefs, create a one-shot cron job for EACH meeting that fires 10 minutes after the meeting END time. The cron task should reference the action-items-todoist skill:

Task: "Read and follow ~/executive-assistant-skills/action-items-todoist/SKILL.md. Process ONLY the meeting titled '' that ended around. Send results to WhatsApp ({user.whatsapp})."

Use openclaw cron add with --at set to 10 min after meeting end time, --delete-after-run, --session isolated, --timeout-seconds 1200, --no-deliver, --channel whatsapp, and --to {user.whatsapp}. Name them post-meeting-<short-name>.

Hard requirement: after creating jobs, run openclaw cron list and verify the expected number of post-meeting- jobs for today. If count is lower than expected, immediately retry creation and report failure explicitly.

Log each created cron: python3 {user.workspace}/scripts/skill_log.py meeting-prep INFO "Created post-meeting cron" '{"meeting": "<name>", "fires_at": "<time>"}'

Log final count: python3 {user.workspace}/scripts/skill_log.py meeting-prep INFO "Cron creation complete" '{"pre_meeting": N, "post_meeting": M, "expected": E}'

If cron count doesn't match expected: Log ERROR and send WhatsApp alert: "⚠️ Meeting prep: only created X/Y pre-meeting and A/B post-meeting crons. Some reminders/action-items may be missing."

Deduplication (MANDATORY)

After processing, the cron MUST append the meeting title to {user.workspace}/state/processed-meetings-YYYY-MM-DD.json (array of meeting titles already processed). This lets the end-of-day catch-all skip them.

Before creating ANY Todoist task, the cron MUST:

  1. Read {user.workspace}/state/processed-meetings-YYYY-MM-DD.json — if this meeting is already listed, SKIP entirely (another cron already handled it)
  2. Fetch all open Todoist tasks and check for duplicates by matching task content against the new task intent (same person + same action = duplicate)
  3. If a matching task already exists, do NOT create a duplicate — skip it silently

This prevents the scenario where a post-meeting cron and the daily end-of-day cron both process the same meeting and create duplicate tasks.

Sanity checks

  • Calendar is source of truth for meeting count: Cross-reference email threads with the actual calendar events. If an invite was moved/rescheduled, it's still ONE meeting — don't count it as multiple. Check the calendar event ID, not email threads, to determine unique meetings.
  • First call vs follow-up: Verify by checking if there is an ACTUAL past Granola meeting with this specific person (exact name match). Rescheduled invites or multiple scheduling emails do NOT make it a follow-up. Only a previously held meeting does.
  • Message count check (MANDATORY): Number of sent meeting-brief messages must equal number of meetings with attendees (external + internal). If not equal, send missing meeting messages immediately.
  • Cron count check (MANDATORY): Number of pre-meeting- jobs and post-meeting- jobs created for today must each equal number of meetings with attendees (external + internal).

Automated assertions (MANDATORY)

After sending all meeting messages and creating all one-shot jobs, run:

python3 {user.workspace}/scripts/meeting_prep_assertions.py \
  --date YYYY-MM-DD \
  --brief-file {user.workspace}/state/meeting-prep-YYYY-MM-DD.md
  • If exit code is 0: proceed normally.
  • If exit code is non-zero: create missing cron jobs and/or send missing meeting messages, then re-run up to 2 times. If still failing after 2 retries, report the assertion output in your completion note and proceed.
  • Include the assertion result summary in your final internal completion note.

Meeting type-specific enrichment

Deal flow calls (new companies, potential clients/advisory)

  • Extract MORE detail from email threads: what the company does, product description, funding status, round size, investors, ARR if mentioned
  • Search Crunchbase/web for latest funding info if not in emails
  • Include company stage, team size, and key metrics when available

Investor/VC calls

  • Include link to the fund's profile page (website, Crunchbase, or AngelList)
  • Note their investment thesis, typical check size, and stage focus if findable
  • Helps identify fit before the call

Scheduling difficulty flag

  • If a meeting took a long time to schedule (intro was weeks/months before the actual meeting), flag it: "⏳ *Scheduling note:* Intro came in, took <N weeks/months> to get on the books."
  • If the meeting was rescheduled multiple times, note how many times
  • This provides useful context on the relationship dynamic and signals the meeting may be higher-stakes

Rules

  • Executive style, concise
  • No meetings with attendees today → NO_REPLY
  • Missing data → state briefly ("No email history found"), don't invent
  • Never silently omit a data source — if something returned nothing, say so
  • No cross-contamination: Each meeting brief must only include information verified for THAT specific attendee. Do not mix up intro sources, email threads, or Granola notes between different meetings. Double-check that every fact in a brief belongs to the correct person.
  • No generic focus areas: Focus must be anchored in (a) explicit prior action items from Granola and/or (b) explicit email trigger for this meeting. If neither exists, say so and use a discovery focus.

平台分布

Codex

36.78%
按下载量换算31

Claude

30.76%
按下载量换算26

Cursor

20.38%
按下载量换算17

Gemini CLI

8.99%
按下载量换算8

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

可疑

权限和风险

调用外部服务

该 Skill 可能调用第三方服务、云服务或外部模型 API,使用前需要确认账号、额度、数据发送范围和服务条款。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。来源安全扫描存在提醒或未通过项,安装前请自行复核。目前只有一个公开来源,建议同时核对源仓库。

继续浏览同类 Skills