内容
<p align="center">
<img src="Resources/Brand/MeetcoAppIcon.png" alt="Meetco 应用图标" width="128" />
</p>
<h1 align="center">Meetco</h1>
<p align="center">
<b>本地优先的原生 macOS 会议记录仪和副驾驶。</b><br/>
记录在线或现场会议,将所有字节保存在您的 Mac 上,<br/>
然后选择启用转录和 AI 笔记,并使用您自己的凭证。
</p>
<p align="center">
<img src="https://img.shields.io/badge/Swift-6.0-F05138?logo=swift&logoColor=white" alt="Swift 6" />
<img src="https://img.shields.io/badge/macOS-14%2B-000000?logo=apple&logoColor=white" alt="macOS 14+" />
<img src="https://img.shields.io/badge/UI-SwiftUI-0A84FF?logo=swift&logoColor=white" alt="SwiftUI" />
<img src="https://img.shields.io/badge/build-SwiftPM-brightgreen" alt="SwiftPM" />
<img src="https://img.shields.io/badge/storage-local--first-6E62E5" alt="本地优先" />
<img src="https://img.shields.io/badge/account-not%20required-2ea44f" alt="无需账户" />
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue" alt="MIT 许可证" /></a>
<a href="https://github.com/lequocbinh04/meetco/actions/workflows/release-dmg.yml"><img src="https://github.com/lequocbinh04/meetco/actions/workflows/release-dmg.yml/badge.svg" alt="发布 DMG" /></a>
<a href="https://github.com/lequocbinh04/meetco/releases/latest"><img src="https://img.shields.io/github/v/release/lequocbinh04/meetco?color=6E62E5" alt="最新发布" /></a>
</p>
<p align="center">
<img src="docs/assets/screenshot-home.png" alt="Meetco 首页" width="900" />
</p>
---
## 为什么选择 Meetco
大多数会议记录工具会将您的音频上传到别人的云端,然后您才能看到转录文本。Meetco 则颠倒了这一过程:**捕获内容首先保存在您的 Mac 上**,然后您可以选择启用转录和 AI 笔记,并使用您自己的凭证。
- 🎙️ **两种捕获模式** — *在线*(系统音频 + 麦克风)或 *现场*(房间麦克风)。
- ⚡ **实时或会议后转录** — ElevenLabs Scribe v2 实时转录或会议结束后批量转录。或者仅录制音频,不使用任何服务。
- 🤖 **自带副驾驶** — Claude API、Claude CLI 或 Codex CLI。会议上下文仅在您请求或生成工件时发送。
- 📝 **证据链接工件** — 摘要、关键点、决策、行动、开放问题和风险都链接回转录片段。
- 🔌 **只读 MCP 服务器** — 通过 stdio JSON-RPC 将活动会议快照暴露给外部代理,按需启用,每个记录无写入工具,无 API 密钥。
- 🔒 **仅 Keychain 凭证** — API 密钥存储在 macOS Keychain 下的 `com.meetco.personal`。Meetco 从不读取 CLI 凭证文件,也没有账户系统。
- 🛟 **设计防崩溃** — 原子 JSON 写入,中断会议保存为可恢复状态,保留音频验证为真实有效载体。
## 截图
| 会议库和恢复 | 记录预检 |
| :---: | :---: |
| <img src="docs/assets/screenshot-meeting-detail.png" alt="会议详情,带有恢复横幅" /> | <img src="docs/assets/screenshot-preflight.png" alt="记录预检表" /> |
| 服务连接 |
| :---: |
| <img src="docs/assets/screenshot-settings.png" alt="设置与服务健康状态" width="640" /> |
## 入门指南
### 从发布版本安装
从 [发布页面](https://github.com/lequocbinh04/meetco/releases/latest) 获取最新的 `Meetco-*.dmg` 文件,将 **Meetco** 拖入 *应用程序*,然后打开它。构建版本为临时签名(未 notarized),因此在首次启动时右键单击应用程序 → *打开*,或在 *系统设置 → 隐私和安全* 中允许它。发布 DMG 版本为 Apple Silicon 构建。
### 要求
- macOS 14 或更高版本(Apple Silicon 或 Intel)
- Swift 6 工具链 — 建议使用完整的 Xcode 进行完整的测试套件和 TCC/UI 工作
- 可选:ElevenLabs API 密钥用于转录
- 可选:Anthropic API 密钥,或已登录的 `claude` / `codex` CLI
无需 Meetco 账户,也无需第三方 Swift 包。
### 构建和运行
```bash
git clone https://github.com/lequocbinh04/meetco.git
cd meetco
swift build -debug-info-format none
swift test -debug-info-format none
swift run -debug-info-format none MeetcoChecks # 确定性 CLI 验证
./Scripts/build-app-bundle.sh # 创建并临时签名 dist/Meetco.app
./Scripts/run-meetco.sh # 如果缺少,请构建 bundle,然后打开它
```
bundle 脚本将只读 MCP 助手放置在 `dist/Meetco.app/Contents/Helpers/MeetcoMCP`。
### 首次运行设置
1. 完成或跳过 onboarding,然后在 *设置 → 权限* 中授予 **麦克风**(以及 **屏幕录制** 以进行在线捕获)。如果之前拒绝了授权,请在 *系统设置 → 隐私和安全* 中启用 Meetco,退出并重新打开。
2. 在 *设置 → 连接* 中保存 ElevenLabs 密钥和/或 Anthropic 密钥。
3. 对于 CLI 副驾驶,请从终端登录并在 Meetco 中刷新服务状态:
```bash
claude auth status
codex login status
```
Meetco 只探测可执行文件和登录状态 — 它从不读取 CLI 凭证文件。
## 记录流程
按下 <kbd>⌘N</kbd>,选择会议地点和 Meetco 应进行转录的时间:
| 模式 | 会发生什么 |
| --- | --- |
| **实时** | Scribe v2 实时转录 + 会议基础聊天 |
| **会议后** | 本地记录,首先使用 Scribe v2 批量转录 |
| **仅音频** | 纯本地捕获,不涉及任何服务 |
随时暂停/恢复。停止时,Meetco 会排空队列的捕获事件,将 trailing 帧刷新到实时会话,然后完成批量转录和工件生成。网络故障从不终止本地捕获 — 您会收到警告,记录继续进行。
## 架构
```
Sources/
├── MeetcoApp/ SwiftUI 应用 — 视图,会话协调器,设计系统
├── MeetcoCore/ 模型,持久性,转录客户端,代理提供商,MCP 路由器
├── MeetcoCapture/ AVFoundation + ScreenCaptureKit 音频捕获,混音,WAV/CAF 编写器
├── MeetcoMCP/ Stdio JSON-RPC 服务器,暴露可选的会议快照(只读)
└── MeetcoChecks/ 确定性 CLI 验证框架
```
会议数据存储在 `~/Library/Application Support/Meetco/` 下:
```
Meetings/<meeting-uuid>/
├── meeting.json # 整个过程中原子写入
├── transcript.json # 最终转录文本
├── transcript-provisional.json # 实时转录文本
├── artifacts.json # 证据链接的摘要/行动/决策
├── chat.json
├── notes.txt
└── audio/ # 清单,源 CAF 跟踪,最终混合 WAV
Live/current-meeting.json # 仅当 MCP 启用时
```
删除会议会删除其整个目录。导出写入 Markdown、JSON 或保留的 WAV 混音 — 并且音频导出拒绝将仅头部容器作为真实音频。
## MCP 集成
当 Meetco 运行它时,它会在环回上托管 MCP Streamable HTTP 端点。 在记录预检中启用 MCP,然后将 *设置 → MCP* 中预制的配置粘贴到任何 MCP 客户端:
```json
{
"mcpServers": {
"meetco": { "type": "http", "url": "http://127.0.0.1:46321/mcp" }
}
}
```
`--snapshot <path>` 或 `--http <port>` 以自托管相同端点,无需应用程序。
服务器公开快照,转录搜索,段查找和汇总资源。 它没有写入工具,不接收 API 密钥或音频路径。 禁用 MCP,删除会议或达到终端故障状态会撤销快照文件 — 然后端点通过错误回复每个数据调用,直到导出新的快照。
## 验证状态
在仅限命令行工具的主机上,`swift build`,`MeetcoChecks`,bundle 构建,plist lint 和严格的临时签名验证全部通过;`swift test` 编译但不发现测试套件(需要 Xcode)。实际的提供者调用,TCC 捕获硬件,重启恢复和可访问性烟雾测试在依赖 Meetco 进行重要会议之前仍需要进行。
## 文档
- [产品需求](docs/project-overview-pdr.md)
- [系统架构](docs/system-architecture.md)
- [设计指南](docs/design-guidelines.md)
- [部署指南](docs/deployment-guide.md)
- [代码标准](docs/code-standards.md)