Blueturboguy07/cue

GitHub: Blueturboguy07/cue

cue 是一款开源的 macOS 悬浮式 AI copilot,能够感知屏幕和音频并在屏幕共享时自动隐身,是 Cluely 的免费自托管替代方案。

Stars: 507 | Forks: 103

# cue **一款悬浮在屏幕上的开源 AI copilot —— 看你所看,听你会议,并在屏幕共享时隐身。** Cluely 的免费、自托管替代方案。自带你的 AI 密钥 (OpenAI · Anthropic · Google Gemini)。 cue first-run tutorial
## 功能简介 cue 会在所有窗口顶层悬浮一个极简的玻璃面板。它接收 **三个独立的输入源** —— 你的 **屏幕**、你的 **麦克风** 以及你的 **会议音频**(对方说的话)—— 并利用 AI 模型实时为你提供帮助。 | 功能 | 触发方式 | 使用的输入 | |---|---|---| | **Assist** | `⌘` `↵` 或 *Assist* 按钮 | 你的屏幕 + 最近的对话 | | **我该说什么?** | 按钮 | 会议音频 + 你的麦克风 | | **后续问题** | 按钮 | 完整的对话 | | **总结** | 按钮 | 完整的对话 | | **问任何事** | 输入文本 + `↵` | 你的屏幕 + 对话 | | **解决编程问题** | `⌘` `H` | 仅你的屏幕 | | **Smart** 开关 | 对话框中的胶囊按钮 | 切换为更智能(但更慢)的模型 | 它是**实时会议**(“我该怎么回答那个?”)和**编程问题**(截图 -> 完整解决方案)的 copilot,并且被设计为**在屏幕共享时隐形**,从而成为你的私人助手。 ## 安装说明 有两种方式可以安装 cue。**如果你不是开发者,请使用方式 A。** ### 方式 A — 下载应用(最简单) 1. 前往 [**Releases**](../../releases) 页面并下载 **`cue-mac.zip`**。 2. 双击该 zip 文件进行解压。你将得到 **`cue.app`**。 3. 将 **`cue.app`** 拖入你的 **应用程序 (Applications)** 文件夹中。 4. **首次打开(重要):** 因为 cue 是一款没有付费 Apple 证书的免费应用,macOS 在第一次会拒绝正常打开它。只需执行一次此操作: - **右键点击** `cue.app` -> **打开** -> 在对话框中点击 **打开**。 - 如果 macOS 提示 **“cue 已损坏,无法打开”**,请打开 **终端** 应用并粘贴以下命令,然后按 Return: xattr -cr /Applications/cue.app 然后再次双击 cue.app。(这只是在告诉 macOS “是的,我信任我下载的这个应用。” 它是安全的。) 此后,cue 将永远可以正常打开。 ### 方式 B — 从源码运行(开发者) 你需要安装 [Node.js](https://nodejs.org) 18+ 版本。不需要 Xcode。 ``` git clone https://github.com/Blueturboguy07/cue.git cd cue npm install npm start ``` 构建你自己的 `cue.app`: ``` npm run pack # creates dist/mac-arm64/cue.app ``` ## 首次启动 — 1 分钟设置 当 cue 第一次打开时,一个**内置教程**会引导你完成以下所有操作。你可以随时点击 **cue logo**(胶囊按钮的左上角)重新打开它。以下是文字版的详细说明。 ### 步骤 1 — 授予两项 macOS 权限 在 macOS 允许 cue 进行看和听之前,它无法提供帮助。当你首次使用某项功能时,macOS 会提示你 —— 点击 **允许**。如果未出现提示,请手动添加 cue: - **麦克风:** 系统设置 -> **隐私与安全性** -> **麦克风** -> 打开 **cue**。 - **屏幕录制:** 系统设置 -> **隐私与安全性** -> **屏幕录制** -> 打开 **cue**。(这一项授权同时涵盖了屏幕截图 *和* 会议音频。)macOS 可能会要求你 **退出并重新打开** cue —— 请照做。 ### 步骤 2 — 添加你的 AI 密钥(自带密钥) cue 使用 **你自己的** API 密钥,因此它是免费运行的(你只需向你的 AI 服务商支付你所使用的费用)。点击输入框中的 **`...`** 按钮(或按 `⌘` `,`)打开 **设置**,选择服务商并粘贴你的密钥: | 服务商 | 获取密钥 | 注意事项 | |---|---|---| | **OpenAI** | [platform.openai.com/api-keys](https://platform.openai.com/api-keys) | 一个密钥可以做所有事情 —— **但是**,对于 *收听* 相关的功能,该密钥必须具有 **Whisper / audio** 访问权限(一个仅允许聊天的“受限”项目密钥,在转写时会出现 403 错误)。 | | **Anthropic (Claude)** | [console.anthropic.com](https://console.anthropic.com) | 非常适合屏幕截图和编程辅助。Claude 没有语音转文字功能,因此如果你需要使用收听功能,请额外添加一个 OpenAI 或 Gemini 密钥。 | | **Google Gemini** | [aistudio.google.com/apikey](https://aistudio.google.com/apikey) | 一个密钥即可支持聊天和转写。 | 你的密钥**仅存储在你的电脑上**(在 `cue-data.json` 中),并且**仅**发送给该服务商。cue 没有服务器,也不收集任何信息。 ### 步骤 3 — Zoom 设置(仅在使用 Zoom 时需要) cue 会自动对大多数屏幕共享工具隐身 —— **Google Meet、Microsoft Teams 和 QuickTime 无需任何设置。** **Zoom** 有一个特定的设置,用于决定是否遵守 cue 的“禁止捕获我”标志:
Zoom screen capture mode setting
**原因:** *“...with window filtering”* 模式会告诉 Zoom 排除掉那些将自己标记为私密的窗口 —— 这正是 cue 所做的。**“Advanced capture without window filtering”** 模式会捕获原始屏幕并且**会显示出 cue**,因此请避免使用它。 ## 使用说明 - **`⌘` `↵` — Assist。** 执行智能操作的快捷键。面对编程问题时它会提供解答;在对话中它会告诉你该说什么。可以在任意界面使用。 - **`⌘` `H` — 解决屏幕上的问题。** 对编程问题进行截图,并返回解决思路、代码以及时间/空间复杂度。 - **`▢` 按钮**(顶部栏)— 开始/停止**收听**会议。绿点表示正在实时收听。 - 在输入框中**输入问题**并按 `↵`,即可针对你的屏幕或对话进行提问。 - **Smart** — 开启它可切换为更智能、更详尽的模型;关闭它则切换为快速且廉价的模型。 - **Hide** 可将面板折叠为仅剩顶部栏。通过拖动 **顶部胶囊按钮** 来移动 cue。按 `⌘` `⇧` `X` 退出。 面板是透明且支持点击穿透的 —— 它周围的空白区域绝不会阻挡后面的应用。 ## 工作原理(底层机制) cue 是一个 [Electron](https://www.electronjs.org/) 应用。除了调用你选择的 AI 服务商外,所有操作均在本地运行。 **三个输入源保持完全独立:** - **屏幕** — 使用 Electron 的 `desktopCapturer` 捕获(全分辨率截图,仅在某个功能需要时截取)。 - **你的麦克风 ("You")** — `getUserMedia` -> 降采样至 16 kHz 音频 -> 进行转写。 - **会议音频 ("Them")** — `getDisplayMedia` 对系统输出音频的回环捕获,保持在单独的频道上,以便 cue 知道 *谁* 说了 *什么*。 两个音频流都会被转写(OpenAI Whisper 或 Gemini),并与可选的截图一起传递给你的 AI 模型。回复会逐字**流式传输**到面板中。 **隐身机制** 依靠的是单个 macOS 窗口标志:`setContentProtection(true)`,它设置了 `NSWindowSharingNone`。这会要求窗口服务器将 cue 从屏幕捕获流中排除。这与 DRM 应用以及 Zoom 自身工具栏使用的机制相同。它**不是** GPU 技巧或特殊的覆盖层 —— 并且在 macOS 15.4+ 上,Apple 允许某些捕获工具忽略它,这就是为什么它属于尽力而为的机制(请参阅顶部的免责声明)。 ``` main process ──┬─ overlay window (frameless, transparent, always-on-top, content-protected) ├─ screenshot capture (desktopCapturer) ├─ speech-to-text (Whisper / Gemini) ── "You" + "Them" channels └─ LLM streaming (OpenAI / Anthropic / Gemini) renderer ──────┴─ the glass UI + mic capture + system-audio loopback ``` ## 故障排除 **“提示需要给予访问权限,但我已经授予了。”** 你可能授予了旧版本的权限。由于该应用是使用 ad-hoc 签名的,重新构建会更改其身份,macOS 将不再认可旧的授权(复选标记可能还会残留)。请在系统设置 -> 屏幕录制中将 cue **关闭然后再打开**,或者将其移除后重新添加。 **某功能返回 “403” 或 “无模型访问权限”。** 你的 API 密钥受限。最常见的情况是 OpenAI **项目密钥仅允许使用聊天模型** —— 它可以用于屏幕/编程辅助,但在转写 时会出现 403 错误。解决方法:在该密钥上启用 audio/Whisper 权限,使用不受限制的密钥,或者添加一个 Gemini 密钥(cue 会在转写时回退到它)。 **收听功能无效 / 没有转录文本。** 检查“设置”中是否显示了支持转写的密钥(带 Whisper 的 OpenAI,或 Gemini)。同时确保已授予屏幕录制权限(会议音频需要它)。 **cue 出现在了我的 Zoom 共享画面中。** 将 Zoom 的 **Screen capture mode** 设置为 *“Advanced capture with window filtering”*(见步骤 3)。请记住:在 macOS 15.4+ 上这可能依然会失效 —— 这只是尽力而为。 **“cue 已损坏,无法打开。”** 在终端中运行一次 `xattr -cr /Applications/cue.app`(见安装说明 -> 方式 A)。 ## 隐私说明 - 没有账号,没有服务器,没有遥测。cue 不收集任何信息。 - 你的 API 密钥保存在本地文件 (`cue-data.json`) 中,并且仅发送给你选择的服务商。 - 屏幕截图和音频仅在功能运行时发送给你的 AI 服务商,且除了当前会话保留在内存中的转录文本外,不会被 cue 存储。 ### 平台支持 - [x] **macOS**(完全支持) - [x] **Windows**(完全支持) - [ ] **Linux**(未经测试) ### 欢迎贡献的功能 - [ ] 升级音频捕获 pipeline 以实现零延迟流式传输 - [ ] 添加可选的 Deepgram 支持以实现超快速转写 ## 致谢与许可协议 本项目作为开源研究而开发,旨在探索 **Cluely** 和 **Interview Coder** 等工具的工作原理。以开源克隆项目 `pickle-com/glass` 和 `sohzm/cheating-daddy` 为原型。 **许可协议:[GPL-3.0-or-later](LICENSE)。**
标签:AI 助手, BYOK, Copilot, MITM代理, 实时辅助, 屏幕共享隐藏, 数据可视化, 自定义脚本, 调试辅助