内容
<p align="center">
<img src="Resources/AppIcon-1024.png" width="140" alt="帕菲特图标 — 分层帕菲特玻璃杯">
</p>
<h1 align="center">帕菲特</h1>
<p align="center"><em>分层会议笔记。完美本地。</em></p>
<p align="center">
macOS上一款开源、本机会议记笔记工具 — 轻量级替代Granola。<br>
它位于您的菜单栏中,在会议开始时通知,录制双方通话,<br>
并编写带有命名发言者及模板笔记的记录 — 音频从未离开过您的Mac。<br>
然后通过内置的MCP服务器将任何会议交给<strong>Claude</strong> — 一次通话,您的整个历史记录,或正在进行的会议 <em>现在</em> — 无需上传任何内容。
</p>
<p align="center">
<sub>📦 <strong>签名<code>.app</code>下载即将到来。</strong> 在此之前,<code>make install</code>
(如下)大约需要两分钟即可构建 — 今天就可以尝试使用。</sub>
</p>
---
## 它能做什么
- **自动检测会议。** 当Zoom、Meet、Teams、FaceTime — 任何使用您的麦克风的应用程序 — 启动时,Parfait会提供录音(或直接启动,如果您告诉它)。手动录音只需在菜单栏中单击一次。
- **录制双方通话。** 通过AVAudioEngine录制您的麦克风;通过Core Audio进程抽头录制系统音频,无需虚拟音频驱动程序,无需内核扩展,无需加入您通话的机器人。
- **在设备上转录**,使用Apple的SpeechAnalyzer(macOS 26语音引擎) — 带有每个分段的时间戳。
- **命名发言者。** 您是“您”(麦克风通道);远程语音通过小型本地说话者分离模型([FluidAudio](https://github.com/FluidInference/FluidAudio),约22 MB,一次下载)分离。日历参会者作为重命名建议提供,重命名说话者会修复整个记录。
- **在设备上总结**,使用Apple Intelligence(FoundationModels),遵循 **您的** 可编辑markdown模板。长会议通过模型进行映射和归约;超过模型处理能力的会议将路由到您自己的Claude账户。
- **所有内容均可编辑** — 标题、笔记、记录、发言者。
- **实时询问Claude,会议中。** 浮动卡片显示记录的进行情况;一个按钮在会议进行中打开Claude。Parfait通过`get_live_transcript` MCP工具公开正在进行的记录,以便Claude可以回答“我错过了什么?”或“接下来我应该问什么?” — 无需复制,即可跨全屏Zoom。
- **与单个会议原生聊天,Claude中。** 您的提问(或“关于此会议的询问”屏幕)通过Parfait的MCP连接器在Claude Desktop中打开该会议 — Claude自己读取它;无需复制任何内容。
- **与所有会议聊天。** “询问您的会议”将Claude指向您的整个库,方式相同。因为Parfait附带一个MCP服务器来管理您的会议,因此一旦连接,您就可以跳过应用程序,直接在任何时候询问Claude — Code或Desktop。Claude甚至可以通过相同的服务器重新生成会议的笔记,针对不同的模板,或编辑它们。
- **发布** 一个漂亮的自包含页面(笔记 + 记录)作为您自己的GitHub上的秘密gist(`gh`),并带有渲染的**notes.parfait.to** URL来分享 — Parfait自己的CDN提供您的gist,渲染后返回,而不是原始文件托管 — 或在本地预览/导出HTML,无需任何依赖。
## 技术栈即功能
Parfait没有后端,没有账户,也没有API密钥。它组合了您的Mac已经具备的功能:
| 需要 | 提供者 |
|---|---|
| 会议检测 | Core Audio进程对象(其他应用程序使用麦克风) |
| 系统音频捕获 | Core Audio进程抽头(macOS 14.4+) |
| 转录 | SpeechAnalyzer / SpeechTranscriber(macOS 26,本机) |
| 说话者分离 | FluidAudio CoreML说话者分离(本机) |
| 总结,标题 | Apple Intelligence FoundationModels(本机) |
| 长会议,发布 | **您自己的**Claude账户,通过`claude` CLI |
| 聊天(按会议和跨会议) | **您自己的**Claude Desktop,通过深层链接 + Parfait的MCP连接器 |
| 发布目标 | **您自己的**GitHub,通过`gh`(秘密gist),由**notes.parfait.to**(Parfait自己的CDN)渲染并返回,或本地浏览器预览/HTML导出 |
## 要求
- **macOS 26(Tahoe)**,在Apple Silicon上
- **启用Apple Intelligence**(设置 → Apple Intelligence & Siri),用于本地总结
- **聊天所需:** [Claude Desktop](https://claude.ai/download),添加Parfait MCP连接器(设置 → 连接Claude) — 聊天和“询问您的会议”屏幕打开一个预填充的提示
- 可选:[Claude Code](https://claude.com/claude-code)(`claude` CLI,已登录) — 解锁长会议总结,按您的计划计费
- 可选:[GitHub CLI](https://cli.github.com)(`gh auth login`) — 以gist形式在您自己的账户上发布可分享的渲染URL(如果没有,您仍然可以本地预览和导出HTML)
## 安装
```bash
git clone https://github.com/conrad-vanl/parfait.git
cd parfait
make install # 构建,组装Parfait.app,复制到/Applications
open /Applications/Parfait.app
```
在菜单栏中查找Parfait图标。首次录音时,macOS将要求获得**麦克风**和**系统音频录音**权限(后者位于隐私和安全 → 屏幕和系统音频录音 → “仅系统音频录音”)。
> **签名说明:** `make install`使用稳定的指定要求进行临时签名,因此TCC权限在重建后仍然有效。如果您有Apple开发证书,请优先使用`make install SIGN_ID="Apple Development: you@example.com (TEAMID)"`。
## 将Claude连接到您的会议库
```bash
claude mcp add parfait -s user -- "/Applications/Parfait.app/Contents/MacOS/Parfait" --mcp
```
然后从任何`claude`会话(或具有相同服务器的Claude Desktop):
> “在我的会议中搜索我最后一次讨论招聘的内容,并总结达成的决定。”
MCP服务器(`Parfait --mcp`)通过stdio在您的磁盘库上运行。读取工具:`list_meetings`,`search_meetings`,`get_meeting`,`get_transcript`和`get_live_transcript`(正在进行的会议)。编辑工具:`regenerate_summary`,`update_summary`和模板工具(`list_templates`,`get_template`,`create_template`,`update_template`,`rename_template`,`delete_template`)。除了模型读取或写入的内容外,您的Mac上没有任何内容离开。
### Claude Desktop
Claude Desktop从配置文件中读取MCP服务器,而不是CLI命令。打开(或创建)`~/Library/Application Support/Claude/claude_desktop_config.json`并将其合并到`mcpServers`对象中 — **不要覆盖文件**,如果您已经配置了其他服务器:
```json
{
"mcpServers": {
"parfait": {
"command": "/Applications/Parfait.app/Contents/MacOS/Parfait",
"args": ["--mcp"]
}
}
}
```
保存后重启Claude Desktop。设置 → “将Claude连接到您的会议”在应用程序中有一个“复制JSON”按钮,填充您的实际安装路径,还有一个“在Finder中显示”按钮,直接跳转到配置文件。
## 模板
笔记由您可以在**设置 → 模板**(或任何编辑器 — 它们只是`~/Library/Application Support/Parfait/Templates/`中的文件)编辑的markdown模板塑形。标题引导模型;标题下的文本告诉模型应该放在哪里。占位符:`{{title}}`,`{{date}}`,`{{attendees}}`,`{{duration}}`,`{{app}}`。附带**会议笔记**,**1对1**和**面试**。
## 隐私模型
- 默认情况下,音频,转录和笔记永远不会离开您的Mac。
- Parfait本身做的唯一网络调用:一次性模型下载(Apple语音资产通过操作系统;来自Hugging Face的说话者分离模型)。
- 涉及Claude或GitHub的内容通过 **您** 已经认证的CLI,在您的明确请求下(聊天,发布或当会议超过本地模型时),在您自己的账户上进行。
- 发布始终是一个明确的操作。“秘密”gist是未列出的(在您自己的账户上,可删除) — 任何有链接的人都可以查看该页面;浏览器预览和HTML导出永远不会离开您的Mac。删除gist会停止新访问,但渲染的链接在边缘和浏览器中缓存,因此可以在删除后大约一天内继续提供服务。
## 开发
```bash
swift build # 调试构建
swift test # 102个单元测试(存储,标签,格式化,模板,MCP,HTML,实时转录,Claude深层链接,CLI参数)
make app # 组装dist/Parfait.app
make icon # 从scripts/MakeIcon.swift重新生成图标
```
音频/ML路径需要实时权限,而CI盒子没有这些权限;它们由[docs/TESTING.md](docs/TESTING.md)中的手动检查清单涵盖。架构和设计决策位于[docs/superpowers/specs/](docs/superpowers/specs/2026-07-09-parfait-design.md)。
```
Sources/Parfait/
Audio/ MeetingDetector · MicRecorder · SystemAudioTap · RecordingSession
Transcription/ Transcriber (SpeechAnalyzer) · Diarizer (FluidAudio) · SpeakerLabeler
Intelligence/ AppleSummarizer · ClaudeCLI · ClaudeDesktop · CalendarMatcher · TemplateStore
Store/ Meeting models · file-backed archive
MCP/ stdio MCP server (same binary, --mcp)
Publish/ HTMLExporter · GitHubGist
App/ UI/ AppState · pipeline · SwiftUI menu bar + windows
```
## 致谢
- [FluidAudio](https://github.com/FluidInference/FluidAudio)(Apache-2.0)用于CoreML说话者分离;模型权重(CC-BY-4.0)源自
[pyannote](https://github.com/pyannote/pyannote-audio)和
[WeSpeaker](https://github.com/wenet-e2e/wespeaker)。
- [Granola](https://granola.ai)展示了会议笔记的良好体验。
## 许可证
[MIT](LICENSE)