1. 项目概述一个为 Cursor 量身定制的本地化会议纪要生成工具如果你和我一样日常开发工作重度依赖 Cursor并且经常需要处理各种线上会议的录音转录稿那你肯定理解那种痛苦面对动辄几千字的会议逐字稿手动提炼要点、梳理决策、追踪待办事项不仅耗时耗力还容易遗漏关键信息。过去我团队内部使用一个基于 n8n 的自动化工作流来处理这件事它很强大但依赖外部服务配置复杂新成员上手成本高。于是我动手把那个工作流的核心逻辑“搬”进了 Cursor 里创建了这个Meeting Summarizer项目。它的核心目标很简单让你能在 Cursor 的聊天界面里直接获得格式统一、结构清晰、符合团队规范的会议纪要而无需离开你的开发环境或启动任何外部服务。整个项目就是一个纯静态的 Web 应用双击 HTML 文件就能在浏览器里打开一个“提示词构建器”帮你快速格式化输入生成一条可以直接粘贴到 Cursor 聊天框的指令。更妙的是它还包含一个 Cursor 规则文件能确保 AI 在总结时严格遵守我们预设的格式、术语修正比如把语音识别错的“Boris”自动纠正为“Forrest”和内容规范。简单来说这不是一个独立的 AI 应用而是一个增强 Cursor 原生能力的“外挂”。它把复杂的提示工程和规则配置封装成了一个开箱即用的工具包让会议纪要这个高频且繁琐的任务变得像在 IDE 里问个问题一样简单直接。2. 核心设计思路为何选择纯静态 Cursor 规则的方案当初决定做这个项目时我评估过几种方案。比如继续优化 n8n 工作流或者写一个独立的 CLI 工具调用 OpenAI API。但最终选择了“静态 Web 应用 Cursor 内置规则”这条路径主要是基于以下几点考量2.1 追求极致的开发体验与上下文连贯性作为开发者我们的核心战场是 IDE。任何需要切换窗口、复制粘贴到其他网站或工具的操作都会打断心流。将总结功能直接集成到 Cursor 聊天中意味着会议转录稿、代码、错误信息可以共存于同一个上下文。我可以一边看着报错日志一边让 Cursor 总结刚才关于这个 Bug 的讨论所有信息都在一个界面里完成闭环效率提升是显而易见的。2.2 规避外部依赖与网络延迟依赖 n8n 或第三方 SaaS 服务总会引入不确定性服务是否可用网络是否通畅API 额度是否超限这个纯静态方案其提示词构建器HTML/JS/CSS完全运行在本地浏览器零网络请求除了可选的配置保存接口。而核心的总结能力复用的是你已经付费并正在使用的 Cursor AI 模型。这相当于把所有的计算和逻辑处理都放在了你最稳定、最可控的两个端本地浏览器和本地 IDE 中的 AI 代理。2.3 实现规则与流程的“代码化”与版本控制n8n 工作流的配置是图形化的虽然直观但不利于版本管理和团队协作。现在所有的规则——包括总结的固定格式Summary, Decisions, Action Items…、人名纠正映射表Boris - Forrest、甚至是“如无内容则输出None stated”这样的细节要求——都被写进了.cursor/rules/meeting-summarizer.mdc这个规则文件以及配套的 JavaScript 配置文件中。这些是纯文本文件可以用 Git 进行版本管理进行 Code Review清晰地看到每一次修改的 Diff。团队规范从此不再是口口相传或藏在某个人的 n8n 面板里而是变成了项目仓库里一份可见、可查、可迭代的“代码”。2.4 在灵活性与规范性之间取得平衡这个设计提供了两种使用模式适配不同场景快速聊天模式对于简单的总结你只需把转录文本粘贴进 Cursor 聊天框说一句“用我们的会议总结格式总结一下”。内置的规则alwaysApply: true会自动生效保证输出格式统一。这是最快捷的方式。引导式构建器模式对于重要的会议或者你需要附加会前摘要、精确指定会议时间和类型时可以打开本地的提示词构建器 Web 页面。它通过表单引导你填写所有元数据并帮你把冗长的转录稿和这些信息拼接成一条结构清晰、对 AI 极度友好的超长提示词一键复制后粘贴到 Cursor。这降低了手动编写复杂提示词的门槛和出错率。这种“双模式”设计既满足了老手追求效率的“快捷键”需求也照顾了新手上路时对规范不熟悉的痛点。3. 项目文件结构与核心机制解析理解这个项目的关键在于弄清楚那几个核心文件是如何各司其职又相互协作的。整个项目的架构非常清晰体现了“关注点分离”的思想。3.1 前端界面层静态的提示词构建器这是用户直接交互的部分一个完全本地运行的 Web 应用。meeting-summarizer-prompt-builder.html这是应用的入口。它定义了基本的页面结构包括表单输入区、操作按钮以及两个重要的模态框Modal容器。它的代码非常干净主要就是布局和引入所需的 CSS、JS 文件。assets/meeting-summarizer-prompt-builder.css控制整个应用的外观样式。我采用了比较简洁现代的风格确保焦点清晰操作按钮醒目。重点是让表单和生成的提示词预览区域有良好的可读性。JS/meeting-summarizer-prompt-builder.js这是前端逻辑的“大脑”也是代码量最大的部分。它主要负责以下几件事DOM 操作与事件处理为所有按钮如“Build prompt”、“Copy”、“Manage options”绑定点击事件控制模态框的显示与隐藏。表单数据收集与验证获取用户输入的会议主题、类型、日期、时间、Copilot 前导摘要以及转录文本。VTT 文件解析与清洗这是其中一个技术亮点。很多会议工具如 Zoom、Teams导出的转录稿是.vtt格式它包含时间轴和重复的说话人标签。这个 JS 文件中的parseVTT函数会读取用户上传的.vtt文件剥离所有时间码和冗余的WEBVTT头信息、NOTE注释并将多行对话合并成连贯的段落只保留纯净的对话文本。这步处理对于后续 AI 理解内容至关重要能有效减少无关噪音。提示词组装将收集到的所有元数据和转录文本按照一个预设的、对 Cursor AI 最优的模板进行拼接。这个模板模拟了 n8n 工作流中传递给 LLM 的精确指令结构。本地存储管理用户通过“Manage options”模态框自定义的会议类型等下拉选项会通过localStorageAPI 保存在当前浏览器中。下次打开页面时会自动加载这些自定义项实现了个性化设置的持久化。3.2 配置与规则层统一行为的标准这一层定义了“如何总结”的具体规则是项目逻辑的核心。JS/meeting-summarizer-config.js这是一个 JavaScript 配置文件导出了一个配置对象。它主要包含两部分defaultMeetingTypes: 会议类型的默认下拉选项列表如[Engineering Sync, Product Review, Retrospective]。nameCorrections:人名纠正映射表。这是从 n8n 工作流继承来的关键特性。语音识别经常搞错人名比如把“Forrest”听成“Boris”。这个对象就是用来定义这些纠正规则的格式如{ Boris: Forrest, Jerry: Jared }。前端 JS 会读取这个配置并将其嵌入到生成的提示词中明确告诉 AI“请在全文进行如下替换”。JS/meeting-summarizer-rule.js这个文件只包含一个长长的字符串常量其内容就是完整的 Cursor 规则文本。它被“Getting Started”模态框直接引用用于展示给用户看方便他们复制。它的内容和.cursor/rules/meeting-summarizer.mdc文件必须完全一致。.cursor/rules/meeting-summarizer.mdc这是 Cursor 编辑器真正识别和执行的规则文件。当这个文件存在于你的项目工作区根目录下的.cursor/rules文件夹中时Cursor 就会加载它。规则里用自然语言详细描述了总结的格式、步骤、替换规则和注意事项。alwaysApply: true属性确保了在该工作区内只要聊天内容涉及会议总结这条规则就会自动生效无需每次手动触发。3.3 同步契约保持“唯一真相源”的挑战这是本项目设计中最需要警惕的一点也是我在 README 中特别强调的“Sync contract”。因为同样的规则逻辑存在于三个地方配置中的默认人名纠正 (config.js)。展示用的规则文本 (rule.js)。实际生效的 Cursor 规则 (meeting-summarizer.mdc)。为什么这么做不是为了重复而是为了不同的用途配置文件驱动 Web 应用规则文本用于展示和复制MDC 文件驱动 Cursor AI。但这也带来了维护上的风险一旦修改了规则比如增加一个新的总结条目或修改人名纠正就必须同时更新这三个文件。实操心得与避坑指南建立修改清单任何关于总结逻辑的变更我现在的习惯是立刻列出一个清单①更新meeting-summarizer.mdc规则②同步更新meeting-summarizer-rule.js中的展示文本③检查meeting-summarizer-config.js中的默认nameCorrections是否需要增删。使用测试矩阵验证项目自带的测试矩阵表不是摆设。在发布修改前务必用包含“Boris”、“Jerry”等关键词的测试转录稿跑一遍全流程确保最终输出的人名已被正确替换。这是防止“三份拷贝”不同步的最有效验收手段。考虑自动化脚本对于团队协作后期可以考虑编写一个简单的 Node.js 脚本或 Git Hook如 pre-commit检查这三个文件关键部分如nameCorrections对象的一致性避免人为疏忽导致的问题。4. 完整使用流程与实操指南下面我将带你从头到尾体验一遍这个工具的使用流程并穿插讲解每个步骤的意图和细节。4.1 准备工作获取与放置项目文件首先你需要将整个meeting-summarizer文件夹放到你的项目仓库中。我建议放在项目根目录或者一个像tools/这样的子目录下。关键是确保.cursor/rules/meeting-summarizer.mdc这个规则文件位于你的项目工作区根目录下的.cursor/rules/路径中。Cursor 会在你打开该项目时自动加载此规则。4.2 模式一使用提示词构建器推荐给新手或复杂会议打开构建器在文件管理器中直接双击meeting-summarizer-prompt-builder.html文件。它会在你的默认浏览器中打开无需任何服务器。首次使用查看规则。建议先点击页面上方的“Getting Started”按钮。弹出的模态框里包含了完整的 Cursor 规则文本。你可以全选复制然后在你项目的.cursor/rules/目录下创建一个新的meeting-summarizer.mdc文件并粘贴进去。如果项目里已经存在这个文件此步骤可以跳过但浏览一下规则内容有助于理解后续 AI 的行为。填写会议元数据About: 简要描述会议主题如“Q3后端架构迁移方案讨论”。Type: 从下拉框选择会议类型。你可以点击“Manage Options”来增删改下拉选项这些修改会保存在你当前浏览器的本地。Date/Time: 选择会议日期和时间。这会让生成的总结带有准确的时间戳。Copilot Summary (Optional): 如果你在会前有利用 Copilot 生成的讨论要点或议程可以粘贴在这里。这相当于给 AI 一个“会前简报”能引导它更关注核心议题。输入转录文本方式 A推荐上传 VTT 文件。点击文件上传区域选择从 Zoom、Teams 等导出的.vtt文件。JS 脚本会自动解析并清洗将纯净的文本填入下方大文本框。你可以对比一下上传前后的文本时间码等无关信息已被移除。方式 B直接粘贴文本。如果你已经有纯文本格式的转录稿直接粘贴进 “Transcript Text” 区域即可。生成并复制提示词点击“Build prompt for Cursor”按钮。页面下方会立刻出现一个巨大的文本框里面已经组装好了一条长长的、格式工整的提示词。这条提示词包含了之前填写的所有元数据、明确的指令和完整的转录内容。点击“Copy to clipboard”提示词就被复制了。在 Cursor 中执行切换到 Cursor IDE在 Chat 面板中直接粘贴刚刚复制的内容然后按回车发送。由于工作区规则已生效Cursor AI 会按照预设的格式生成总结。4.3 模式二直接聊天适合快速总结对于已经熟悉规则、或者会议转录稿很简洁的情况你可以跳过构建器将会议转录文本直接粘贴进 Cursor Chat。输入指令例如Summarize this meeting using our meeting summary format. The meeting was about [主题] type was [类型] held on [日期].日期、类型等信息可省略但包含会更准确。发送。Cursor 会自动应用工作区规则生成格式化的总结。4.4 自定义你的选项点击“Manage Options”按钮你可以管理会议类型下拉列表。例如你的团队可能只有“站会”、“评审会”、“复盘会”三种类型你可以删掉默认的添加自己的。点击 Save 后这些选项就保存在你的浏览器本地存储中下次打开页面依然有效。如果你想修改默认的人名纠正nameCorrections则需要直接编辑JS/meeting-summarizer-config.js文件因为这是全局默认配置。5. 常见问题排查与实战技巧在实际使用和团队推广过程中我遇到并解决了一些典型问题。这里分享给你希望能帮你绕过这些坑。5.1 问题AI 生成的总结格式不符合预期或者没有进行人名替换。排查步骤 1检查规则文件是否生效。在 Cursor Chat 中输入/rules并发送查看当前激活的规则列表。确认meeting-summarizer在列表中。如果不在检查.cursor/rules/meeting-summarizer.mdc文件是否在正确的路径且文件名无误。排查步骤 2检查规则语法。打开.cursor/rules/meeting-summarizer.mdc文件检查是否有 YAML 格式错误。特别是alwaysApply: true的缩进是否正确。Cursor 规则对缩进敏感。确认规则中的指令描述是否清晰。可以尝试简化规则内容只保留最基本的格式要求进行测试。排查步骤 3检查提示词内容。如果你使用了构建器请仔细查看生成的提示词末尾部分是否包含了类似Please apply these name corrections: Boris - Forrest, Jerry - Jared的指令。如果没有可能是config.js中的nameCorrections对象为空或未被正确加载。检查转录文本中是否确实包含了需要纠正的名字如“Boris”。AI 只会替换它看到的文本。5.2 问题上传 VTT 文件后文本框内容为空或乱码。原因与解决这通常是因为 VTT 文件的编码或格式非标准。技巧用文本编辑器如 VSCode打开那个 VTT 文件查看其内容。确保它是纯文本格式并且以WEBVTT开头。有时从某些工具导出的文件可能包含 BOM 头或奇怪的字符。备用方案直接打开 VTT 文件全选复制所有内容然后切换到构建器的“直接粘贴文本”模式将内容粘贴进去。虽然会包含时间码但 AI 通常也能处理只是提示词会变长。5.3 问题在 Cursor 中直接聊天总结AI 有时会忽略“None stated”的指令在空的章节里写“无”或“没有”。分析与技巧这是 LLM 的常见行为即使你在规则中明确要求“输出None stated”它有时也会自作主张。强化指令在规则文件.mdc和构建器生成的提示词中将关于“None stated”的指令写得更加强硬和具体。例如“If there are absolutely no action items mentioned in the transcript, output exactly and onlyNone statedon its own line. Do not invent any, do not write ‘No action items’ do not write ‘N/A’ onlyNone stated.”后处理如果追求完美可以接受 AI 的原始输出然后用一个简单的文本查找替换将“无”、“没有”、“N/A”等统一改为None stated。这可以通过一个简单的脚本或 Cursor 的后续编辑指令完成。5.4 问题团队新成员不知道如何使用。解决方案将meeting-summarizer-prompt-builder.html的访问链接如果是部署在内部网络或使用说明整合到团队的新人 onboarding 文档中。简化流程对于大多数会议其实只需要“上传 VTT 文件” - “点击 Build” - “复制粘贴到 Cursor” 这三步。可以制作一个极简的 GIF 动图或短视频演示这个流程比文字文档更直观。5.5 与原有 n8n 工作流的对比与取舍项目文档中提到了与 n8n 工作流相比的局限性这是客观存在的但也是主动选择的结果特性n8n 工作流Cursor Meeting Summarizer分析与建议总结存储可自动保存至 MongoDB仅存在于 Cursor 聊天历史取舍如果你需要将会议纪要结构化存储、纳入知识库或生成报告n8n 仍是更优解。本工具专注于快速生成和即时使用。你可以手动将 Cursor 生成的优质总结复制到 Notion 或 Wiki。多步 LLM 链支持如先生成标题再总结最后检查单步完成取舍牺牲了特定优化步骤换来了速度和简洁性。对于大多数日常会议单步总结的质量已足够。对于极其重要的会议你可以在 Cursor 中手动进行多轮对话来模拟链式调用。自动化触发可监听邮箱、Webhook 自动触发完全手动触发取舍自动化是 n8n 的核心优势。本工具定位是“半自动”辅助工具需要人工介入启动。这避免了误触发也更符合开发者在上下文中的主动决策习惯。部署与依赖需要维护 n8n 实例、数据库、API 密钥纯静态文件零外部依赖优势这是本工具最大的亮点。开箱即用无需运维隐私性好数据不离本地/Cursor。我个人在实际使用中的体会是这个工具并没有完全取代 n8n 工作流而是作为它的一个轻量、快捷的补充。80% 的日常同步会议我用这个工具在 2 分钟内就能搞定纪要初稿。而对于那些需要归档、分享给更广泛受众或进行深度分析的会议我仍然会走 n8n 的自动化流程。它完美地解决了“最后一公里”的问题——让会议总结这个动作无缝嵌入到开发者的核心工作流中不再是一个需要切换上下文、登录外部系统的负担。