silverstein/minutes · 上手攻略
- 仓库:silverstein/minutes
- 链接:https://github.com/silverstein/minutes
- 分类:productivity · 本地优先 · MCP
- 作者:spark
- 更新:2026-09-03
是什么
minutes 是一个开源、本地优先的会议 / 通话 / 语音备忘录记录工具,对标 Granola 和 Otter.ai,但把数据所有权完全留在用户手里:转写和说话人分离全部在本地完成,会议产物以带 YAML frontmatter 的 Markdown 落到 ~/meetings/,可以被 Claude Code、Codex、Cursor、OpenCode、Pi、Gemini CLI、Claude Desktop 等任意 MCP 客户端直接查询,也可以用 Obsidian / Logseq / grep 检索。
仓库给自己的定位是 "Open-source, local-first Granola/Otter alternative that Claude Code, Codex, Cursor, and any MCP client can query",同时强调 "Nothing is uploaded",并把自家交付面列成五件套:桌面 app、CLI(58 命令)、MCP server(34 工具)、Claude Code plugin(23 skills)、TypeScript SDK。Mat Silverstein 在 README 末尾明确 "MIT — staying that way: no relicensing, no paid tier for anything in this repo",是少见敢在 README 写永久 MIT 承诺的开源项目。
解决什么问题
会议记录工具的两难:本地方案要么不能用 AI、要么难集成到 agent;云方案(Granola / Otter / Fireflies / Fathom)好用但你交出音频、字幕、行动项给第三方服务器,按月付费且导出受 API 限制。minutes 想两个都要:
- 录音 + 转写 + 说话人标注都在本机:不需要 Zoom/Meet/Teams 装 bot、不入会捕获系统音频,转写在 Apple Silicon / 主流 Mac 上 on-device 跑。
- 数据是 Markdown + YAML:Obsidian、Logseq、
grep、rg、rg --type md全能直接读;不存在"被某家云数据库锁定"的问题。 - AI 接入面是文件 + MCP:Claude Code / Cursor / Codex 等 agent 可以直接
search_meetings({"query":"..."}),跨会议上下文聚合不再靠某家云 chat。 - 导 Granola / Otter 老数据:从 Granola 退出后
minutes import granola把归档数据迁到本地 Markdown,迁移路径文档化。 - 合规留痕:每条会议记录都内嵌"consent provenance"——谁同意被录、什么时候同意的,写在文件 frontmatter 里。
适合"既要用 AI 整理会议、又不想把客户对话音频上云"的独立顾问、合规要求严格的团队、agent-first 工作流的开发者,以及任何被 Granola $18/月吓退的个人用户。
快速安装
环境:macOS(菜单栏 app 主战场,README 在 Apple Silicon 优先提及;CLI/MCP 跨平台可用 Rust 工具链),Rust(cargo)+ Node(npx)。
# 桌面 app(推荐入口)
brew install --cask silverstein/tap/minutes
# 或者只装 CLI
brew install silverstein/tap/minutes
# 或
cargo install minutes-cli
# MCP server(任何 MCP 客户端都能用)
npx minutes-mcp
# 配 Claude Code(最常见)
claude mcp add minutes -- npx -y minutes-mcp
⚠️ Homebrew 第一次拉个人 tap 时会报 "untrusted tap"——按 README 提示跑一次
brew trust silverstein/tap即可,不要永久绕过来源校验。
跑通冒烟:
# 装五个示例会议(不开麦克风也能玩)
minutes demo --full
# 在 Claude Code 里问
# > "What did we decide about monthly billing, and did it stick?"
# 答案会跨两条间隔一个月的会议
# 直 MCP 调用同一份本地数据
# tool: search_meetings({"query":"monthly billing decision"})
# 清掉样例
minutes demo --clean
录真会议:minutes record 起 → minutes stop 停,文件落到 ~/meetings/。
核心用法
CLI 八面玲珑(58 条命令)
minutes 不只是一个转写器——文档把 CLI 拆成五大类:
- 本地录音 / 处理:
minutes record、minutes stop、minutes process <file>、minutes diarize、minutes transcribe。 - 搜索 / 检索:
minutes search "Q2 pricing"(policy-safe)、minutes list、minutes recent。 - 导入 / 迁移:
minutes import granola(读~/.granola-archivist/output/)、minutes import otter、minutes import fireflies。 - 自动化 / summarization:
minutes summarize、minutes extract-actions、minutes decisions。 - 配置 / 维护:
minutes doctor、minutes doctor --audio、minutes doctor --models、minutes update。
每条命令都支持 --help,新手可以从 minutes doctor 起步——它会顺次检查麦克风权限、模型是否下载、~/meetings/ 写入权限、MCP 注册状态,把第一个失败点指出来。
MCP server(34 工具)
注册到任意 MCP 客户端后,agent 能用的最小工具集包括:
# 跨会议检索
search_meetings({"query": "monthly billing decision"})
# 按人查
list_meetings_by_person({"person": "Alex", "since": "2026-01-01"})
# 取 frontmatter
get_meeting({"id": "2026-03-17-q2-pricing-alex"})
# 追加行动项 / 决议
append_action_item({"meeting_id": "...", "assignee": "mat", "task": "...", "due": "Friday"})
# 受同意策略保护的导出
export_with_consent({"meeting_id": "...", "destination": "vault/notes/"})
完整 MCP 工具索引在 useminutes.app/docs/mcp/tools——README 把它当作 "agent index",可以直接喂给 LLM(useminutes.app/llms.txt 和 llms-full.txt)。
Claude Code plugin(23 skills)
claude mcp add minutes -- npx -y minutes-mcp 之后,仓库还提供 23 个 skill:prep(会前预设)、capture(会中实时)、live-help(会中问答)、debrief(会后复盘)、memory(长期记忆)等。装上之后 Claude Code 自然会说"我看到你三月有这条会议,要我整理行动项吗?"——而不是每条会议都得手动喂。
从 Granola / Otter 迁过来
README 把"如何从 Granola 退出"单独写成 docs/switching-from-granola.md,提供两条路径:
minutes import granola读~/.granola-archivist/output/(先要用 Granola Archiver 把本地缓存导出到这个目录)。⚠️ 新版 Granola 会加密本地缓存,老导出器可能读不到——README 明说这条 fallback 的局限性。- 如果上面那条路不通,改用
npm install -g granola-to-minutes(API 路径,读 Granola 自家 API + Claude 抽 action items / speaker attribution),直接写~/meetings/。
Otter / Fireflies 同样有 minutes import otter / minutes import fireflies 入口。迁移时遇到的具体坑 README 都列了。
典型适用场景
- agent-first 个人 / 小团队:Claude Code / Cursor / Codex 用户,希望 AI 助手能"跨会议记得客户说过什么",但不愿把音频上 Granola 云。
- 合规 / 律师 / 咨询行业:客户对话、董事会纪要被录音,必须有 consent provenance 与本地存档;YAML frontmatter 把 action items / decisions / 同意字段都结构化,方便后续 e-discovery。
- Granola 重度用户想省钱:自带
minutes import granola迁移路径,月省 $18 且不丢失历史。 - 远程会议 + 不想装 bot 的隐私偏好者:系统级音频捕获,没有第三方"会议机器人"出现在参会人列表。
- iPhone 语音备忘录流水线:仓库提供
docs/phone-voice-memo-pipeline.md——把手机录音同步到 Mac 入~/meetings/,统一检索。 - Obsidian / Logseq 重度用户:产物是 Markdown + YAML frontmatter,原生兼容两个最常见的本地笔记栈。
坑与注意
- macOS 是主战场:菜单栏 app、speaker diarization、on-device ASR 在 Apple Silicon 上体验最佳;CLI/MCP 跨平台,但桌面体验暂时不强调 Linux / Windows。
- 模型首次下载 + 磁盘:on-device 转写意味着要把 Whisper 或类似模型下到本地,磁盘占用数 GB 起;跑前
minutes doctor --models看清楚。 - MCP 客户端版本兼容:34 个 MCP 工具名在不同客户端里显示不一样,README 给出对 Claude Code、Codex、Cursor、OpenCode、Pi、Claude Desktop、Gemini CLI、Mistral Vibe、Cowork、Dispatch 的分别配置;以
docs/integration/clients.md为准。 - Granola 迁移会撞加密:
~/.granola-archivist/output/在新版 Granola 加密后可能没东西,不要死磕第一条路径,直接用granola-to-minutesAPI 路径。 - consent provenance 不是法律背书:frontmatter 里写 "all attendees consented at 14:02" 是留痕工具,不是替用户做合规判断;正式场景仍需律师审。
- speaker labels 状态:对照表里 minutes 一格写 "Free, on-device",anarlog 一格写 "Not verified"——README 措辞是"公开文档抽样核对 2026 年 9 月",不是基准测试;跑前自己录一段双人对谈确认。
- 不在云端不等于不外发:YAML frontmatter 默认带 markdown,文本外发仍由用户自己决定——"local-first" 是基础设施承诺,不是合规终点。
- Stars 数字:抓取时搜索结果显示 1.5k stars,与选题榜的 1462 stars 量级一致;个别时段可能略滞后,以 GitHub 实时为准。
- commit 历史里仍有
npm/next/app子目录:仓库从脚手架演化而来,不是大问题,但 agent 集成时建议按docs/integration/clients.md而非顶层 README 直接配。
与同类对比
仓库对照表(README 引用,"公开文档抽样核对 2026-09","修正请发 issue"):
| 能力 | Granola | Otter.ai | Anarlog (ex-Hyprnote) | minutes |
|---|---|---|---|---|
| 本地转写 | 否(云) | 否(云) | 是 | 是 |
| 开源 | 否 | 否 | MIT | MIT |
| 价格 | Freemium | Freemium | 免费 | 免费 |
| Agent 接入面 | 托管 MCP | 托管集成 | 本地 app | 本地文件 + 34 MCP 工具 |
| 跨会议智能 | 云 chat | 云 chat | 否 | policy-safe 搜索 |
| 同意留痕 | 否 | 否 | 否 | 每文件内嵌 |
| 听写模式 | 否 | 否 | 否 | 是 |
| 语音备忘录 | 否 | 否 | 否 | iPhone 管线 |
| 人物画像 | 否 | 否 | 否 | bounded profiles |
| 数据所有权 | 他们服务器 | 他们服务器 | 本地 | 本地 |
| 数据格式 | 云 DB | 云 DB | 本地文件 | Markdown + YAML |
| Agent 无关 | 否 | 否 | 部分 | 是 |
| 说话人标签 | 云 | 云 | 未核实 | 免费、本机 |
外加几个常被一并提起的:
- Whisper 类纯转写(whisper.cpp、Insanely-fast-whisper):只做 ASR,不带会议结构、不带 agent 面、不带 frontmatter schema——
minutes是"包装 + 产品化"。 - Fireflies.ai / Fathom:云 SaaS、强 CRM 集成,定位偏销售管线;和
minutes的"本地优先 + agent 接入"基本相反。 - Notion AI meeting notes:跟 Notion 工作区绑死,本地优先为零。
一句话区分:minutes 是 "Granola 的 UX + Anarlog 的本地 + MCP 的 agent 接入" 三合一,且承诺永久 MIT。
一句话推荐结论
如果你的核心痛点是"想用 Claude Code / Cursor 跨会议调出过去说过什么、又不愿为 Granola 月费 + 把音频交出去",minutes 是目前最完整、文档最工程化的本地优先替代——前提是你在 macOS(特别是 Apple Silicon)上、用 Claude Code 系 agent、愿意花几分钟装模型和 MCP。