meeting-prep

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Meeting Prep

会议准备

Prepares comprehensive meeting prep notes for upcoming Cal.com bookings by researching participants and auditing session history from the Obsidian vault.
为即将到来的Cal.com预订会议创建全面的准备笔记,包括调研参会人员并查阅Obsidian知识库中的会议历史记录。

Configuration

配置

All paths and settings are in
config.yaml
next to this file. Read it before executing any steps.
yaml
undefined
所有路径和设置都在本文件旁的
config.yaml
中。执行任何步骤前请先阅读该文件。
yaml
undefined

config.yaml — key fields:

config.yaml — 关键字段:

vault.root # Obsidian vault root vault.meetings # Where meeting notes live vault.people_search_depth # How deep to search for person notes prep_notes.prefix # Filename prefix (default: "prep") prep_notes.type_tag # Frontmatter type value (default: "meeting-prep") calcom.lookahead_days # Default booking lookahead calcom.timezone # Display timezone calcom.time_format # 12h or 24h

**On first run:** Read `config.yaml` from the same directory as this SKILL.md file. Resolve `~` to the user's home directory. Use these values for all path references below — never hardcode paths.
vault.root # Obsidian 知识库根目录 vault.meetings # 会议笔记存储位置 vault.people_search_depth # 人员笔记的搜索深度 prep_notes.prefix # 文件名前缀(默认值:"prep") prep_notes.type_tag # Frontmatter 类型值(默认值:"meeting-prep") calcom.lookahead_days # 默认预订提前查看天数 calcom.timezone # 显示时区 calcom.time_format # 12小时制或24小时制

**首次运行时:** 读取与本SKILL.md文件同目录下的`config.yaml`。将`~`解析为用户主目录。后续步骤中所有路径引用均使用这些值——切勿硬编码路径。

When to Use

使用场景

  • User invokes
    /meeting-prep
  • User asks to prepare for upcoming meetings/sessions/calls
  • User says "who do I have coming up" or "prep for my next session"
  • 用户调用
    /meeting-prep
  • 用户要求为即将到来的会议/会话/通话做准备
  • 用户询问“我接下来要见谁”或“为我的下一场会话做准备”

Arguments

参数

  • No args → prep all bookings in the next
    calcom.lookahead_days
    days
  • Date (
    2026-06-03
    ) → prep bookings on that specific date
  • Name (
    Greg
    ) → prep only bookings with that participant
  • tomorrow
    /
    today
    /
    this week
    → natural date ranges
  • link
    → scan for unlinked prep↔session note pairs and connect them
  • sync
    → reconcile prep notes with Cal.com booking state (cancelled, rescheduled, deleted)
  • status
    → show Dataview-style overview of all prep notes and their link status
  • 无参数 → 为未来
    calcom.lookahead_days
    天内的所有预订做准备
  • 日期(
    2026-06-03
    )→ 为该特定日期的预订做准备
  • 姓名(
    Greg
    )→ 仅为包含该参会人员的预订做准备
  • tomorrow
    /
    today
    /
    this week
    → 自然语言日期范围
  • link
    → 扫描未关联的准备笔记↔会议记录配对并建立关联
  • sync
    → 使准备笔记与Cal.com预订状态(已取消、已重新安排、已删除)保持一致
  • status
    → 以Dataview风格展示所有准备笔记及其关联状态的概览

Workflow

工作流程

Step 0: Load Config

步骤0:加载配置

Read
config.yaml
from the skill directory. Resolve all paths (expand
~
). Store as variables for use in subsequent steps:
VAULT_ROOT     = config.vault.root
MEETINGS_DIR   = config.vault.meetings
PEOPLE_DEPTH   = config.vault.people_search_depth
PREP_PREFIX    = config.prep_notes.prefix
TYPE_TAG       = config.prep_notes.type_tag
LOOKAHEAD      = config.calcom.lookahead_days
TIMEZONE       = config.calcom.timezone
从技能目录读取
config.yaml
。解析所有路径(展开
~
)。将其存储为变量供后续步骤使用:
VAULT_ROOT     = config.vault.root
MEETINGS_DIR   = config.vault.meetings
PEOPLE_DEPTH   = config.vault.people_search_depth
PREP_PREFIX    = config.prep_notes.prefix
TYPE_TAG       = config.prep_notes.type_tag
LOOKAHEAD      = config.calcom.lookahead_days
TIMEZONE       = config.calcom.timezone

Step 1: Fetch Bookings

步骤1:获取预订信息

Load Cal.com MCP tools via ToolSearch (query: "calcom", max_results: 20). Then:
  1. Call
    get_bookings
    to retrieve upcoming bookings (status: accepted) within the target date range
  2. For each booking, call
    get_booking_attendees
    to get the full attendee list — Cal.com bookings can have multiple attendees (e.g., lab sessions, masterminds, group calls)
  3. Filter by arguments if provided (date, name)
  4. If no bookings found, report and stop
通过ToolSearch加载Cal.com MCP工具(查询:"calcom",最大结果数:20)。然后:
  1. 调用
    get_bookings
    获取目标日期范围内的即将到来的预订(状态:已接受)
  2. 对于每个预订,调用
    get_booking_attendees
    获取完整参会人员列表——Cal.com预订可包含多名参会者(例如实验室会议、智囊团会议、群组通话)
  3. 如果提供了参数(日期、姓名),则按参数过滤
  4. 如果未找到任何预订,报告结果并停止

Step 2: Search Vault for Session History

步骤2:在知识库中搜索会议历史

For each unique participant, search
MEETINGS_DIR
for previous session notes:
bash
grep -rl "PARTICIPANT_NAME" $MEETINGS_DIR 2>/dev/null
Read matching files (up to 5 most recent) to extract:
  • Date and duration of each past session
  • Key topics discussed (from headings, summary sections, or transcript excerpts)
  • Any action items or follow-ups mentioned
  • Session source (Fathom, Granola, manual)
Also search for a person note in the vault:
bash
find $VAULT_ROOT -maxdepth $PEOPLE_DEPTH -name "*PARTICIPANT_NAME*" -not -path "*/Meetings/*" 2>/dev/null
针对每位唯一参会者,在
MEETINGS_DIR
中搜索过往会议记录:
bash
grep -rl "PARTICIPANT_NAME" $MEETINGS_DIR 2>/dev/null
读取匹配文件(最多最近5个)以提取:
  • 每场过往会议的日期和时长
  • 讨论的关键主题(来自标题、摘要部分或转录片段)
  • 提及的任何行动项或跟进事项
  • 会议来源(Fathom、Granola、手动记录)
同时在知识库中搜索人员笔记:
bash
find $VAULT_ROOT -maxdepth $PEOPLE_DEPTH -name "*PARTICIPANT_NAME*" -not -path "*/Meetings/*" 2>/dev/null

Step 3: Research Participants (Workflow)

步骤3:调研参会人员(工作流)

Use the Workflow tool to parallelize participant research. Pass
MEETINGS_DIR
and
VAULT_ROOT
via workflow args so subagents know where to search.
For each unique participant, spawn an agent that:
  1. Web-searches the participant's name + company/email domain
  2. Checks LinkedIn profile (via web search, not direct scrape)
  3. Summarizes: role, company, recent activity, mutual context
  4. For returning participants: cross-references with vault history to identify patterns and continuity points
使用工作流工具并行处理参会人员调研。通过工作流参数传递
MEETINGS_DIR
VAULT_ROOT
,以便子Agent知道搜索位置。
针对每位唯一参会者,生成一个Agent执行以下操作:
  1. 网络搜索参会者姓名 + 公司/邮箱域名
  2. 查看LinkedIn资料(通过网络搜索,而非直接爬取)
  3. 总结:职位、公司、近期活动、共同关联背景
  4. 对于回头参会者:与知识库历史记录交叉引用,识别模式和连续性要点

Step 4: Create Prep Notes in Obsidian

步骤4:在Obsidian中创建准备笔记

There are two modes depending on the number of attendees:
  • Solo session (1 attendee): one prep note per session, exactly as described below. Filename:
    YYYYMMDD-$PREP_PREFIX-PARTICIPANT_SLUG.md
  • Group session (2+ attendees): one prep note for the whole session. Filename:
    YYYYMMDD-$PREP_PREFIX-EVENT_SLUG.md
    (where
    EVENT_SLUG
    is the Cal.com event type slug in lowercase kebab-case). The note lists all attendees with brief profiles, and the research section covers all participants.
If a prep note already exists for that date+session, update it instead of creating a duplicate.
根据参会人数分为两种模式:
  • 一对一会议(1名参会者):每场会议对应一份准备笔记,具体如下。文件名:
    YYYYMMDD-$PREP_PREFIX-PARTICIPANT_SLUG.md
  • 群组会议(2名及以上参会者):整场会议对应一份准备笔记。文件名:
    YYYYMMDD-$PREP_PREFIX-EVENT_SLUG.md
    (其中
    EVENT_SLUG
    为Cal.com活动类型的小写短横线格式别名)。笔记中列出所有参会者的简要资料,调研部分涵盖所有参会人员。
如果该日期+会议的准备笔记已存在,则更新笔记而非创建重复文件。

Solo Session Template

一对一会议模板

Use this template:
markdown
---
type: $TYPE_TAG
date: YYYY-MM-DD
participant: "Full Name"
email: email@example.com
event_type: "Cal.com event type name"
duration: X min
time: "HH:MM $TIMEZONE"
zoom_link: "https://..."
status: prep
session_note: ""
tags:
  - $TYPE_TAG
  - SESSION_TYPE
---
使用以下模板:
markdown
---
type: $TYPE_TAG
date: YYYY-MM-DD
participant: "全名"
email: email@example.com
event_type: "Cal.com活动类型名称"
duration: X min
time: "HH:MM $TIMEZONE"
zoom_link: "https://..."
status: prep
session_note: ""
tags:
  - $TYPE_TAG
  - SESSION_TYPE
---

Prep: Full Name — YYYY-MM-DD

准备:全名 — YYYY-MM-DD

Session Info

会议信息

  • Time: HH:MM–HH:MM $TIMEZONE (Day of week)
  • Type: Event type name (X min)
  • Location: Zoom link
  • Participant timezone: Timezone
  • 时间: HH:MM–HH:MM $TIMEZONE(星期X)
  • 类型: 活动类型名称(X分钟)
  • 地点: Zoom链接
  • 参会者时区: 时区

About FIRST_NAME

关于FIRST_NAME

RESEARCH_SUMMARY
调研摘要

Previous Sessions (N total)

过往会议(共N场)

Most Recent: YYYY-MM-DD — Event Type

最近一场:YYYY-MM-DD — 活动类型

KEY_TOPICS_AND_OUTCOMES
关键主题与成果

Earlier Sessions

更早的会议

BRIEF_LIST_WITH_DATES_AND_TOPICS
包含日期和主题的简要列表

Continuity & Follow-ups

连续性与跟进事项

  • Outstanding action items from previous sessions
  • Recurring themes or patterns
  • Progress on previously discussed goals
  • 过往会议中未完成的行动项
  • 重复出现的主题或模式
  • 之前讨论目标的进展情况

Prep Ideas

准备思路

  • Conversation starters from research
  • Topics to revisit based on session history
  • Questions to explore
  • 基于调研的对话开场话题
  • 根据会议历史需要重温的主题
  • 有待探讨的问题

Notes

笔记

Space for pre-meeting thoughts and during-meeting notes
undefined
用于记录会前想法和会中笔记的空间
undefined

Sequential Bookings for the Same Participant

同一参会者的连续预订

When multiple bookings exist for the same participant within the lookahead window (e.g., Jun 3 and Jun 9), sort them by date and handle as follows:
  • First booking: standard prep note, no changes.
  • Second+ booking: the prep note should acknowledge the earlier session:
    • Add
      prior_prep: "[[YYYYMMDD-prep-participant]]"
      to frontmatter, pointing to the earlier prep note
    • Include a ## Prior Session section after Session Info:
      markdown
      ## Prior Session
      A session with FIRST_NAME is scheduled for PRIOR_DATE — it will have happened by the time this session occurs.
      Update this note after the PRIOR_DATE session with fresh context.
    • Keep the full research/history sections but flag them as "will be stale after PRIOR_DATE" so the user knows to revisit
    • The note is still useful as-is for background research, but action items and continuity will need a post-session refresh
For first-time participants (no vault history), replace the "Previous Sessions" and "Continuity" sections with:
markdown
undefined
当同一参会者在提前查看窗口内有多个预订时(例如6月3日和6月9日),按日期排序并按以下方式处理:
  • 第一场预订:标准准备笔记,无需修改。
  • 第二场及后续预订:准备笔记应提及之前的会议:
    • 在Frontmatter中添加
      prior_prep: "[[YYYYMMDD-prep-participant]]"
      ,指向更早的准备笔记
    • 在会议信息后添加**## 之前的会议**部分:
      markdown
      ## 之前的会议
      将于PRIOR_DATE与FIRST_NAME举行一场会议——在本次会议召开前,该会议已结束。
      PRIOR_DATE会议结束后,请更新本笔记以获取最新背景信息。
    • 保留完整的调研/历史部分,但标记为“PRIOR_DATE后将过期”,以便用户知晓需要重新查看
    • 笔记本身仍可作为背景调研资料,但行动项和连续性内容需要在会后更新
对于首次参会者(知识库中无历史记录),将“过往会议”和“连续性”部分替换为:
markdown
undefined

First Meeting

首次会议

No previous sessions found in vault.
知识库中未找到过往会议记录。

Context & Talking Points

背景与谈话要点

  • Research-based conversation starters
  • Questions to understand their goals and needs
  • How they likely found you / booking context
undefined
  • 基于调研的对话开场话题
  • 用于了解他们目标和需求的问题
  • 他们可能找到您的方式/预订背景
undefined

Group Session Template

群组会议模板

For bookings with 2+ attendees, use this template instead:
markdown
---
type: $TYPE_TAG
date: YYYY-MM-DD
participants:
  - name: "Full Name 1"
    email: email1@example.com
  - name: "Full Name 2"
    email: email2@example.com
event_type: "Cal.com event type name"
duration: X min
time: "HH:MM $TIMEZONE"
zoom_link: "https://..."
status: prep
session_note: ""
tags:
  - $TYPE_TAG
  - SESSION_TYPE
---
对于有2名及以上参会者的预订,改用以下模板:
markdown
---
type: $TYPE_TAG
date: YYYY-MM-DD
participants:
  - name: "全名1"
    email: email1@example.com
  - name: "全名2"
    email: email2@example.com
event_type: "Cal.com活动类型名称"
duration: X min
time: "HH:MM $TIMEZONE"
zoom_link: "https://..."
status: prep
session_note: ""
tags:
  - $TYPE_TAG
  - SESSION_TYPE
---

Prep: Event Type Name — YYYY-MM-DD

准备:活动类型名称 — YYYY-MM-DD

Session Info

会议信息

  • Time: HH:MM–HH:MM $TIMEZONE (Day of week)
  • Type: Event type name (X min)
  • Location: Zoom link
  • Attendees: N participants
  • 时间: HH:MM–HH:MM $TIMEZONE(星期X)
  • 类型: 活动类型名称(X分钟)
  • 地点: Zoom链接
  • 参会者: N名参与者

Attendees

参会者

FIRST_NAME_1 LAST_NAME_1

FIRST_NAME_1 LAST_NAME_1

BRIEF_PROFILE_AND_RESEARCH_SUMMARY
简要资料与调研摘要

FIRST_NAME_2 LAST_NAME_2

FIRST_NAME_2 LAST_NAME_2

BRIEF_PROFILE_AND_RESEARCH_SUMMARY
简要资料与调研摘要

Previous Sessions per Attendee

每位参会者的过往会议

SUMMARY_OF_VAULT_HISTORY_PER_ATTENDEE (grouped by person, skip if no history)
知识库中每位参会者的历史记录摘要(按人员分组,无历史记录则跳过)

Prep Ideas

准备思路

  • Group dynamics to consider
  • Topics to cover with the full group
  • Individual follow-ups to weave in
  • 需要考虑的群组动态
  • 需要向全体参会者覆盖的主题
  • 需要融入的个人跟进事项

Notes

笔记

Space for pre-meeting thoughts and during-meeting notes
undefined
用于记录会前想法和会中笔记的空间
undefined

Step 5: Report

步骤5:报告

After creating all prep notes, output a concise summary:
  • List of prepped sessions (date, time, participant, event type)
  • Key highlights (first-timers flagged, notable follow-ups from history)
  • Links to the created prep notes as
    [[YYYYMMDD-PREP_PREFIX-participant-slug]]
创建所有准备笔记后,输出简洁摘要:
  • 已准备的会议列表(日期、时间、参会者、活动类型)
  • 关键亮点(标记首次参会者、历史记录中值得注意的跟进事项)
  • 所创建准备笔记的链接,格式为
    [[YYYYMMDD-PREP_PREFIX-participant-slug]]

Notes

注意事项

  • Always convert times to the configured
    TIMEZONE
    for display
  • Participant research should be respectful — professional context only
  • If a participant has many previous sessions (>5), focus on the 3 most recent + overall patterns
  • The prep note should be actionable: things to discuss, not just a dossier
  • Tag first-time participants so they're easy to filter in Obsidian
  • For group sessions, use the event type slug for the filename instead of participant name
  • 始终将时间转换为配置的
    TIMEZONE
    进行显示
  • 参会者调研应保持尊重——仅收集专业背景信息
  • 如果参会者有大量过往会议(超过5场),重点关注最近3场+整体模式
  • 准备笔记应具备可操作性:包含待讨论事项,而非仅仅是资料汇编
  • 标记首次参会者,以便在Obsidian中轻松筛选
  • 对于群组会议,使用活动类型别名作为文件名,而非参会者姓名

Linking:
meeting-prep link

关联功能:
meeting-prep link

When invoked with
link
, scan for prep notes that don't yet have a linked session note, and connect them.
调用
link
参数时,扫描尚未关联会议记录的准备笔记并建立关联。

How It Works

工作原理

  1. Find all prep notes:
bash
grep -rl "type: $TYPE_TAG" $MEETINGS_DIR 2>/dev/null
  1. For each prep note with
    session_note: ""
    (unlinked):
    • Extract
      date
      and
      participant
      from frontmatter
    • Search for a matching post-meeting note by date + participant name:
    bash
    find $MEETINGS_DIR -name "YYYYMMDD-*" -not -name "*$PREP_PREFIX*" | xargs grep -l "PARTICIPANT_NAME" 2>/dev/null
    • Fathom notes have
      participants:
      in YAML frontmatter; Granola notes have
      participants:
      too
    • Match by date prefix AND participant name appearing in the file
  2. When a match is found, update both files:
    In the prep note:
    • Update frontmatter:
      session_note: "[[YYYYMMDD-matching-note-filename]]"
    • Update
      status: prep
      status: done
    In the session note:
    • Append a
      ## Prep Note
      section at the end (before any existing
      ## See also
      section if present):
    markdown
    ## Prep Note
    - [[YYYYMMDD-PREP_PREFIX-participant-slug]]
    • If the session note already has a
      ## See also
      section, add the link there instead of creating a new section
  3. Report which notes were linked and which prep notes are still unlinked (meeting hasn't happened yet or transcript not imported)
  1. 查找所有准备笔记:
bash
grep -rl "type: $TYPE_TAG" $MEETINGS_DIR 2>/dev/null
  1. 对于每个
    session_note: ""
    (未关联)的准备笔记:
    • 从Frontmatter中提取
      date
      participant
    • 按日期+参会者姓名搜索匹配的会后记录:
    bash
    find $MEETINGS_DIR -name "YYYYMMDD-*" -not -name "*$PREP_PREFIX*" | xargs grep -l "PARTICIPANT_NAME" 2>/dev/null
    • Fathom笔记的YAML Frontmatter中包含
      participants:
      ;Granola笔记同样包含
      participants:
    • 按日期前缀和文件中出现的参会者姓名进行匹配
  2. 找到匹配项后,更新两个文件:
    在准备笔记中:
    • 更新Frontmatter:
      session_note: "[[YYYYMMDD-matching-note-filename]]"
    • 更新
      status: prep
      status: done
    在会议记录中:
    • 在末尾添加
      ## 准备笔记
      部分(如果已有
      ## 另请参阅
      部分,则添加到该部分之前):
    markdown
    ## 准备笔记
    - [[YYYYMMDD-PREP_PREFIX-participant-slug]]
    • 如果会议记录已有
      ## 另请参阅
      部分,则在该部分添加链接,而非创建新部分
  3. 报告已关联的笔记以及仍未关联的准备笔记(会议尚未举行或转录内容未导入)

Matching Rules

匹配规则

  • Date must match exactly (same YYYYMMDD prefix)
  • Participant name match is fuzzy: check both full name and first name, case-insensitive
  • Skip files that are themselves prep notes (
    -$PREP_PREFIX-
    in filename)
  • If multiple session notes match the same date+participant, prefer the one with a transcript (longer file)
  • Never create duplicate links — check if the link already exists before adding
  • 日期必须完全匹配(相同的YYYYMMDD前缀)
  • 参会者姓名匹配为模糊匹配:检查全名和名字,不区分大小写
  • 跳过本身是准备笔记的文件(文件名中包含
    -$PREP_PREFIX-
  • 如果多个会议记录匹配同一日期+参会者,优先选择包含转录内容的文件(文件更长)
  • 切勿创建重复链接——添加前检查链接是否已存在

Sync:
meeting-prep sync

同步功能:
meeting-prep sync

When invoked with
sync
, reconcile all active prep notes with the current state of their Cal.com bookings. This catches cancellations, reschedules, and deleted bookings that would otherwise leave stale prep notes in the vault.
调用
sync
参数时,使所有活跃准备笔记与Cal.com预订的当前状态保持一致。这可以捕捉到取消、重新安排和删除的预订,避免知识库中留下过时的准备笔记。

How It Works

工作原理

  1. Find all active prep notes:
bash
grep -rl "type: $TYPE_TAG" $MEETINGS_DIR 2>/dev/null
Filter to only notes where
status: prep
(skip
done
,
cancelled
,
orphaned
).
  1. Extract booking identifiers from each prep note's frontmatter:
    • date
      (YYYY-MM-DD)
    • participant
      (full name)
    • email
      (attendee email)
    • event_type
      (Cal.com event type name)
  2. Check Cal.com state: Load Cal.com MCP tools via ToolSearch (query: "calcom", max_results: 20). Call
    get_bookings
    to retrieve bookings covering the date range of all active prep notes. For each prep note, match against Cal.com bookings by date + attendee email.
  3. Update based on booking status:
    Cancelled — the booking exists on Cal.com with a cancelled status:
    • Update frontmatter:
      status: prep
      status: cancelled
    • Append a section to the note:
    markdown
    ## Cancelled
    Booking was cancelled on YYYY-MM-DD (detected during sync).
    Rescheduled — the booking exists but with a different date/time:
    • Update the
      date
      field in frontmatter to the new date
    • Update the
      time
      field to the new time
    • Rename the file from
      YYYYMMDD-$PREP_PREFIX-participant-slug.md
      to
      NEW_YYYYMMDD-$PREP_PREFIX-participant-slug.md
    • Append a section to the note:
    markdown
    ## Rescheduled
    Moved from ORIGINAL_DATE to NEW_DATE (detected during sync on YYYY-MM-DD).
    Still active — booking exists, same date/time, accepted status:
    • No changes needed.
  4. Report what changed: Output a summary table listing each prep note and the action taken (no change / cancelled / rescheduled / orphaned).
  1. 查找所有活跃准备笔记:
bash
grep -rl "type: $TYPE_TAG" $MEETINGS_DIR 2>/dev/null
过滤出
status: prep
的笔记(跳过
done
cancelled
orphaned
状态)。
  1. 从每个准备笔记的Frontmatter中提取预订标识符:
    • date
      (YYYY-MM-DD)
    • participant
      (全名)
    • email
      (参会者邮箱)
    • event_type
      (Cal.com活动类型名称)
  2. 检查Cal.com状态: 通过ToolSearch加载Cal.com MCP工具(查询:"calcom",最大结果数:20)。调用
    get_bookings
    获取涵盖所有活跃准备笔记日期范围的预订。对于每个准备笔记,按日期+参会者邮箱与Cal.com预订进行匹配。
  3. 根据预订状态更新:
    已取消——Cal.com上的预订状态为已取消:
    • 更新Frontmatter:
      status: prep
      status: cancelled
    • 在笔记末尾添加部分:
    markdown
    ## 已取消
    预订于YYYY-MM-DD取消(同步时检测到)。
    已重新安排——预订存在但日期/时间不同:
    • 将Frontmatter中的
      date
      字段更新为新日期
    • time
      字段更新为新时间
    • 将文件名从
      YYYYMMDD-$PREP_PREFIX-participant-slug.md
      重命名为
      NEW_YYYYMMDD-$PREP_PREFIX-participant-slug.md
    • 在笔记末尾添加部分:
    markdown
    ## 已重新安排
    从ORIGINAL_DATE移至NEW_DATE(YYYY-MM-DD同步时检测到)。
    仍活跃——预订存在,日期/时间不变,状态为已接受:
    • 无需修改。
  4. 报告变更内容: 输出摘要表格,列出每个准备笔记及所执行的操作(无变更/已取消/已重新安排/孤立)。

Edge Cases

边缘情况

  • Booking not found on Cal.com (may have been deleted entirely, or is older than Cal.com's retention): Update frontmatter
    status: prep
    status: orphaned
    . Append:
    markdown
    ## Orphaned
    No matching booking found on Cal.com (detected during sync on YYYY-MM-DD). The booking may have been deleted.
  • Multiple bookings on the same day with the same participant: Match by
    event_type
    in addition to date + attendee email to disambiguate. If ambiguity remains, skip the note and flag it in the report for manual review.
  • Prep notes with
    status: done
    : Skip entirely — these are already linked to session notes and should not be modified by sync.
  • Cal.com上未找到预订(可能已完全删除,或超出Cal.com的保留期限):更新Frontmatter的
    status: prep
    status: orphaned
    。添加:
    markdown
    ## 孤立
    Cal.com上未找到匹配的预订(YYYY-MM-DD同步时检测到)。该预订可能已被删除。
  • 同一日期同一参会者有多个预订:除了日期+参会者邮箱外,还按
    event_type
    进行匹配以消除歧义。如果仍存在歧义,则跳过该笔记并在报告中标记以便手动审核。
  • status: done
    的准备笔记
    :完全跳过——这些笔记已关联到会议记录,同步不应修改它们。

Status & Queries:
meeting-prep status

状态与查询:
meeting-prep status

When invoked with
status
, scan all prep notes and report their current state. Also output useful Dataview queries the user can paste into their vault.
调用
status
参数时,扫描所有准备笔记并报告其当前状态。同时输出用户可粘贴到知识库中的实用Dataview查询。

Status Report

状态报告

Scan
$MEETINGS_DIR
for files matching
*-$PREP_PREFIX-*.md
. For each, read frontmatter and report:
DateParticipantStatusSession Note
from
date
from
participant
prep
or
done
linked note or
After the table, output a Top 5 most-met participants summary by scanning all prep notes in the vault, counting occurrences per participant, and listing the top 5 with their session count and date of last meeting.
扫描
$MEETINGS_DIR
中匹配
*-$PREP_PREFIX-*.md
的文件。对于每个文件,读取Frontmatter并报告:
日期参会者状态会议记录
来自
date
来自
participant
prep
done
关联笔记或
表格之后,输出参会次数最多的前5名人员摘要:扫描知识库中所有准备笔记,统计每位参会者的出现次数,列出前5名及其会议次数和最后一次会议日期。

Dataview Queries

Dataview查询

Include these ready-to-paste queries in the status output:
Upcoming preps (unlinked):
markdown
```dataview
TABLE participant AS "Who", time AS "Time", event_type AS "Type", duration + " min" AS "Duration"
FROM "Meetings"
WHERE type = "$TYPE_TAG" AND status = "prep"
SORT date ASC
```
Completed preps (linked to session notes):
markdown
```dataview
TABLE participant AS "Who", date AS "Date", session_note AS "Session Note"
FROM "Meetings"
WHERE type = "$TYPE_TAG" AND status = "done"
SORT date DESC
```
Prep coverage — sessions without a prep note:
markdown
```dataview
TABLE title AS "Session", date AS "Date", participants AS "Participants"
FROM "Meetings"
WHERE !contains(file.name, "$PREP_PREFIX") AND !contains(file.inlinks.file.name, "$PREP_PREFIX")
SORT date DESC
LIMIT 20
```
All preps by participant:
markdown
```dataview
TABLE date AS "Date", status AS "Status", event_type AS "Type", session_note AS "Linked"
FROM "Meetings"
WHERE type = "$TYPE_TAG"
SORT participant ASC, date DESC
```
在状态输出中包含以下可直接粘贴的查询:
即将到来的准备笔记(未关联):
markdown
```dataview
TABLE participant AS "参会者", time AS "时间", event_type AS "类型", duration + " min" AS "时长"
FROM "Meetings"
WHERE type = "$TYPE_TAG" AND status = "prep"
SORT date ASC
```
已完成的准备笔记(关联到会议记录):
markdown
```dataview
TABLE participant AS "参会者", date AS "日期", session_note AS "会议记录"
FROM "Meetings"
WHERE type = "$TYPE_TAG" AND status = "done"
SORT date DESC
```
准备覆盖情况——无准备笔记的会议:
markdown
```dataview
TABLE title AS "会议", date AS "日期", participants AS "参会者"
FROM "Meetings"
WHERE !contains(file.name, "$PREP_PREFIX") AND !contains(file.inlinks.file.name, "$PREP_PREFIX")
SORT date DESC
LIMIT 20
```
按参会者汇总所有准备笔记:
markdown
```dataview
TABLE date AS "日期", status AS "状态", event_type AS "类型", session_note AS "已关联"
FROM "Meetings"
WHERE type = "$TYPE_TAG"
SORT participant ASC, date DESC
```

Relationship & Activity Queries

关系与活动查询

Meeting frequency by participant:
markdown
```dataview
TABLE length(rows) AS "Sessions", min(rows.date) AS "First", max(rows.date) AS "Last"
FROM "Meetings"
WHERE type = "$TYPE_TAG"
GROUP BY participant
SORT length(rows) DESC
```
Participant timeline (embed in a participant's person note — uses
this.participant
for context):
markdown
```dataview
TABLE date AS "Date", event_type AS "Type", status AS "Status", session_note AS "Linked"
FROM "Meetings"
WHERE type = "$TYPE_TAG" AND participant = this.participant
SORT date DESC
```
Recent meeting activity (last 30 days, all sessions, cross-referenced with prep coverage):
markdown
```dataview
TABLE title AS "Session", participants AS "With", 
  choice(contains(file.inlinks.file.name, "prep"), "✓", "—") AS "Prepped"
FROM "Meetings"
WHERE date >= date(today) - dur(30 days) AND !contains(file.name, "prep")
SORT date DESC
```
First-timers list (people met only once — potential follow-up candidates):
markdown
```dataview
TABLE participant AS "Who", date AS "Met On", event_type AS "Type"
FROM "Meetings"  
WHERE type = "$TYPE_TAG"
GROUP BY participant
FLATTEN length(rows) AS count
WHERE count = 1
FLATTEN rows.date AS date
FLATTEN rows.event_type AS event_type
SORT date DESC
```
按参会者统计会议频率:
markdown
```dataview
TABLE length(rows) AS "会议次数", min(rows.date) AS "首次", max(rows.date) AS "末次"
FROM "Meetings"
WHERE type = "$TYPE_TAG"
GROUP BY participant
SORT length(rows) DESC
```
参会者时间线(嵌入到参会者的个人笔记中——使用
this.participant
获取上下文):
markdown
```dataview
TABLE date AS "日期", event_type AS "类型", status AS "状态", session_note AS "已关联"
FROM "Meetings"
WHERE type = "$TYPE_TAG" AND participant = this.participant
SORT date DESC
```
近期会议活动(过去30天,所有会议,交叉引用准备覆盖情况):
markdown
```dataview
TABLE title AS "会议", participants AS "参会者", 
  choice(contains(file.inlinks.file.name, "prep"), "✓", "—") AS "已准备"
FROM "Meetings"
WHERE date >= date(today) - dur(30 days) AND !contains(file.name, "prep")
SORT date DESC
```
首次参会者列表(仅见过一次的人员——潜在跟进对象):
markdown
```dataview
TABLE participant AS "参会者", date AS "会面日期", event_type AS "类型"
FROM "Meetings"  
WHERE type = "$TYPE_TAG"
GROUP BY participant
FLATTEN length(rows) AS count
WHERE count = 1
FLATTEN rows.date AS date
FLATTEN rows.event_type AS event_type
SORT date DESC
```