Clicky:住在你 Mac 光标旁的 AI 老师(开源版)
Clicky 是作者 Farza 开发的开源 macOS 菜单栏应用,一个「住在光标旁边的 AI 伙伴」:它能看你的屏幕、和你语音对话,还能用蓝色光标指到屏幕上的具体元素。应用由 Swift 编写,通过 Cloudflare Worker 代理 Claude 对话、AssemblyAI 实时转写与 ElevenLabs 语音合成三类 API。项目以 MIT 许可证开源,适合想在此基础上二次开发或研究其内部实现的人。
社区作者 · zZz
它解决什么问题
项目简介
Clicky 是作者 Farza 做的一个「住在你光标旁边的 AI 伙伴」——作者称其为 AI teacher:它能看见你的屏幕、和你说话,甚至能指向屏幕上的东西,就像身边真的坐着一位老师。
配图 1(Clicky — an ai buddy that lives on your mac)展示了它在 Mac 上的运行效果。
这个仓库是 Clicky 的开源版本,面向想要魔改它、做自己的功能、或者单纯想看它内部怎么跑的人。
许可与更新说明
- 许可证:MIT(正文明确「It's an MIT license」)。
- 作者声明:现有代码库仍然开源,随便折腾、做成自己的东西、甚至拿它开公司都行。但作者本人正在开发的新东西会保持私有;想要最新版 Clicky 需要走作者给出的下载入口。
- 页面顶部标注更新时间:2026 年 4 月 27 日。
技术架构(正文「Architecture」小节)
- 菜单栏应用(没有 Dock 图标),包含两个 NSPanel 窗口:一个用于控制面板下拉,一个用于全屏透明光标浮层。
- 按住说话(push-to-talk)通过 websocket 把音频流送到 AssemblyAI,再把转写文本 + 屏幕截图通过流式 SSE 发给 Claude,最后用 ElevenLabs TTS 播放回复。
- Claude 可以在回复中嵌入
[POINT:x,y:label:screenN]标签,让光标飞到多显示器中指定的 UI 元素上。 - 三个 API 全部通过一个 Cloudflare Worker 代理。
更完整的技术细节在仓库的 CLAUDE.md 中。
项目结构
leanring-buddy/— Swift 源码目录(目录名的拼写错误是历史遗留,作者在正文中明确表示保留)CompanionManager.swift— 中央状态机CompanionPanelView.swift— 菜单栏面板 UIClaudeAPI.swift— Claude 流式客户端ElevenLabsTTSClient.swift— 文本转语音播放OverlayWindow.swift— 蓝色光标浮层AssemblyAI*.swift— 实时转写BuddyDictation*.swift— 按住说话流水线worker/— Cloudflare Worker 代理src/index.ts— 三条路由:/chat、/tts、/transcribe-tokenCLAUDE.md— 完整架构文档(给 agent 读取用)
贡献与反馈
欢迎 PR。如果使用 Claude Code,它已经了解代码库,只要告诉它你想做什么并指向 CLAUDE.md 即可。反馈可以通过 X(推特)私信作者 @farzatv。
— 本文由 AI 根据公开来源辅助整理,命令、版本与许可证请在使用前到原始页面复核。
安装 / 开始使用
方式一:用 Claude Code 快速跑起来(作者推荐的最快方式)
- 先让 Claude 运行起来(作者称这是最快的方式)。
- 运行后粘贴下面这段话:
Hi Claude.
Clone https://github.com/farzaa/clicky.git into my current directory.
Then read the CLAUDE.md. I want to get Clicky running locally on my Mac.
Help me set up everything — the Cloudflare Worker with my own API keys, the proxy URLs, and getting it building in Xcode. Walk me through it.它会自动克隆仓库、读取文档,并带你走完整个配置流程。跑起来之后可以继续和它对话:加功能、修 bug,随便折腾。
方式二:手动配置
前置条件
- macOS 14.2+(ScreenCaptureKit 需要)
- Xcode 15+
- Node.js 18+(用于 Cloudflare Worker)
- 一个 Cloudflare 账号(免费版即可)
- 以下服务的 API Key:Anthropic、AssemblyAI、ElevenLabs
1. 配置 Cloudflare Worker
Worker 是一个很小的代理,用来保存你的 API Key。应用和 Worker 通信,Worker 再和各家 API 通信,这样密钥就不会被打进应用二进制里。
cd worker
npm install接着添加密钥,Wrangler 会提示你逐个粘贴:
npx wrangler secret put ANTHROPIC_API_KEY
npx wrangler secret put ASSEMBLYAI_API_KEY
npx wrangler secret put ELEVENLABS_API_KEYElevenLabs 的 voice ID 需要打开 wrangler.toml 设置(它不是敏感信息):
[ vars ]
ELEVENLABS_VOICE_ID = "your-voice-id-here"然后部署:
npx wrangler deploy部署后会得到一个类似 https://your-worker-name.your-subdomain.workers.dev 的 URL,把它复制下来。
2. 本地运行 Worker(开发用)
如果不想部署就想测试 Worker 的改动:
cd worker
npx wrangler dev这会启动一个本地服务器(通常是 http://localhost:8787),行为与部署后的 Worker 完全一致。你需要在 worker/ 目录下创建 .dev.vars 文件并填入密钥:
ANTHROPIC_API_KEY=sk-ant-...
ASSEMBLYAI_API_KEY=...
ELEVENLABS_API_KEY=...
ELEVENLABS_VOICE_ID=...开发时把 Swift 代码中的代理 URL 改成 http://localhost:8787,而不是已部署的 Worker URL。用 grep 搜 clicky-proxy 可以找到所有需要改的地方。
3. 更新应用中的代理 URL
应用的 Worker URL 硬编码在几个地方。搜索 your-worker-name.your-subdomain.workers.dev 并替换成你自己的 Worker URL:
grep -r "clicky-proxy" leanring-buddy/会出现在:
CompanionManager.swift— Claude 对话 + ElevenLabs TTSAssemblyAIStreamingTranscriptionProvider.swift— AssemblyAI token 端点
4. 在 Xcode 中打开并运行
open leanring-buddy.xcodeproj在 Xcode 中:
- 选择
leanring-buddyscheme(对,拼写错误是故意的,说来话长) - 在 Signing & Capabilities 里设置你的签名团队
- 按 Cmd + R 构建并运行
应用会出现在菜单栏(不是 Dock)。点击图标打开面板,按提示授予它要求的权限,就可以用了。
应用需要的权限
- 麦克风 — 用于按住说话的语音采集
- 辅助功能(Accessibility) — 用于全局键盘快捷键(Control + Option)
- 屏幕录制 — 使用热键时截图用
- 屏幕内容(Screen Content) — 用于 ScreenCaptureKit 访问
常见问题
- 找不到应用窗口:它是菜单栏应用,没有 Dock 图标,去菜单栏点图标。
- 快捷键不生效:检查是否授予了辅助功能权限。
- 截图/看到屏幕内容失败:检查屏幕录制与屏幕内容权限。
- 想改 Worker 地址却不知道改哪里:用
grep -r "clicky-proxy" leanring-buddy/定位。